{
  "contractName": "DefaultMessageReceiver",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "sygmaHandlers",
          "type": "address[]"
        },
        {
          "internalType": "uint256",
          "name": "recoverGas",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [],
      "name": "ActionFailed",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InsufficientGasLimit",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InsufficientNativeBalance",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InsufficientPermission",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InvalidContract",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ReturnNativeLeftOverFailed",
      "type": "error"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "transactionId",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "tokenSend",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "receiver",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "Executed",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        }
      ],
      "name": "RoleGranted",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        }
      ],
      "name": "RoleRevoked",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "transactionId",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "tokenSend",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "receiver",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "TransferRecovered",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "DEFAULT_ADMIN_ROLE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [],
      "name": "SYGMA_HANDLER_ROLE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [],
      "name": "_recoverGas",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        }
      ],
      "name": "getRoleAdmin",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "uint256",
          "name": "index",
          "type": "uint256"
        }
      ],
      "name": "getRoleMember",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        }
      ],
      "name": "getRoleMemberCount",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "getRoleMemberIndex",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "grantRole",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "hasRole",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "uint256[]",
          "name": "",
          "type": "uint256[]"
        },
        {
          "internalType": "uint256[]",
          "name": "",
          "type": "uint256[]"
        },
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "name": "onERC1155BatchReceived",
      "outputs": [
        {
          "internalType": "bytes4",
          "name": "",
          "type": "bytes4"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "name": "onERC1155Received",
      "outputs": [
        {
          "internalType": "bytes4",
          "name": "",
          "type": "bytes4"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "name": "onERC721Received",
      "outputs": [
        {
          "internalType": "bytes4",
          "name": "",
          "type": "bytes4"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "renounceRole",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "revokeRole",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes4",
          "name": "interfaceId",
          "type": "bytes4"
        }
      ],
      "name": "supportsInterface",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "stateMutability": "payable",
      "type": "receive",
      "payable": true
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "tokenSent",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "message",
          "type": "bytes"
        }
      ],
      "name": "handleSygmaMessage",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function",
      "payable": true
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "tokenSent",
          "type": "address"
        },
        {
          "internalType": "address payable",
          "name": "receiver",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "startingNativeBalance",
          "type": "uint256"
        },
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "nativeValue",
              "type": "uint256"
            },
            {
              "internalType": "address",
              "name": "callTo",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "approveTo",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "tokenSend",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "tokenReceive",
              "type": "address"
            },
            {
              "internalType": "bytes",
              "name": "data",
              "type": "bytes"
            }
          ],
          "internalType": "struct DefaultMessageReceiver.Action[]",
          "name": "actions",
          "type": "tuple[]"
        }
      ],
      "name": "performActions",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "receiver",
          "type": "address"
        }
      ],
      "name": "transferBalanceAction",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.8.11+commit.d7f03943\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"sygmaHandlers\",\"type\":\"address[]\"},{\"internalType\":\"uint256\",\"name\":\"recoverGas\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"ActionFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InsufficientGasLimit\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InsufficientNativeBalance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InsufficientPermission\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidContract\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReturnNativeLeftOverFailed\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"transactionId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"tokenSend\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Executed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleGranted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleRevoked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"transactionId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"tokenSend\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TransferRecovered\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"SYGMA_HANDLER_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"_recoverGas\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"getRoleAdmin\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"getRoleMember\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"getRoleMemberCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"getRoleMemberIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenSent\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"handleSygmaMessage\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"hasRole\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"onERC1155BatchReceived\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"onERC1155Received\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"onERC721Received\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenSent\",\"type\":\"address\"},{\"internalType\":\"address payable\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"startingNativeBalance\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"nativeValue\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"callTo\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"approveTo\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenSend\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenReceive\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct DefaultMessageReceiver.Action[]\",\"name\":\"actions\",\"type\":\"tuple[]\"}],\"name\":\"performActions\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"renounceRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"transferBalanceAction\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"author\":\"ChainSafe Systems.\",\"kind\":\"dev\",\"methods\":{\"constructor\":{\"params\":{\"recoverGas\":\"The amount of gas needed to forward the original amount to receiver.\",\"sygmaHandlers\":\"The contract addresses with access to message processing.\"}},\"getRoleAdmin(bytes32)\":{\"details\":\"Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}.\"},\"getRoleMember(bytes32,uint256)\":{\"details\":\"Returns one of the accounts that have `role`. `index` must be a value between 0 and {getRoleMemberCount}, non-inclusive. Role bearers are not sorted in any particular way, and their ordering may change at any point. WARNING: When using {getRoleMember} and {getRoleMemberCount}, make sure you perform all queries on the same block. See the following https://forum.openzeppelin.com/t/iterating-over-elements-on-enumerableset-in-openzeppelin-contracts/2296[forum post] for more information.\"},\"getRoleMemberCount(bytes32)\":{\"details\":\"Returns the number of accounts that have `role`. Can be used together with {getRoleMember} to enumerate all bearers of a role.\"},\"getRoleMemberIndex(bytes32,address)\":{\"details\":\"Returns the index of the account that have `role`.\"},\"grantRole(bytes32,address)\":{\"details\":\"Grants `role` to `account`. If `account` had not been already granted `role`, emits a {RoleGranted} event. Requirements: - the caller must have ``role``'s admin role.\"},\"handleSygmaMessage(address,uint256,bytes)\":{\"params\":{\"amount\":\"Amount of the token sent along or prior to calling this function.\",\"message\":\"User generated execution command which consists of {transactionId} an arbitrary identifier. {actions} array of Action items that allow generic logic execution. {receiver} a fallback address that will receive any leftovers after either success of fail.\",\"tokenSent\":\"Optional address of the token sent along or prior to calling this function.\"}},\"hasRole(bytes32,address)\":{\"details\":\"Returns `true` if `account` has been granted `role`.\"},\"onERC721Received(address,address,uint256,bytes)\":{\"details\":\"See {IERC721Receiver-onERC721Received}. Always returns `IERC721Receiver.onERC721Received.selector`.\"},\"performActions(address,address,uint256,(uint256,address,address,address,address,bytes)[])\":{\"details\":\"See the comment inside of the _execute() function.\"},\"renounceRole(bytes32,address)\":{\"details\":\"Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `account`.\"},\"revokeRole(bytes32,address)\":{\"details\":\"Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role.\"},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}.\"},\"transferBalanceAction(address,address)\":{\"params\":{\"receiver\":\"Address that should receive the whole balance.\",\"token\":\"Address of the ERC20 token or 0x0 for native token.\"}}},\"title\":\"Optinal Message Call made as part of other handlers proposal execution.\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"handleSygmaMessage(address,uint256,bytes)\":{\"notice\":\"Users have to understand the design and limitations behind the Actions processing. The contract will try to return all the leftover tokens and native token to the receiver address. This logic is applied to the native token if there was a balance increase during the message processing, then to the tokenSent which is received from Sygma proposal and finally to every Action.tokenReceive. In the vast majority of cases that would be enough, though user can come up with a scenario where an Action produces results in a receival of more than one token, while only one could be specified in this particular Action.tokenReceive property. In such a case it is a users responsibility to either send it all with a transferBalanceAction() Action or to include an extra action[s] with tokenReceive set to each of the tokens received.\"},\"transferBalanceAction(address,address)\":{\"notice\":\"Helper function that could be used as an Action to itself to transfer whole balance of a particular token.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"project:/contracts/handlers/DefaultMessageReceiver.sol\":\"DefaultMessageReceiver\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC1155/IERC1155Receiver.sol\":{\"keccak256\":\"0xeb373f1fdc7b755c6a750123a9b9e3a8a02c1470042fd6505d875000a80bde0b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0e28648f994abf1d6bc345644a361cc0b7efa544f8bc0c8ec26011fed85a91ec\",\"dweb:/ipfs/QmVVE7AiRjKaQYYji7TkjmTeVzGpNmms5eoxqTCfvvpj6D\"]},\"@openzeppelin/contracts/token/ERC1155/utils/ERC1155Holder.sol\":{\"keccak256\":\"0x2e024ca51ce5abe16c0d34e6992a1104f356e2244eb4ccbec970435e8b3405e3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a74009db3c6fc8db851ba69ddb6795b5c1ef1120c5a00fd1a8dc3a717dd9d519\",\"dweb:/ipfs/QmZMk8Yh2X3gPS51ckUVLEXjZUhMSEeGApnA53WtjvLb9h\"]},\"@openzeppelin/contracts/token/ERC1155/utils/ERC1155Receiver.sol\":{\"keccak256\":\"0x3dd5e1a66a56f30302108a1da97d677a42b1daa60e503696b2bcbbf3e4c95bcb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0808de0ae4918c664643c885ca7fa6503e8ef2bd75609dfc85152c0128a3422d\",\"dweb:/ipfs/QmNrhFC1XgBKuuxfahFeiwi1MCdu3FLNpHj2uStgmf4iJj\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xbbc8ac883ac3c0078ce5ad3e288fbb3ffcc8a30c3a98c0fda0114d64fc44fca2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://87a7a5d2f6f63f84598af02b8c50ca2df2631cb8ba2453e8d95fcb17e4be9824\",\"dweb:/ipfs/QmR76hqtAcRqoFj33tmNjcWTLrgNsAaakYwnKZ8zoJtKei\"]},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0xc3d946432c0ddbb1f846a0d3985be71299df331b91d06732152117f62f0be2b5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4632c341a06ba5c079b51ca5a915efab4e6ab57735b37839b3e8365ff806a43e\",\"dweb:/ipfs/QmTHT3xHYed2wajEoA5qu7ii2BxLpPhQZHwAhtLK5Z7ANK\"]},\"@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol\":{\"keccak256\":\"0xd5fa74b4fb323776fa4a8158800fec9d5ac0fec0d6dd046dd93798632ada265f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://33017a30a99cc5411a9e376622c31fc4a55cfc6a335e2f57f00cbf24a817ff3f\",\"dweb:/ipfs/QmWNQtWTPhA7Lo8nbxbc8KFMvZwbFYB8fSeEQ3vuapSV4a\"]},\"@openzeppelin/contracts/token/ERC721/utils/ERC721Holder.sol\":{\"keccak256\":\"0x0108bf6a6ebd5f96678bed33a35947537263f96766131ee91461fb6485805028\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ae2d274bf3d56a6d49a9bbd0a4871c54997a82551eb3eb1c0c39dc98698ff8bf\",\"dweb:/ipfs/QmTT7ty5DPGAmRnx94Xu3TUDYGSPDVLN2bppJAjjedrg1e\"]},\"@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0x2ccf9d2313a313d41a791505f2b5abfdc62191b5d4334f7f7a82691c088a1c87\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b3a57d0854b2fdce6ebff933a48dca2445643d1eccfc27f00292e937f26c6a58\",\"dweb:/ipfs/QmW45rZooS9TqR4YXUbjRbtf2Bpb5ouSarBvfW1LdGprvV\"]},\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6df0ddf21ce9f58271bdfaa85cde98b200ef242a05a3f85c2bc10a8294800a92\",\"dweb:/ipfs/QmRK2Y5Yc6BK7tGKkgsgn3aJEQGi5aakeSPZvS65PV8Xp3\"]},\"@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0xd10975de010d89fd1c78dc5e8a9a7e7f496198085c151648f20cba166b32582b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fb0048dee081f6fffa5f74afc3fb328483c2a30504e94a0ddd2a5114d731ec4d\",\"dweb:/ipfs/QmZptt1nmYoA5SgjwnSgWqgUSDgm4q52Yos3xhnMv3MV43\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x447a5f3ddc18419d41ff92b3773fb86471b1db25773e07f877f548918a185bf1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://be161e54f24e5c6fae81a12db1a8ae87bc5ae1b0ddc805d82a1440a68455088f\",\"dweb:/ipfs/QmP7C3CHdY9urF4dEMb9wmsp1wMxHF6nhA2yQE5SKiPAdy\"]},\"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":{\"keccak256\":\"0x9772845c886f87a3aab315f8d6b68aa599027c20f441b131cd4afaf65b588900\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ad2f29a9c17a4f746416c9e254e17671f43c409dbfa6e4d7d76c3e4a83212d31\",\"dweb:/ipfs/QmTqU65L6iu6yqmXKzcNLPioR8etzKPWycpDJCm17ifVdS\"]},\"project:/contracts/handlers/DefaultMessageReceiver.sol\":{\"keccak256\":\"0x5000b133ef66a585d137c791fca15fa4f62480a9fbdaf692825f2501cd357b1b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b7f48267a34ba1d942daebac91faf74aec00b495678a140f28d066fe631c7ebe\",\"dweb:/ipfs/QmP1FxqdidQcN9pgNseEEeyTRsoyHJ2srrRmkxmyEnctA9\"]},\"project:/contracts/interfaces/ISygmaMessageReceiver.sol\":{\"keccak256\":\"0xf5ea492be43681bc3c1f105dc0f3ae377661b98bd22dbb6eb64e6c0441ba8a6a\",\"license\":\"LGPL-3.0-only\",\"urls\":[\"bzz-raw://73136402e079193251f5626fa11b8d84eab1a3a2ab1061a25e6b32d05ea58171\",\"dweb:/ipfs/QmZLuqEVAZrmMLzsmw3RsJAuowraUCDzFGtPHHuxywBtzS\"]},\"project:/contracts/utils/AccessControl.sol\":{\"keccak256\":\"0x46ee81e56b1cca67473670a3f59fb02ec8abda297fac02c79d705a3442588499\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://40869a99895bc5f746f8b55ab7d20eb4fce323e50540d2d0944e1930f5eea334\",\"dweb:/ipfs/QmVaCmqGRywSFyqPj1auXmDYQzDFy4uywknXTB3QMLCzkm\"]}},\"version\":1}",
  "bytecode": "0x60a06040523480156200001157600080fd5b5060405162001fc438038062001fc48339810160408190526200003491620001db565b608081905262000046600033620000bf565b60005b8251811015620000b657620000a17fb712335d5b6789b3c7e11e1e9aea60ec1540076405f8ca833b4307162683afdb8483815181106200008d576200008d620002b5565b6020026020010151620000bf60201b60201c565b80620000ad81620002cb565b91505062000049565b505050620002f5565b620000cb8282620000cf565b5050565b600082815260208181526040909120620000f49183906200091562000136821b17901c565b15620000cb5760405133906001600160a01b0383169084907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d90600090a45050565b60006200014d836001600160a01b03841662000156565b90505b92915050565b60008181526001830160205260408120546200019f5750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915562000150565b50600062000150565b634e487b7160e01b600052604160045260246000fd5b80516001600160a01b0381168114620001d657600080fd5b919050565b60008060408385031215620001ef57600080fd5b82516001600160401b03808211156200020757600080fd5b818501915085601f8301126200021c57600080fd5b8151602082821115620002335762000233620001a8565b8160051b604051601f19603f830116810181811086821117156200025b576200025b620001a8565b6040529283528183019350848101820192898411156200027a57600080fd5b948201945b83861015620002a3576200029386620001be565b855294820194938201936200027f565b97909101519698969750505050505050565b634e487b7160e01b600052603260045260246000fd5b6000600019821415620002ee57634e487b7160e01b600052601160045260246000fd5b5060010190565b608051611c9e62000326600039600081816102f401528181610ae901528181610b410152610bbe0152611c9e6000f3fe60806040526004361061010d5760003560e01c806391d1485411610095578063c865fa5e11610064578063c865fa5e14610357578063ca15c8731461038b578063cd986c96146103ab578063d547741f146103cb578063f23a6e61146103eb57600080fd5b806391d14854146102c257806398474ffa146102e2578063a217fddf14610316578063bc197c811461032b57600080fd5b806336568abe116100dc57806336568abe146101f2578063419bf1ea146102125780634726ca43146102325780634e0df3f6146102455780639010d07c1461028a57600080fd5b806301ffc9a714610119578063150b7a021461014e578063248a9ca3146101925780632f2ff15d146101d057600080fd5b3661011457005b600080fd5b34801561012557600080fd5b5061013961013436600461131f565b610417565b60405190151581526020015b60405180910390f35b34801561015a57600080fd5b5061017961016936600461145f565b630a85bd0160e11b949350505050565b6040516001600160e01b03199091168152602001610145565b34801561019e57600080fd5b506101c26101ad3660046114cb565b60009081526020819052604090206002015490565b604051908152602001610145565b3480156101dc57600080fd5b506101f06101eb3660046114e4565b61044e565b005b3480156101fe57600080fd5b506101f061020d3660046114e4565b6104e1565b34801561021e57600080fd5b506101f061022d366004611514565b61055b565b6101f0610240366004611542565b61059d565b34801561025157600080fd5b506101c26102603660046114e4565b6000828152602081815260408083206001600160a01b038516845260010190915290205492915050565b34801561029657600080fd5b506102aa6102a536600461159b565b610618565b6040516001600160a01b039091168152602001610145565b3480156102ce57600080fd5b506101396102dd3660046114e4565b610637565b3480156102ee57600080fd5b506101c27f000000000000000000000000000000000000000000000000000000000000000081565b34801561032257600080fd5b506101c2600081565b34801561033757600080fd5b50610179610346366004611647565b63bc197c8160e01b95945050505050565b34801561036357600080fd5b506101c27fb712335d5b6789b3c7e11e1e9aea60ec1540076405f8ca833b4307162683afdb81565b34801561039757600080fd5b506101c26103a63660046114cb565b61064f565b3480156103b757600080fd5b506101f06103c63660046116f5565b610666565b3480156103d757600080fd5b506101f06103e63660046114e4565b610894565b3480156103f757600080fd5b50610179610406366004611861565b63f23a6e6160e01b95945050505050565b60006001600160e01b03198216630271189760e51b148061044857506301ffc9a760e01b6001600160e01b03198316145b92915050565b60008281526020819052604090206002015461046a9033610637565b6104d35760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e60448201526e0818591b5a5b881d1bc819dc985b9d608a1b60648201526084015b60405180910390fd5b6104dd828261092a565b5050565b6001600160a01b03811633146105515760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084016104ca565b6104dd8282610983565b33301461057b57604051630deda90360e41b815260040160405180910390fd5b6001600160a01b03821615610594576104dd82826109dc565b6104dd81610a6e565b6105c77fb712335d5b6789b3c7e11e1e9aea60ec1540076405f8ca833b4307162683afdb33610637565b6105e457604051630deda90360e41b815260040160405180910390fd5b6000806000838060200190518101906105fd9190611946565b9250925092506106108383888489610ae2565b505050505050565b60008281526020819052604081206106309083610cc7565b9392505050565b60008281526020819052604081206106309083610cd3565b600081815260208190526040812061044890610cf5565b33301461068657604051630deda90360e41b815260040160405180910390fd5b805160005b81811015610867576106ba8382815181106106a8576106a8611a98565b6020026020010151602001513b151590565b1580156106e5575060008382815181106106d6576106d6611a98565b602002602001015160a0015151115b15610703576040516303777f6960e51b815260040160405180910390fd5b600083828151811061071757610717611a98565b602002602001015160000151905060008111801561073457508047105b156107525760405163dbc3a71f60e01b815260040160405180910390fd5b61079984838151811061076757610767611a98565b60200260200101516060015185848151811061078557610785611a98565b602002602001015160400151600019610cff565b60008483815181106107ad576107ad611a98565b6020026020010151602001516001600160a01b0316828685815181106107d5576107d5611a98565b602002602001015160a001516040516107ee9190611aae565b60006040518083038185875af1925050503d806000811461082b576040519150601f19603f3d011682016040523d82523d6000602084013e610830565b606091505b50509050806108525760405163080a1c2760e01b815260040160405180910390fd5b5050808061085f90611ae0565b91505061068b565b50824711156108795761087984610a6e565b61088385856109dc565b61088d8285610e6e565b5050505050565b6000828152602081905260409020600201546108b09033610637565b6105515760405162461bcd60e51b815260206004820152603060248201527f416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e60448201526f2061646d696e20746f207265766f6b6560801b60648201526084016104ca565b6000610630836001600160a01b038416610ef9565b60008281526020819052604090206109429082610915565b156104dd5760405133906001600160a01b0383169084907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d90600090a45050565b600082815260208190526040902061099b9082610f48565b156104dd5760405133906001600160a01b0383169084907ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b90600090a45050565b6001600160a01b038216156104dd576040516370a0823160e01b81523060048201526000906001600160a01b038416906370a0823190602401602060405180830381865afa158015610a32573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a569190611afb565b90508015610a6957610a69838383610f5d565b505050565b6000816001600160a01b03164760405160006040518083038185875af1925050503d8060008114610abb576040519150601f19603f3d011682016040523d82523d6000602084013e610ac0565b606091505b50509050806104dd5760405163d555f4d960e01b815260040160405180910390fd5b60005a90507f0000000000000000000000000000000000000000000000000000000000000000811015610b28576040516360ee124760e01b815260040160405180910390fd5b6000610b343447611b14565b90503063cd986c96610b667f000000000000000000000000000000000000000000000000000000000000000085611b14565b8787858b6040518663ffffffff1660e01b8152600401610b899493929190611b57565b600060405180830381600088803b158015610ba357600080fd5b5087f193505050508015610bb5575060015b610c6d575a91507f0000000000000000000000000000000000000000000000000000000000000000821015610bfd576040516360ee124760e01b815260040160405180910390fd5b610c0785856109dc565b80471115610c1857610c1884610a6e565b604080518881526001600160a01b0387811660208301528616818301526060810185905290517f57968afb28f9cb89277d581a1ace43ee213e6d7f79b4c14f4e815e3eadf1eade9181900360800190a1610cbe565b604080518881526001600160a01b0387811660208301528616818301526060810185905290517fe57dd573634102b6cae74aab341f709f6fc3ae2bdc0a35f9a47a85f45b677a219181900360800190a15b50505050505050565b60006106308383610faf565b6001600160a01b03811660009081526001830160205260408120541515610630565b6000610448825490565b6001600160a01b03831615801590610d1f57506001600160a01b03821615155b15610a6957604080516001600160a01b0384811660248301526000604480840182905284518085039091018152606490930184526020830180516001600160e01b031663095ea7b360e01b179052925190861691610d7c91611aae565b6000604051808303816000865af19150503d8060008114610db9576040519150601f19603f3d011682016040523d82523d6000602084013e610dbe565b606091505b50909150508115610e6857604080516001600160a01b038581166024830152604480830186905283518084039091018152606490920183526020820180516001600160e01b031663095ea7b360e01b179052915191861691610e209190611aae565b6000604051808303816000865af19150503d8060008114610e5d576040519150601f19603f3d011682016040523d82523d6000602084013e610e62565b606091505b50909150505b50505050565b60005b8251811015610a6957610ea1838281518110610e8f57610e8f611a98565b602002602001015160800151836109dc565b610ee7838281518110610eb657610eb6611a98565b602002602001015160600151848381518110610ed457610ed4611a98565b6020026020010151604001516000610cff565b80610ef181611ae0565b915050610e71565b6000818152600183016020526040812054610f4057508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610448565b506000610448565b6000610630836001600160a01b038416610fd9565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052610a699084906110cc565b6000826000018281548110610fc657610fc6611a98565b9060005260206000200154905092915050565b600081815260018301602052604081205480156110c2576000610ffd600183611b14565b855490915060009061101190600190611b14565b905081811461107657600086600001828154811061103157611031611a98565b906000526020600020015490508087600001848154811061105457611054611a98565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061108757611087611c1d565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610448565b6000915050610448565b6000611121826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661119e9092919063ffffffff16565b805190915015610a69578080602001905181019061113f9190611c33565b610a695760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016104ca565b60606111ad84846000856111b5565b949350505050565b6060824710156112165760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016104ca565b6001600160a01b0385163b61126d5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016104ca565b600080866001600160a01b031685876040516112899190611aae565b60006040518083038185875af1925050503d80600081146112c6576040519150601f19603f3d011682016040523d82523d6000602084013e6112cb565b606091505b50915091506112db8282866112e6565b979650505050505050565b606083156112f5575081610630565b8251156113055782518084602001fd5b8160405162461bcd60e51b81526004016104ca9190611c55565b60006020828403121561133157600080fd5b81356001600160e01b03198116811461063057600080fd5b6001600160a01b038116811461135e57600080fd5b50565b803561136c81611349565b919050565b634e487b7160e01b600052604160045260246000fd5b60405160c0810167ffffffffffffffff811182821017156113aa576113aa611371565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156113d9576113d9611371565b604052919050565b600067ffffffffffffffff8211156113fb576113fb611371565b50601f01601f191660200190565b600082601f83011261141a57600080fd5b813561142d611428826113e1565b6113b0565b81815284602083860101111561144257600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806080858703121561147557600080fd5b843561148081611349565b9350602085013561149081611349565b925060408501359150606085013567ffffffffffffffff8111156114b357600080fd5b6114bf87828801611409565b91505092959194509250565b6000602082840312156114dd57600080fd5b5035919050565b600080604083850312156114f757600080fd5b82359150602083013561150981611349565b809150509250929050565b6000806040838503121561152757600080fd5b823561153281611349565b9150602083013561150981611349565b60008060006060848603121561155757600080fd5b833561156281611349565b925060208401359150604084013567ffffffffffffffff81111561158557600080fd5b61159186828701611409565b9150509250925092565b600080604083850312156115ae57600080fd5b50508035926020909101359150565b600067ffffffffffffffff8211156115d7576115d7611371565b5060051b60200190565b600082601f8301126115f257600080fd5b81356020611602611428836115bd565b82815260059290921b8401810191818101908684111561162157600080fd5b8286015b8481101561163c5780358352918301918301611625565b509695505050505050565b600080600080600060a0868803121561165f57600080fd5b853561166a81611349565b9450602086013561167a81611349565b9350604086013567ffffffffffffffff8082111561169757600080fd5b6116a389838a016115e1565b945060608801359150808211156116b957600080fd5b6116c589838a016115e1565b935060808801359150808211156116db57600080fd5b506116e888828901611409565b9150509295509295909350565b6000806000806080858703121561170b57600080fd5b6117158535611349565b84359350602085013561172781611349565b925060408501359150606085013567ffffffffffffffff8082111561174b57600080fd5b818701915087601f83011261175f57600080fd5b813561176d611428826115bd565b8082825260208201915060208360051b86010192508a83111561178f57600080fd5b602085015b838110156118515784813511156117aa57600080fd5b8035860160c0818e03601f190112156117c257600080fd5b6117ca611387565b6020820135815260408201356117df81611349565b602082015260608201356117f281611349565b6040820152608082013561180581611349565b606082015261181660a08301611361565b608082015260c08201358781111561182d57600080fd5b61183c8f602083860101611409565b60a08301525084525060209283019201611794565b50979a9699509497505050505050565b600080600080600060a0868803121561187957600080fd5b853561188481611349565b9450602086013561189481611349565b93506040860135925060608601359150608086013567ffffffffffffffff8111156118be57600080fd5b6116e888828901611409565b805161136c81611349565b60005b838110156118f05781810151838201526020016118d8565b83811115610e685750506000910152565b600082601f83011261191257600080fd5b8151611920611428826113e1565b81815284602083860101111561193557600080fd5b6111ad8260208301602087016118d5565b60008060006060848603121561195b57600080fd5b8351925060208085015167ffffffffffffffff8082111561197b57600080fd5b818701915087601f83011261198f57600080fd5b815161199d611428826115bd565b81815260059190911b8301840190848101908a8311156119bc57600080fd5b8585015b83811015611a79578051858111156119d757600080fd5b860160c0818e03601f190112156119ed57600080fd5b6119f5611387565b8882015181526040820151611a0981611349565b818a01526060820151611a1b81611349565b60408201526080820151611a2e81611349565b6060820152611a3f60a083016118ca565b608082015260c082015187811115611a575760008081fd5b611a658f8b83860101611901565b60a0830152508452509186019186016119c0565b50809750505050505050611a8f604085016118ca565b90509250925092565b634e487b7160e01b600052603260045260246000fd5b60008251611ac08184602087016118d5565b9190910192915050565b634e487b7160e01b600052601160045260246000fd5b6000600019821415611af457611af4611aca565b5060010190565b600060208284031215611b0d57600080fd5b5051919050565b600082821015611b2657611b26611aca565b500390565b60008151808452611b438160208601602086016118d5565b601f01601f19169290920160200192915050565b6000608080830160018060a01b038089168552602081891681870152604088818801526060858189015284895180875260a09650868a019150868160051b8b0101858c0160005b83811015611c08578c8303609f19018552815180518452888101518a1689850152878101518a1688850152868101518a16878501528b8101518a168c8501528a015160c08b8501819052611bf481860183611b2b565b968a01969450505090870190600101611b9e565b50909f9e505050505050505050505050505050565b634e487b7160e01b600052603160045260246000fd5b600060208284031215611c4557600080fd5b8151801515811461063057600080fd5b6020815260006106306020830184611b2b56fea2646970667358221220e2aaa68fe6b735e846deecb665a22b9f17d91d93f76ea2eb3fd7c83e7fafed1764736f6c634300080b0033",
  "deployedBytecode": "0x60806040526004361061010d5760003560e01c806391d1485411610095578063c865fa5e11610064578063c865fa5e14610357578063ca15c8731461038b578063cd986c96146103ab578063d547741f146103cb578063f23a6e61146103eb57600080fd5b806391d14854146102c257806398474ffa146102e2578063a217fddf14610316578063bc197c811461032b57600080fd5b806336568abe116100dc57806336568abe146101f2578063419bf1ea146102125780634726ca43146102325780634e0df3f6146102455780639010d07c1461028a57600080fd5b806301ffc9a714610119578063150b7a021461014e578063248a9ca3146101925780632f2ff15d146101d057600080fd5b3661011457005b600080fd5b34801561012557600080fd5b5061013961013436600461131f565b610417565b60405190151581526020015b60405180910390f35b34801561015a57600080fd5b5061017961016936600461145f565b630a85bd0160e11b949350505050565b6040516001600160e01b03199091168152602001610145565b34801561019e57600080fd5b506101c26101ad3660046114cb565b60009081526020819052604090206002015490565b604051908152602001610145565b3480156101dc57600080fd5b506101f06101eb3660046114e4565b61044e565b005b3480156101fe57600080fd5b506101f061020d3660046114e4565b6104e1565b34801561021e57600080fd5b506101f061022d366004611514565b61055b565b6101f0610240366004611542565b61059d565b34801561025157600080fd5b506101c26102603660046114e4565b6000828152602081815260408083206001600160a01b038516845260010190915290205492915050565b34801561029657600080fd5b506102aa6102a536600461159b565b610618565b6040516001600160a01b039091168152602001610145565b3480156102ce57600080fd5b506101396102dd3660046114e4565b610637565b3480156102ee57600080fd5b506101c27f000000000000000000000000000000000000000000000000000000000000000081565b34801561032257600080fd5b506101c2600081565b34801561033757600080fd5b50610179610346366004611647565b63bc197c8160e01b95945050505050565b34801561036357600080fd5b506101c27fb712335d5b6789b3c7e11e1e9aea60ec1540076405f8ca833b4307162683afdb81565b34801561039757600080fd5b506101c26103a63660046114cb565b61064f565b3480156103b757600080fd5b506101f06103c63660046116f5565b610666565b3480156103d757600080fd5b506101f06103e63660046114e4565b610894565b3480156103f757600080fd5b50610179610406366004611861565b63f23a6e6160e01b95945050505050565b60006001600160e01b03198216630271189760e51b148061044857506301ffc9a760e01b6001600160e01b03198316145b92915050565b60008281526020819052604090206002015461046a9033610637565b6104d35760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e60448201526e0818591b5a5b881d1bc819dc985b9d608a1b60648201526084015b60405180910390fd5b6104dd828261092a565b5050565b6001600160a01b03811633146105515760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084016104ca565b6104dd8282610983565b33301461057b57604051630deda90360e41b815260040160405180910390fd5b6001600160a01b03821615610594576104dd82826109dc565b6104dd81610a6e565b6105c77fb712335d5b6789b3c7e11e1e9aea60ec1540076405f8ca833b4307162683afdb33610637565b6105e457604051630deda90360e41b815260040160405180910390fd5b6000806000838060200190518101906105fd9190611946565b9250925092506106108383888489610ae2565b505050505050565b60008281526020819052604081206106309083610cc7565b9392505050565b60008281526020819052604081206106309083610cd3565b600081815260208190526040812061044890610cf5565b33301461068657604051630deda90360e41b815260040160405180910390fd5b805160005b81811015610867576106ba8382815181106106a8576106a8611a98565b6020026020010151602001513b151590565b1580156106e5575060008382815181106106d6576106d6611a98565b602002602001015160a0015151115b15610703576040516303777f6960e51b815260040160405180910390fd5b600083828151811061071757610717611a98565b602002602001015160000151905060008111801561073457508047105b156107525760405163dbc3a71f60e01b815260040160405180910390fd5b61079984838151811061076757610767611a98565b60200260200101516060015185848151811061078557610785611a98565b602002602001015160400151600019610cff565b60008483815181106107ad576107ad611a98565b6020026020010151602001516001600160a01b0316828685815181106107d5576107d5611a98565b602002602001015160a001516040516107ee9190611aae565b60006040518083038185875af1925050503d806000811461082b576040519150601f19603f3d011682016040523d82523d6000602084013e610830565b606091505b50509050806108525760405163080a1c2760e01b815260040160405180910390fd5b5050808061085f90611ae0565b91505061068b565b50824711156108795761087984610a6e565b61088385856109dc565b61088d8285610e6e565b5050505050565b6000828152602081905260409020600201546108b09033610637565b6105515760405162461bcd60e51b815260206004820152603060248201527f416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e60448201526f2061646d696e20746f207265766f6b6560801b60648201526084016104ca565b6000610630836001600160a01b038416610ef9565b60008281526020819052604090206109429082610915565b156104dd5760405133906001600160a01b0383169084907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d90600090a45050565b600082815260208190526040902061099b9082610f48565b156104dd5760405133906001600160a01b0383169084907ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b90600090a45050565b6001600160a01b038216156104dd576040516370a0823160e01b81523060048201526000906001600160a01b038416906370a0823190602401602060405180830381865afa158015610a32573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a569190611afb565b90508015610a6957610a69838383610f5d565b505050565b6000816001600160a01b03164760405160006040518083038185875af1925050503d8060008114610abb576040519150601f19603f3d011682016040523d82523d6000602084013e610ac0565b606091505b50509050806104dd5760405163d555f4d960e01b815260040160405180910390fd5b60005a90507f0000000000000000000000000000000000000000000000000000000000000000811015610b28576040516360ee124760e01b815260040160405180910390fd5b6000610b343447611b14565b90503063cd986c96610b667f000000000000000000000000000000000000000000000000000000000000000085611b14565b8787858b6040518663ffffffff1660e01b8152600401610b899493929190611b57565b600060405180830381600088803b158015610ba357600080fd5b5087f193505050508015610bb5575060015b610c6d575a91507f0000000000000000000000000000000000000000000000000000000000000000821015610bfd576040516360ee124760e01b815260040160405180910390fd5b610c0785856109dc565b80471115610c1857610c1884610a6e565b604080518881526001600160a01b0387811660208301528616818301526060810185905290517f57968afb28f9cb89277d581a1ace43ee213e6d7f79b4c14f4e815e3eadf1eade9181900360800190a1610cbe565b604080518881526001600160a01b0387811660208301528616818301526060810185905290517fe57dd573634102b6cae74aab341f709f6fc3ae2bdc0a35f9a47a85f45b677a219181900360800190a15b50505050505050565b60006106308383610faf565b6001600160a01b03811660009081526001830160205260408120541515610630565b6000610448825490565b6001600160a01b03831615801590610d1f57506001600160a01b03821615155b15610a6957604080516001600160a01b0384811660248301526000604480840182905284518085039091018152606490930184526020830180516001600160e01b031663095ea7b360e01b179052925190861691610d7c91611aae565b6000604051808303816000865af19150503d8060008114610db9576040519150601f19603f3d011682016040523d82523d6000602084013e610dbe565b606091505b50909150508115610e6857604080516001600160a01b038581166024830152604480830186905283518084039091018152606490920183526020820180516001600160e01b031663095ea7b360e01b179052915191861691610e209190611aae565b6000604051808303816000865af19150503d8060008114610e5d576040519150601f19603f3d011682016040523d82523d6000602084013e610e62565b606091505b50909150505b50505050565b60005b8251811015610a6957610ea1838281518110610e8f57610e8f611a98565b602002602001015160800151836109dc565b610ee7838281518110610eb657610eb6611a98565b602002602001015160600151848381518110610ed457610ed4611a98565b6020026020010151604001516000610cff565b80610ef181611ae0565b915050610e71565b6000818152600183016020526040812054610f4057508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610448565b506000610448565b6000610630836001600160a01b038416610fd9565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052610a699084906110cc565b6000826000018281548110610fc657610fc6611a98565b9060005260206000200154905092915050565b600081815260018301602052604081205480156110c2576000610ffd600183611b14565b855490915060009061101190600190611b14565b905081811461107657600086600001828154811061103157611031611a98565b906000526020600020015490508087600001848154811061105457611054611a98565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061108757611087611c1d565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610448565b6000915050610448565b6000611121826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661119e9092919063ffffffff16565b805190915015610a69578080602001905181019061113f9190611c33565b610a695760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016104ca565b60606111ad84846000856111b5565b949350505050565b6060824710156112165760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016104ca565b6001600160a01b0385163b61126d5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016104ca565b600080866001600160a01b031685876040516112899190611aae565b60006040518083038185875af1925050503d80600081146112c6576040519150601f19603f3d011682016040523d82523d6000602084013e6112cb565b606091505b50915091506112db8282866112e6565b979650505050505050565b606083156112f5575081610630565b8251156113055782518084602001fd5b8160405162461bcd60e51b81526004016104ca9190611c55565b60006020828403121561133157600080fd5b81356001600160e01b03198116811461063057600080fd5b6001600160a01b038116811461135e57600080fd5b50565b803561136c81611349565b919050565b634e487b7160e01b600052604160045260246000fd5b60405160c0810167ffffffffffffffff811182821017156113aa576113aa611371565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156113d9576113d9611371565b604052919050565b600067ffffffffffffffff8211156113fb576113fb611371565b50601f01601f191660200190565b600082601f83011261141a57600080fd5b813561142d611428826113e1565b6113b0565b81815284602083860101111561144257600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806080858703121561147557600080fd5b843561148081611349565b9350602085013561149081611349565b925060408501359150606085013567ffffffffffffffff8111156114b357600080fd5b6114bf87828801611409565b91505092959194509250565b6000602082840312156114dd57600080fd5b5035919050565b600080604083850312156114f757600080fd5b82359150602083013561150981611349565b809150509250929050565b6000806040838503121561152757600080fd5b823561153281611349565b9150602083013561150981611349565b60008060006060848603121561155757600080fd5b833561156281611349565b925060208401359150604084013567ffffffffffffffff81111561158557600080fd5b61159186828701611409565b9150509250925092565b600080604083850312156115ae57600080fd5b50508035926020909101359150565b600067ffffffffffffffff8211156115d7576115d7611371565b5060051b60200190565b600082601f8301126115f257600080fd5b81356020611602611428836115bd565b82815260059290921b8401810191818101908684111561162157600080fd5b8286015b8481101561163c5780358352918301918301611625565b509695505050505050565b600080600080600060a0868803121561165f57600080fd5b853561166a81611349565b9450602086013561167a81611349565b9350604086013567ffffffffffffffff8082111561169757600080fd5b6116a389838a016115e1565b945060608801359150808211156116b957600080fd5b6116c589838a016115e1565b935060808801359150808211156116db57600080fd5b506116e888828901611409565b9150509295509295909350565b6000806000806080858703121561170b57600080fd5b6117158535611349565b84359350602085013561172781611349565b925060408501359150606085013567ffffffffffffffff8082111561174b57600080fd5b818701915087601f83011261175f57600080fd5b813561176d611428826115bd565b8082825260208201915060208360051b86010192508a83111561178f57600080fd5b602085015b838110156118515784813511156117aa57600080fd5b8035860160c0818e03601f190112156117c257600080fd5b6117ca611387565b6020820135815260408201356117df81611349565b602082015260608201356117f281611349565b6040820152608082013561180581611349565b606082015261181660a08301611361565b608082015260c08201358781111561182d57600080fd5b61183c8f602083860101611409565b60a08301525084525060209283019201611794565b50979a9699509497505050505050565b600080600080600060a0868803121561187957600080fd5b853561188481611349565b9450602086013561189481611349565b93506040860135925060608601359150608086013567ffffffffffffffff8111156118be57600080fd5b6116e888828901611409565b805161136c81611349565b60005b838110156118f05781810151838201526020016118d8565b83811115610e685750506000910152565b600082601f83011261191257600080fd5b8151611920611428826113e1565b81815284602083860101111561193557600080fd5b6111ad8260208301602087016118d5565b60008060006060848603121561195b57600080fd5b8351925060208085015167ffffffffffffffff8082111561197b57600080fd5b818701915087601f83011261198f57600080fd5b815161199d611428826115bd565b81815260059190911b8301840190848101908a8311156119bc57600080fd5b8585015b83811015611a79578051858111156119d757600080fd5b860160c0818e03601f190112156119ed57600080fd5b6119f5611387565b8882015181526040820151611a0981611349565b818a01526060820151611a1b81611349565b60408201526080820151611a2e81611349565b6060820152611a3f60a083016118ca565b608082015260c082015187811115611a575760008081fd5b611a658f8b83860101611901565b60a0830152508452509186019186016119c0565b50809750505050505050611a8f604085016118ca565b90509250925092565b634e487b7160e01b600052603260045260246000fd5b60008251611ac08184602087016118d5565b9190910192915050565b634e487b7160e01b600052601160045260246000fd5b6000600019821415611af457611af4611aca565b5060010190565b600060208284031215611b0d57600080fd5b5051919050565b600082821015611b2657611b26611aca565b500390565b60008151808452611b438160208601602086016118d5565b601f01601f19169290920160200192915050565b6000608080830160018060a01b038089168552602081891681870152604088818801526060858189015284895180875260a09650868a019150868160051b8b0101858c0160005b83811015611c08578c8303609f19018552815180518452888101518a1689850152878101518a1688850152868101518a16878501528b8101518a168c8501528a015160c08b8501819052611bf481860183611b2b565b968a01969450505090870190600101611b9e565b50909f9e505050505050505050505050505050565b634e487b7160e01b600052603160045260246000fd5b600060208284031215611c4557600080fd5b8151801515811461063057600080fd5b6020815260006106306020830184611b2b56fea2646970667358221220e2aaa68fe6b735e846deecb665a22b9f17d91d93f76ea2eb3fd7c83e7fafed1764736f6c634300080b0033",
  "immutableReferences": {
    "12708": [
      {
        "length": 32,
        "start": 756
      },
      {
        "length": 32,
        "start": 2793
      },
      {
        "length": 32,
        "start": 2881
      },
      {
        "length": 32,
        "start": 3006
      }
    ]
  },
  "generatedSources": [
    {
      "ast": {
        "nodeType": "YulBlock",
        "src": "0:1891:105",
        "statements": [
          {
            "nodeType": "YulBlock",
            "src": "6:3:105",
            "statements": []
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "46:95:105",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "63:1:105",
                        "type": "",
                        "value": "0"
                      },
                      {
                        "arguments": [
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "70:3:105",
                            "type": "",
                            "value": "224"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "75:10:105",
                            "type": "",
                            "value": "0x4e487b71"
                          }
                        ],
                        "functionName": {
                          "name": "shl",
                          "nodeType": "YulIdentifier",
                          "src": "66:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "66:20:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "56:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "56:31:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "56:31:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "103:1:105",
                        "type": "",
                        "value": "4"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "106:4:105",
                        "type": "",
                        "value": "0x41"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "96:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "96:15:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "96:15:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "127:1:105",
                        "type": "",
                        "value": "0"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "130:4:105",
                        "type": "",
                        "value": "0x24"
                      }
                    ],
                    "functionName": {
                      "name": "revert",
                      "nodeType": "YulIdentifier",
                      "src": "120:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "120:15:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "120:15:105"
                }
              ]
            },
            "name": "panic_error_0x41",
            "nodeType": "YulFunctionDefinition",
            "src": "14:127:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "206:117:105",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "216:22:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "offset",
                        "nodeType": "YulIdentifier",
                        "src": "231:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nodeType": "YulIdentifier",
                      "src": "225:5:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "225:13:105"
                  },
                  "variableNames": [
                    {
                      "name": "value",
                      "nodeType": "YulIdentifier",
                      "src": "216:5:105"
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "301:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "310:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "313:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "303:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "303:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "303:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "value",
                            "nodeType": "YulIdentifier",
                            "src": "260:5:105"
                          },
                          {
                            "arguments": [
                              {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "271:5:105"
                              },
                              {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "286:3:105",
                                        "type": "",
                                        "value": "160"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "291:1:105",
                                        "type": "",
                                        "value": "1"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "282:3:105"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "282:11:105"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "295:1:105",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "sub",
                                  "nodeType": "YulIdentifier",
                                  "src": "278:3:105"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "278:19:105"
                              }
                            ],
                            "functionName": {
                              "name": "and",
                              "nodeType": "YulIdentifier",
                              "src": "267:3:105"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "267:31:105"
                          }
                        ],
                        "functionName": {
                          "name": "eq",
                          "nodeType": "YulIdentifier",
                          "src": "257:2:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "257:42:105"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "250:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "250:50:105"
                  },
                  "nodeType": "YulIf",
                  "src": "247:70:105"
                }
              ]
            },
            "name": "abi_decode_address_fromMemory",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "offset",
                "nodeType": "YulTypedName",
                "src": "185:6:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "196:5:105",
                "type": ""
              }
            ],
            "src": "146:177:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "451:1069:105",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "497:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "506:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "509:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "499:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "499:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "499:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "472:7:105"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "481:9:105"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "468:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "468:23:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "493:2:105",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "464:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "464:32:105"
                  },
                  "nodeType": "YulIf",
                  "src": "461:52:105"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "522:30:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "542:9:105"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nodeType": "YulIdentifier",
                      "src": "536:5:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "536:16:105"
                  },
                  "variables": [
                    {
                      "name": "offset",
                      "nodeType": "YulTypedName",
                      "src": "526:6:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "561:28:105",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "579:2:105",
                            "type": "",
                            "value": "64"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "583:1:105",
                            "type": "",
                            "value": "1"
                          }
                        ],
                        "functionName": {
                          "name": "shl",
                          "nodeType": "YulIdentifier",
                          "src": "575:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "575:10:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "587:1:105",
                        "type": "",
                        "value": "1"
                      }
                    ],
                    "functionName": {
                      "name": "sub",
                      "nodeType": "YulIdentifier",
                      "src": "571:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "571:18:105"
                  },
                  "variables": [
                    {
                      "name": "_1",
                      "nodeType": "YulTypedName",
                      "src": "565:2:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "616:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "625:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "628:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "618:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "618:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "618:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "offset",
                        "nodeType": "YulIdentifier",
                        "src": "604:6:105"
                      },
                      {
                        "name": "_1",
                        "nodeType": "YulIdentifier",
                        "src": "612:2:105"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "601:2:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "601:14:105"
                  },
                  "nodeType": "YulIf",
                  "src": "598:34:105"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "641:32:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "655:9:105"
                      },
                      {
                        "name": "offset",
                        "nodeType": "YulIdentifier",
                        "src": "666:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "651:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "651:22:105"
                  },
                  "variables": [
                    {
                      "name": "_2",
                      "nodeType": "YulTypedName",
                      "src": "645:2:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "721:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "730:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "733:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "723:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "723:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "723:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "_2",
                                "nodeType": "YulIdentifier",
                                "src": "700:2:105"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "704:4:105",
                                "type": "",
                                "value": "0x1f"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "696:3:105"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "696:13:105"
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "711:7:105"
                          }
                        ],
                        "functionName": {
                          "name": "slt",
                          "nodeType": "YulIdentifier",
                          "src": "692:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "692:27:105"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "685:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "685:35:105"
                  },
                  "nodeType": "YulIf",
                  "src": "682:55:105"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "746:19:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "_2",
                        "nodeType": "YulIdentifier",
                        "src": "762:2:105"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nodeType": "YulIdentifier",
                      "src": "756:5:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "756:9:105"
                  },
                  "variables": [
                    {
                      "name": "_3",
                      "nodeType": "YulTypedName",
                      "src": "750:2:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "774:14:105",
                  "value": {
                    "kind": "number",
                    "nodeType": "YulLiteral",
                    "src": "784:4:105",
                    "type": "",
                    "value": "0x20"
                  },
                  "variables": [
                    {
                      "name": "_4",
                      "nodeType": "YulTypedName",
                      "src": "778:2:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "811:22:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "functionName": {
                            "name": "panic_error_0x41",
                            "nodeType": "YulIdentifier",
                            "src": "813:16:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "813:18:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "813:18:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "_3",
                        "nodeType": "YulIdentifier",
                        "src": "803:2:105"
                      },
                      {
                        "name": "_1",
                        "nodeType": "YulIdentifier",
                        "src": "807:2:105"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "800:2:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "800:10:105"
                  },
                  "nodeType": "YulIf",
                  "src": "797:36:105"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "842:20:105",
                  "value": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "856:1:105",
                        "type": "",
                        "value": "5"
                      },
                      {
                        "name": "_3",
                        "nodeType": "YulIdentifier",
                        "src": "859:2:105"
                      }
                    ],
                    "functionName": {
                      "name": "shl",
                      "nodeType": "YulIdentifier",
                      "src": "852:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "852:10:105"
                  },
                  "variables": [
                    {
                      "name": "_5",
                      "nodeType": "YulTypedName",
                      "src": "846:2:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "871:23:105",
                  "value": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "891:2:105",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nodeType": "YulIdentifier",
                      "src": "885:5:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "885:9:105"
                  },
                  "variables": [
                    {
                      "name": "memPtr",
                      "nodeType": "YulTypedName",
                      "src": "875:6:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "903:56:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "memPtr",
                        "nodeType": "YulIdentifier",
                        "src": "925:6:105"
                      },
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "_5",
                                "nodeType": "YulIdentifier",
                                "src": "941:2:105"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "945:2:105",
                                "type": "",
                                "value": "63"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "937:3:105"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "937:11:105"
                          },
                          {
                            "arguments": [
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "954:2:105",
                                "type": "",
                                "value": "31"
                              }
                            ],
                            "functionName": {
                              "name": "not",
                              "nodeType": "YulIdentifier",
                              "src": "950:3:105"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "950:7:105"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "933:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "933:25:105"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "921:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "921:38:105"
                  },
                  "variables": [
                    {
                      "name": "newFreePtr",
                      "nodeType": "YulTypedName",
                      "src": "907:10:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "1018:22:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "functionName": {
                            "name": "panic_error_0x41",
                            "nodeType": "YulIdentifier",
                            "src": "1020:16:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "1020:18:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "1020:18:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "newFreePtr",
                            "nodeType": "YulIdentifier",
                            "src": "977:10:105"
                          },
                          {
                            "name": "_1",
                            "nodeType": "YulIdentifier",
                            "src": "989:2:105"
                          }
                        ],
                        "functionName": {
                          "name": "gt",
                          "nodeType": "YulIdentifier",
                          "src": "974:2:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "974:18:105"
                      },
                      {
                        "arguments": [
                          {
                            "name": "newFreePtr",
                            "nodeType": "YulIdentifier",
                            "src": "997:10:105"
                          },
                          {
                            "name": "memPtr",
                            "nodeType": "YulIdentifier",
                            "src": "1009:6:105"
                          }
                        ],
                        "functionName": {
                          "name": "lt",
                          "nodeType": "YulIdentifier",
                          "src": "994:2:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "994:22:105"
                      }
                    ],
                    "functionName": {
                      "name": "or",
                      "nodeType": "YulIdentifier",
                      "src": "971:2:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "971:46:105"
                  },
                  "nodeType": "YulIf",
                  "src": "968:72:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "1056:2:105",
                        "type": "",
                        "value": "64"
                      },
                      {
                        "name": "newFreePtr",
                        "nodeType": "YulIdentifier",
                        "src": "1060:10:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "1049:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1049:22:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "1049:22:105"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "1080:17:105",
                  "value": {
                    "name": "memPtr",
                    "nodeType": "YulIdentifier",
                    "src": "1091:6:105"
                  },
                  "variables": [
                    {
                      "name": "dst",
                      "nodeType": "YulTypedName",
                      "src": "1084:3:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "memPtr",
                        "nodeType": "YulIdentifier",
                        "src": "1113:6:105"
                      },
                      {
                        "name": "_3",
                        "nodeType": "YulIdentifier",
                        "src": "1121:2:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "1106:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1106:18:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "1106:18:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "1133:22:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "memPtr",
                        "nodeType": "YulIdentifier",
                        "src": "1144:6:105"
                      },
                      {
                        "name": "_4",
                        "nodeType": "YulIdentifier",
                        "src": "1152:2:105"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "1140:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1140:15:105"
                  },
                  "variableNames": [
                    {
                      "name": "dst",
                      "nodeType": "YulIdentifier",
                      "src": "1133:3:105"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "1164:34:105",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "_2",
                            "nodeType": "YulIdentifier",
                            "src": "1186:2:105"
                          },
                          {
                            "name": "_5",
                            "nodeType": "YulIdentifier",
                            "src": "1190:2:105"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "1182:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1182:11:105"
                      },
                      {
                        "name": "_4",
                        "nodeType": "YulIdentifier",
                        "src": "1195:2:105"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "1178:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1178:20:105"
                  },
                  "variables": [
                    {
                      "name": "srcEnd",
                      "nodeType": "YulTypedName",
                      "src": "1168:6:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "1230:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "1239:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "1242:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "1232:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "1232:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "1232:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "srcEnd",
                        "nodeType": "YulIdentifier",
                        "src": "1213:6:105"
                      },
                      {
                        "name": "dataEnd",
                        "nodeType": "YulIdentifier",
                        "src": "1221:7:105"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "1210:2:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1210:19:105"
                  },
                  "nodeType": "YulIf",
                  "src": "1207:39:105"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "1255:22:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "_2",
                        "nodeType": "YulIdentifier",
                        "src": "1270:2:105"
                      },
                      {
                        "name": "_4",
                        "nodeType": "YulIdentifier",
                        "src": "1274:2:105"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "1266:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1266:11:105"
                  },
                  "variables": [
                    {
                      "name": "src",
                      "nodeType": "YulTypedName",
                      "src": "1259:3:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "1342:103:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "name": "dst",
                              "nodeType": "YulIdentifier",
                              "src": "1363:3:105"
                            },
                            {
                              "arguments": [
                                {
                                  "name": "src",
                                  "nodeType": "YulIdentifier",
                                  "src": "1398:3:105"
                                }
                              ],
                              "functionName": {
                                "name": "abi_decode_address_fromMemory",
                                "nodeType": "YulIdentifier",
                                "src": "1368:29:105"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "1368:34:105"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "1356:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "1356:47:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "1356:47:105"
                      },
                      {
                        "nodeType": "YulAssignment",
                        "src": "1416:19:105",
                        "value": {
                          "arguments": [
                            {
                              "name": "dst",
                              "nodeType": "YulIdentifier",
                              "src": "1427:3:105"
                            },
                            {
                              "name": "_4",
                              "nodeType": "YulIdentifier",
                              "src": "1432:2:105"
                            }
                          ],
                          "functionName": {
                            "name": "add",
                            "nodeType": "YulIdentifier",
                            "src": "1423:3:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "1423:12:105"
                        },
                        "variableNames": [
                          {
                            "name": "dst",
                            "nodeType": "YulIdentifier",
                            "src": "1416:3:105"
                          }
                        ]
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "src",
                        "nodeType": "YulIdentifier",
                        "src": "1297:3:105"
                      },
                      {
                        "name": "srcEnd",
                        "nodeType": "YulIdentifier",
                        "src": "1302:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "lt",
                      "nodeType": "YulIdentifier",
                      "src": "1294:2:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1294:15:105"
                  },
                  "nodeType": "YulForLoop",
                  "post": {
                    "nodeType": "YulBlock",
                    "src": "1310:23:105",
                    "statements": [
                      {
                        "nodeType": "YulAssignment",
                        "src": "1312:19:105",
                        "value": {
                          "arguments": [
                            {
                              "name": "src",
                              "nodeType": "YulIdentifier",
                              "src": "1323:3:105"
                            },
                            {
                              "name": "_4",
                              "nodeType": "YulIdentifier",
                              "src": "1328:2:105"
                            }
                          ],
                          "functionName": {
                            "name": "add",
                            "nodeType": "YulIdentifier",
                            "src": "1319:3:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "1319:12:105"
                        },
                        "variableNames": [
                          {
                            "name": "src",
                            "nodeType": "YulIdentifier",
                            "src": "1312:3:105"
                          }
                        ]
                      }
                    ]
                  },
                  "pre": {
                    "nodeType": "YulBlock",
                    "src": "1290:3:105",
                    "statements": []
                  },
                  "src": "1286:159:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "1454:16:105",
                  "value": {
                    "name": "memPtr",
                    "nodeType": "YulIdentifier",
                    "src": "1464:6:105"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "1454:6:105"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "1479:35:105",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "1499:9:105"
                          },
                          {
                            "name": "_4",
                            "nodeType": "YulIdentifier",
                            "src": "1510:2:105"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "1495:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1495:18:105"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nodeType": "YulIdentifier",
                      "src": "1489:5:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1489:25:105"
                  },
                  "variableNames": [
                    {
                      "name": "value1",
                      "nodeType": "YulIdentifier",
                      "src": "1479:6:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_array$_t_address_$dyn_memory_ptrt_uint256_fromMemory",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "409:9:105",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "420:7:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "432:6:105",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "440:6:105",
                "type": ""
              }
            ],
            "src": "328:1192:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "1557:95:105",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "1574:1:105",
                        "type": "",
                        "value": "0"
                      },
                      {
                        "arguments": [
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "1581:3:105",
                            "type": "",
                            "value": "224"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "1586:10:105",
                            "type": "",
                            "value": "0x4e487b71"
                          }
                        ],
                        "functionName": {
                          "name": "shl",
                          "nodeType": "YulIdentifier",
                          "src": "1577:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1577:20:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "1567:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1567:31:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "1567:31:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "1614:1:105",
                        "type": "",
                        "value": "4"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "1617:4:105",
                        "type": "",
                        "value": "0x32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "1607:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1607:15:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "1607:15:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "1638:1:105",
                        "type": "",
                        "value": "0"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "1641:4:105",
                        "type": "",
                        "value": "0x24"
                      }
                    ],
                    "functionName": {
                      "name": "revert",
                      "nodeType": "YulIdentifier",
                      "src": "1631:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1631:15:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "1631:15:105"
                }
              ]
            },
            "name": "panic_error_0x32",
            "nodeType": "YulFunctionDefinition",
            "src": "1525:127:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "1704:185:105",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "1743:111:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "1764:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "arguments": [
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "1771:3:105",
                                  "type": "",
                                  "value": "224"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "1776:10:105",
                                  "type": "",
                                  "value": "0x4e487b71"
                                }
                              ],
                              "functionName": {
                                "name": "shl",
                                "nodeType": "YulIdentifier",
                                "src": "1767:3:105"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "1767:20:105"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "1757:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "1757:31:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "1757:31:105"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "1808:1:105",
                              "type": "",
                              "value": "4"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "1811:4:105",
                              "type": "",
                              "value": "0x11"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "1801:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "1801:15:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "1801:15:105"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "1836:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "1839:4:105",
                              "type": "",
                              "value": "0x24"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "1829:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "1829:15:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "1829:15:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "1720:5:105"
                      },
                      {
                        "arguments": [
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "1731:1:105",
                            "type": "",
                            "value": "0"
                          }
                        ],
                        "functionName": {
                          "name": "not",
                          "nodeType": "YulIdentifier",
                          "src": "1727:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1727:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "eq",
                      "nodeType": "YulIdentifier",
                      "src": "1717:2:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1717:17:105"
                  },
                  "nodeType": "YulIf",
                  "src": "1714:140:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "1863:20:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "1874:5:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "1881:1:105",
                        "type": "",
                        "value": "1"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "1870:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1870:13:105"
                  },
                  "variableNames": [
                    {
                      "name": "ret",
                      "nodeType": "YulIdentifier",
                      "src": "1863:3:105"
                    }
                  ]
                }
              ]
            },
            "name": "increment_t_uint256",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "1686:5:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "ret",
                "nodeType": "YulTypedName",
                "src": "1696:3:105",
                "type": ""
              }
            ],
            "src": "1657:232:105"
          }
        ]
      },
      "contents": "{\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_address_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_array$_t_address_$dyn_memory_ptrt_uint256_fromMemory(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let offset := mload(headStart)\n        let _1 := sub(shl(64, 1), 1)\n        if gt(offset, _1) { revert(0, 0) }\n        let _2 := add(headStart, offset)\n        if iszero(slt(add(_2, 0x1f), dataEnd)) { revert(0, 0) }\n        let _3 := mload(_2)\n        let _4 := 0x20\n        if gt(_3, _1) { panic_error_0x41() }\n        let _5 := shl(5, _3)\n        let memPtr := mload(64)\n        let newFreePtr := add(memPtr, and(add(_5, 63), not(31)))\n        if or(gt(newFreePtr, _1), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n        let dst := memPtr\n        mstore(memPtr, _3)\n        dst := add(memPtr, _4)\n        let srcEnd := add(add(_2, _5), _4)\n        if gt(srcEnd, dataEnd) { revert(0, 0) }\n        let src := add(_2, _4)\n        for { } lt(src, srcEnd) { src := add(src, _4) }\n        {\n            mstore(dst, abi_decode_address_fromMemory(src))\n            dst := add(dst, _4)\n        }\n        value0 := memPtr\n        value1 := mload(add(headStart, _4))\n    }\n    function panic_error_0x32()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x32)\n        revert(0, 0x24)\n    }\n    function increment_t_uint256(value) -> ret\n    {\n        if eq(value, not(0))\n        {\n            mstore(0, shl(224, 0x4e487b71))\n            mstore(4, 0x11)\n            revert(0, 0x24)\n        }\n        ret := add(value, 1)\n    }\n}",
      "id": 105,
      "language": "Yul",
      "name": "#utility.yul"
    }
  ],
  "deployedGeneratedSources": [
    {
      "ast": {
        "nodeType": "YulBlock",
        "src": "0:20362:105",
        "statements": [
          {
            "nodeType": "YulBlock",
            "src": "6:3:105",
            "statements": []
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "83:217:105",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "129:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "138:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "141:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "131:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "131:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "131:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "104:7:105"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "113:9:105"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "100:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "100:23:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "125:2:105",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "96:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "96:32:105"
                  },
                  "nodeType": "YulIf",
                  "src": "93:52:105"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "154:36:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "180:9:105"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "167:12:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "167:23:105"
                  },
                  "variables": [
                    {
                      "name": "value",
                      "nodeType": "YulTypedName",
                      "src": "158:5:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "254:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "263:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "266:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "256:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "256:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "256:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "value",
                            "nodeType": "YulIdentifier",
                            "src": "212:5:105"
                          },
                          {
                            "arguments": [
                              {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "223:5:105"
                              },
                              {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "234:3:105",
                                    "type": "",
                                    "value": "224"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "239:10:105",
                                    "type": "",
                                    "value": "0xffffffff"
                                  }
                                ],
                                "functionName": {
                                  "name": "shl",
                                  "nodeType": "YulIdentifier",
                                  "src": "230:3:105"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "230:20:105"
                              }
                            ],
                            "functionName": {
                              "name": "and",
                              "nodeType": "YulIdentifier",
                              "src": "219:3:105"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "219:32:105"
                          }
                        ],
                        "functionName": {
                          "name": "eq",
                          "nodeType": "YulIdentifier",
                          "src": "209:2:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "209:43:105"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "202:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "202:51:105"
                  },
                  "nodeType": "YulIf",
                  "src": "199:71:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "279:15:105",
                  "value": {
                    "name": "value",
                    "nodeType": "YulIdentifier",
                    "src": "289:5:105"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "279:6:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_bytes4",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "49:9:105",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "60:7:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "72:6:105",
                "type": ""
              }
            ],
            "src": "14:286:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "400:92:105",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "410:26:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "422:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "433:2:105",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "418:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "418:18:105"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "410:4:105"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "452:9:105"
                      },
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "value0",
                                "nodeType": "YulIdentifier",
                                "src": "477:6:105"
                              }
                            ],
                            "functionName": {
                              "name": "iszero",
                              "nodeType": "YulIdentifier",
                              "src": "470:6:105"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "470:14:105"
                          }
                        ],
                        "functionName": {
                          "name": "iszero",
                          "nodeType": "YulIdentifier",
                          "src": "463:6:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "463:22:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "445:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "445:41:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "445:41:105"
                }
              ]
            },
            "name": "abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "369:9:105",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "380:6:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "391:4:105",
                "type": ""
              }
            ],
            "src": "305:187:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "542:86:105",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "606:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "615:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "618:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "608:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "608:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "608:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "value",
                            "nodeType": "YulIdentifier",
                            "src": "565:5:105"
                          },
                          {
                            "arguments": [
                              {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "576:5:105"
                              },
                              {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "591:3:105",
                                        "type": "",
                                        "value": "160"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "596:1:105",
                                        "type": "",
                                        "value": "1"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "587:3:105"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "587:11:105"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "600:1:105",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "sub",
                                  "nodeType": "YulIdentifier",
                                  "src": "583:3:105"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "583:19:105"
                              }
                            ],
                            "functionName": {
                              "name": "and",
                              "nodeType": "YulIdentifier",
                              "src": "572:3:105"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "572:31:105"
                          }
                        ],
                        "functionName": {
                          "name": "eq",
                          "nodeType": "YulIdentifier",
                          "src": "562:2:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "562:42:105"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "555:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "555:50:105"
                  },
                  "nodeType": "YulIf",
                  "src": "552:70:105"
                }
              ]
            },
            "name": "validator_revert_address",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "531:5:105",
                "type": ""
              }
            ],
            "src": "497:131:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "682:85:105",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "692:29:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "offset",
                        "nodeType": "YulIdentifier",
                        "src": "714:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "701:12:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "701:20:105"
                  },
                  "variableNames": [
                    {
                      "name": "value",
                      "nodeType": "YulIdentifier",
                      "src": "692:5:105"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "755:5:105"
                      }
                    ],
                    "functionName": {
                      "name": "validator_revert_address",
                      "nodeType": "YulIdentifier",
                      "src": "730:24:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "730:31:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "730:31:105"
                }
              ]
            },
            "name": "abi_decode_address",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "offset",
                "nodeType": "YulTypedName",
                "src": "661:6:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "672:5:105",
                "type": ""
              }
            ],
            "src": "633:134:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "804:95:105",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "821:1:105",
                        "type": "",
                        "value": "0"
                      },
                      {
                        "arguments": [
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "828:3:105",
                            "type": "",
                            "value": "224"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "833:10:105",
                            "type": "",
                            "value": "0x4e487b71"
                          }
                        ],
                        "functionName": {
                          "name": "shl",
                          "nodeType": "YulIdentifier",
                          "src": "824:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "824:20:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "814:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "814:31:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "814:31:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "861:1:105",
                        "type": "",
                        "value": "4"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "864:4:105",
                        "type": "",
                        "value": "0x41"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "854:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "854:15:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "854:15:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "885:1:105",
                        "type": "",
                        "value": "0"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "888:4:105",
                        "type": "",
                        "value": "0x24"
                      }
                    ],
                    "functionName": {
                      "name": "revert",
                      "nodeType": "YulIdentifier",
                      "src": "878:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "878:15:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "878:15:105"
                }
              ]
            },
            "name": "panic_error_0x41",
            "nodeType": "YulFunctionDefinition",
            "src": "772:127:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "950:207:105",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "960:19:105",
                  "value": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "976:2:105",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nodeType": "YulIdentifier",
                      "src": "970:5:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "970:9:105"
                  },
                  "variableNames": [
                    {
                      "name": "memPtr",
                      "nodeType": "YulIdentifier",
                      "src": "960:6:105"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "988:35:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "memPtr",
                        "nodeType": "YulIdentifier",
                        "src": "1010:6:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "1018:4:105",
                        "type": "",
                        "value": "0xc0"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "1006:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1006:17:105"
                  },
                  "variables": [
                    {
                      "name": "newFreePtr",
                      "nodeType": "YulTypedName",
                      "src": "992:10:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "1098:22:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "functionName": {
                            "name": "panic_error_0x41",
                            "nodeType": "YulIdentifier",
                            "src": "1100:16:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "1100:18:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "1100:18:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "newFreePtr",
                            "nodeType": "YulIdentifier",
                            "src": "1041:10:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "1053:18:105",
                            "type": "",
                            "value": "0xffffffffffffffff"
                          }
                        ],
                        "functionName": {
                          "name": "gt",
                          "nodeType": "YulIdentifier",
                          "src": "1038:2:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1038:34:105"
                      },
                      {
                        "arguments": [
                          {
                            "name": "newFreePtr",
                            "nodeType": "YulIdentifier",
                            "src": "1077:10:105"
                          },
                          {
                            "name": "memPtr",
                            "nodeType": "YulIdentifier",
                            "src": "1089:6:105"
                          }
                        ],
                        "functionName": {
                          "name": "lt",
                          "nodeType": "YulIdentifier",
                          "src": "1074:2:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1074:22:105"
                      }
                    ],
                    "functionName": {
                      "name": "or",
                      "nodeType": "YulIdentifier",
                      "src": "1035:2:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1035:62:105"
                  },
                  "nodeType": "YulIf",
                  "src": "1032:88:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "1136:2:105",
                        "type": "",
                        "value": "64"
                      },
                      {
                        "name": "newFreePtr",
                        "nodeType": "YulIdentifier",
                        "src": "1140:10:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "1129:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1129:22:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "1129:22:105"
                }
              ]
            },
            "name": "allocate_memory_3302",
            "nodeType": "YulFunctionDefinition",
            "returnVariables": [
              {
                "name": "memPtr",
                "nodeType": "YulTypedName",
                "src": "939:6:105",
                "type": ""
              }
            ],
            "src": "904:253:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "1207:230:105",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "1217:19:105",
                  "value": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "1233:2:105",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nodeType": "YulIdentifier",
                      "src": "1227:5:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1227:9:105"
                  },
                  "variableNames": [
                    {
                      "name": "memPtr",
                      "nodeType": "YulIdentifier",
                      "src": "1217:6:105"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "1245:58:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "memPtr",
                        "nodeType": "YulIdentifier",
                        "src": "1267:6:105"
                      },
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "size",
                                "nodeType": "YulIdentifier",
                                "src": "1283:4:105"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "1289:2:105",
                                "type": "",
                                "value": "31"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "1279:3:105"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "1279:13:105"
                          },
                          {
                            "arguments": [
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "1298:2:105",
                                "type": "",
                                "value": "31"
                              }
                            ],
                            "functionName": {
                              "name": "not",
                              "nodeType": "YulIdentifier",
                              "src": "1294:3:105"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "1294:7:105"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "1275:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1275:27:105"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "1263:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1263:40:105"
                  },
                  "variables": [
                    {
                      "name": "newFreePtr",
                      "nodeType": "YulTypedName",
                      "src": "1249:10:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "1378:22:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "functionName": {
                            "name": "panic_error_0x41",
                            "nodeType": "YulIdentifier",
                            "src": "1380:16:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "1380:18:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "1380:18:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "newFreePtr",
                            "nodeType": "YulIdentifier",
                            "src": "1321:10:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "1333:18:105",
                            "type": "",
                            "value": "0xffffffffffffffff"
                          }
                        ],
                        "functionName": {
                          "name": "gt",
                          "nodeType": "YulIdentifier",
                          "src": "1318:2:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1318:34:105"
                      },
                      {
                        "arguments": [
                          {
                            "name": "newFreePtr",
                            "nodeType": "YulIdentifier",
                            "src": "1357:10:105"
                          },
                          {
                            "name": "memPtr",
                            "nodeType": "YulIdentifier",
                            "src": "1369:6:105"
                          }
                        ],
                        "functionName": {
                          "name": "lt",
                          "nodeType": "YulIdentifier",
                          "src": "1354:2:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1354:22:105"
                      }
                    ],
                    "functionName": {
                      "name": "or",
                      "nodeType": "YulIdentifier",
                      "src": "1315:2:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1315:62:105"
                  },
                  "nodeType": "YulIf",
                  "src": "1312:88:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "1416:2:105",
                        "type": "",
                        "value": "64"
                      },
                      {
                        "name": "newFreePtr",
                        "nodeType": "YulIdentifier",
                        "src": "1420:10:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "1409:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1409:22:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "1409:22:105"
                }
              ]
            },
            "name": "allocate_memory",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "size",
                "nodeType": "YulTypedName",
                "src": "1187:4:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "memPtr",
                "nodeType": "YulTypedName",
                "src": "1196:6:105",
                "type": ""
              }
            ],
            "src": "1162:275:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "1499:129:105",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "1543:22:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "functionName": {
                            "name": "panic_error_0x41",
                            "nodeType": "YulIdentifier",
                            "src": "1545:16:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "1545:18:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "1545:18:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "length",
                        "nodeType": "YulIdentifier",
                        "src": "1515:6:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "1523:18:105",
                        "type": "",
                        "value": "0xffffffffffffffff"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "1512:2:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1512:30:105"
                  },
                  "nodeType": "YulIf",
                  "src": "1509:56:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "1574:48:105",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "length",
                                "nodeType": "YulIdentifier",
                                "src": "1594:6:105"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "1602:2:105",
                                "type": "",
                                "value": "31"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "1590:3:105"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "1590:15:105"
                          },
                          {
                            "arguments": [
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "1611:2:105",
                                "type": "",
                                "value": "31"
                              }
                            ],
                            "functionName": {
                              "name": "not",
                              "nodeType": "YulIdentifier",
                              "src": "1607:3:105"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "1607:7:105"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "1586:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1586:29:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "1617:4:105",
                        "type": "",
                        "value": "0x20"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "1582:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1582:40:105"
                  },
                  "variableNames": [
                    {
                      "name": "size",
                      "nodeType": "YulIdentifier",
                      "src": "1574:4:105"
                    }
                  ]
                }
              ]
            },
            "name": "array_allocation_size_bytes",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "length",
                "nodeType": "YulTypedName",
                "src": "1479:6:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "size",
                "nodeType": "YulTypedName",
                "src": "1490:4:105",
                "type": ""
              }
            ],
            "src": "1442:186:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "1685:410:105",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "1734:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "1743:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "1746:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "1736:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "1736:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "1736:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "offset",
                                "nodeType": "YulIdentifier",
                                "src": "1713:6:105"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "1721:4:105",
                                "type": "",
                                "value": "0x1f"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "1709:3:105"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "1709:17:105"
                          },
                          {
                            "name": "end",
                            "nodeType": "YulIdentifier",
                            "src": "1728:3:105"
                          }
                        ],
                        "functionName": {
                          "name": "slt",
                          "nodeType": "YulIdentifier",
                          "src": "1705:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1705:27:105"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "1698:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1698:35:105"
                  },
                  "nodeType": "YulIf",
                  "src": "1695:55:105"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "1759:30:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "offset",
                        "nodeType": "YulIdentifier",
                        "src": "1782:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "1769:12:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1769:20:105"
                  },
                  "variables": [
                    {
                      "name": "_1",
                      "nodeType": "YulTypedName",
                      "src": "1763:2:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "1798:63:105",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "_1",
                            "nodeType": "YulIdentifier",
                            "src": "1857:2:105"
                          }
                        ],
                        "functionName": {
                          "name": "array_allocation_size_bytes",
                          "nodeType": "YulIdentifier",
                          "src": "1829:27:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1829:31:105"
                      }
                    ],
                    "functionName": {
                      "name": "allocate_memory",
                      "nodeType": "YulIdentifier",
                      "src": "1813:15:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1813:48:105"
                  },
                  "variables": [
                    {
                      "name": "array_1",
                      "nodeType": "YulTypedName",
                      "src": "1802:7:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "array_1",
                        "nodeType": "YulIdentifier",
                        "src": "1877:7:105"
                      },
                      {
                        "name": "_1",
                        "nodeType": "YulIdentifier",
                        "src": "1886:2:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "1870:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1870:19:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "1870:19:105"
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "1937:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "1946:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "1949:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "1939:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "1939:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "1939:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "offset",
                                "nodeType": "YulIdentifier",
                                "src": "1912:6:105"
                              },
                              {
                                "name": "_1",
                                "nodeType": "YulIdentifier",
                                "src": "1920:2:105"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "1908:3:105"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "1908:15:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "1925:4:105",
                            "type": "",
                            "value": "0x20"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "1904:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1904:26:105"
                      },
                      {
                        "name": "end",
                        "nodeType": "YulIdentifier",
                        "src": "1932:3:105"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "1901:2:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1901:35:105"
                  },
                  "nodeType": "YulIf",
                  "src": "1898:55:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "array_1",
                            "nodeType": "YulIdentifier",
                            "src": "1979:7:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "1988:4:105",
                            "type": "",
                            "value": "0x20"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "1975:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1975:18:105"
                      },
                      {
                        "arguments": [
                          {
                            "name": "offset",
                            "nodeType": "YulIdentifier",
                            "src": "1999:6:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "2007:4:105",
                            "type": "",
                            "value": "0x20"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "1995:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1995:17:105"
                      },
                      {
                        "name": "_1",
                        "nodeType": "YulIdentifier",
                        "src": "2014:2:105"
                      }
                    ],
                    "functionName": {
                      "name": "calldatacopy",
                      "nodeType": "YulIdentifier",
                      "src": "1962:12:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1962:55:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "1962:55:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "array_1",
                                "nodeType": "YulIdentifier",
                                "src": "2041:7:105"
                              },
                              {
                                "name": "_1",
                                "nodeType": "YulIdentifier",
                                "src": "2050:2:105"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "2037:3:105"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "2037:16:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "2055:4:105",
                            "type": "",
                            "value": "0x20"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "2033:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2033:27:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "2062:1:105",
                        "type": "",
                        "value": "0"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "2026:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2026:38:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "2026:38:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "2073:16:105",
                  "value": {
                    "name": "array_1",
                    "nodeType": "YulIdentifier",
                    "src": "2082:7:105"
                  },
                  "variableNames": [
                    {
                      "name": "array",
                      "nodeType": "YulIdentifier",
                      "src": "2073:5:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_bytes",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "offset",
                "nodeType": "YulTypedName",
                "src": "1659:6:105",
                "type": ""
              },
              {
                "name": "end",
                "nodeType": "YulTypedName",
                "src": "1667:3:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "array",
                "nodeType": "YulTypedName",
                "src": "1675:5:105",
                "type": ""
              }
            ],
            "src": "1633:462:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "2230:535:105",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "2277:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "2286:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "2289:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "2279:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "2279:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "2279:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "2251:7:105"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "2260:9:105"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "2247:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2247:23:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "2272:3:105",
                        "type": "",
                        "value": "128"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "2243:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2243:33:105"
                  },
                  "nodeType": "YulIf",
                  "src": "2240:53:105"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "2302:36:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "2328:9:105"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "2315:12:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2315:23:105"
                  },
                  "variables": [
                    {
                      "name": "value",
                      "nodeType": "YulTypedName",
                      "src": "2306:5:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "2372:5:105"
                      }
                    ],
                    "functionName": {
                      "name": "validator_revert_address",
                      "nodeType": "YulIdentifier",
                      "src": "2347:24:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2347:31:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "2347:31:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "2387:15:105",
                  "value": {
                    "name": "value",
                    "nodeType": "YulIdentifier",
                    "src": "2397:5:105"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "2387:6:105"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "2411:47:105",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "2443:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "2454:2:105",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "2439:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2439:18:105"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "2426:12:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2426:32:105"
                  },
                  "variables": [
                    {
                      "name": "value_1",
                      "nodeType": "YulTypedName",
                      "src": "2415:7:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value_1",
                        "nodeType": "YulIdentifier",
                        "src": "2492:7:105"
                      }
                    ],
                    "functionName": {
                      "name": "validator_revert_address",
                      "nodeType": "YulIdentifier",
                      "src": "2467:24:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2467:33:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "2467:33:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "2509:17:105",
                  "value": {
                    "name": "value_1",
                    "nodeType": "YulIdentifier",
                    "src": "2519:7:105"
                  },
                  "variableNames": [
                    {
                      "name": "value1",
                      "nodeType": "YulIdentifier",
                      "src": "2509:6:105"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "2535:42:105",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "2562:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "2573:2:105",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "2558:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2558:18:105"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "2545:12:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2545:32:105"
                  },
                  "variableNames": [
                    {
                      "name": "value2",
                      "nodeType": "YulIdentifier",
                      "src": "2535:6:105"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "2586:46:105",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "2617:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "2628:2:105",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "2613:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2613:18:105"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "2600:12:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2600:32:105"
                  },
                  "variables": [
                    {
                      "name": "offset",
                      "nodeType": "YulTypedName",
                      "src": "2590:6:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "2675:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "2684:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "2687:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "2677:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "2677:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "2677:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "offset",
                        "nodeType": "YulIdentifier",
                        "src": "2647:6:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "2655:18:105",
                        "type": "",
                        "value": "0xffffffffffffffff"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "2644:2:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2644:30:105"
                  },
                  "nodeType": "YulIf",
                  "src": "2641:50:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "2700:59:105",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "2731:9:105"
                          },
                          {
                            "name": "offset",
                            "nodeType": "YulIdentifier",
                            "src": "2742:6:105"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "2727:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2727:22:105"
                      },
                      {
                        "name": "dataEnd",
                        "nodeType": "YulIdentifier",
                        "src": "2751:7:105"
                      }
                    ],
                    "functionName": {
                      "name": "abi_decode_bytes",
                      "nodeType": "YulIdentifier",
                      "src": "2710:16:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2710:49:105"
                  },
                  "variableNames": [
                    {
                      "name": "value3",
                      "nodeType": "YulIdentifier",
                      "src": "2700:6:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_addresst_addresst_uint256t_bytes_memory_ptr",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "2172:9:105",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "2183:7:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "2195:6:105",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "2203:6:105",
                "type": ""
              },
              {
                "name": "value2",
                "nodeType": "YulTypedName",
                "src": "2211:6:105",
                "type": ""
              },
              {
                "name": "value3",
                "nodeType": "YulTypedName",
                "src": "2219:6:105",
                "type": ""
              }
            ],
            "src": "2100:665:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "2869:103:105",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "2879:26:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "2891:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "2902:2:105",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "2887:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2887:18:105"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "2879:4:105"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "2921:9:105"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value0",
                            "nodeType": "YulIdentifier",
                            "src": "2936:6:105"
                          },
                          {
                            "arguments": [
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "2948:3:105",
                                "type": "",
                                "value": "224"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "2953:10:105",
                                "type": "",
                                "value": "0xffffffff"
                              }
                            ],
                            "functionName": {
                              "name": "shl",
                              "nodeType": "YulIdentifier",
                              "src": "2944:3:105"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "2944:20:105"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "2932:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2932:33:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "2914:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2914:52:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "2914:52:105"
                }
              ]
            },
            "name": "abi_encode_tuple_t_bytes4__to_t_bytes4__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "2838:9:105",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "2849:6:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "2860:4:105",
                "type": ""
              }
            ],
            "src": "2770:202:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "3047:110:105",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "3093:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "3102:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "3105:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "3095:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "3095:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "3095:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "3068:7:105"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "3077:9:105"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "3064:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3064:23:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "3089:2:105",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "3060:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3060:32:105"
                  },
                  "nodeType": "YulIf",
                  "src": "3057:52:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "3118:33:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "3141:9:105"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "3128:12:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3128:23:105"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "3118:6:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_bytes32",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "3013:9:105",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "3024:7:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "3036:6:105",
                "type": ""
              }
            ],
            "src": "2977:180:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "3263:76:105",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "3273:26:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "3285:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "3296:2:105",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "3281:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3281:18:105"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "3273:4:105"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "3315:9:105"
                      },
                      {
                        "name": "value0",
                        "nodeType": "YulIdentifier",
                        "src": "3326:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "3308:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3308:25:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "3308:25:105"
                }
              ]
            },
            "name": "abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "3232:9:105",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "3243:6:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "3254:4:105",
                "type": ""
              }
            ],
            "src": "3162:177:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "3431:228:105",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "3477:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "3486:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "3489:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "3479:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "3479:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "3479:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "3452:7:105"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "3461:9:105"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "3448:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3448:23:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "3473:2:105",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "3444:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3444:32:105"
                  },
                  "nodeType": "YulIf",
                  "src": "3441:52:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "3502:33:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "3525:9:105"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "3512:12:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3512:23:105"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "3502:6:105"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "3544:45:105",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "3574:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "3585:2:105",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "3570:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3570:18:105"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "3557:12:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3557:32:105"
                  },
                  "variables": [
                    {
                      "name": "value",
                      "nodeType": "YulTypedName",
                      "src": "3548:5:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "3623:5:105"
                      }
                    ],
                    "functionName": {
                      "name": "validator_revert_address",
                      "nodeType": "YulIdentifier",
                      "src": "3598:24:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3598:31:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "3598:31:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "3638:15:105",
                  "value": {
                    "name": "value",
                    "nodeType": "YulIdentifier",
                    "src": "3648:5:105"
                  },
                  "variableNames": [
                    {
                      "name": "value1",
                      "nodeType": "YulIdentifier",
                      "src": "3638:6:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_bytes32t_address",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "3389:9:105",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "3400:7:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "3412:6:105",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "3420:6:105",
                "type": ""
              }
            ],
            "src": "3344:315:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "3751:301:105",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "3797:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "3806:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "3809:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "3799:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "3799:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "3799:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "3772:7:105"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "3781:9:105"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "3768:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3768:23:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "3793:2:105",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "3764:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3764:32:105"
                  },
                  "nodeType": "YulIf",
                  "src": "3761:52:105"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "3822:36:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "3848:9:105"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "3835:12:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3835:23:105"
                  },
                  "variables": [
                    {
                      "name": "value",
                      "nodeType": "YulTypedName",
                      "src": "3826:5:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "3892:5:105"
                      }
                    ],
                    "functionName": {
                      "name": "validator_revert_address",
                      "nodeType": "YulIdentifier",
                      "src": "3867:24:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3867:31:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "3867:31:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "3907:15:105",
                  "value": {
                    "name": "value",
                    "nodeType": "YulIdentifier",
                    "src": "3917:5:105"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "3907:6:105"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "3931:47:105",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "3963:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "3974:2:105",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "3959:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3959:18:105"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "3946:12:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3946:32:105"
                  },
                  "variables": [
                    {
                      "name": "value_1",
                      "nodeType": "YulTypedName",
                      "src": "3935:7:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value_1",
                        "nodeType": "YulIdentifier",
                        "src": "4012:7:105"
                      }
                    ],
                    "functionName": {
                      "name": "validator_revert_address",
                      "nodeType": "YulIdentifier",
                      "src": "3987:24:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3987:33:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "3987:33:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "4029:17:105",
                  "value": {
                    "name": "value_1",
                    "nodeType": "YulIdentifier",
                    "src": "4039:7:105"
                  },
                  "variableNames": [
                    {
                      "name": "value1",
                      "nodeType": "YulIdentifier",
                      "src": "4029:6:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_addresst_address",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "3709:9:105",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "3720:7:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "3732:6:105",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "3740:6:105",
                "type": ""
              }
            ],
            "src": "3664:388:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "4170:410:105",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "4216:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "4225:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "4228:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "4218:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "4218:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "4218:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "4191:7:105"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "4200:9:105"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "4187:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4187:23:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "4212:2:105",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "4183:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4183:32:105"
                  },
                  "nodeType": "YulIf",
                  "src": "4180:52:105"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "4241:36:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "4267:9:105"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "4254:12:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4254:23:105"
                  },
                  "variables": [
                    {
                      "name": "value",
                      "nodeType": "YulTypedName",
                      "src": "4245:5:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "4311:5:105"
                      }
                    ],
                    "functionName": {
                      "name": "validator_revert_address",
                      "nodeType": "YulIdentifier",
                      "src": "4286:24:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4286:31:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "4286:31:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "4326:15:105",
                  "value": {
                    "name": "value",
                    "nodeType": "YulIdentifier",
                    "src": "4336:5:105"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "4326:6:105"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "4350:42:105",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "4377:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "4388:2:105",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "4373:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4373:18:105"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "4360:12:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4360:32:105"
                  },
                  "variableNames": [
                    {
                      "name": "value1",
                      "nodeType": "YulIdentifier",
                      "src": "4350:6:105"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "4401:46:105",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "4432:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "4443:2:105",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "4428:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4428:18:105"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "4415:12:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4415:32:105"
                  },
                  "variables": [
                    {
                      "name": "offset",
                      "nodeType": "YulTypedName",
                      "src": "4405:6:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "4490:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "4499:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "4502:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "4492:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "4492:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "4492:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "offset",
                        "nodeType": "YulIdentifier",
                        "src": "4462:6:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "4470:18:105",
                        "type": "",
                        "value": "0xffffffffffffffff"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "4459:2:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4459:30:105"
                  },
                  "nodeType": "YulIf",
                  "src": "4456:50:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "4515:59:105",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "4546:9:105"
                          },
                          {
                            "name": "offset",
                            "nodeType": "YulIdentifier",
                            "src": "4557:6:105"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "4542:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4542:22:105"
                      },
                      {
                        "name": "dataEnd",
                        "nodeType": "YulIdentifier",
                        "src": "4566:7:105"
                      }
                    ],
                    "functionName": {
                      "name": "abi_decode_bytes",
                      "nodeType": "YulIdentifier",
                      "src": "4525:16:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4525:49:105"
                  },
                  "variableNames": [
                    {
                      "name": "value2",
                      "nodeType": "YulIdentifier",
                      "src": "4515:6:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_addresst_uint256t_bytes_memory_ptr",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "4120:9:105",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "4131:7:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "4143:6:105",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "4151:6:105",
                "type": ""
              },
              {
                "name": "value2",
                "nodeType": "YulTypedName",
                "src": "4159:6:105",
                "type": ""
              }
            ],
            "src": "4057:523:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "4686:76:105",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "4696:26:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "4708:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "4719:2:105",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "4704:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4704:18:105"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "4696:4:105"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "4738:9:105"
                      },
                      {
                        "name": "value0",
                        "nodeType": "YulIdentifier",
                        "src": "4749:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "4731:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4731:25:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "4731:25:105"
                }
              ]
            },
            "name": "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "4655:9:105",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "4666:6:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "4677:4:105",
                "type": ""
              }
            ],
            "src": "4585:177:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "4854:161:105",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "4900:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "4909:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "4912:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "4902:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "4902:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "4902:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "4875:7:105"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "4884:9:105"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "4871:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4871:23:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "4896:2:105",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "4867:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4867:32:105"
                  },
                  "nodeType": "YulIf",
                  "src": "4864:52:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "4925:33:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "4948:9:105"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "4935:12:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4935:23:105"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "4925:6:105"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "4967:42:105",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "4994:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "5005:2:105",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "4990:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4990:18:105"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "4977:12:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4977:32:105"
                  },
                  "variableNames": [
                    {
                      "name": "value1",
                      "nodeType": "YulIdentifier",
                      "src": "4967:6:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_bytes32t_uint256",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "4812:9:105",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "4823:7:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "4835:6:105",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "4843:6:105",
                "type": ""
              }
            ],
            "src": "4767:248:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "5121:102:105",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "5131:26:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "5143:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "5154:2:105",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "5139:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5139:18:105"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "5131:4:105"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "5173:9:105"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value0",
                            "nodeType": "YulIdentifier",
                            "src": "5188:6:105"
                          },
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5204:3:105",
                                    "type": "",
                                    "value": "160"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5209:1:105",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "shl",
                                  "nodeType": "YulIdentifier",
                                  "src": "5200:3:105"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5200:11:105"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "5213:1:105",
                                "type": "",
                                "value": "1"
                              }
                            ],
                            "functionName": {
                              "name": "sub",
                              "nodeType": "YulIdentifier",
                              "src": "5196:3:105"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "5196:19:105"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "5184:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "5184:32:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "5166:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5166:51:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "5166:51:105"
                }
              ]
            },
            "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "5090:9:105",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "5101:6:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "5112:4:105",
                "type": ""
              }
            ],
            "src": "5020:203:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "5297:114:105",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "5341:22:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "functionName": {
                            "name": "panic_error_0x41",
                            "nodeType": "YulIdentifier",
                            "src": "5343:16:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "5343:18:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "5343:18:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "length",
                        "nodeType": "YulIdentifier",
                        "src": "5313:6:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "5321:18:105",
                        "type": "",
                        "value": "0xffffffffffffffff"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "5310:2:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5310:30:105"
                  },
                  "nodeType": "YulIf",
                  "src": "5307:56:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "5372:33:105",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "5388:1:105",
                            "type": "",
                            "value": "5"
                          },
                          {
                            "name": "length",
                            "nodeType": "YulIdentifier",
                            "src": "5391:6:105"
                          }
                        ],
                        "functionName": {
                          "name": "shl",
                          "nodeType": "YulIdentifier",
                          "src": "5384:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "5384:14:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "5400:4:105",
                        "type": "",
                        "value": "0x20"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "5380:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5380:25:105"
                  },
                  "variableNames": [
                    {
                      "name": "size",
                      "nodeType": "YulIdentifier",
                      "src": "5372:4:105"
                    }
                  ]
                }
              ]
            },
            "name": "array_allocation_size_array_uint256_dyn",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "length",
                "nodeType": "YulTypedName",
                "src": "5277:6:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "size",
                "nodeType": "YulTypedName",
                "src": "5288:4:105",
                "type": ""
              }
            ],
            "src": "5228:183:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "5480:598:105",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "5529:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "5538:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "5541:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "5531:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "5531:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "5531:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "offset",
                                "nodeType": "YulIdentifier",
                                "src": "5508:6:105"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "5516:4:105",
                                "type": "",
                                "value": "0x1f"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "5504:3:105"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "5504:17:105"
                          },
                          {
                            "name": "end",
                            "nodeType": "YulIdentifier",
                            "src": "5523:3:105"
                          }
                        ],
                        "functionName": {
                          "name": "slt",
                          "nodeType": "YulIdentifier",
                          "src": "5500:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "5500:27:105"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "5493:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5493:35:105"
                  },
                  "nodeType": "YulIf",
                  "src": "5490:55:105"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "5554:30:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "offset",
                        "nodeType": "YulIdentifier",
                        "src": "5577:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "5564:12:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5564:20:105"
                  },
                  "variables": [
                    {
                      "name": "_1",
                      "nodeType": "YulTypedName",
                      "src": "5558:2:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "5593:14:105",
                  "value": {
                    "kind": "number",
                    "nodeType": "YulLiteral",
                    "src": "5603:4:105",
                    "type": "",
                    "value": "0x20"
                  },
                  "variables": [
                    {
                      "name": "_2",
                      "nodeType": "YulTypedName",
                      "src": "5597:2:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "5616:71:105",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "_1",
                            "nodeType": "YulIdentifier",
                            "src": "5683:2:105"
                          }
                        ],
                        "functionName": {
                          "name": "array_allocation_size_array_uint256_dyn",
                          "nodeType": "YulIdentifier",
                          "src": "5643:39:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "5643:43:105"
                      }
                    ],
                    "functionName": {
                      "name": "allocate_memory",
                      "nodeType": "YulIdentifier",
                      "src": "5627:15:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5627:60:105"
                  },
                  "variables": [
                    {
                      "name": "dst",
                      "nodeType": "YulTypedName",
                      "src": "5620:3:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "5696:16:105",
                  "value": {
                    "name": "dst",
                    "nodeType": "YulIdentifier",
                    "src": "5709:3:105"
                  },
                  "variables": [
                    {
                      "name": "dst_1",
                      "nodeType": "YulTypedName",
                      "src": "5700:5:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "dst",
                        "nodeType": "YulIdentifier",
                        "src": "5728:3:105"
                      },
                      {
                        "name": "_1",
                        "nodeType": "YulIdentifier",
                        "src": "5733:2:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "5721:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5721:15:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "5721:15:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "5745:19:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "dst",
                        "nodeType": "YulIdentifier",
                        "src": "5756:3:105"
                      },
                      {
                        "name": "_2",
                        "nodeType": "YulIdentifier",
                        "src": "5761:2:105"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "5752:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5752:12:105"
                  },
                  "variableNames": [
                    {
                      "name": "dst",
                      "nodeType": "YulIdentifier",
                      "src": "5745:3:105"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "5773:46:105",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "offset",
                            "nodeType": "YulIdentifier",
                            "src": "5795:6:105"
                          },
                          {
                            "arguments": [
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "5807:1:105",
                                "type": "",
                                "value": "5"
                              },
                              {
                                "name": "_1",
                                "nodeType": "YulIdentifier",
                                "src": "5810:2:105"
                              }
                            ],
                            "functionName": {
                              "name": "shl",
                              "nodeType": "YulIdentifier",
                              "src": "5803:3:105"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "5803:10:105"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "5791:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "5791:23:105"
                      },
                      {
                        "name": "_2",
                        "nodeType": "YulIdentifier",
                        "src": "5816:2:105"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "5787:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5787:32:105"
                  },
                  "variables": [
                    {
                      "name": "srcEnd",
                      "nodeType": "YulTypedName",
                      "src": "5777:6:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "5847:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "5856:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "5859:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "5849:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "5849:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "5849:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "srcEnd",
                        "nodeType": "YulIdentifier",
                        "src": "5834:6:105"
                      },
                      {
                        "name": "end",
                        "nodeType": "YulIdentifier",
                        "src": "5842:3:105"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "5831:2:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5831:15:105"
                  },
                  "nodeType": "YulIf",
                  "src": "5828:35:105"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "5872:26:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "offset",
                        "nodeType": "YulIdentifier",
                        "src": "5887:6:105"
                      },
                      {
                        "name": "_2",
                        "nodeType": "YulIdentifier",
                        "src": "5895:2:105"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "5883:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5883:15:105"
                  },
                  "variables": [
                    {
                      "name": "src",
                      "nodeType": "YulTypedName",
                      "src": "5876:3:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "5963:86:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "name": "dst",
                              "nodeType": "YulIdentifier",
                              "src": "5984:3:105"
                            },
                            {
                              "arguments": [
                                {
                                  "name": "src",
                                  "nodeType": "YulIdentifier",
                                  "src": "6002:3:105"
                                }
                              ],
                              "functionName": {
                                "name": "calldataload",
                                "nodeType": "YulIdentifier",
                                "src": "5989:12:105"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "5989:17:105"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "5977:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "5977:30:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "5977:30:105"
                      },
                      {
                        "nodeType": "YulAssignment",
                        "src": "6020:19:105",
                        "value": {
                          "arguments": [
                            {
                              "name": "dst",
                              "nodeType": "YulIdentifier",
                              "src": "6031:3:105"
                            },
                            {
                              "name": "_2",
                              "nodeType": "YulIdentifier",
                              "src": "6036:2:105"
                            }
                          ],
                          "functionName": {
                            "name": "add",
                            "nodeType": "YulIdentifier",
                            "src": "6027:3:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "6027:12:105"
                        },
                        "variableNames": [
                          {
                            "name": "dst",
                            "nodeType": "YulIdentifier",
                            "src": "6020:3:105"
                          }
                        ]
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "src",
                        "nodeType": "YulIdentifier",
                        "src": "5918:3:105"
                      },
                      {
                        "name": "srcEnd",
                        "nodeType": "YulIdentifier",
                        "src": "5923:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "lt",
                      "nodeType": "YulIdentifier",
                      "src": "5915:2:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5915:15:105"
                  },
                  "nodeType": "YulForLoop",
                  "post": {
                    "nodeType": "YulBlock",
                    "src": "5931:23:105",
                    "statements": [
                      {
                        "nodeType": "YulAssignment",
                        "src": "5933:19:105",
                        "value": {
                          "arguments": [
                            {
                              "name": "src",
                              "nodeType": "YulIdentifier",
                              "src": "5944:3:105"
                            },
                            {
                              "name": "_2",
                              "nodeType": "YulIdentifier",
                              "src": "5949:2:105"
                            }
                          ],
                          "functionName": {
                            "name": "add",
                            "nodeType": "YulIdentifier",
                            "src": "5940:3:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "5940:12:105"
                        },
                        "variableNames": [
                          {
                            "name": "src",
                            "nodeType": "YulIdentifier",
                            "src": "5933:3:105"
                          }
                        ]
                      }
                    ]
                  },
                  "pre": {
                    "nodeType": "YulBlock",
                    "src": "5911:3:105",
                    "statements": []
                  },
                  "src": "5907:142:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "6058:14:105",
                  "value": {
                    "name": "dst_1",
                    "nodeType": "YulIdentifier",
                    "src": "6067:5:105"
                  },
                  "variableNames": [
                    {
                      "name": "array",
                      "nodeType": "YulIdentifier",
                      "src": "6058:5:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_array_uint256_dyn",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "offset",
                "nodeType": "YulTypedName",
                "src": "5454:6:105",
                "type": ""
              },
              {
                "name": "end",
                "nodeType": "YulTypedName",
                "src": "5462:3:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "array",
                "nodeType": "YulTypedName",
                "src": "5470:5:105",
                "type": ""
              }
            ],
            "src": "5416:662:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "6280:874:105",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "6327:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "6336:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "6339:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "6329:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "6329:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "6329:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "6301:7:105"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "6310:9:105"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "6297:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "6297:23:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "6322:3:105",
                        "type": "",
                        "value": "160"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "6293:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6293:33:105"
                  },
                  "nodeType": "YulIf",
                  "src": "6290:53:105"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "6352:36:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "6378:9:105"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "6365:12:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6365:23:105"
                  },
                  "variables": [
                    {
                      "name": "value",
                      "nodeType": "YulTypedName",
                      "src": "6356:5:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "6422:5:105"
                      }
                    ],
                    "functionName": {
                      "name": "validator_revert_address",
                      "nodeType": "YulIdentifier",
                      "src": "6397:24:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6397:31:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "6397:31:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "6437:15:105",
                  "value": {
                    "name": "value",
                    "nodeType": "YulIdentifier",
                    "src": "6447:5:105"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "6437:6:105"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "6461:47:105",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "6493:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "6504:2:105",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "6489:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "6489:18:105"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "6476:12:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6476:32:105"
                  },
                  "variables": [
                    {
                      "name": "value_1",
                      "nodeType": "YulTypedName",
                      "src": "6465:7:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value_1",
                        "nodeType": "YulIdentifier",
                        "src": "6542:7:105"
                      }
                    ],
                    "functionName": {
                      "name": "validator_revert_address",
                      "nodeType": "YulIdentifier",
                      "src": "6517:24:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6517:33:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "6517:33:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "6559:17:105",
                  "value": {
                    "name": "value_1",
                    "nodeType": "YulIdentifier",
                    "src": "6569:7:105"
                  },
                  "variableNames": [
                    {
                      "name": "value1",
                      "nodeType": "YulIdentifier",
                      "src": "6559:6:105"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "6585:46:105",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "6616:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "6627:2:105",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "6612:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "6612:18:105"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "6599:12:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6599:32:105"
                  },
                  "variables": [
                    {
                      "name": "offset",
                      "nodeType": "YulTypedName",
                      "src": "6589:6:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "6640:28:105",
                  "value": {
                    "kind": "number",
                    "nodeType": "YulLiteral",
                    "src": "6650:18:105",
                    "type": "",
                    "value": "0xffffffffffffffff"
                  },
                  "variables": [
                    {
                      "name": "_1",
                      "nodeType": "YulTypedName",
                      "src": "6644:2:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "6695:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "6704:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "6707:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "6697:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "6697:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "6697:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "offset",
                        "nodeType": "YulIdentifier",
                        "src": "6683:6:105"
                      },
                      {
                        "name": "_1",
                        "nodeType": "YulIdentifier",
                        "src": "6691:2:105"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "6680:2:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6680:14:105"
                  },
                  "nodeType": "YulIf",
                  "src": "6677:34:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "6720:71:105",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "6763:9:105"
                          },
                          {
                            "name": "offset",
                            "nodeType": "YulIdentifier",
                            "src": "6774:6:105"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "6759:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "6759:22:105"
                      },
                      {
                        "name": "dataEnd",
                        "nodeType": "YulIdentifier",
                        "src": "6783:7:105"
                      }
                    ],
                    "functionName": {
                      "name": "abi_decode_array_uint256_dyn",
                      "nodeType": "YulIdentifier",
                      "src": "6730:28:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6730:61:105"
                  },
                  "variableNames": [
                    {
                      "name": "value2",
                      "nodeType": "YulIdentifier",
                      "src": "6720:6:105"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "6800:48:105",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "6833:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "6844:2:105",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "6829:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "6829:18:105"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "6816:12:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6816:32:105"
                  },
                  "variables": [
                    {
                      "name": "offset_1",
                      "nodeType": "YulTypedName",
                      "src": "6804:8:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "6877:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "6886:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "6889:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "6879:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "6879:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "6879:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "offset_1",
                        "nodeType": "YulIdentifier",
                        "src": "6863:8:105"
                      },
                      {
                        "name": "_1",
                        "nodeType": "YulIdentifier",
                        "src": "6873:2:105"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "6860:2:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6860:16:105"
                  },
                  "nodeType": "YulIf",
                  "src": "6857:36:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "6902:73:105",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "6945:9:105"
                          },
                          {
                            "name": "offset_1",
                            "nodeType": "YulIdentifier",
                            "src": "6956:8:105"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "6941:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "6941:24:105"
                      },
                      {
                        "name": "dataEnd",
                        "nodeType": "YulIdentifier",
                        "src": "6967:7:105"
                      }
                    ],
                    "functionName": {
                      "name": "abi_decode_array_uint256_dyn",
                      "nodeType": "YulIdentifier",
                      "src": "6912:28:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6912:63:105"
                  },
                  "variableNames": [
                    {
                      "name": "value3",
                      "nodeType": "YulIdentifier",
                      "src": "6902:6:105"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "6984:49:105",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "7017:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "7028:3:105",
                            "type": "",
                            "value": "128"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "7013:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "7013:19:105"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "7000:12:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7000:33:105"
                  },
                  "variables": [
                    {
                      "name": "offset_2",
                      "nodeType": "YulTypedName",
                      "src": "6988:8:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "7062:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "7071:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "7074:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "7064:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "7064:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "7064:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "offset_2",
                        "nodeType": "YulIdentifier",
                        "src": "7048:8:105"
                      },
                      {
                        "name": "_1",
                        "nodeType": "YulIdentifier",
                        "src": "7058:2:105"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "7045:2:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7045:16:105"
                  },
                  "nodeType": "YulIf",
                  "src": "7042:36:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "7087:61:105",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "7118:9:105"
                          },
                          {
                            "name": "offset_2",
                            "nodeType": "YulIdentifier",
                            "src": "7129:8:105"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "7114:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "7114:24:105"
                      },
                      {
                        "name": "dataEnd",
                        "nodeType": "YulIdentifier",
                        "src": "7140:7:105"
                      }
                    ],
                    "functionName": {
                      "name": "abi_decode_bytes",
                      "nodeType": "YulIdentifier",
                      "src": "7097:16:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7097:51:105"
                  },
                  "variableNames": [
                    {
                      "name": "value4",
                      "nodeType": "YulIdentifier",
                      "src": "7087:6:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_addresst_addresst_array$_t_uint256_$dyn_memory_ptrt_array$_t_uint256_$dyn_memory_ptrt_bytes_memory_ptr",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "6214:9:105",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "6225:7:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "6237:6:105",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "6245:6:105",
                "type": ""
              },
              {
                "name": "value2",
                "nodeType": "YulTypedName",
                "src": "6253:6:105",
                "type": ""
              },
              {
                "name": "value3",
                "nodeType": "YulTypedName",
                "src": "6261:6:105",
                "type": ""
              },
              {
                "name": "value4",
                "nodeType": "YulTypedName",
                "src": "6269:6:105",
                "type": ""
              }
            ],
            "src": "6083:1071:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "7338:2057:105",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "7385:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "7394:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "7397:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "7387:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "7387:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "7387:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "7359:7:105"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "7368:9:105"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "7355:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "7355:23:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "7380:3:105",
                        "type": "",
                        "value": "128"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "7351:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7351:33:105"
                  },
                  "nodeType": "YulIf",
                  "src": "7348:53:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "7448:9:105"
                          }
                        ],
                        "functionName": {
                          "name": "calldataload",
                          "nodeType": "YulIdentifier",
                          "src": "7435:12:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "7435:23:105"
                      }
                    ],
                    "functionName": {
                      "name": "validator_revert_address",
                      "nodeType": "YulIdentifier",
                      "src": "7410:24:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7410:49:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "7410:49:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "7468:33:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "7491:9:105"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "7478:12:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7478:23:105"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "7468:6:105"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "7510:45:105",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "7540:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "7551:2:105",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "7536:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "7536:18:105"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "7523:12:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7523:32:105"
                  },
                  "variables": [
                    {
                      "name": "value",
                      "nodeType": "YulTypedName",
                      "src": "7514:5:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "7589:5:105"
                      }
                    ],
                    "functionName": {
                      "name": "validator_revert_address",
                      "nodeType": "YulIdentifier",
                      "src": "7564:24:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7564:31:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "7564:31:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "7604:15:105",
                  "value": {
                    "name": "value",
                    "nodeType": "YulIdentifier",
                    "src": "7614:5:105"
                  },
                  "variableNames": [
                    {
                      "name": "value1",
                      "nodeType": "YulIdentifier",
                      "src": "7604:6:105"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "7628:42:105",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "7655:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "7666:2:105",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "7651:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "7651:18:105"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "7638:12:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7638:32:105"
                  },
                  "variableNames": [
                    {
                      "name": "value2",
                      "nodeType": "YulIdentifier",
                      "src": "7628:6:105"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "7679:46:105",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "7710:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "7721:2:105",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "7706:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "7706:18:105"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "7693:12:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7693:32:105"
                  },
                  "variables": [
                    {
                      "name": "offset",
                      "nodeType": "YulTypedName",
                      "src": "7683:6:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "7734:28:105",
                  "value": {
                    "kind": "number",
                    "nodeType": "YulLiteral",
                    "src": "7744:18:105",
                    "type": "",
                    "value": "0xffffffffffffffff"
                  },
                  "variables": [
                    {
                      "name": "_1",
                      "nodeType": "YulTypedName",
                      "src": "7738:2:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "7789:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "7798:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "7801:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "7791:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "7791:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "7791:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "offset",
                        "nodeType": "YulIdentifier",
                        "src": "7777:6:105"
                      },
                      {
                        "name": "_1",
                        "nodeType": "YulIdentifier",
                        "src": "7785:2:105"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "7774:2:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7774:14:105"
                  },
                  "nodeType": "YulIf",
                  "src": "7771:34:105"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "7814:32:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "7828:9:105"
                      },
                      {
                        "name": "offset",
                        "nodeType": "YulIdentifier",
                        "src": "7839:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "7824:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7824:22:105"
                  },
                  "variables": [
                    {
                      "name": "_2",
                      "nodeType": "YulTypedName",
                      "src": "7818:2:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "7894:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "7903:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "7906:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "7896:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "7896:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "7896:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "_2",
                                "nodeType": "YulIdentifier",
                                "src": "7873:2:105"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "7877:4:105",
                                "type": "",
                                "value": "0x1f"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "7869:3:105"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "7869:13:105"
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "7884:7:105"
                          }
                        ],
                        "functionName": {
                          "name": "slt",
                          "nodeType": "YulIdentifier",
                          "src": "7865:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "7865:27:105"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "7858:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7858:35:105"
                  },
                  "nodeType": "YulIf",
                  "src": "7855:55:105"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "7919:26:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "_2",
                        "nodeType": "YulIdentifier",
                        "src": "7942:2:105"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "7929:12:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7929:16:105"
                  },
                  "variables": [
                    {
                      "name": "_3",
                      "nodeType": "YulTypedName",
                      "src": "7923:2:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "7954:71:105",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "_3",
                            "nodeType": "YulIdentifier",
                            "src": "8021:2:105"
                          }
                        ],
                        "functionName": {
                          "name": "array_allocation_size_array_uint256_dyn",
                          "nodeType": "YulIdentifier",
                          "src": "7981:39:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "7981:43:105"
                      }
                    ],
                    "functionName": {
                      "name": "allocate_memory",
                      "nodeType": "YulIdentifier",
                      "src": "7965:15:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7965:60:105"
                  },
                  "variables": [
                    {
                      "name": "dst",
                      "nodeType": "YulTypedName",
                      "src": "7958:3:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "8034:16:105",
                  "value": {
                    "name": "dst",
                    "nodeType": "YulIdentifier",
                    "src": "8047:3:105"
                  },
                  "variables": [
                    {
                      "name": "dst_1",
                      "nodeType": "YulTypedName",
                      "src": "8038:5:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "dst",
                        "nodeType": "YulIdentifier",
                        "src": "8066:3:105"
                      },
                      {
                        "name": "_3",
                        "nodeType": "YulIdentifier",
                        "src": "8071:2:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "8059:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8059:15:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "8059:15:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "8083:19:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "dst",
                        "nodeType": "YulIdentifier",
                        "src": "8094:3:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "8099:2:105",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "8090:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8090:12:105"
                  },
                  "variableNames": [
                    {
                      "name": "dst",
                      "nodeType": "YulIdentifier",
                      "src": "8083:3:105"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "8111:42:105",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "_2",
                            "nodeType": "YulIdentifier",
                            "src": "8133:2:105"
                          },
                          {
                            "arguments": [
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "8141:1:105",
                                "type": "",
                                "value": "5"
                              },
                              {
                                "name": "_3",
                                "nodeType": "YulIdentifier",
                                "src": "8144:2:105"
                              }
                            ],
                            "functionName": {
                              "name": "shl",
                              "nodeType": "YulIdentifier",
                              "src": "8137:3:105"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "8137:10:105"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "8129:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "8129:19:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "8150:2:105",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "8125:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8125:28:105"
                  },
                  "variables": [
                    {
                      "name": "srcEnd",
                      "nodeType": "YulTypedName",
                      "src": "8115:6:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "8185:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "8194:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "8197:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "8187:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "8187:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "8187:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "srcEnd",
                        "nodeType": "YulIdentifier",
                        "src": "8168:6:105"
                      },
                      {
                        "name": "dataEnd",
                        "nodeType": "YulIdentifier",
                        "src": "8176:7:105"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "8165:2:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8165:19:105"
                  },
                  "nodeType": "YulIf",
                  "src": "8162:39:105"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "8210:22:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "_2",
                        "nodeType": "YulIdentifier",
                        "src": "8225:2:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "8229:2:105",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "8221:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8221:11:105"
                  },
                  "variables": [
                    {
                      "name": "src",
                      "nodeType": "YulTypedName",
                      "src": "8214:3:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "8297:1068:105",
                    "statements": [
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "8340:16:105",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "8349:1:105",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "8352:1:105",
                                    "type": "",
                                    "value": "0"
                                  }
                                ],
                                "functionName": {
                                  "name": "revert",
                                  "nodeType": "YulIdentifier",
                                  "src": "8342:6:105"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8342:12:105"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "8342:12:105"
                            }
                          ]
                        },
                        "condition": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "name": "src",
                                  "nodeType": "YulIdentifier",
                                  "src": "8330:3:105"
                                }
                              ],
                              "functionName": {
                                "name": "calldataload",
                                "nodeType": "YulIdentifier",
                                "src": "8317:12:105"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "8317:17:105"
                            },
                            {
                              "name": "_1",
                              "nodeType": "YulIdentifier",
                              "src": "8336:2:105"
                            }
                          ],
                          "functionName": {
                            "name": "gt",
                            "nodeType": "YulIdentifier",
                            "src": "8314:2:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "8314:25:105"
                        },
                        "nodeType": "YulIf",
                        "src": "8311:45:105"
                      },
                      {
                        "nodeType": "YulVariableDeclaration",
                        "src": "8369:36:105",
                        "value": {
                          "arguments": [
                            {
                              "name": "_2",
                              "nodeType": "YulIdentifier",
                              "src": "8383:2:105"
                            },
                            {
                              "arguments": [
                                {
                                  "name": "src",
                                  "nodeType": "YulIdentifier",
                                  "src": "8400:3:105"
                                }
                              ],
                              "functionName": {
                                "name": "calldataload",
                                "nodeType": "YulIdentifier",
                                "src": "8387:12:105"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "8387:17:105"
                            }
                          ],
                          "functionName": {
                            "name": "add",
                            "nodeType": "YulIdentifier",
                            "src": "8379:3:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "8379:26:105"
                        },
                        "variables": [
                          {
                            "name": "_4",
                            "nodeType": "YulTypedName",
                            "src": "8373:2:105",
                            "type": ""
                          }
                        ]
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "8463:16:105",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "8472:1:105",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "8475:1:105",
                                    "type": "",
                                    "value": "0"
                                  }
                                ],
                                "functionName": {
                                  "name": "revert",
                                  "nodeType": "YulIdentifier",
                                  "src": "8465:6:105"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8465:12:105"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "8465:12:105"
                            }
                          ]
                        },
                        "condition": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "name": "dataEnd",
                                      "nodeType": "YulIdentifier",
                                      "src": "8433:7:105"
                                    },
                                    {
                                      "name": "_4",
                                      "nodeType": "YulIdentifier",
                                      "src": "8442:2:105"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "sub",
                                    "nodeType": "YulIdentifier",
                                    "src": "8429:3:105"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "8429:16:105"
                                },
                                {
                                  "arguments": [
                                    {
                                      "kind": "number",
                                      "nodeType": "YulLiteral",
                                      "src": "8451:2:105",
                                      "type": "",
                                      "value": "31"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "not",
                                    "nodeType": "YulIdentifier",
                                    "src": "8447:3:105"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "8447:7:105"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nodeType": "YulIdentifier",
                                "src": "8425:3:105"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "8425:30:105"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "8457:4:105",
                              "type": "",
                              "value": "0xc0"
                            }
                          ],
                          "functionName": {
                            "name": "slt",
                            "nodeType": "YulIdentifier",
                            "src": "8421:3:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "8421:41:105"
                        },
                        "nodeType": "YulIf",
                        "src": "8418:61:105"
                      },
                      {
                        "nodeType": "YulVariableDeclaration",
                        "src": "8492:37:105",
                        "value": {
                          "arguments": [],
                          "functionName": {
                            "name": "allocate_memory_3302",
                            "nodeType": "YulIdentifier",
                            "src": "8507:20:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "8507:22:105"
                        },
                        "variables": [
                          {
                            "name": "value_1",
                            "nodeType": "YulTypedName",
                            "src": "8496:7:105",
                            "type": ""
                          }
                        ]
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "name": "value_1",
                              "nodeType": "YulIdentifier",
                              "src": "8549:7:105"
                            },
                            {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "name": "_4",
                                      "nodeType": "YulIdentifier",
                                      "src": "8575:2:105"
                                    },
                                    {
                                      "kind": "number",
                                      "nodeType": "YulLiteral",
                                      "src": "8579:2:105",
                                      "type": "",
                                      "value": "32"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "add",
                                    "nodeType": "YulIdentifier",
                                    "src": "8571:3:105"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "8571:11:105"
                                }
                              ],
                              "functionName": {
                                "name": "calldataload",
                                "nodeType": "YulIdentifier",
                                "src": "8558:12:105"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "8558:25:105"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "8542:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "8542:42:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "8542:42:105"
                      },
                      {
                        "nodeType": "YulVariableDeclaration",
                        "src": "8597:40:105",
                        "value": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "name": "_4",
                                  "nodeType": "YulIdentifier",
                                  "src": "8629:2:105"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "8633:2:105",
                                  "type": "",
                                  "value": "64"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nodeType": "YulIdentifier",
                                "src": "8625:3:105"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "8625:11:105"
                            }
                          ],
                          "functionName": {
                            "name": "calldataload",
                            "nodeType": "YulIdentifier",
                            "src": "8612:12:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "8612:25:105"
                        },
                        "variables": [
                          {
                            "name": "value_2",
                            "nodeType": "YulTypedName",
                            "src": "8601:7:105",
                            "type": ""
                          }
                        ]
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "name": "value_2",
                              "nodeType": "YulIdentifier",
                              "src": "8675:7:105"
                            }
                          ],
                          "functionName": {
                            "name": "validator_revert_address",
                            "nodeType": "YulIdentifier",
                            "src": "8650:24:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "8650:33:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "8650:33:105"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "name": "value_1",
                                  "nodeType": "YulIdentifier",
                                  "src": "8707:7:105"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "8716:2:105",
                                  "type": "",
                                  "value": "32"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nodeType": "YulIdentifier",
                                "src": "8703:3:105"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "8703:16:105"
                            },
                            {
                              "name": "value_2",
                              "nodeType": "YulIdentifier",
                              "src": "8721:7:105"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "8696:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "8696:33:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "8696:33:105"
                      },
                      {
                        "nodeType": "YulVariableDeclaration",
                        "src": "8742:40:105",
                        "value": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "name": "_4",
                                  "nodeType": "YulIdentifier",
                                  "src": "8774:2:105"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "8778:2:105",
                                  "type": "",
                                  "value": "96"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nodeType": "YulIdentifier",
                                "src": "8770:3:105"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "8770:11:105"
                            }
                          ],
                          "functionName": {
                            "name": "calldataload",
                            "nodeType": "YulIdentifier",
                            "src": "8757:12:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "8757:25:105"
                        },
                        "variables": [
                          {
                            "name": "value_3",
                            "nodeType": "YulTypedName",
                            "src": "8746:7:105",
                            "type": ""
                          }
                        ]
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "name": "value_3",
                              "nodeType": "YulIdentifier",
                              "src": "8820:7:105"
                            }
                          ],
                          "functionName": {
                            "name": "validator_revert_address",
                            "nodeType": "YulIdentifier",
                            "src": "8795:24:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "8795:33:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "8795:33:105"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "name": "value_1",
                                  "nodeType": "YulIdentifier",
                                  "src": "8852:7:105"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "8861:2:105",
                                  "type": "",
                                  "value": "64"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nodeType": "YulIdentifier",
                                "src": "8848:3:105"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "8848:16:105"
                            },
                            {
                              "name": "value_3",
                              "nodeType": "YulIdentifier",
                              "src": "8866:7:105"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "8841:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "8841:33:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "8841:33:105"
                      },
                      {
                        "nodeType": "YulVariableDeclaration",
                        "src": "8887:41:105",
                        "value": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "name": "_4",
                                  "nodeType": "YulIdentifier",
                                  "src": "8919:2:105"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "8923:3:105",
                                  "type": "",
                                  "value": "128"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nodeType": "YulIdentifier",
                                "src": "8915:3:105"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "8915:12:105"
                            }
                          ],
                          "functionName": {
                            "name": "calldataload",
                            "nodeType": "YulIdentifier",
                            "src": "8902:12:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "8902:26:105"
                        },
                        "variables": [
                          {
                            "name": "value_4",
                            "nodeType": "YulTypedName",
                            "src": "8891:7:105",
                            "type": ""
                          }
                        ]
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "name": "value_4",
                              "nodeType": "YulIdentifier",
                              "src": "8966:7:105"
                            }
                          ],
                          "functionName": {
                            "name": "validator_revert_address",
                            "nodeType": "YulIdentifier",
                            "src": "8941:24:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "8941:33:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "8941:33:105"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "name": "value_1",
                                  "nodeType": "YulIdentifier",
                                  "src": "8998:7:105"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "9007:2:105",
                                  "type": "",
                                  "value": "96"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nodeType": "YulIdentifier",
                                "src": "8994:3:105"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "8994:16:105"
                            },
                            {
                              "name": "value_4",
                              "nodeType": "YulIdentifier",
                              "src": "9012:7:105"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "8987:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "8987:33:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "8987:33:105"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "name": "value_1",
                                  "nodeType": "YulIdentifier",
                                  "src": "9044:7:105"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "9053:3:105",
                                  "type": "",
                                  "value": "128"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nodeType": "YulIdentifier",
                                "src": "9040:3:105"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "9040:17:105"
                            },
                            {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "name": "_4",
                                      "nodeType": "YulIdentifier",
                                      "src": "9082:2:105"
                                    },
                                    {
                                      "kind": "number",
                                      "nodeType": "YulLiteral",
                                      "src": "9086:3:105",
                                      "type": "",
                                      "value": "160"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "add",
                                    "nodeType": "YulIdentifier",
                                    "src": "9078:3:105"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "9078:12:105"
                                }
                              ],
                              "functionName": {
                                "name": "abi_decode_address",
                                "nodeType": "YulIdentifier",
                                "src": "9059:18:105"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "9059:32:105"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "9033:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "9033:59:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "9033:59:105"
                      },
                      {
                        "nodeType": "YulVariableDeclaration",
                        "src": "9105:43:105",
                        "value": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "name": "_4",
                                  "nodeType": "YulIdentifier",
                                  "src": "9138:2:105"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "9142:4:105",
                                  "type": "",
                                  "value": "0xc0"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nodeType": "YulIdentifier",
                                "src": "9134:3:105"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "9134:13:105"
                            }
                          ],
                          "functionName": {
                            "name": "calldataload",
                            "nodeType": "YulIdentifier",
                            "src": "9121:12:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "9121:27:105"
                        },
                        "variables": [
                          {
                            "name": "offset_1",
                            "nodeType": "YulTypedName",
                            "src": "9109:8:105",
                            "type": ""
                          }
                        ]
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "9181:16:105",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "9190:1:105",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "9193:1:105",
                                    "type": "",
                                    "value": "0"
                                  }
                                ],
                                "functionName": {
                                  "name": "revert",
                                  "nodeType": "YulIdentifier",
                                  "src": "9183:6:105"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9183:12:105"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "9183:12:105"
                            }
                          ]
                        },
                        "condition": {
                          "arguments": [
                            {
                              "name": "offset_1",
                              "nodeType": "YulIdentifier",
                              "src": "9167:8:105"
                            },
                            {
                              "name": "_1",
                              "nodeType": "YulIdentifier",
                              "src": "9177:2:105"
                            }
                          ],
                          "functionName": {
                            "name": "gt",
                            "nodeType": "YulIdentifier",
                            "src": "9164:2:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "9164:16:105"
                        },
                        "nodeType": "YulIf",
                        "src": "9161:36:105"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "name": "value_1",
                                  "nodeType": "YulIdentifier",
                                  "src": "9221:7:105"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "9230:3:105",
                                  "type": "",
                                  "value": "160"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nodeType": "YulIdentifier",
                                "src": "9217:3:105"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "9217:17:105"
                            },
                            {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "arguments": [
                                        {
                                          "name": "_4",
                                          "nodeType": "YulIdentifier",
                                          "src": "9261:2:105"
                                        },
                                        {
                                          "name": "offset_1",
                                          "nodeType": "YulIdentifier",
                                          "src": "9265:8:105"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "9257:3:105"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "9257:17:105"
                                    },
                                    {
                                      "kind": "number",
                                      "nodeType": "YulLiteral",
                                      "src": "9276:2:105",
                                      "type": "",
                                      "value": "32"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "add",
                                    "nodeType": "YulIdentifier",
                                    "src": "9253:3:105"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "9253:26:105"
                                },
                                {
                                  "name": "dataEnd",
                                  "nodeType": "YulIdentifier",
                                  "src": "9281:7:105"
                                }
                              ],
                              "functionName": {
                                "name": "abi_decode_bytes",
                                "nodeType": "YulIdentifier",
                                "src": "9236:16:105"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "9236:53:105"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "9210:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "9210:80:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "9210:80:105"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "name": "dst",
                              "nodeType": "YulIdentifier",
                              "src": "9310:3:105"
                            },
                            {
                              "name": "value_1",
                              "nodeType": "YulIdentifier",
                              "src": "9315:7:105"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "9303:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "9303:20:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "9303:20:105"
                      },
                      {
                        "nodeType": "YulAssignment",
                        "src": "9336:19:105",
                        "value": {
                          "arguments": [
                            {
                              "name": "dst",
                              "nodeType": "YulIdentifier",
                              "src": "9347:3:105"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "9352:2:105",
                              "type": "",
                              "value": "32"
                            }
                          ],
                          "functionName": {
                            "name": "add",
                            "nodeType": "YulIdentifier",
                            "src": "9343:3:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "9343:12:105"
                        },
                        "variableNames": [
                          {
                            "name": "dst",
                            "nodeType": "YulIdentifier",
                            "src": "9336:3:105"
                          }
                        ]
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "src",
                        "nodeType": "YulIdentifier",
                        "src": "8252:3:105"
                      },
                      {
                        "name": "srcEnd",
                        "nodeType": "YulIdentifier",
                        "src": "8257:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "lt",
                      "nodeType": "YulIdentifier",
                      "src": "8249:2:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8249:15:105"
                  },
                  "nodeType": "YulForLoop",
                  "post": {
                    "nodeType": "YulBlock",
                    "src": "8265:23:105",
                    "statements": [
                      {
                        "nodeType": "YulAssignment",
                        "src": "8267:19:105",
                        "value": {
                          "arguments": [
                            {
                              "name": "src",
                              "nodeType": "YulIdentifier",
                              "src": "8278:3:105"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "8283:2:105",
                              "type": "",
                              "value": "32"
                            }
                          ],
                          "functionName": {
                            "name": "add",
                            "nodeType": "YulIdentifier",
                            "src": "8274:3:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "8274:12:105"
                        },
                        "variableNames": [
                          {
                            "name": "src",
                            "nodeType": "YulIdentifier",
                            "src": "8267:3:105"
                          }
                        ]
                      }
                    ]
                  },
                  "pre": {
                    "nodeType": "YulBlock",
                    "src": "8245:3:105",
                    "statements": []
                  },
                  "src": "8241:1124:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "9374:15:105",
                  "value": {
                    "name": "dst_1",
                    "nodeType": "YulIdentifier",
                    "src": "9384:5:105"
                  },
                  "variableNames": [
                    {
                      "name": "value3",
                      "nodeType": "YulIdentifier",
                      "src": "9374:6:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_addresst_address_payablet_uint256t_array$_t_struct$_Action_$12721_memory_ptr_$dyn_memory_ptr",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "7280:9:105",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "7291:7:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "7303:6:105",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "7311:6:105",
                "type": ""
              },
              {
                "name": "value2",
                "nodeType": "YulTypedName",
                "src": "7319:6:105",
                "type": ""
              },
              {
                "name": "value3",
                "nodeType": "YulTypedName",
                "src": "7327:6:105",
                "type": ""
              }
            ],
            "src": "7159:2236:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "9547:587:105",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "9594:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "9603:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "9606:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "9596:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "9596:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "9596:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "9568:7:105"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "9577:9:105"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "9564:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "9564:23:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "9589:3:105",
                        "type": "",
                        "value": "160"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "9560:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9560:33:105"
                  },
                  "nodeType": "YulIf",
                  "src": "9557:53:105"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "9619:36:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "9645:9:105"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "9632:12:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9632:23:105"
                  },
                  "variables": [
                    {
                      "name": "value",
                      "nodeType": "YulTypedName",
                      "src": "9623:5:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "9689:5:105"
                      }
                    ],
                    "functionName": {
                      "name": "validator_revert_address",
                      "nodeType": "YulIdentifier",
                      "src": "9664:24:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9664:31:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "9664:31:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "9704:15:105",
                  "value": {
                    "name": "value",
                    "nodeType": "YulIdentifier",
                    "src": "9714:5:105"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "9704:6:105"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "9728:47:105",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "9760:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "9771:2:105",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "9756:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "9756:18:105"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "9743:12:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9743:32:105"
                  },
                  "variables": [
                    {
                      "name": "value_1",
                      "nodeType": "YulTypedName",
                      "src": "9732:7:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value_1",
                        "nodeType": "YulIdentifier",
                        "src": "9809:7:105"
                      }
                    ],
                    "functionName": {
                      "name": "validator_revert_address",
                      "nodeType": "YulIdentifier",
                      "src": "9784:24:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9784:33:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "9784:33:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "9826:17:105",
                  "value": {
                    "name": "value_1",
                    "nodeType": "YulIdentifier",
                    "src": "9836:7:105"
                  },
                  "variableNames": [
                    {
                      "name": "value1",
                      "nodeType": "YulIdentifier",
                      "src": "9826:6:105"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "9852:42:105",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "9879:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "9890:2:105",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "9875:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "9875:18:105"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "9862:12:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9862:32:105"
                  },
                  "variableNames": [
                    {
                      "name": "value2",
                      "nodeType": "YulIdentifier",
                      "src": "9852:6:105"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "9903:42:105",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "9930:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "9941:2:105",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "9926:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "9926:18:105"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "9913:12:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9913:32:105"
                  },
                  "variableNames": [
                    {
                      "name": "value3",
                      "nodeType": "YulIdentifier",
                      "src": "9903:6:105"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "9954:47:105",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "9985:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "9996:3:105",
                            "type": "",
                            "value": "128"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "9981:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "9981:19:105"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "9968:12:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9968:33:105"
                  },
                  "variables": [
                    {
                      "name": "offset",
                      "nodeType": "YulTypedName",
                      "src": "9958:6:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "10044:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "10053:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "10056:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "10046:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "10046:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "10046:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "offset",
                        "nodeType": "YulIdentifier",
                        "src": "10016:6:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "10024:18:105",
                        "type": "",
                        "value": "0xffffffffffffffff"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "10013:2:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10013:30:105"
                  },
                  "nodeType": "YulIf",
                  "src": "10010:50:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "10069:59:105",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "10100:9:105"
                          },
                          {
                            "name": "offset",
                            "nodeType": "YulIdentifier",
                            "src": "10111:6:105"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "10096:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "10096:22:105"
                      },
                      {
                        "name": "dataEnd",
                        "nodeType": "YulIdentifier",
                        "src": "10120:7:105"
                      }
                    ],
                    "functionName": {
                      "name": "abi_decode_bytes",
                      "nodeType": "YulIdentifier",
                      "src": "10079:16:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10079:49:105"
                  },
                  "variableNames": [
                    {
                      "name": "value4",
                      "nodeType": "YulIdentifier",
                      "src": "10069:6:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_addresst_addresst_uint256t_uint256t_bytes_memory_ptr",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "9481:9:105",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "9492:7:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "9504:6:105",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "9512:6:105",
                "type": ""
              },
              {
                "name": "value2",
                "nodeType": "YulTypedName",
                "src": "9520:6:105",
                "type": ""
              },
              {
                "name": "value3",
                "nodeType": "YulTypedName",
                "src": "9528:6:105",
                "type": ""
              },
              {
                "name": "value4",
                "nodeType": "YulTypedName",
                "src": "9536:6:105",
                "type": ""
              }
            ],
            "src": "9400:734:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "10313:237:105",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "10330:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "10341:2:105",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "10323:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10323:21:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "10323:21:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "10364:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "10375:2:105",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "10360:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "10360:18:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "10380:2:105",
                        "type": "",
                        "value": "47"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "10353:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10353:30:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "10353:30:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "10403:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "10414:2:105",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "10399:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "10399:18:105"
                      },
                      {
                        "hexValue": "416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "10419:34:105",
                        "type": "",
                        "value": "AccessControl: sender must be an"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "10392:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10392:62:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "10392:62:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "10474:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "10485:2:105",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "10470:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "10470:18:105"
                      },
                      {
                        "hexValue": "2061646d696e20746f206772616e74",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "10490:17:105",
                        "type": "",
                        "value": " admin to grant"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "10463:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10463:45:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "10463:45:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "10517:27:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "10529:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "10540:3:105",
                        "type": "",
                        "value": "128"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "10525:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10525:19:105"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "10517:4:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_0ba7116025f1ef6b158a2bd2238e617f30e17c9e456917d901086ca4f8ad2811__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "10290:9:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "10304:4:105",
                "type": ""
              }
            ],
            "src": "10139:411:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "10729:237:105",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "10746:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "10757:2:105",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "10739:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10739:21:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "10739:21:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "10780:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "10791:2:105",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "10776:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "10776:18:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "10796:2:105",
                        "type": "",
                        "value": "47"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "10769:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10769:30:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "10769:30:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "10819:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "10830:2:105",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "10815:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "10815:18:105"
                      },
                      {
                        "hexValue": "416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e6365",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "10835:34:105",
                        "type": "",
                        "value": "AccessControl: can only renounce"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "10808:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10808:62:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "10808:62:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "10890:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "10901:2:105",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "10886:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "10886:18:105"
                      },
                      {
                        "hexValue": "20726f6c657320666f722073656c66",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "10906:17:105",
                        "type": "",
                        "value": " roles for self"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "10879:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10879:45:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "10879:45:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "10933:27:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "10945:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "10956:3:105",
                        "type": "",
                        "value": "128"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "10941:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10941:19:105"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "10933:4:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_fb06fa8ff2141e8ed74502f6792273793f25f0e9d3cf15344f3f5a0d4948fd4b__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "10706:9:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "10720:4:105",
                "type": ""
              }
            ],
            "src": "10555:411:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "11031:78:105",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "11041:22:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "offset",
                        "nodeType": "YulIdentifier",
                        "src": "11056:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nodeType": "YulIdentifier",
                      "src": "11050:5:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "11050:13:105"
                  },
                  "variableNames": [
                    {
                      "name": "value",
                      "nodeType": "YulIdentifier",
                      "src": "11041:5:105"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "11097:5:105"
                      }
                    ],
                    "functionName": {
                      "name": "validator_revert_address",
                      "nodeType": "YulIdentifier",
                      "src": "11072:24:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "11072:31:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "11072:31:105"
                }
              ]
            },
            "name": "abi_decode_address_fromMemory",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "offset",
                "nodeType": "YulTypedName",
                "src": "11010:6:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "11021:5:105",
                "type": ""
              }
            ],
            "src": "10971:138:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "11167:205:105",
              "statements": [
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "11177:10:105",
                  "value": {
                    "kind": "number",
                    "nodeType": "YulLiteral",
                    "src": "11186:1:105",
                    "type": "",
                    "value": "0"
                  },
                  "variables": [
                    {
                      "name": "i",
                      "nodeType": "YulTypedName",
                      "src": "11181:1:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "11246:63:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "name": "dst",
                                  "nodeType": "YulIdentifier",
                                  "src": "11271:3:105"
                                },
                                {
                                  "name": "i",
                                  "nodeType": "YulIdentifier",
                                  "src": "11276:1:105"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nodeType": "YulIdentifier",
                                "src": "11267:3:105"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "11267:11:105"
                            },
                            {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "name": "src",
                                      "nodeType": "YulIdentifier",
                                      "src": "11290:3:105"
                                    },
                                    {
                                      "name": "i",
                                      "nodeType": "YulIdentifier",
                                      "src": "11295:1:105"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "add",
                                    "nodeType": "YulIdentifier",
                                    "src": "11286:3:105"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "11286:11:105"
                                }
                              ],
                              "functionName": {
                                "name": "mload",
                                "nodeType": "YulIdentifier",
                                "src": "11280:5:105"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "11280:18:105"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "11260:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "11260:39:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "11260:39:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "i",
                        "nodeType": "YulIdentifier",
                        "src": "11207:1:105"
                      },
                      {
                        "name": "length",
                        "nodeType": "YulIdentifier",
                        "src": "11210:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "lt",
                      "nodeType": "YulIdentifier",
                      "src": "11204:2:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "11204:13:105"
                  },
                  "nodeType": "YulForLoop",
                  "post": {
                    "nodeType": "YulBlock",
                    "src": "11218:19:105",
                    "statements": [
                      {
                        "nodeType": "YulAssignment",
                        "src": "11220:15:105",
                        "value": {
                          "arguments": [
                            {
                              "name": "i",
                              "nodeType": "YulIdentifier",
                              "src": "11229:1:105"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "11232:2:105",
                              "type": "",
                              "value": "32"
                            }
                          ],
                          "functionName": {
                            "name": "add",
                            "nodeType": "YulIdentifier",
                            "src": "11225:3:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "11225:10:105"
                        },
                        "variableNames": [
                          {
                            "name": "i",
                            "nodeType": "YulIdentifier",
                            "src": "11220:1:105"
                          }
                        ]
                      }
                    ]
                  },
                  "pre": {
                    "nodeType": "YulBlock",
                    "src": "11200:3:105",
                    "statements": []
                  },
                  "src": "11196:113:105"
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "11335:31:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "name": "dst",
                                  "nodeType": "YulIdentifier",
                                  "src": "11348:3:105"
                                },
                                {
                                  "name": "length",
                                  "nodeType": "YulIdentifier",
                                  "src": "11353:6:105"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nodeType": "YulIdentifier",
                                "src": "11344:3:105"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "11344:16:105"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "11362:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "11337:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "11337:27:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "11337:27:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "i",
                        "nodeType": "YulIdentifier",
                        "src": "11324:1:105"
                      },
                      {
                        "name": "length",
                        "nodeType": "YulIdentifier",
                        "src": "11327:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "11321:2:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "11321:13:105"
                  },
                  "nodeType": "YulIf",
                  "src": "11318:48:105"
                }
              ]
            },
            "name": "copy_memory_to_memory",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "src",
                "nodeType": "YulTypedName",
                "src": "11145:3:105",
                "type": ""
              },
              {
                "name": "dst",
                "nodeType": "YulTypedName",
                "src": "11150:3:105",
                "type": ""
              },
              {
                "name": "length",
                "nodeType": "YulTypedName",
                "src": "11155:6:105",
                "type": ""
              }
            ],
            "src": "11114:258:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "11440:365:105",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "11489:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "11498:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "11501:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "11491:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "11491:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "11491:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "offset",
                                "nodeType": "YulIdentifier",
                                "src": "11468:6:105"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "11476:4:105",
                                "type": "",
                                "value": "0x1f"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "11464:3:105"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "11464:17:105"
                          },
                          {
                            "name": "end",
                            "nodeType": "YulIdentifier",
                            "src": "11483:3:105"
                          }
                        ],
                        "functionName": {
                          "name": "slt",
                          "nodeType": "YulIdentifier",
                          "src": "11460:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "11460:27:105"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "11453:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "11453:35:105"
                  },
                  "nodeType": "YulIf",
                  "src": "11450:55:105"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "11514:23:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "offset",
                        "nodeType": "YulIdentifier",
                        "src": "11530:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nodeType": "YulIdentifier",
                      "src": "11524:5:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "11524:13:105"
                  },
                  "variables": [
                    {
                      "name": "_1",
                      "nodeType": "YulTypedName",
                      "src": "11518:2:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "11546:63:105",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "_1",
                            "nodeType": "YulIdentifier",
                            "src": "11605:2:105"
                          }
                        ],
                        "functionName": {
                          "name": "array_allocation_size_bytes",
                          "nodeType": "YulIdentifier",
                          "src": "11577:27:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "11577:31:105"
                      }
                    ],
                    "functionName": {
                      "name": "allocate_memory",
                      "nodeType": "YulIdentifier",
                      "src": "11561:15:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "11561:48:105"
                  },
                  "variables": [
                    {
                      "name": "array_1",
                      "nodeType": "YulTypedName",
                      "src": "11550:7:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "array_1",
                        "nodeType": "YulIdentifier",
                        "src": "11625:7:105"
                      },
                      {
                        "name": "_1",
                        "nodeType": "YulIdentifier",
                        "src": "11634:2:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "11618:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "11618:19:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "11618:19:105"
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "11685:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "11694:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "11697:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "11687:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "11687:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "11687:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "offset",
                                "nodeType": "YulIdentifier",
                                "src": "11660:6:105"
                              },
                              {
                                "name": "_1",
                                "nodeType": "YulIdentifier",
                                "src": "11668:2:105"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "11656:3:105"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "11656:15:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "11673:4:105",
                            "type": "",
                            "value": "0x20"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "11652:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "11652:26:105"
                      },
                      {
                        "name": "end",
                        "nodeType": "YulIdentifier",
                        "src": "11680:3:105"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "11649:2:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "11649:35:105"
                  },
                  "nodeType": "YulIf",
                  "src": "11646:55:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "offset",
                            "nodeType": "YulIdentifier",
                            "src": "11736:6:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "11744:4:105",
                            "type": "",
                            "value": "0x20"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "11732:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "11732:17:105"
                      },
                      {
                        "arguments": [
                          {
                            "name": "array_1",
                            "nodeType": "YulIdentifier",
                            "src": "11755:7:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "11764:4:105",
                            "type": "",
                            "value": "0x20"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "11751:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "11751:18:105"
                      },
                      {
                        "name": "_1",
                        "nodeType": "YulIdentifier",
                        "src": "11771:2:105"
                      }
                    ],
                    "functionName": {
                      "name": "copy_memory_to_memory",
                      "nodeType": "YulIdentifier",
                      "src": "11710:21:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "11710:64:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "11710:64:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "11783:16:105",
                  "value": {
                    "name": "array_1",
                    "nodeType": "YulIdentifier",
                    "src": "11792:7:105"
                  },
                  "variableNames": [
                    {
                      "name": "array",
                      "nodeType": "YulIdentifier",
                      "src": "11783:5:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_bytes_fromMemory",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "offset",
                "nodeType": "YulTypedName",
                "src": "11414:6:105",
                "type": ""
              },
              {
                "name": "end",
                "nodeType": "YulTypedName",
                "src": "11422:3:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "array",
                "nodeType": "YulTypedName",
                "src": "11430:5:105",
                "type": ""
              }
            ],
            "src": "11377:428:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "11983:1968:105",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "12029:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "12038:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "12041:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "12031:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "12031:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "12031:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "12004:7:105"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "12013:9:105"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "12000:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "12000:23:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "12025:2:105",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "11996:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "11996:32:105"
                  },
                  "nodeType": "YulIf",
                  "src": "11993:52:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "12054:26:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "12070:9:105"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nodeType": "YulIdentifier",
                      "src": "12064:5:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "12064:16:105"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "12054:6:105"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "12089:12:105",
                  "value": {
                    "kind": "number",
                    "nodeType": "YulLiteral",
                    "src": "12099:2:105",
                    "type": "",
                    "value": "32"
                  },
                  "variables": [
                    {
                      "name": "_1",
                      "nodeType": "YulTypedName",
                      "src": "12093:2:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "12110:39:105",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "12134:9:105"
                          },
                          {
                            "name": "_1",
                            "nodeType": "YulIdentifier",
                            "src": "12145:2:105"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "12130:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "12130:18:105"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nodeType": "YulIdentifier",
                      "src": "12124:5:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "12124:25:105"
                  },
                  "variables": [
                    {
                      "name": "offset",
                      "nodeType": "YulTypedName",
                      "src": "12114:6:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "12158:28:105",
                  "value": {
                    "kind": "number",
                    "nodeType": "YulLiteral",
                    "src": "12168:18:105",
                    "type": "",
                    "value": "0xffffffffffffffff"
                  },
                  "variables": [
                    {
                      "name": "_2",
                      "nodeType": "YulTypedName",
                      "src": "12162:2:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "12213:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "12222:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "12225:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "12215:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "12215:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "12215:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "offset",
                        "nodeType": "YulIdentifier",
                        "src": "12201:6:105"
                      },
                      {
                        "name": "_2",
                        "nodeType": "YulIdentifier",
                        "src": "12209:2:105"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "12198:2:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "12198:14:105"
                  },
                  "nodeType": "YulIf",
                  "src": "12195:34:105"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "12238:32:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "12252:9:105"
                      },
                      {
                        "name": "offset",
                        "nodeType": "YulIdentifier",
                        "src": "12263:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "12248:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "12248:22:105"
                  },
                  "variables": [
                    {
                      "name": "_3",
                      "nodeType": "YulTypedName",
                      "src": "12242:2:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "12318:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "12327:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "12330:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "12320:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "12320:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "12320:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "_3",
                                "nodeType": "YulIdentifier",
                                "src": "12297:2:105"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "12301:4:105",
                                "type": "",
                                "value": "0x1f"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "12293:3:105"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "12293:13:105"
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "12308:7:105"
                          }
                        ],
                        "functionName": {
                          "name": "slt",
                          "nodeType": "YulIdentifier",
                          "src": "12289:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "12289:27:105"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "12282:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "12282:35:105"
                  },
                  "nodeType": "YulIf",
                  "src": "12279:55:105"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "12343:19:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "_3",
                        "nodeType": "YulIdentifier",
                        "src": "12359:2:105"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nodeType": "YulIdentifier",
                      "src": "12353:5:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "12353:9:105"
                  },
                  "variables": [
                    {
                      "name": "_4",
                      "nodeType": "YulTypedName",
                      "src": "12347:2:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "12371:71:105",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "_4",
                            "nodeType": "YulIdentifier",
                            "src": "12438:2:105"
                          }
                        ],
                        "functionName": {
                          "name": "array_allocation_size_array_uint256_dyn",
                          "nodeType": "YulIdentifier",
                          "src": "12398:39:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "12398:43:105"
                      }
                    ],
                    "functionName": {
                      "name": "allocate_memory",
                      "nodeType": "YulIdentifier",
                      "src": "12382:15:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "12382:60:105"
                  },
                  "variables": [
                    {
                      "name": "dst",
                      "nodeType": "YulTypedName",
                      "src": "12375:3:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "12451:16:105",
                  "value": {
                    "name": "dst",
                    "nodeType": "YulIdentifier",
                    "src": "12464:3:105"
                  },
                  "variables": [
                    {
                      "name": "dst_1",
                      "nodeType": "YulTypedName",
                      "src": "12455:5:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "dst",
                        "nodeType": "YulIdentifier",
                        "src": "12483:3:105"
                      },
                      {
                        "name": "_4",
                        "nodeType": "YulIdentifier",
                        "src": "12488:2:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "12476:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "12476:15:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "12476:15:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "12500:19:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "dst",
                        "nodeType": "YulIdentifier",
                        "src": "12511:3:105"
                      },
                      {
                        "name": "_1",
                        "nodeType": "YulIdentifier",
                        "src": "12516:2:105"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "12507:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "12507:12:105"
                  },
                  "variableNames": [
                    {
                      "name": "dst",
                      "nodeType": "YulIdentifier",
                      "src": "12500:3:105"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "12528:42:105",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "_3",
                            "nodeType": "YulIdentifier",
                            "src": "12550:2:105"
                          },
                          {
                            "arguments": [
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "12558:1:105",
                                "type": "",
                                "value": "5"
                              },
                              {
                                "name": "_4",
                                "nodeType": "YulIdentifier",
                                "src": "12561:2:105"
                              }
                            ],
                            "functionName": {
                              "name": "shl",
                              "nodeType": "YulIdentifier",
                              "src": "12554:3:105"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "12554:10:105"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "12546:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "12546:19:105"
                      },
                      {
                        "name": "_1",
                        "nodeType": "YulIdentifier",
                        "src": "12567:2:105"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "12542:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "12542:28:105"
                  },
                  "variables": [
                    {
                      "name": "srcEnd",
                      "nodeType": "YulTypedName",
                      "src": "12532:6:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "12602:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "12611:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "12614:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "12604:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "12604:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "12604:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "srcEnd",
                        "nodeType": "YulIdentifier",
                        "src": "12585:6:105"
                      },
                      {
                        "name": "dataEnd",
                        "nodeType": "YulIdentifier",
                        "src": "12593:7:105"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "12582:2:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "12582:19:105"
                  },
                  "nodeType": "YulIf",
                  "src": "12579:39:105"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "12627:22:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "_3",
                        "nodeType": "YulIdentifier",
                        "src": "12642:2:105"
                      },
                      {
                        "name": "_1",
                        "nodeType": "YulIdentifier",
                        "src": "12646:2:105"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "12638:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "12638:11:105"
                  },
                  "variables": [
                    {
                      "name": "src",
                      "nodeType": "YulTypedName",
                      "src": "12631:3:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "12714:1139:105",
                    "statements": [
                      {
                        "nodeType": "YulVariableDeclaration",
                        "src": "12728:29:105",
                        "value": {
                          "arguments": [
                            {
                              "name": "src",
                              "nodeType": "YulIdentifier",
                              "src": "12753:3:105"
                            }
                          ],
                          "functionName": {
                            "name": "mload",
                            "nodeType": "YulIdentifier",
                            "src": "12747:5:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "12747:10:105"
                        },
                        "variables": [
                          {
                            "name": "innerOffset",
                            "nodeType": "YulTypedName",
                            "src": "12732:11:105",
                            "type": ""
                          }
                        ]
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "12793:16:105",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "12802:1:105",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "12805:1:105",
                                    "type": "",
                                    "value": "0"
                                  }
                                ],
                                "functionName": {
                                  "name": "revert",
                                  "nodeType": "YulIdentifier",
                                  "src": "12795:6:105"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12795:12:105"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "12795:12:105"
                            }
                          ]
                        },
                        "condition": {
                          "arguments": [
                            {
                              "name": "innerOffset",
                              "nodeType": "YulIdentifier",
                              "src": "12776:11:105"
                            },
                            {
                              "name": "_2",
                              "nodeType": "YulIdentifier",
                              "src": "12789:2:105"
                            }
                          ],
                          "functionName": {
                            "name": "gt",
                            "nodeType": "YulIdentifier",
                            "src": "12773:2:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "12773:19:105"
                        },
                        "nodeType": "YulIf",
                        "src": "12770:39:105"
                      },
                      {
                        "nodeType": "YulVariableDeclaration",
                        "src": "12822:30:105",
                        "value": {
                          "arguments": [
                            {
                              "name": "_3",
                              "nodeType": "YulIdentifier",
                              "src": "12836:2:105"
                            },
                            {
                              "name": "innerOffset",
                              "nodeType": "YulIdentifier",
                              "src": "12840:11:105"
                            }
                          ],
                          "functionName": {
                            "name": "add",
                            "nodeType": "YulIdentifier",
                            "src": "12832:3:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "12832:20:105"
                        },
                        "variables": [
                          {
                            "name": "_5",
                            "nodeType": "YulTypedName",
                            "src": "12826:2:105",
                            "type": ""
                          }
                        ]
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "12910:16:105",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "12919:1:105",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "12922:1:105",
                                    "type": "",
                                    "value": "0"
                                  }
                                ],
                                "functionName": {
                                  "name": "revert",
                                  "nodeType": "YulIdentifier",
                                  "src": "12912:6:105"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12912:12:105"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "12912:12:105"
                            }
                          ]
                        },
                        "condition": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "name": "dataEnd",
                                      "nodeType": "YulIdentifier",
                                      "src": "12880:7:105"
                                    },
                                    {
                                      "name": "_5",
                                      "nodeType": "YulIdentifier",
                                      "src": "12889:2:105"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "sub",
                                    "nodeType": "YulIdentifier",
                                    "src": "12876:3:105"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "12876:16:105"
                                },
                                {
                                  "arguments": [
                                    {
                                      "kind": "number",
                                      "nodeType": "YulLiteral",
                                      "src": "12898:2:105",
                                      "type": "",
                                      "value": "31"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "not",
                                    "nodeType": "YulIdentifier",
                                    "src": "12894:3:105"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "12894:7:105"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nodeType": "YulIdentifier",
                                "src": "12872:3:105"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "12872:30:105"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "12904:4:105",
                              "type": "",
                              "value": "0xc0"
                            }
                          ],
                          "functionName": {
                            "name": "slt",
                            "nodeType": "YulIdentifier",
                            "src": "12868:3:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "12868:41:105"
                        },
                        "nodeType": "YulIf",
                        "src": "12865:61:105"
                      },
                      {
                        "nodeType": "YulVariableDeclaration",
                        "src": "12939:35:105",
                        "value": {
                          "arguments": [],
                          "functionName": {
                            "name": "allocate_memory_3302",
                            "nodeType": "YulIdentifier",
                            "src": "12952:20:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "12952:22:105"
                        },
                        "variables": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "12943:5:105",
                            "type": ""
                          }
                        ]
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "name": "value",
                              "nodeType": "YulIdentifier",
                              "src": "12994:5:105"
                            },
                            {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "name": "_5",
                                      "nodeType": "YulIdentifier",
                                      "src": "13011:2:105"
                                    },
                                    {
                                      "name": "_1",
                                      "nodeType": "YulIdentifier",
                                      "src": "13015:2:105"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "add",
                                    "nodeType": "YulIdentifier",
                                    "src": "13007:3:105"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "13007:11:105"
                                }
                              ],
                              "functionName": {
                                "name": "mload",
                                "nodeType": "YulIdentifier",
                                "src": "13001:5:105"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "13001:18:105"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "12987:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "12987:33:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "12987:33:105"
                      },
                      {
                        "nodeType": "YulVariableDeclaration",
                        "src": "13033:33:105",
                        "value": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "name": "_5",
                                  "nodeType": "YulIdentifier",
                                  "src": "13058:2:105"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "13062:2:105",
                                  "type": "",
                                  "value": "64"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nodeType": "YulIdentifier",
                                "src": "13054:3:105"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "13054:11:105"
                            }
                          ],
                          "functionName": {
                            "name": "mload",
                            "nodeType": "YulIdentifier",
                            "src": "13048:5:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "13048:18:105"
                        },
                        "variables": [
                          {
                            "name": "value_1",
                            "nodeType": "YulTypedName",
                            "src": "13037:7:105",
                            "type": ""
                          }
                        ]
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "name": "value_1",
                              "nodeType": "YulIdentifier",
                              "src": "13104:7:105"
                            }
                          ],
                          "functionName": {
                            "name": "validator_revert_address",
                            "nodeType": "YulIdentifier",
                            "src": "13079:24:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "13079:33:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "13079:33:105"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "name": "value",
                                  "nodeType": "YulIdentifier",
                                  "src": "13136:5:105"
                                },
                                {
                                  "name": "_1",
                                  "nodeType": "YulIdentifier",
                                  "src": "13143:2:105"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nodeType": "YulIdentifier",
                                "src": "13132:3:105"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "13132:14:105"
                            },
                            {
                              "name": "value_1",
                              "nodeType": "YulIdentifier",
                              "src": "13148:7:105"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "13125:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "13125:31:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "13125:31:105"
                      },
                      {
                        "nodeType": "YulVariableDeclaration",
                        "src": "13169:33:105",
                        "value": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "name": "_5",
                                  "nodeType": "YulIdentifier",
                                  "src": "13194:2:105"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "13198:2:105",
                                  "type": "",
                                  "value": "96"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nodeType": "YulIdentifier",
                                "src": "13190:3:105"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "13190:11:105"
                            }
                          ],
                          "functionName": {
                            "name": "mload",
                            "nodeType": "YulIdentifier",
                            "src": "13184:5:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "13184:18:105"
                        },
                        "variables": [
                          {
                            "name": "value_2",
                            "nodeType": "YulTypedName",
                            "src": "13173:7:105",
                            "type": ""
                          }
                        ]
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "name": "value_2",
                              "nodeType": "YulIdentifier",
                              "src": "13240:7:105"
                            }
                          ],
                          "functionName": {
                            "name": "validator_revert_address",
                            "nodeType": "YulIdentifier",
                            "src": "13215:24:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "13215:33:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "13215:33:105"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "name": "value",
                                  "nodeType": "YulIdentifier",
                                  "src": "13272:5:105"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "13279:2:105",
                                  "type": "",
                                  "value": "64"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nodeType": "YulIdentifier",
                                "src": "13268:3:105"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "13268:14:105"
                            },
                            {
                              "name": "value_2",
                              "nodeType": "YulIdentifier",
                              "src": "13284:7:105"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "13261:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "13261:31:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "13261:31:105"
                      },
                      {
                        "nodeType": "YulVariableDeclaration",
                        "src": "13305:34:105",
                        "value": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "name": "_5",
                                  "nodeType": "YulIdentifier",
                                  "src": "13330:2:105"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "13334:3:105",
                                  "type": "",
                                  "value": "128"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nodeType": "YulIdentifier",
                                "src": "13326:3:105"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "13326:12:105"
                            }
                          ],
                          "functionName": {
                            "name": "mload",
                            "nodeType": "YulIdentifier",
                            "src": "13320:5:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "13320:19:105"
                        },
                        "variables": [
                          {
                            "name": "value_3",
                            "nodeType": "YulTypedName",
                            "src": "13309:7:105",
                            "type": ""
                          }
                        ]
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "name": "value_3",
                              "nodeType": "YulIdentifier",
                              "src": "13377:7:105"
                            }
                          ],
                          "functionName": {
                            "name": "validator_revert_address",
                            "nodeType": "YulIdentifier",
                            "src": "13352:24:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "13352:33:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "13352:33:105"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "name": "value",
                                  "nodeType": "YulIdentifier",
                                  "src": "13409:5:105"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "13416:2:105",
                                  "type": "",
                                  "value": "96"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nodeType": "YulIdentifier",
                                "src": "13405:3:105"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "13405:14:105"
                            },
                            {
                              "name": "value_3",
                              "nodeType": "YulIdentifier",
                              "src": "13421:7:105"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "13398:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "13398:31:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "13398:31:105"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "name": "value",
                                  "nodeType": "YulIdentifier",
                                  "src": "13453:5:105"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "13460:3:105",
                                  "type": "",
                                  "value": "128"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nodeType": "YulIdentifier",
                                "src": "13449:3:105"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "13449:15:105"
                            },
                            {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "name": "_5",
                                      "nodeType": "YulIdentifier",
                                      "src": "13500:2:105"
                                    },
                                    {
                                      "kind": "number",
                                      "nodeType": "YulLiteral",
                                      "src": "13504:3:105",
                                      "type": "",
                                      "value": "160"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "add",
                                    "nodeType": "YulIdentifier",
                                    "src": "13496:3:105"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "13496:12:105"
                                }
                              ],
                              "functionName": {
                                "name": "abi_decode_address_fromMemory",
                                "nodeType": "YulIdentifier",
                                "src": "13466:29:105"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "13466:43:105"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "13442:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "13442:68:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "13442:68:105"
                      },
                      {
                        "nodeType": "YulVariableDeclaration",
                        "src": "13523:36:105",
                        "value": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "name": "_5",
                                  "nodeType": "YulIdentifier",
                                  "src": "13549:2:105"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "13553:4:105",
                                  "type": "",
                                  "value": "0xc0"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nodeType": "YulIdentifier",
                                "src": "13545:3:105"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "13545:13:105"
                            }
                          ],
                          "functionName": {
                            "name": "mload",
                            "nodeType": "YulIdentifier",
                            "src": "13539:5:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "13539:20:105"
                        },
                        "variables": [
                          {
                            "name": "offset_1",
                            "nodeType": "YulTypedName",
                            "src": "13527:8:105",
                            "type": ""
                          }
                        ]
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "13604:74:105",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "13622:11:105",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "13632:1:105",
                                "type": "",
                                "value": "0"
                              },
                              "variables": [
                                {
                                  "name": "_6",
                                  "nodeType": "YulTypedName",
                                  "src": "13626:2:105",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "_6",
                                    "nodeType": "YulIdentifier",
                                    "src": "13657:2:105"
                                  },
                                  {
                                    "name": "_6",
                                    "nodeType": "YulIdentifier",
                                    "src": "13661:2:105"
                                  }
                                ],
                                "functionName": {
                                  "name": "revert",
                                  "nodeType": "YulIdentifier",
                                  "src": "13650:6:105"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "13650:14:105"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "13650:14:105"
                            }
                          ]
                        },
                        "condition": {
                          "arguments": [
                            {
                              "name": "offset_1",
                              "nodeType": "YulIdentifier",
                              "src": "13578:8:105"
                            },
                            {
                              "name": "_2",
                              "nodeType": "YulIdentifier",
                              "src": "13588:2:105"
                            }
                          ],
                          "functionName": {
                            "name": "gt",
                            "nodeType": "YulIdentifier",
                            "src": "13575:2:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "13575:16:105"
                        },
                        "nodeType": "YulIf",
                        "src": "13572:106:105"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "name": "value",
                                  "nodeType": "YulIdentifier",
                                  "src": "13702:5:105"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "13709:3:105",
                                  "type": "",
                                  "value": "160"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nodeType": "YulIdentifier",
                                "src": "13698:3:105"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "13698:15:105"
                            },
                            {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "arguments": [
                                        {
                                          "name": "_5",
                                          "nodeType": "YulIdentifier",
                                          "src": "13751:2:105"
                                        },
                                        {
                                          "name": "offset_1",
                                          "nodeType": "YulIdentifier",
                                          "src": "13755:8:105"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "13747:3:105"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "13747:17:105"
                                    },
                                    {
                                      "name": "_1",
                                      "nodeType": "YulIdentifier",
                                      "src": "13766:2:105"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "add",
                                    "nodeType": "YulIdentifier",
                                    "src": "13743:3:105"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "13743:26:105"
                                },
                                {
                                  "name": "dataEnd",
                                  "nodeType": "YulIdentifier",
                                  "src": "13771:7:105"
                                }
                              ],
                              "functionName": {
                                "name": "abi_decode_bytes_fromMemory",
                                "nodeType": "YulIdentifier",
                                "src": "13715:27:105"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "13715:64:105"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "13691:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "13691:89:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "13691:89:105"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "name": "dst",
                              "nodeType": "YulIdentifier",
                              "src": "13800:3:105"
                            },
                            {
                              "name": "value",
                              "nodeType": "YulIdentifier",
                              "src": "13805:5:105"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "13793:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "13793:18:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "13793:18:105"
                      },
                      {
                        "nodeType": "YulAssignment",
                        "src": "13824:19:105",
                        "value": {
                          "arguments": [
                            {
                              "name": "dst",
                              "nodeType": "YulIdentifier",
                              "src": "13835:3:105"
                            },
                            {
                              "name": "_1",
                              "nodeType": "YulIdentifier",
                              "src": "13840:2:105"
                            }
                          ],
                          "functionName": {
                            "name": "add",
                            "nodeType": "YulIdentifier",
                            "src": "13831:3:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "13831:12:105"
                        },
                        "variableNames": [
                          {
                            "name": "dst",
                            "nodeType": "YulIdentifier",
                            "src": "13824:3:105"
                          }
                        ]
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "src",
                        "nodeType": "YulIdentifier",
                        "src": "12669:3:105"
                      },
                      {
                        "name": "srcEnd",
                        "nodeType": "YulIdentifier",
                        "src": "12674:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "lt",
                      "nodeType": "YulIdentifier",
                      "src": "12666:2:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "12666:15:105"
                  },
                  "nodeType": "YulForLoop",
                  "post": {
                    "nodeType": "YulBlock",
                    "src": "12682:23:105",
                    "statements": [
                      {
                        "nodeType": "YulAssignment",
                        "src": "12684:19:105",
                        "value": {
                          "arguments": [
                            {
                              "name": "src",
                              "nodeType": "YulIdentifier",
                              "src": "12695:3:105"
                            },
                            {
                              "name": "_1",
                              "nodeType": "YulIdentifier",
                              "src": "12700:2:105"
                            }
                          ],
                          "functionName": {
                            "name": "add",
                            "nodeType": "YulIdentifier",
                            "src": "12691:3:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "12691:12:105"
                        },
                        "variableNames": [
                          {
                            "name": "src",
                            "nodeType": "YulIdentifier",
                            "src": "12684:3:105"
                          }
                        ]
                      }
                    ]
                  },
                  "pre": {
                    "nodeType": "YulBlock",
                    "src": "12662:3:105",
                    "statements": []
                  },
                  "src": "12658:1195:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "13862:15:105",
                  "value": {
                    "name": "dst_1",
                    "nodeType": "YulIdentifier",
                    "src": "13872:5:105"
                  },
                  "variableNames": [
                    {
                      "name": "value1",
                      "nodeType": "YulIdentifier",
                      "src": "13862:6:105"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "13886:59:105",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "13930:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "13941:2:105",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "13926:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "13926:18:105"
                      }
                    ],
                    "functionName": {
                      "name": "abi_decode_address_fromMemory",
                      "nodeType": "YulIdentifier",
                      "src": "13896:29:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "13896:49:105"
                  },
                  "variableNames": [
                    {
                      "name": "value2",
                      "nodeType": "YulIdentifier",
                      "src": "13886:6:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_bytes32t_array$_t_struct$_Action_$12721_memory_ptr_$dyn_memory_ptrt_address_payable_fromMemory",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "11933:9:105",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "11944:7:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "11956:6:105",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "11964:6:105",
                "type": ""
              },
              {
                "name": "value2",
                "nodeType": "YulTypedName",
                "src": "11972:6:105",
                "type": ""
              }
            ],
            "src": "11810:2141:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "13988:95:105",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "14005:1:105",
                        "type": "",
                        "value": "0"
                      },
                      {
                        "arguments": [
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "14012:3:105",
                            "type": "",
                            "value": "224"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "14017:10:105",
                            "type": "",
                            "value": "0x4e487b71"
                          }
                        ],
                        "functionName": {
                          "name": "shl",
                          "nodeType": "YulIdentifier",
                          "src": "14008:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "14008:20:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "13998:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "13998:31:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "13998:31:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "14045:1:105",
                        "type": "",
                        "value": "4"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "14048:4:105",
                        "type": "",
                        "value": "0x32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "14038:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "14038:15:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "14038:15:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "14069:1:105",
                        "type": "",
                        "value": "0"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "14072:4:105",
                        "type": "",
                        "value": "0x24"
                      }
                    ],
                    "functionName": {
                      "name": "revert",
                      "nodeType": "YulIdentifier",
                      "src": "14062:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "14062:15:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "14062:15:105"
                }
              ]
            },
            "name": "panic_error_0x32",
            "nodeType": "YulFunctionDefinition",
            "src": "13956:127:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "14225:137:105",
              "statements": [
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "14235:27:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "value0",
                        "nodeType": "YulIdentifier",
                        "src": "14255:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nodeType": "YulIdentifier",
                      "src": "14249:5:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "14249:13:105"
                  },
                  "variables": [
                    {
                      "name": "length",
                      "nodeType": "YulTypedName",
                      "src": "14239:6:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "value0",
                            "nodeType": "YulIdentifier",
                            "src": "14297:6:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "14305:4:105",
                            "type": "",
                            "value": "0x20"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "14293:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "14293:17:105"
                      },
                      {
                        "name": "pos",
                        "nodeType": "YulIdentifier",
                        "src": "14312:3:105"
                      },
                      {
                        "name": "length",
                        "nodeType": "YulIdentifier",
                        "src": "14317:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "copy_memory_to_memory",
                      "nodeType": "YulIdentifier",
                      "src": "14271:21:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "14271:53:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "14271:53:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "14333:23:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "pos",
                        "nodeType": "YulIdentifier",
                        "src": "14344:3:105"
                      },
                      {
                        "name": "length",
                        "nodeType": "YulIdentifier",
                        "src": "14349:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "14340:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "14340:16:105"
                  },
                  "variableNames": [
                    {
                      "name": "end",
                      "nodeType": "YulIdentifier",
                      "src": "14333:3:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "pos",
                "nodeType": "YulTypedName",
                "src": "14201:3:105",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "14206:6:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "end",
                "nodeType": "YulTypedName",
                "src": "14217:3:105",
                "type": ""
              }
            ],
            "src": "14088:274:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "14399:95:105",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "14416:1:105",
                        "type": "",
                        "value": "0"
                      },
                      {
                        "arguments": [
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "14423:3:105",
                            "type": "",
                            "value": "224"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "14428:10:105",
                            "type": "",
                            "value": "0x4e487b71"
                          }
                        ],
                        "functionName": {
                          "name": "shl",
                          "nodeType": "YulIdentifier",
                          "src": "14419:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "14419:20:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "14409:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "14409:31:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "14409:31:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "14456:1:105",
                        "type": "",
                        "value": "4"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "14459:4:105",
                        "type": "",
                        "value": "0x11"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "14449:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "14449:15:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "14449:15:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "14480:1:105",
                        "type": "",
                        "value": "0"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "14483:4:105",
                        "type": "",
                        "value": "0x24"
                      }
                    ],
                    "functionName": {
                      "name": "revert",
                      "nodeType": "YulIdentifier",
                      "src": "14473:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "14473:15:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "14473:15:105"
                }
              ]
            },
            "name": "panic_error_0x11",
            "nodeType": "YulFunctionDefinition",
            "src": "14367:127:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "14546:88:105",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "14577:22:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "functionName": {
                            "name": "panic_error_0x11",
                            "nodeType": "YulIdentifier",
                            "src": "14579:16:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "14579:18:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "14579:18:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "14562:5:105"
                      },
                      {
                        "arguments": [
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "14573:1:105",
                            "type": "",
                            "value": "0"
                          }
                        ],
                        "functionName": {
                          "name": "not",
                          "nodeType": "YulIdentifier",
                          "src": "14569:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "14569:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "eq",
                      "nodeType": "YulIdentifier",
                      "src": "14559:2:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "14559:17:105"
                  },
                  "nodeType": "YulIf",
                  "src": "14556:43:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "14608:20:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "14619:5:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "14626:1:105",
                        "type": "",
                        "value": "1"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "14615:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "14615:13:105"
                  },
                  "variableNames": [
                    {
                      "name": "ret",
                      "nodeType": "YulIdentifier",
                      "src": "14608:3:105"
                    }
                  ]
                }
              ]
            },
            "name": "increment_t_uint256",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "14528:5:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "ret",
                "nodeType": "YulTypedName",
                "src": "14538:3:105",
                "type": ""
              }
            ],
            "src": "14499:135:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "14813:238:105",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "14830:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "14841:2:105",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "14823:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "14823:21:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "14823:21:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "14864:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "14875:2:105",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "14860:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "14860:18:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "14880:2:105",
                        "type": "",
                        "value": "48"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "14853:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "14853:30:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "14853:30:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "14903:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "14914:2:105",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "14899:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "14899:18:105"
                      },
                      {
                        "hexValue": "416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "14919:34:105",
                        "type": "",
                        "value": "AccessControl: sender must be an"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "14892:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "14892:62:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "14892:62:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "14974:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "14985:2:105",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "14970:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "14970:18:105"
                      },
                      {
                        "hexValue": "2061646d696e20746f207265766f6b65",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "14990:18:105",
                        "type": "",
                        "value": " admin to revoke"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "14963:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "14963:46:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "14963:46:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "15018:27:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "15030:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "15041:3:105",
                        "type": "",
                        "value": "128"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "15026:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "15026:19:105"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "15018:4:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_64344570eab7406ca49d34d38bf2b2496dfda914405390c5057c8b0aabf798a3__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "14790:9:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "14804:4:105",
                "type": ""
              }
            ],
            "src": "14639:412:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "15137:103:105",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "15183:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "15192:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "15195:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "15185:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "15185:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "15185:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "15158:7:105"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "15167:9:105"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "15154:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "15154:23:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "15179:2:105",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "15150:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "15150:32:105"
                  },
                  "nodeType": "YulIf",
                  "src": "15147:52:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "15208:26:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "15224:9:105"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nodeType": "YulIdentifier",
                      "src": "15218:5:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "15218:16:105"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "15208:6:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_uint256_fromMemory",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "15103:9:105",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "15114:7:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "15126:6:105",
                "type": ""
              }
            ],
            "src": "15056:184:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "15436:14:105",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "15438:10:105",
                  "value": {
                    "name": "pos",
                    "nodeType": "YulIdentifier",
                    "src": "15445:3:105"
                  },
                  "variableNames": [
                    {
                      "name": "end",
                      "nodeType": "YulIdentifier",
                      "src": "15438:3:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_packed_t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "pos",
                "nodeType": "YulTypedName",
                "src": "15420:3:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "end",
                "nodeType": "YulTypedName",
                "src": "15428:3:105",
                "type": ""
              }
            ],
            "src": "15245:205:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "15504:76:105",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "15526:22:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "functionName": {
                            "name": "panic_error_0x11",
                            "nodeType": "YulIdentifier",
                            "src": "15528:16:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "15528:18:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "15528:18:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "x",
                        "nodeType": "YulIdentifier",
                        "src": "15520:1:105"
                      },
                      {
                        "name": "y",
                        "nodeType": "YulIdentifier",
                        "src": "15523:1:105"
                      }
                    ],
                    "functionName": {
                      "name": "lt",
                      "nodeType": "YulIdentifier",
                      "src": "15517:2:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "15517:8:105"
                  },
                  "nodeType": "YulIf",
                  "src": "15514:34:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "15557:17:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "x",
                        "nodeType": "YulIdentifier",
                        "src": "15569:1:105"
                      },
                      {
                        "name": "y",
                        "nodeType": "YulIdentifier",
                        "src": "15572:1:105"
                      }
                    ],
                    "functionName": {
                      "name": "sub",
                      "nodeType": "YulIdentifier",
                      "src": "15565:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "15565:9:105"
                  },
                  "variableNames": [
                    {
                      "name": "diff",
                      "nodeType": "YulIdentifier",
                      "src": "15557:4:105"
                    }
                  ]
                }
              ]
            },
            "name": "checked_sub_t_uint256",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "x",
                "nodeType": "YulTypedName",
                "src": "15486:1:105",
                "type": ""
              },
              {
                "name": "y",
                "nodeType": "YulTypedName",
                "src": "15489:1:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "diff",
                "nodeType": "YulTypedName",
                "src": "15495:4:105",
                "type": ""
              }
            ],
            "src": "15455:125:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "15634:208:105",
              "statements": [
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "15644:26:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "15664:5:105"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nodeType": "YulIdentifier",
                      "src": "15658:5:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "15658:12:105"
                  },
                  "variables": [
                    {
                      "name": "length",
                      "nodeType": "YulTypedName",
                      "src": "15648:6:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "pos",
                        "nodeType": "YulIdentifier",
                        "src": "15686:3:105"
                      },
                      {
                        "name": "length",
                        "nodeType": "YulIdentifier",
                        "src": "15691:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "15679:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "15679:19:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "15679:19:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "value",
                            "nodeType": "YulIdentifier",
                            "src": "15733:5:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "15740:4:105",
                            "type": "",
                            "value": "0x20"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "15729:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "15729:16:105"
                      },
                      {
                        "arguments": [
                          {
                            "name": "pos",
                            "nodeType": "YulIdentifier",
                            "src": "15751:3:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "15756:4:105",
                            "type": "",
                            "value": "0x20"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "15747:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "15747:14:105"
                      },
                      {
                        "name": "length",
                        "nodeType": "YulIdentifier",
                        "src": "15763:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "copy_memory_to_memory",
                      "nodeType": "YulIdentifier",
                      "src": "15707:21:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "15707:63:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "15707:63:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "15779:57:105",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "pos",
                            "nodeType": "YulIdentifier",
                            "src": "15794:3:105"
                          },
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "15807:6:105"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "15815:2:105",
                                    "type": "",
                                    "value": "31"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "15803:3:105"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "15803:15:105"
                              },
                              {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "15824:2:105",
                                    "type": "",
                                    "value": "31"
                                  }
                                ],
                                "functionName": {
                                  "name": "not",
                                  "nodeType": "YulIdentifier",
                                  "src": "15820:3:105"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "15820:7:105"
                              }
                            ],
                            "functionName": {
                              "name": "and",
                              "nodeType": "YulIdentifier",
                              "src": "15799:3:105"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "15799:29:105"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "15790:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "15790:39:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "15831:4:105",
                        "type": "",
                        "value": "0x20"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "15786:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "15786:50:105"
                  },
                  "variableNames": [
                    {
                      "name": "end",
                      "nodeType": "YulIdentifier",
                      "src": "15779:3:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_bytes",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "15611:5:105",
                "type": ""
              },
              {
                "name": "pos",
                "nodeType": "YulTypedName",
                "src": "15618:3:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "end",
                "nodeType": "YulTypedName",
                "src": "15626:3:105",
                "type": ""
              }
            ],
            "src": "15585:257:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "16148:1363:105",
              "statements": [
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "16158:13:105",
                  "value": {
                    "kind": "number",
                    "nodeType": "YulLiteral",
                    "src": "16168:3:105",
                    "type": "",
                    "value": "128"
                  },
                  "variables": [
                    {
                      "name": "_1",
                      "nodeType": "YulTypedName",
                      "src": "16162:2:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "16180:32:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "16198:9:105"
                      },
                      {
                        "name": "_1",
                        "nodeType": "YulIdentifier",
                        "src": "16209:2:105"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "16194:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "16194:18:105"
                  },
                  "variables": [
                    {
                      "name": "tail_1",
                      "nodeType": "YulTypedName",
                      "src": "16184:6:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "16221:29:105",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "16239:3:105",
                            "type": "",
                            "value": "160"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "16244:1:105",
                            "type": "",
                            "value": "1"
                          }
                        ],
                        "functionName": {
                          "name": "shl",
                          "nodeType": "YulIdentifier",
                          "src": "16235:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "16235:11:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "16248:1:105",
                        "type": "",
                        "value": "1"
                      }
                    ],
                    "functionName": {
                      "name": "sub",
                      "nodeType": "YulIdentifier",
                      "src": "16231:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "16231:19:105"
                  },
                  "variables": [
                    {
                      "name": "_2",
                      "nodeType": "YulTypedName",
                      "src": "16225:2:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "16266:9:105"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value0",
                            "nodeType": "YulIdentifier",
                            "src": "16281:6:105"
                          },
                          {
                            "name": "_2",
                            "nodeType": "YulIdentifier",
                            "src": "16289:2:105"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "16277:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "16277:15:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "16259:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "16259:34:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "16259:34:105"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "16302:12:105",
                  "value": {
                    "kind": "number",
                    "nodeType": "YulLiteral",
                    "src": "16312:2:105",
                    "type": "",
                    "value": "32"
                  },
                  "variables": [
                    {
                      "name": "_3",
                      "nodeType": "YulTypedName",
                      "src": "16306:2:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "16334:9:105"
                          },
                          {
                            "name": "_3",
                            "nodeType": "YulIdentifier",
                            "src": "16345:2:105"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "16330:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "16330:18:105"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value1",
                            "nodeType": "YulIdentifier",
                            "src": "16354:6:105"
                          },
                          {
                            "name": "_2",
                            "nodeType": "YulIdentifier",
                            "src": "16362:2:105"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "16350:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "16350:15:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "16323:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "16323:43:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "16323:43:105"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "16375:12:105",
                  "value": {
                    "kind": "number",
                    "nodeType": "YulLiteral",
                    "src": "16385:2:105",
                    "type": "",
                    "value": "64"
                  },
                  "variables": [
                    {
                      "name": "_4",
                      "nodeType": "YulTypedName",
                      "src": "16379:2:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "16407:9:105"
                          },
                          {
                            "name": "_4",
                            "nodeType": "YulIdentifier",
                            "src": "16418:2:105"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "16403:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "16403:18:105"
                      },
                      {
                        "name": "value2",
                        "nodeType": "YulIdentifier",
                        "src": "16423:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "16396:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "16396:34:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "16396:34:105"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "16439:12:105",
                  "value": {
                    "kind": "number",
                    "nodeType": "YulLiteral",
                    "src": "16449:2:105",
                    "type": "",
                    "value": "96"
                  },
                  "variables": [
                    {
                      "name": "_5",
                      "nodeType": "YulTypedName",
                      "src": "16443:2:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "16471:9:105"
                          },
                          {
                            "name": "_5",
                            "nodeType": "YulIdentifier",
                            "src": "16482:2:105"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "16467:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "16467:18:105"
                      },
                      {
                        "name": "_1",
                        "nodeType": "YulIdentifier",
                        "src": "16487:2:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "16460:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "16460:30:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "16460:30:105"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "16499:17:105",
                  "value": {
                    "name": "tail_1",
                    "nodeType": "YulIdentifier",
                    "src": "16510:6:105"
                  },
                  "variables": [
                    {
                      "name": "pos",
                      "nodeType": "YulTypedName",
                      "src": "16503:3:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "16525:27:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "value3",
                        "nodeType": "YulIdentifier",
                        "src": "16545:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nodeType": "YulIdentifier",
                      "src": "16539:5:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "16539:13:105"
                  },
                  "variables": [
                    {
                      "name": "length",
                      "nodeType": "YulTypedName",
                      "src": "16529:6:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "tail_1",
                        "nodeType": "YulIdentifier",
                        "src": "16568:6:105"
                      },
                      {
                        "name": "length",
                        "nodeType": "YulIdentifier",
                        "src": "16576:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "16561:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "16561:22:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "16561:22:105"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "16592:13:105",
                  "value": {
                    "kind": "number",
                    "nodeType": "YulLiteral",
                    "src": "16602:3:105",
                    "type": "",
                    "value": "160"
                  },
                  "variables": [
                    {
                      "name": "_6",
                      "nodeType": "YulTypedName",
                      "src": "16596:2:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "16614:25:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "16625:9:105"
                      },
                      {
                        "name": "_6",
                        "nodeType": "YulIdentifier",
                        "src": "16636:2:105"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "16621:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "16621:18:105"
                  },
                  "variableNames": [
                    {
                      "name": "pos",
                      "nodeType": "YulIdentifier",
                      "src": "16614:3:105"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "16648:53:105",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "16670:9:105"
                          },
                          {
                            "arguments": [
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "16685:1:105",
                                "type": "",
                                "value": "5"
                              },
                              {
                                "name": "length",
                                "nodeType": "YulIdentifier",
                                "src": "16688:6:105"
                              }
                            ],
                            "functionName": {
                              "name": "shl",
                              "nodeType": "YulIdentifier",
                              "src": "16681:3:105"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "16681:14:105"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "16666:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "16666:30:105"
                      },
                      {
                        "name": "_6",
                        "nodeType": "YulIdentifier",
                        "src": "16698:2:105"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "16662:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "16662:39:105"
                  },
                  "variables": [
                    {
                      "name": "tail_2",
                      "nodeType": "YulTypedName",
                      "src": "16652:6:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "16710:29:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "value3",
                        "nodeType": "YulIdentifier",
                        "src": "16728:6:105"
                      },
                      {
                        "name": "_3",
                        "nodeType": "YulIdentifier",
                        "src": "16736:2:105"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "16724:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "16724:15:105"
                  },
                  "variables": [
                    {
                      "name": "srcPtr",
                      "nodeType": "YulTypedName",
                      "src": "16714:6:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "16748:10:105",
                  "value": {
                    "kind": "number",
                    "nodeType": "YulLiteral",
                    "src": "16757:1:105",
                    "type": "",
                    "value": "0"
                  },
                  "variables": [
                    {
                      "name": "i",
                      "nodeType": "YulTypedName",
                      "src": "16752:1:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "16816:666:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "name": "pos",
                              "nodeType": "YulIdentifier",
                              "src": "16837:3:105"
                            },
                            {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "name": "tail_2",
                                      "nodeType": "YulIdentifier",
                                      "src": "16850:6:105"
                                    },
                                    {
                                      "name": "headStart",
                                      "nodeType": "YulIdentifier",
                                      "src": "16858:9:105"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "sub",
                                    "nodeType": "YulIdentifier",
                                    "src": "16846:3:105"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "16846:22:105"
                                },
                                {
                                  "arguments": [
                                    {
                                      "kind": "number",
                                      "nodeType": "YulLiteral",
                                      "src": "16874:3:105",
                                      "type": "",
                                      "value": "159"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "not",
                                    "nodeType": "YulIdentifier",
                                    "src": "16870:3:105"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "16870:8:105"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nodeType": "YulIdentifier",
                                "src": "16842:3:105"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "16842:37:105"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "16830:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "16830:50:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "16830:50:105"
                      },
                      {
                        "nodeType": "YulVariableDeclaration",
                        "src": "16893:23:105",
                        "value": {
                          "arguments": [
                            {
                              "name": "srcPtr",
                              "nodeType": "YulIdentifier",
                              "src": "16909:6:105"
                            }
                          ],
                          "functionName": {
                            "name": "mload",
                            "nodeType": "YulIdentifier",
                            "src": "16903:5:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "16903:13:105"
                        },
                        "variables": [
                          {
                            "name": "_7",
                            "nodeType": "YulTypedName",
                            "src": "16897:2:105",
                            "type": ""
                          }
                        ]
                      },
                      {
                        "nodeType": "YulVariableDeclaration",
                        "src": "16929:14:105",
                        "value": {
                          "kind": "number",
                          "nodeType": "YulLiteral",
                          "src": "16939:4:105",
                          "type": "",
                          "value": "0xc0"
                        },
                        "variables": [
                          {
                            "name": "_8",
                            "nodeType": "YulTypedName",
                            "src": "16933:2:105",
                            "type": ""
                          }
                        ]
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "name": "tail_2",
                              "nodeType": "YulIdentifier",
                              "src": "16963:6:105"
                            },
                            {
                              "arguments": [
                                {
                                  "name": "_7",
                                  "nodeType": "YulIdentifier",
                                  "src": "16977:2:105"
                                }
                              ],
                              "functionName": {
                                "name": "mload",
                                "nodeType": "YulIdentifier",
                                "src": "16971:5:105"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "16971:9:105"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "16956:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "16956:25:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "16956:25:105"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "name": "tail_2",
                                  "nodeType": "YulIdentifier",
                                  "src": "17005:6:105"
                                },
                                {
                                  "name": "_3",
                                  "nodeType": "YulIdentifier",
                                  "src": "17013:2:105"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nodeType": "YulIdentifier",
                                "src": "17001:3:105"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "17001:15:105"
                            },
                            {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "arguments": [
                                        {
                                          "name": "_7",
                                          "nodeType": "YulIdentifier",
                                          "src": "17032:2:105"
                                        },
                                        {
                                          "name": "_3",
                                          "nodeType": "YulIdentifier",
                                          "src": "17036:2:105"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "17028:3:105"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "17028:11:105"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "mload",
                                    "nodeType": "YulIdentifier",
                                    "src": "17022:5:105"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "17022:18:105"
                                },
                                {
                                  "name": "_2",
                                  "nodeType": "YulIdentifier",
                                  "src": "17042:2:105"
                                }
                              ],
                              "functionName": {
                                "name": "and",
                                "nodeType": "YulIdentifier",
                                "src": "17018:3:105"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "17018:27:105"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "16994:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "16994:52:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "16994:52:105"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "name": "tail_2",
                                  "nodeType": "YulIdentifier",
                                  "src": "17070:6:105"
                                },
                                {
                                  "name": "_4",
                                  "nodeType": "YulIdentifier",
                                  "src": "17078:2:105"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nodeType": "YulIdentifier",
                                "src": "17066:3:105"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "17066:15:105"
                            },
                            {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "arguments": [
                                        {
                                          "name": "_7",
                                          "nodeType": "YulIdentifier",
                                          "src": "17097:2:105"
                                        },
                                        {
                                          "name": "_4",
                                          "nodeType": "YulIdentifier",
                                          "src": "17101:2:105"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "17093:3:105"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "17093:11:105"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "mload",
                                    "nodeType": "YulIdentifier",
                                    "src": "17087:5:105"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "17087:18:105"
                                },
                                {
                                  "name": "_2",
                                  "nodeType": "YulIdentifier",
                                  "src": "17107:2:105"
                                }
                              ],
                              "functionName": {
                                "name": "and",
                                "nodeType": "YulIdentifier",
                                "src": "17083:3:105"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "17083:27:105"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "17059:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "17059:52:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "17059:52:105"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "name": "tail_2",
                                  "nodeType": "YulIdentifier",
                                  "src": "17135:6:105"
                                },
                                {
                                  "name": "_5",
                                  "nodeType": "YulIdentifier",
                                  "src": "17143:2:105"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nodeType": "YulIdentifier",
                                "src": "17131:3:105"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "17131:15:105"
                            },
                            {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "arguments": [
                                        {
                                          "name": "_7",
                                          "nodeType": "YulIdentifier",
                                          "src": "17162:2:105"
                                        },
                                        {
                                          "name": "_5",
                                          "nodeType": "YulIdentifier",
                                          "src": "17166:2:105"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "17158:3:105"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "17158:11:105"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "mload",
                                    "nodeType": "YulIdentifier",
                                    "src": "17152:5:105"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "17152:18:105"
                                },
                                {
                                  "name": "_2",
                                  "nodeType": "YulIdentifier",
                                  "src": "17172:2:105"
                                }
                              ],
                              "functionName": {
                                "name": "and",
                                "nodeType": "YulIdentifier",
                                "src": "17148:3:105"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "17148:27:105"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "17124:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "17124:52:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "17124:52:105"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "name": "tail_2",
                                  "nodeType": "YulIdentifier",
                                  "src": "17200:6:105"
                                },
                                {
                                  "name": "_1",
                                  "nodeType": "YulIdentifier",
                                  "src": "17208:2:105"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nodeType": "YulIdentifier",
                                "src": "17196:3:105"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "17196:15:105"
                            },
                            {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "arguments": [
                                        {
                                          "name": "_7",
                                          "nodeType": "YulIdentifier",
                                          "src": "17227:2:105"
                                        },
                                        {
                                          "name": "_1",
                                          "nodeType": "YulIdentifier",
                                          "src": "17231:2:105"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "17223:3:105"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "17223:11:105"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "mload",
                                    "nodeType": "YulIdentifier",
                                    "src": "17217:5:105"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "17217:18:105"
                                },
                                {
                                  "name": "_2",
                                  "nodeType": "YulIdentifier",
                                  "src": "17237:2:105"
                                }
                              ],
                              "functionName": {
                                "name": "and",
                                "nodeType": "YulIdentifier",
                                "src": "17213:3:105"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "17213:27:105"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "17189:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "17189:52:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "17189:52:105"
                      },
                      {
                        "nodeType": "YulVariableDeclaration",
                        "src": "17254:38:105",
                        "value": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "name": "_7",
                                  "nodeType": "YulIdentifier",
                                  "src": "17284:2:105"
                                },
                                {
                                  "name": "_6",
                                  "nodeType": "YulIdentifier",
                                  "src": "17288:2:105"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nodeType": "YulIdentifier",
                                "src": "17280:3:105"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "17280:11:105"
                            }
                          ],
                          "functionName": {
                            "name": "mload",
                            "nodeType": "YulIdentifier",
                            "src": "17274:5:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "17274:18:105"
                        },
                        "variables": [
                          {
                            "name": "memberValue0",
                            "nodeType": "YulTypedName",
                            "src": "17258:12:105",
                            "type": ""
                          }
                        ]
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "name": "tail_2",
                                  "nodeType": "YulIdentifier",
                                  "src": "17316:6:105"
                                },
                                {
                                  "name": "_6",
                                  "nodeType": "YulIdentifier",
                                  "src": "17324:2:105"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nodeType": "YulIdentifier",
                                "src": "17312:3:105"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "17312:15:105"
                            },
                            {
                              "name": "_8",
                              "nodeType": "YulIdentifier",
                              "src": "17329:2:105"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "17305:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "17305:27:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "17305:27:105"
                      },
                      {
                        "nodeType": "YulAssignment",
                        "src": "17345:57:105",
                        "value": {
                          "arguments": [
                            {
                              "name": "memberValue0",
                              "nodeType": "YulIdentifier",
                              "src": "17372:12:105"
                            },
                            {
                              "arguments": [
                                {
                                  "name": "tail_2",
                                  "nodeType": "YulIdentifier",
                                  "src": "17390:6:105"
                                },
                                {
                                  "name": "_8",
                                  "nodeType": "YulIdentifier",
                                  "src": "17398:2:105"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nodeType": "YulIdentifier",
                                "src": "17386:3:105"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "17386:15:105"
                            }
                          ],
                          "functionName": {
                            "name": "abi_encode_bytes",
                            "nodeType": "YulIdentifier",
                            "src": "17355:16:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "17355:47:105"
                        },
                        "variableNames": [
                          {
                            "name": "tail_2",
                            "nodeType": "YulIdentifier",
                            "src": "17345:6:105"
                          }
                        ]
                      },
                      {
                        "nodeType": "YulAssignment",
                        "src": "17415:25:105",
                        "value": {
                          "arguments": [
                            {
                              "name": "srcPtr",
                              "nodeType": "YulIdentifier",
                              "src": "17429:6:105"
                            },
                            {
                              "name": "_3",
                              "nodeType": "YulIdentifier",
                              "src": "17437:2:105"
                            }
                          ],
                          "functionName": {
                            "name": "add",
                            "nodeType": "YulIdentifier",
                            "src": "17425:3:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "17425:15:105"
                        },
                        "variableNames": [
                          {
                            "name": "srcPtr",
                            "nodeType": "YulIdentifier",
                            "src": "17415:6:105"
                          }
                        ]
                      },
                      {
                        "nodeType": "YulAssignment",
                        "src": "17453:19:105",
                        "value": {
                          "arguments": [
                            {
                              "name": "pos",
                              "nodeType": "YulIdentifier",
                              "src": "17464:3:105"
                            },
                            {
                              "name": "_3",
                              "nodeType": "YulIdentifier",
                              "src": "17469:2:105"
                            }
                          ],
                          "functionName": {
                            "name": "add",
                            "nodeType": "YulIdentifier",
                            "src": "17460:3:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "17460:12:105"
                        },
                        "variableNames": [
                          {
                            "name": "pos",
                            "nodeType": "YulIdentifier",
                            "src": "17453:3:105"
                          }
                        ]
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "i",
                        "nodeType": "YulIdentifier",
                        "src": "16778:1:105"
                      },
                      {
                        "name": "length",
                        "nodeType": "YulIdentifier",
                        "src": "16781:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "lt",
                      "nodeType": "YulIdentifier",
                      "src": "16775:2:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "16775:13:105"
                  },
                  "nodeType": "YulForLoop",
                  "post": {
                    "nodeType": "YulBlock",
                    "src": "16789:18:105",
                    "statements": [
                      {
                        "nodeType": "YulAssignment",
                        "src": "16791:14:105",
                        "value": {
                          "arguments": [
                            {
                              "name": "i",
                              "nodeType": "YulIdentifier",
                              "src": "16800:1:105"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "16803:1:105",
                              "type": "",
                              "value": "1"
                            }
                          ],
                          "functionName": {
                            "name": "add",
                            "nodeType": "YulIdentifier",
                            "src": "16796:3:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "16796:9:105"
                        },
                        "variableNames": [
                          {
                            "name": "i",
                            "nodeType": "YulIdentifier",
                            "src": "16791:1:105"
                          }
                        ]
                      }
                    ]
                  },
                  "pre": {
                    "nodeType": "YulBlock",
                    "src": "16771:3:105",
                    "statements": []
                  },
                  "src": "16767:715:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "17491:14:105",
                  "value": {
                    "name": "tail_2",
                    "nodeType": "YulIdentifier",
                    "src": "17499:6:105"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "17491:4:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_address_t_address_payable_t_uint256_t_array$_t_struct$_Action_$12721_memory_ptr_$dyn_memory_ptr__to_t_address_t_address_payable_t_uint256_t_array$_t_struct$_Action_$12721_memory_ptr_$dyn_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "16093:9:105",
                "type": ""
              },
              {
                "name": "value3",
                "nodeType": "YulTypedName",
                "src": "16104:6:105",
                "type": ""
              },
              {
                "name": "value2",
                "nodeType": "YulTypedName",
                "src": "16112:6:105",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "16120:6:105",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "16128:6:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "16139:4:105",
                "type": ""
              }
            ],
            "src": "15847:1664:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "17709:262:105",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "17719:27:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "17731:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "17742:3:105",
                        "type": "",
                        "value": "128"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "17727:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "17727:19:105"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "17719:4:105"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "17762:9:105"
                      },
                      {
                        "name": "value0",
                        "nodeType": "YulIdentifier",
                        "src": "17773:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "17755:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "17755:25:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "17755:25:105"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "17789:29:105",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "17807:3:105",
                            "type": "",
                            "value": "160"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "17812:1:105",
                            "type": "",
                            "value": "1"
                          }
                        ],
                        "functionName": {
                          "name": "shl",
                          "nodeType": "YulIdentifier",
                          "src": "17803:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "17803:11:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "17816:1:105",
                        "type": "",
                        "value": "1"
                      }
                    ],
                    "functionName": {
                      "name": "sub",
                      "nodeType": "YulIdentifier",
                      "src": "17799:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "17799:19:105"
                  },
                  "variables": [
                    {
                      "name": "_1",
                      "nodeType": "YulTypedName",
                      "src": "17793:2:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "17838:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "17849:2:105",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "17834:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "17834:18:105"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value1",
                            "nodeType": "YulIdentifier",
                            "src": "17858:6:105"
                          },
                          {
                            "name": "_1",
                            "nodeType": "YulIdentifier",
                            "src": "17866:2:105"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "17854:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "17854:15:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "17827:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "17827:43:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "17827:43:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "17890:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "17901:2:105",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "17886:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "17886:18:105"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value2",
                            "nodeType": "YulIdentifier",
                            "src": "17910:6:105"
                          },
                          {
                            "name": "_1",
                            "nodeType": "YulIdentifier",
                            "src": "17918:2:105"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "17906:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "17906:15:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "17879:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "17879:43:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "17879:43:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "17942:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "17953:2:105",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "17938:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "17938:18:105"
                      },
                      {
                        "name": "value3",
                        "nodeType": "YulIdentifier",
                        "src": "17958:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "17931:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "17931:34:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "17931:34:105"
                }
              ]
            },
            "name": "abi_encode_tuple_t_bytes32_t_address_t_address_payable_t_uint256__to_t_bytes32_t_address_t_address_t_uint256__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "17654:9:105",
                "type": ""
              },
              {
                "name": "value3",
                "nodeType": "YulTypedName",
                "src": "17665:6:105",
                "type": ""
              },
              {
                "name": "value2",
                "nodeType": "YulTypedName",
                "src": "17673:6:105",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "17681:6:105",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "17689:6:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "17700:4:105",
                "type": ""
              }
            ],
            "src": "17516:455:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "18111:156:105",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "18121:26:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "18133:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "18144:2:105",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "18129:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "18129:18:105"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "18121:4:105"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "18163:9:105"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value0",
                            "nodeType": "YulIdentifier",
                            "src": "18178:6:105"
                          },
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "18194:3:105",
                                    "type": "",
                                    "value": "160"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "18199:1:105",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "shl",
                                  "nodeType": "YulIdentifier",
                                  "src": "18190:3:105"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "18190:11:105"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "18203:1:105",
                                "type": "",
                                "value": "1"
                              }
                            ],
                            "functionName": {
                              "name": "sub",
                              "nodeType": "YulIdentifier",
                              "src": "18186:3:105"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "18186:19:105"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "18174:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "18174:32:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "18156:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "18156:51:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "18156:51:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "18227:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "18238:2:105",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "18223:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "18223:18:105"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value1",
                            "nodeType": "YulIdentifier",
                            "src": "18247:6:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "18255:4:105",
                            "type": "",
                            "value": "0xff"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "18243:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "18243:17:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "18216:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "18216:45:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "18216:45:105"
                }
              ]
            },
            "name": "abi_encode_tuple_t_address_t_rational_0_by_1__to_t_address_t_uint8__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "18072:9:105",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "18083:6:105",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "18091:6:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "18102:4:105",
                "type": ""
              }
            ],
            "src": "17976:291:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "18401:145:105",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "18411:26:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "18423:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "18434:2:105",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "18419:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "18419:18:105"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "18411:4:105"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "18453:9:105"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value0",
                            "nodeType": "YulIdentifier",
                            "src": "18468:6:105"
                          },
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "18484:3:105",
                                    "type": "",
                                    "value": "160"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "18489:1:105",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "shl",
                                  "nodeType": "YulIdentifier",
                                  "src": "18480:3:105"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "18480:11:105"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "18493:1:105",
                                "type": "",
                                "value": "1"
                              }
                            ],
                            "functionName": {
                              "name": "sub",
                              "nodeType": "YulIdentifier",
                              "src": "18476:3:105"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "18476:19:105"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "18464:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "18464:32:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "18446:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "18446:51:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "18446:51:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "18517:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "18528:2:105",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "18513:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "18513:18:105"
                      },
                      {
                        "name": "value1",
                        "nodeType": "YulIdentifier",
                        "src": "18533:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "18506:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "18506:34:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "18506:34:105"
                }
              ]
            },
            "name": "abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "18362:9:105",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "18373:6:105",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "18381:6:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "18392:4:105",
                "type": ""
              }
            ],
            "src": "18272:274:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "18583:95:105",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "18600:1:105",
                        "type": "",
                        "value": "0"
                      },
                      {
                        "arguments": [
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "18607:3:105",
                            "type": "",
                            "value": "224"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "18612:10:105",
                            "type": "",
                            "value": "0x4e487b71"
                          }
                        ],
                        "functionName": {
                          "name": "shl",
                          "nodeType": "YulIdentifier",
                          "src": "18603:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "18603:20:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "18593:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "18593:31:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "18593:31:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "18640:1:105",
                        "type": "",
                        "value": "4"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "18643:4:105",
                        "type": "",
                        "value": "0x31"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "18633:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "18633:15:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "18633:15:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "18664:1:105",
                        "type": "",
                        "value": "0"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "18667:4:105",
                        "type": "",
                        "value": "0x24"
                      }
                    ],
                    "functionName": {
                      "name": "revert",
                      "nodeType": "YulIdentifier",
                      "src": "18657:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "18657:15:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "18657:15:105"
                }
              ]
            },
            "name": "panic_error_0x31",
            "nodeType": "YulFunctionDefinition",
            "src": "18551:127:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "18761:199:105",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "18807:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "18816:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "18819:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "18809:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "18809:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "18809:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "18782:7:105"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "18791:9:105"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "18778:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "18778:23:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "18803:2:105",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "18774:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "18774:32:105"
                  },
                  "nodeType": "YulIf",
                  "src": "18771:52:105"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "18832:29:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "18851:9:105"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nodeType": "YulIdentifier",
                      "src": "18845:5:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "18845:16:105"
                  },
                  "variables": [
                    {
                      "name": "value",
                      "nodeType": "YulTypedName",
                      "src": "18836:5:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "18914:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "18923:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "18926:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "18916:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "18916:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "18916:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "value",
                            "nodeType": "YulIdentifier",
                            "src": "18883:5:105"
                          },
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "18904:5:105"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "18897:6:105"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "18897:13:105"
                              }
                            ],
                            "functionName": {
                              "name": "iszero",
                              "nodeType": "YulIdentifier",
                              "src": "18890:6:105"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "18890:21:105"
                          }
                        ],
                        "functionName": {
                          "name": "eq",
                          "nodeType": "YulIdentifier",
                          "src": "18880:2:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "18880:32:105"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "18873:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "18873:40:105"
                  },
                  "nodeType": "YulIf",
                  "src": "18870:60:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "18939:15:105",
                  "value": {
                    "name": "value",
                    "nodeType": "YulIdentifier",
                    "src": "18949:5:105"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "18939:6:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_bool_fromMemory",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "18727:9:105",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "18738:7:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "18750:6:105",
                "type": ""
              }
            ],
            "src": "18683:277:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "19139:232:105",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "19156:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "19167:2:105",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "19149:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "19149:21:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "19149:21:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "19190:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "19201:2:105",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "19186:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "19186:18:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "19206:2:105",
                        "type": "",
                        "value": "42"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "19179:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "19179:30:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "19179:30:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "19229:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "19240:2:105",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "19225:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "19225:18:105"
                      },
                      {
                        "hexValue": "5361666545524332303a204552433230206f7065726174696f6e20646964206e",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "19245:34:105",
                        "type": "",
                        "value": "SafeERC20: ERC20 operation did n"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "19218:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "19218:62:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "19218:62:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "19300:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "19311:2:105",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "19296:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "19296:18:105"
                      },
                      {
                        "hexValue": "6f742073756363656564",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "19316:12:105",
                        "type": "",
                        "value": "ot succeed"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "19289:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "19289:40:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "19289:40:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "19338:27:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "19350:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "19361:3:105",
                        "type": "",
                        "value": "128"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "19346:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "19346:19:105"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "19338:4:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "19116:9:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "19130:4:105",
                "type": ""
              }
            ],
            "src": "18965:406:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "19550:228:105",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "19567:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "19578:2:105",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "19560:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "19560:21:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "19560:21:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "19601:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "19612:2:105",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "19597:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "19597:18:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "19617:2:105",
                        "type": "",
                        "value": "38"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "19590:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "19590:30:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "19590:30:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "19640:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "19651:2:105",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "19636:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "19636:18:105"
                      },
                      {
                        "hexValue": "416464726573733a20696e73756666696369656e742062616c616e636520666f",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "19656:34:105",
                        "type": "",
                        "value": "Address: insufficient balance fo"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "19629:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "19629:62:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "19629:62:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "19711:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "19722:2:105",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "19707:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "19707:18:105"
                      },
                      {
                        "hexValue": "722063616c6c",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "19727:8:105",
                        "type": "",
                        "value": "r call"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "19700:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "19700:36:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "19700:36:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "19745:27:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "19757:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "19768:3:105",
                        "type": "",
                        "value": "128"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "19753:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "19753:19:105"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "19745:4:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "19527:9:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "19541:4:105",
                "type": ""
              }
            ],
            "src": "19376:402:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "19957:179:105",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "19974:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "19985:2:105",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "19967:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "19967:21:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "19967:21:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "20008:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "20019:2:105",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "20004:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "20004:18:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "20024:2:105",
                        "type": "",
                        "value": "29"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "19997:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "19997:30:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "19997:30:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "20047:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "20058:2:105",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "20043:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "20043:18:105"
                      },
                      {
                        "hexValue": "416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "20063:31:105",
                        "type": "",
                        "value": "Address: call to non-contract"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "20036:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "20036:59:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "20036:59:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "20104:26:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "20116:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "20127:2:105",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "20112:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "20112:18:105"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "20104:4:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "19934:9:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "19948:4:105",
                "type": ""
              }
            ],
            "src": "19783:353:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "20262:98:105",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "20279:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "20290:2:105",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "20272:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "20272:21:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "20272:21:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "20302:52:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "value0",
                        "nodeType": "YulIdentifier",
                        "src": "20327:6:105"
                      },
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "20339:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "20350:2:105",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "20335:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "20335:18:105"
                      }
                    ],
                    "functionName": {
                      "name": "abi_encode_bytes",
                      "nodeType": "YulIdentifier",
                      "src": "20310:16:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "20310:44:105"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "20302:4:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "20231:9:105",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "20242:6:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "20253:4:105",
                "type": ""
              }
            ],
            "src": "20141:219:105"
          }
        ]
      },
      "contents": "{\n    { }\n    function abi_decode_tuple_t_bytes4(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        if iszero(eq(value, and(value, shl(224, 0xffffffff)))) { revert(0, 0) }\n        value0 := value\n    }\n    function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, iszero(iszero(value0)))\n    }\n    function validator_revert_address(value)\n    {\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function abi_decode_address(offset) -> value\n    {\n        value := calldataload(offset)\n        validator_revert_address(value)\n    }\n    function panic_error_0x41()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n    function allocate_memory_3302() -> memPtr\n    {\n        memPtr := mload(64)\n        let newFreePtr := add(memPtr, 0xc0)\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n    }\n    function allocate_memory(size) -> memPtr\n    {\n        memPtr := mload(64)\n        let newFreePtr := add(memPtr, and(add(size, 31), not(31)))\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n    }\n    function array_allocation_size_bytes(length) -> size\n    {\n        if gt(length, 0xffffffffffffffff) { panic_error_0x41() }\n        size := add(and(add(length, 31), not(31)), 0x20)\n    }\n    function abi_decode_bytes(offset, end) -> array\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        let _1 := calldataload(offset)\n        let array_1 := allocate_memory(array_allocation_size_bytes(_1))\n        mstore(array_1, _1)\n        if gt(add(add(offset, _1), 0x20), end) { revert(0, 0) }\n        calldatacopy(add(array_1, 0x20), add(offset, 0x20), _1)\n        mstore(add(add(array_1, _1), 0x20), 0)\n        array := array_1\n    }\n    function abi_decode_tuple_t_addresst_addresst_uint256t_bytes_memory_ptr(headStart, dataEnd) -> value0, value1, value2, value3\n    {\n        if slt(sub(dataEnd, headStart), 128) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n        value2 := calldataload(add(headStart, 64))\n        let offset := calldataload(add(headStart, 96))\n        if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n        value3 := abi_decode_bytes(add(headStart, offset), dataEnd)\n    }\n    function abi_encode_tuple_t_bytes4__to_t_bytes4__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, shl(224, 0xffffffff)))\n    }\n    function abi_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_bytes32__to_t_bytes32__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_decode_tuple_t_bytes32t_address(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := calldataload(headStart)\n        let value := calldataload(add(headStart, 32))\n        validator_revert_address(value)\n        value1 := value\n    }\n    function abi_decode_tuple_t_addresst_address(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n    }\n    function abi_decode_tuple_t_addresst_uint256t_bytes_memory_ptr(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        value1 := calldataload(add(headStart, 32))\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_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_decode_tuple_t_bytes32t_uint256(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := calldataload(headStart)\n        value1 := calldataload(add(headStart, 32))\n    }\n    function 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 array_allocation_size_array_uint256_dyn(length) -> size\n    {\n        if gt(length, 0xffffffffffffffff) { panic_error_0x41() }\n        size := add(shl(5, length), 0x20)\n    }\n    function abi_decode_array_uint256_dyn(offset, end) -> array\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        let _1 := calldataload(offset)\n        let _2 := 0x20\n        let dst := allocate_memory(array_allocation_size_array_uint256_dyn(_1))\n        let dst_1 := dst\n        mstore(dst, _1)\n        dst := add(dst, _2)\n        let srcEnd := add(add(offset, shl(5, _1)), _2)\n        if gt(srcEnd, end) { revert(0, 0) }\n        let src := add(offset, _2)\n        for { } lt(src, srcEnd) { src := add(src, _2) }\n        {\n            mstore(dst, calldataload(src))\n            dst := add(dst, _2)\n        }\n        array := dst_1\n    }\n    function abi_decode_tuple_t_addresst_addresst_array$_t_uint256_$dyn_memory_ptrt_array$_t_uint256_$dyn_memory_ptrt_bytes_memory_ptr(headStart, dataEnd) -> value0, value1, value2, value3, value4\n    {\n        if slt(sub(dataEnd, headStart), 160) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n        let offset := calldataload(add(headStart, 64))\n        let _1 := 0xffffffffffffffff\n        if gt(offset, _1) { revert(0, 0) }\n        value2 := abi_decode_array_uint256_dyn(add(headStart, offset), dataEnd)\n        let offset_1 := calldataload(add(headStart, 96))\n        if gt(offset_1, _1) { revert(0, 0) }\n        value3 := abi_decode_array_uint256_dyn(add(headStart, offset_1), dataEnd)\n        let offset_2 := calldataload(add(headStart, 128))\n        if gt(offset_2, _1) { revert(0, 0) }\n        value4 := abi_decode_bytes(add(headStart, offset_2), dataEnd)\n    }\n    function abi_decode_tuple_t_addresst_address_payablet_uint256t_array$_t_struct$_Action_$12721_memory_ptr_$dyn_memory_ptr(headStart, dataEnd) -> value0, value1, value2, value3\n    {\n        if slt(sub(dataEnd, headStart), 128) { revert(0, 0) }\n        validator_revert_address(calldataload(headStart))\n        value0 := calldataload(headStart)\n        let value := calldataload(add(headStart, 32))\n        validator_revert_address(value)\n        value1 := value\n        value2 := calldataload(add(headStart, 64))\n        let offset := calldataload(add(headStart, 96))\n        let _1 := 0xffffffffffffffff\n        if gt(offset, _1) { revert(0, 0) }\n        let _2 := add(headStart, offset)\n        if iszero(slt(add(_2, 0x1f), dataEnd)) { revert(0, 0) }\n        let _3 := calldataload(_2)\n        let dst := allocate_memory(array_allocation_size_array_uint256_dyn(_3))\n        let dst_1 := dst\n        mstore(dst, _3)\n        dst := add(dst, 32)\n        let srcEnd := add(add(_2, shl(5, _3)), 32)\n        if gt(srcEnd, dataEnd) { revert(0, 0) }\n        let src := add(_2, 32)\n        for { } lt(src, srcEnd) { src := add(src, 32) }\n        {\n            if gt(calldataload(src), _1) { revert(0, 0) }\n            let _4 := add(_2, calldataload(src))\n            if slt(add(sub(dataEnd, _4), not(31)), 0xc0) { revert(0, 0) }\n            let value_1 := allocate_memory_3302()\n            mstore(value_1, calldataload(add(_4, 32)))\n            let value_2 := calldataload(add(_4, 64))\n            validator_revert_address(value_2)\n            mstore(add(value_1, 32), value_2)\n            let value_3 := calldataload(add(_4, 96))\n            validator_revert_address(value_3)\n            mstore(add(value_1, 64), value_3)\n            let value_4 := calldataload(add(_4, 128))\n            validator_revert_address(value_4)\n            mstore(add(value_1, 96), value_4)\n            mstore(add(value_1, 128), abi_decode_address(add(_4, 160)))\n            let offset_1 := calldataload(add(_4, 0xc0))\n            if gt(offset_1, _1) { revert(0, 0) }\n            mstore(add(value_1, 160), abi_decode_bytes(add(add(_4, offset_1), 32), dataEnd))\n            mstore(dst, value_1)\n            dst := add(dst, 32)\n        }\n        value3 := dst_1\n    }\n    function abi_decode_tuple_t_addresst_addresst_uint256t_uint256t_bytes_memory_ptr(headStart, dataEnd) -> value0, value1, value2, value3, value4\n    {\n        if slt(sub(dataEnd, headStart), 160) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n        value2 := calldataload(add(headStart, 64))\n        value3 := calldataload(add(headStart, 96))\n        let offset := calldataload(add(headStart, 128))\n        if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n        value4 := abi_decode_bytes(add(headStart, offset), dataEnd)\n    }\n    function abi_encode_tuple_t_stringliteral_0ba7116025f1ef6b158a2bd2238e617f30e17c9e456917d901086ca4f8ad2811__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 47)\n        mstore(add(headStart, 64), \"AccessControl: sender must be an\")\n        mstore(add(headStart, 96), \" admin to grant\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_fb06fa8ff2141e8ed74502f6792273793f25f0e9d3cf15344f3f5a0d4948fd4b__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 47)\n        mstore(add(headStart, 64), \"AccessControl: can only renounce\")\n        mstore(add(headStart, 96), \" roles for self\")\n        tail := add(headStart, 128)\n    }\n    function abi_decode_address_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        validator_revert_address(value)\n    }\n    function copy_memory_to_memory(src, dst, length)\n    {\n        let i := 0\n        for { } lt(i, length) { i := add(i, 32) }\n        {\n            mstore(add(dst, i), mload(add(src, i)))\n        }\n        if gt(i, length) { mstore(add(dst, length), 0) }\n    }\n    function abi_decode_bytes_fromMemory(offset, end) -> array\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        let _1 := mload(offset)\n        let array_1 := allocate_memory(array_allocation_size_bytes(_1))\n        mstore(array_1, _1)\n        if gt(add(add(offset, _1), 0x20), end) { revert(0, 0) }\n        copy_memory_to_memory(add(offset, 0x20), add(array_1, 0x20), _1)\n        array := array_1\n    }\n    function abi_decode_tuple_t_bytes32t_array$_t_struct$_Action_$12721_memory_ptr_$dyn_memory_ptrt_address_payable_fromMemory(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        value0 := mload(headStart)\n        let _1 := 32\n        let offset := mload(add(headStart, _1))\n        let _2 := 0xffffffffffffffff\n        if gt(offset, _2) { revert(0, 0) }\n        let _3 := add(headStart, offset)\n        if iszero(slt(add(_3, 0x1f), dataEnd)) { revert(0, 0) }\n        let _4 := mload(_3)\n        let dst := allocate_memory(array_allocation_size_array_uint256_dyn(_4))\n        let dst_1 := dst\n        mstore(dst, _4)\n        dst := add(dst, _1)\n        let srcEnd := add(add(_3, shl(5, _4)), _1)\n        if gt(srcEnd, dataEnd) { revert(0, 0) }\n        let src := add(_3, _1)\n        for { } lt(src, srcEnd) { src := add(src, _1) }\n        {\n            let innerOffset := mload(src)\n            if gt(innerOffset, _2) { revert(0, 0) }\n            let _5 := add(_3, innerOffset)\n            if slt(add(sub(dataEnd, _5), not(31)), 0xc0) { revert(0, 0) }\n            let value := allocate_memory_3302()\n            mstore(value, mload(add(_5, _1)))\n            let value_1 := mload(add(_5, 64))\n            validator_revert_address(value_1)\n            mstore(add(value, _1), value_1)\n            let value_2 := mload(add(_5, 96))\n            validator_revert_address(value_2)\n            mstore(add(value, 64), value_2)\n            let value_3 := mload(add(_5, 128))\n            validator_revert_address(value_3)\n            mstore(add(value, 96), value_3)\n            mstore(add(value, 128), abi_decode_address_fromMemory(add(_5, 160)))\n            let offset_1 := mload(add(_5, 0xc0))\n            if gt(offset_1, _2)\n            {\n                let _6 := 0\n                revert(_6, _6)\n            }\n            mstore(add(value, 160), abi_decode_bytes_fromMemory(add(add(_5, offset_1), _1), dataEnd))\n            mstore(dst, value)\n            dst := add(dst, _1)\n        }\n        value1 := dst_1\n        value2 := abi_decode_address_fromMemory(add(headStart, 64))\n    }\n    function panic_error_0x32()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x32)\n        revert(0, 0x24)\n    }\n    function abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value0) -> end\n    {\n        let length := mload(value0)\n        copy_memory_to_memory(add(value0, 0x20), pos, length)\n        end := add(pos, length)\n    }\n    function panic_error_0x11()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x11)\n        revert(0, 0x24)\n    }\n    function increment_t_uint256(value) -> ret\n    {\n        if eq(value, not(0)) { panic_error_0x11() }\n        ret := add(value, 1)\n    }\n    function abi_encode_tuple_t_stringliteral_64344570eab7406ca49d34d38bf2b2496dfda914405390c5057c8b0aabf798a3__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 48)\n        mstore(add(headStart, 64), \"AccessControl: sender must be an\")\n        mstore(add(headStart, 96), \" admin to revoke\")\n        tail := add(headStart, 128)\n    }\n    function abi_decode_tuple_t_uint256_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := mload(headStart)\n    }\n    function abi_encode_tuple_packed_t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos) -> end\n    { end := pos }\n    function checked_sub_t_uint256(x, y) -> diff\n    {\n        if lt(x, y) { panic_error_0x11() }\n        diff := sub(x, y)\n    }\n    function abi_encode_bytes(value, pos) -> end\n    {\n        let length := mload(value)\n        mstore(pos, length)\n        copy_memory_to_memory(add(value, 0x20), add(pos, 0x20), length)\n        end := add(add(pos, and(add(length, 31), not(31))), 0x20)\n    }\n    function abi_encode_tuple_t_address_t_address_payable_t_uint256_t_array$_t_struct$_Action_$12721_memory_ptr_$dyn_memory_ptr__to_t_address_t_address_payable_t_uint256_t_array$_t_struct$_Action_$12721_memory_ptr_$dyn_memory_ptr__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        let _1 := 128\n        let tail_1 := add(headStart, _1)\n        let _2 := sub(shl(160, 1), 1)\n        mstore(headStart, and(value0, _2))\n        let _3 := 32\n        mstore(add(headStart, _3), and(value1, _2))\n        let _4 := 64\n        mstore(add(headStart, _4), value2)\n        let _5 := 96\n        mstore(add(headStart, _5), _1)\n        let pos := tail_1\n        let length := mload(value3)\n        mstore(tail_1, length)\n        let _6 := 160\n        pos := add(headStart, _6)\n        let tail_2 := add(add(headStart, shl(5, length)), _6)\n        let srcPtr := add(value3, _3)\n        let i := 0\n        for { } lt(i, length) { i := add(i, 1) }\n        {\n            mstore(pos, add(sub(tail_2, headStart), not(159)))\n            let _7 := mload(srcPtr)\n            let _8 := 0xc0\n            mstore(tail_2, mload(_7))\n            mstore(add(tail_2, _3), and(mload(add(_7, _3)), _2))\n            mstore(add(tail_2, _4), and(mload(add(_7, _4)), _2))\n            mstore(add(tail_2, _5), and(mload(add(_7, _5)), _2))\n            mstore(add(tail_2, _1), and(mload(add(_7, _1)), _2))\n            let memberValue0 := mload(add(_7, _6))\n            mstore(add(tail_2, _6), _8)\n            tail_2 := abi_encode_bytes(memberValue0, add(tail_2, _8))\n            srcPtr := add(srcPtr, _3)\n            pos := add(pos, _3)\n        }\n        tail := tail_2\n    }\n    function abi_encode_tuple_t_bytes32_t_address_t_address_payable_t_uint256__to_t_bytes32_t_address_t_address_t_uint256__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 128)\n        mstore(headStart, value0)\n        let _1 := sub(shl(160, 1), 1)\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), and(value2, _1))\n        mstore(add(headStart, 96), value3)\n    }\n    function abi_encode_tuple_t_address_t_rational_0_by_1__to_t_address_t_uint8__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n        mstore(add(headStart, 32), and(value1, 0xff))\n    }\n    function abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n        mstore(add(headStart, 32), value1)\n    }\n    function panic_error_0x31()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x31)\n        revert(0, 0x24)\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_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 42)\n        mstore(add(headStart, 64), \"SafeERC20: ERC20 operation did n\")\n        mstore(add(headStart, 96), \"ot succeed\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c__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), \"Address: insufficient balance fo\")\n        mstore(add(headStart, 96), \"r call\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 29)\n        mstore(add(headStart, 64), \"Address: call to non-contract\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        mstore(headStart, 32)\n        tail := abi_encode_bytes(value0, add(headStart, 32))\n    }\n}",
      "id": 105,
      "language": "Yul",
      "name": "#utility.yul"
    }
  ],
  "sourceMap": "532:8513:71:-:0;;;1692:287;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1766:24;;;;1800:42;2054:4:96;1831:10:71;1800;:42::i;:::-;1857:6;1852:121;1873:13;:20;1869:1;:24;1852:121;;;1914:48;684:31;1945:13;1959:1;1945:16;;;;;;;;:::i;:::-;;;;;;;1914:10;;;:48;;:::i;:::-;1895:3;;;;:::i;:::-;;;;1852:121;;;;1692:287;;532:8513;;6727:110:96;6805:25;6816:4;6822:7;6805:10;:25::i;:::-;6727:110;;:::o;7044:184::-;7117:6;:12;;;;;;;;;;;:33;;7142:7;;7117:24;;;;;:33;;:::i;:::-;7113:109;;;7171:40;;719:10:33;;-1:-1:-1;;;;;7171:40:96;;;7183:4;;7171:40;;;;;7044:184;;:::o;7612:150:42:-;7682:4;7705:50;7710:3;-1:-1:-1;;;;;7730:23:42;;7705:4;:50::i;:::-;7698:57;;7612:150;;;;;:::o;1697:404::-;1760:4;3834:19;;;:12;;;:19;;;;;;1776:319;;-1:-1:-1;1818:23:42;;;;;;;;:11;:23;;;;;;;;;;;;;1998:18;;1976:19;;;:12;;;:19;;;;;;:40;;;;2030:11;;1776:319;-1:-1:-1;2079:5:42;2072:12;;14:127:105;75:10;70:3;66:20;63:1;56:31;106:4;103:1;96:15;130:4;127:1;120:15;146:177;225:13;;-1:-1:-1;;;;;267:31:105;;257:42;;247:70;;313:1;310;303:12;247:70;146:177;;;:::o;328:1192::-;432:6;440;493:2;481:9;472:7;468:23;464:32;461:52;;;509:1;506;499:12;461:52;536:16;;-1:-1:-1;;;;;601:14:105;;;598:34;;;628:1;625;618:12;598:34;666:6;655:9;651:22;641:32;;711:7;704:4;700:2;696:13;692:27;682:55;;733:1;730;723:12;682:55;762:2;756:9;784:4;807:2;803;800:10;797:36;;;813:18;;:::i;:::-;859:2;856:1;852:10;891:2;885:9;954:2;950:7;945:2;941;937:11;933:25;925:6;921:38;1009:6;997:10;994:22;989:2;977:10;974:18;971:46;968:72;;;1020:18;;:::i;:::-;1056:2;1049:22;1106:18;;;1140:15;;;;-1:-1:-1;1182:11:105;;;1178:20;;;1210:19;;;1207:39;;;1242:1;1239;1232:12;1207:39;1266:11;;;;1286:159;1302:6;1297:3;1294:15;1286:159;;;1368:34;1398:3;1368:34;:::i;:::-;1356:47;;1319:12;;;;1423;;;;1286:159;;;1495:18;;;;1489:25;1464:6;;1489:25;;-1:-1:-1;;;;;;;328:1192:105:o;1525:127::-;1586:10;1581:3;1577:20;1574:1;1567:31;1617:4;1614:1;1607:15;1641:4;1638:1;1631:15;1657:232;1696:3;-1:-1:-1;;1717:17:105;;1714:140;;;1776:10;1771:3;1767:20;1764:1;1757:31;1811:4;1808:1;1801:15;1839:4;1836:1;1829:15;1714:140;-1:-1:-1;1881:1:105;1870:13;;1657:232::o;:::-;532:8513:71;;;;;;;;;;;;;;;;;;;;;;;;;;;",
  "deployedSourceMap": "532:8513:71:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;387:221:14;;;;;;;;;;-1:-1:-1;387:221:14;;;;;:::i;:::-;;:::i;:::-;;;470:14:105;;463:22;445:41;;433:2;418:18;387:221:14;;;;;;;;588:200:31;;;;;;;;;;-1:-1:-1;588:200:31;;;;;:::i;:::-;-1:-1:-1;;;588:200:31;;;;;;;;;;-1:-1:-1;;;;;;2932:33:105;;;2914:52;;2902:2;2887:18;588:200:31;2770:202:105;4421:112:96;;;;;;;;;;-1:-1:-1;4421:112:96;;;;;:::i;:::-;4478:7;4504:12;;;;;;;;;;:22;;;;4421:112;;;;3308:25:105;;;3296:2;3281:18;4421:112:96;3162:177:105;4783:223:96;;;;;;;;;;-1:-1:-1;4783:223:96;;;;;:::i;:::-;;:::i;:::-;;5957:205;;;;;;;;;;-1:-1:-1;5957:205:96;;;;;:::i;:::-;;:::i;7908:317:71:-;;;;;;;;;;-1:-1:-1;7908:317:71;;;;;:::i;:::-;;:::i;3402:492::-;;;;;;:::i;:::-;;:::i;4055:185:96:-;;;;;;;;;;-1:-1:-1;4055:185:96;;;;;:::i;:::-;4135:7;4161:12;;;;;;;;;;;-1:-1:-1;;;;;4206:25:96;;4161:72;;:36;;:72;;;;;;4055:185;;;;;3834:136;;;;;;;;;;-1:-1:-1;3834:136:96;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;5184:32:105;;;5166:51;;5154:2;5139:18;3834:136:96;5020:203:105;2819:137:96;;;;;;;;;;-1:-1:-1;2819:137:96;;;;;:::i;:::-;;:::i;779:36:71:-;;;;;;;;;;;;;;;2009:49:96;;;;;;;;;;-1:-1:-1;2009:49:96;2054:4;2009:49;;724:247:13;;;;;;;;;;-1:-1:-1;724:247:13;;;;;:::i;:::-;-1:-1:-1;;;724:247:13;;;;;;;;639:76:71;;;;;;;;;;;;684:31;639:76;;3124:125:96;;;;;;;;;;-1:-1:-1;3124:125:96;;;;;:::i;:::-;;:::i;5514:1225:71:-;;;;;;;;;;-1:-1:-1;5514:1225:71;;;;;:::i;:::-;;:::i;5240:226:96:-;;;;;;;;;;-1:-1:-1;5240:226:96;;;;;:::i;:::-;;:::i;499:219:13:-;;;;;;;;;;-1:-1:-1;499:219:13;;;;;:::i;:::-;-1:-1:-1;;;499:219:13;;;;;;;;387:221:14;489:4;-1:-1:-1;;;;;;512:49:14;;-1:-1:-1;;;512:49:14;;:89;;-1:-1:-1;;;;;;;;;;937:40:38;;;565:36:14;505:96;387:221;-1:-1:-1;;387:221:14:o;4783:223:96:-;4874:6;:12;;;;;;;;;;:22;;;4866:45;;719:10:33;2819:137:96;:::i;4866:45::-;4858:105;;;;-1:-1:-1;;;4858:105:96;;10341:2:105;4858:105:96;;;10323:21:105;10380:2;10360:18;;;10353:30;10419:34;10399:18;;;10392:62;-1:-1:-1;;;10470:18:105;;;10463:45;10525:19;;4858:105:96;;;;;;;;;4974:25;4985:4;4991:7;4974:10;:25::i;:::-;4783:223;;:::o;5957:205::-;-1:-1:-1;;;;;6043:23:96;;719:10:33;6043:23:96;6035:83;;;;-1:-1:-1;;;6035:83:96;;10757:2:105;6035:83:96;;;10739:21:105;10796:2;10776:18;;;10769:30;10835:34;10815:18;;;10808:62;-1:-1:-1;;;10886:18:105;;;10879:45;10941:19;;6035:83:96;10555:411:105;6035:83:96;6129:26;6141:4;6147:7;6129:11;:26::i;7908:317:71:-;7995:10;8017:4;7995:27;7991:64;;8031:24;;-1:-1:-1;;;8031:24:71;;;;;;;;;;;7991:64;-1:-1:-1;;;;;8069:20:71;;;8065:154;;8105:32;8121:5;8128:8;8105:15;:32::i;8065:154::-;8168:40;8198:8;8168:21;:40::i;3402:492::-;3558:41;684:31;719:10:33;2819:137:96;:::i;3558:41:71:-;3553:79;;3608:24;;-1:-1:-1;;;3608:24:71;;;;;;;;;;;3553:79;3656:21;3691:23;3728:16;3768:7;3757:49;;;;;;;;;;;;:::i;:::-;3642:164;;;;;;3817:70;3826:13;3841:7;3850:9;3869:8;3880:6;3817:8;:70::i;:::-;3543:351;;;3402:492;;;:::o;3834:136:96:-;3907:7;3933:12;;;;;;;;;;:30;;3957:5;3933:23;:30::i;:::-;3926:37;3834:136;-1:-1:-1;;;3834:136:96:o;2819:137::-;2888:4;2911:12;;;;;;;;;;:38;;2941:7;2911:29;:38::i;3124:125::-;3187:7;3213:12;;;;;;;;;;:29;;:27;:29::i;5514:1225:71:-;5700:10;5722:4;5700:27;5696:64;;5736:24;;-1:-1:-1;;;5736:24:71;;;;;;;;;;;5696:64;5792:14;;5771:18;5816:711;5840:10;5836:1;:14;5816:711;;;5962:29;5973:7;5981:1;5973:10;;;;;;;;:::i;:::-;;;;;;;:17;;;8365:25;8416:8;;;8231:200;5962:29;5961:30;:60;;;;;6020:1;5995:7;6003:1;5995:10;;;;;;;;:::i;:::-;;;;;;;:15;;;:22;:26;5961:60;5957:90;;;6030:17;;-1:-1:-1;;;6030:17:71;;;;;;;;;;;5957:90;6061:19;6083:7;6091:1;6083:10;;;;;;;;:::i;:::-;;;;;;;:22;;;6061:44;;6137:1;6123:11;:15;:54;;;;;6166:11;6142:21;:35;6123:54;6119:127;;;6204:27;;-1:-1:-1;;;6204:27:71;;;;;;;;;;;6119:127;6259:83;6279:7;6287:1;6279:10;;;;;;;;:::i;:::-;;;;;;;:20;;;6302:7;6310:1;6302:10;;;;;;;;:::i;:::-;;;;;;;:20;;;-1:-1:-1;;6259:12:71;:83::i;:::-;6358:12;6376:7;6384:1;6376:10;;;;;;;;:::i;:::-;;;;;;;:17;;;-1:-1:-1;;;;;6376:22:71;6406:11;6419:7;6427:1;6419:10;;;;;;;;:::i;:::-;;;;;;;:15;;;6376:59;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6357:78;;;6454:7;6449:68;;6488:14;;-1:-1:-1;;;6488:14:71;;;;;;;;;;;6449:68;5857:670;;5852:3;;;;;:::i;:::-;;;;5816:711;;;;6564:21;6540;:45;6536:107;;;6601:31;6623:8;6601:21;:31::i;:::-;6652:36;6668:9;6679:8;6652:15;:36::i;:::-;6698:34;6714:7;6723:8;6698:15;:34::i;:::-;5686:1053;5514:1225;;;;:::o;5240:226:96:-;5332:6;:12;;;;;;;;;;:22;;;5324:45;;719:10:33;2819:137:96;:::i;5324:45::-;5316:106;;;;-1:-1:-1;;;5316:106:96;;14841:2:105;5316:106:96;;;14823:21:105;14880:2;14860:18;;;14853:30;14919:34;14899:18;;;14892:62;-1:-1:-1;;;14970:18:105;;;14963:46;15026:19;;5316:106:96;14639:412:105;7612:150:42;7682:4;7705:50;7710:3;-1:-1:-1;;;;;7730:23:42;;7705:4;:50::i;7044:184:96:-;7117:6;:12;;;;;;;;;;:33;;7142:7;7117:24;:33::i;:::-;7113:109;;;7171:40;;719:10:33;;-1:-1:-1;;;;;7171:40:96;;;7183:4;;7171:40;;;;;7044:184;;:::o;7234:188::-;7308:6;:12;;;;;;;;;;:36;;7336:7;7308:27;:36::i;:::-;7304:112;;;7365:40;;719:10:33;;-1:-1:-1;;;;;7365:40:96;;;7377:4;;7365:40;;;;;7234:188;;:::o;7287:324:71:-;-1:-1:-1;;;;;7368:20:71;;;7364:241;;7427:38;;-1:-1:-1;;;7427:38:71;;7459:4;7427:38;;;5166:51:105;7404:20:71;;-1:-1:-1;;;;;7427:23:71;;;;;5139:18:105;;7427:38:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7404:61;-1:-1:-1;7483:16:71;;7479:116;;7519:61;7549:5;7557:8;7567:12;7519:22;:61::i;:::-;7390:215;7287:324;;:::o;7049:232::-;7126:12;7144:8;-1:-1:-1;;;;;7144:13:71;7165:21;7144:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7125:66;;;7206:7;7201:74;;7236:28;;-1:-1:-1;;;7236:28:71;;;;;;;;;;;3900:1544;4092:20;4115:9;4092:32;;4153:11;4138:12;:26;4134:61;;;4173:22;;-1:-1:-1;;;4173:22:71;;;;;;;;;;;4134:61;4214:29;4246:33;4270:9;4246:21;:33;:::i;:::-;4214:65;-1:-1:-1;4646:4:71;:19;4671:26;4686:11;4671:12;:26;:::i;:::-;4712:9;4735:8;4757:21;4792:7;4646:163;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4642:796;;5006:9;4991:24;;5048:11;5033:12;:26;5029:61;;;5068:22;;-1:-1:-1;;;5068:22:71;;;;;;;;;;;5029:61;5104:36;5120:9;5131:8;5104:15;:36::i;:::-;5182:21;5158;:45;5154:115;;;5223:31;5245:8;5223:21;:31::i;:::-;5288:139;;;17755:25:105;;;-1:-1:-1;;;;;17854:15:105;;;17849:2;17834:18;;17827:43;17906:15;;17886:18;;;17879:43;17953:2;17938:18;;17931:34;;;5288:139:71;;;;;;;17742:3:105;5288:139:71;;;4642:796;;;4829:130;;;17755:25:105;;;-1:-1:-1;;;;;17854:15:105;;;17849:2;17834:18;;17827:43;17906:15;;17886:18;;;17879:43;17953:2;17938:18;;17931:34;;;4829:130:71;;;;;;;17742:3:105;4829:130:71;;;4642:796;4082:1362;;3900:1544;;;;;:::o;8870:156:42:-;8944:7;8994:22;8998:3;9010:5;8994:3;:22::i;8167:165::-;-1:-1:-1;;;;;8300:23:42;;8247:4;3834:19;;;:12;;;:19;;;;;;:24;;8270:55;3738:127;8413:115;8476:7;8502:19;8510:3;4028:18;;3946:107;8437:571:71;-1:-1:-1;;;;;8559:29:71;;;;;;:55;;-1:-1:-1;;;;;;8592:22:71;;;;8559:55;8555:447;;;8772:58;;;-1:-1:-1;;;;;18174:32:105;;;8772:58:71;;;18156:51:105;8734:12:71;18223:18:105;;;;18216:45;;;8772:58:71;;;;;;;;;;18129:18:105;;;;8772:58:71;;;;;;;-1:-1:-1;;;;;8772:58:71;-1:-1:-1;;;8772:58:71;;;8752:79;;:19;;;;:79;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8733:98:71;;-1:-1:-1;;8849:10:71;;8845:147;;8913:63;;;-1:-1:-1;;;;;18464:32:105;;;8913:63:71;;;18446:51:105;18513:18;;;;18506:34;;;8913:63:71;;;;;;;;;;18419:18:105;;;;8913:63:71;;;;;;;-1:-1:-1;;;;;8913:63:71;-1:-1:-1;;;8913:63:71;;;8893:84;;:19;;;;:84;;8913:63;8893:84;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8879:98:71;;-1:-1:-1;;8845:147:71;8616:386;8437:571;;;:::o;6745:298::-;6845:9;6840:197;6860:7;:14;6856:1;:18;6840:197;;;6895:50;6911:7;6919:1;6911:10;;;;;;;;:::i;:::-;;;;;;;:23;;;6936:8;6895:15;:50::i;:::-;6959:67;6979:7;6987:1;6979:10;;;;;;;;:::i;:::-;;;;;;;:20;;;7002:7;7010:1;7002:10;;;;;;;;:::i;:::-;;;;;;;:20;;;7024:1;6959:12;:67::i;:::-;6876:3;;;;:::i;:::-;;;;6840:197;;1697:404:42;1760:4;3834:19;;;:12;;;:19;;;;;;1776:319;;-1:-1:-1;1818:23:42;;;;;;;;:11;:23;;;;;;;;;;;;;1998:18;;1976:19;;;:12;;;:19;;;;;;:40;;;;2030:11;;1776:319;-1:-1:-1;2079:5:42;2072:12;;7930:156;8003:4;8026:53;8034:3;-1:-1:-1;;;;;8054:23:42;;8026:7;:53::i;701:205:23:-;840:58;;;-1:-1:-1;;;;;18464:32:105;;840:58:23;;;18446:51:105;18513:18;;;;18506:34;;;840:58:23;;;;;;;;;;18419:18:105;;;;840:58:23;;;;;;;;-1:-1:-1;;;;;840:58:23;-1:-1:-1;;;840:58:23;;;813:86;;833:5;;813:19;:86::i;4395:118:42:-;4462:7;4488:3;:11;;4500:5;4488:18;;;;;;;;:::i;:::-;;;;;;;;;4481:25;;4395:118;;;;:::o;2269:1388::-;2335:4;2472:19;;;:12;;;:19;;;;;;2506:15;;2502:1149;;2875:21;2899:14;2912:1;2899:10;:14;:::i;:::-;2947:18;;2875:38;;-1:-1:-1;2927:17:42;;2947:22;;2968:1;;2947:22;:::i;:::-;2927:42;;3001:13;2988:9;:26;2984:398;;3034:17;3054:3;:11;;3066:9;3054:22;;;;;;;;:::i;:::-;;;;;;;;;3034:42;;3205:9;3176:3;:11;;3188:13;3176:26;;;;;;;;:::i;:::-;;;;;;;;;;;;:38;;;;3288:23;;;:12;;;:23;;;;;:36;;;2984:398;3460:17;;:3;;:17;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;3552:3;:12;;:19;3565:5;3552:19;;;;;;;;;;;3545:26;;;3593:4;3586:11;;;;;;;2502:1149;3635:5;3628:12;;;;;3207:706:23;3626:23;3652:69;3680:4;3652:69;;;;;;;;;;;;;;;;;3660:5;-1:-1:-1;;;;;3652:27:23;;;:69;;;;;:::i;:::-;3735:17;;3626:95;;-1:-1:-1;3735:21:23;3731:176;;3830:10;3819:30;;;;;;;;;;;;:::i;:::-;3811:85;;;;-1:-1:-1;;;3811:85:23;;19167:2:105;3811:85:23;;;19149:21:105;19206:2;19186:18;;;19179:30;19245:34;19225:18;;;19218:62;-1:-1:-1;;;19296:18:105;;;19289:40;19346:19;;3811:85:23;18965:406:105;3861:223:32;3994:12;4025:52;4047:6;4055:4;4061:1;4064:12;4025:21;:52::i;:::-;4018:59;3861:223;-1:-1:-1;;;;3861:223:32:o;4948:499::-;5113:12;5170:5;5145:21;:30;;5137:81;;;;-1:-1:-1;;;5137:81:32;;19578:2:105;5137:81:32;;;19560:21:105;19617:2;19597:18;;;19590:30;19656:34;19636:18;;;19629:62;-1:-1:-1;;;19707:18:105;;;19700:36;19753:19;;5137:81:32;19376:402:105;5137:81:32;-1:-1:-1;;;;;1465:19:32;;;5228:60;;;;-1:-1:-1;;;5228:60:32;;19985:2:105;5228:60:32;;;19967:21:105;20024:2;20004:18;;;19997:30;20063:31;20043:18;;;20036:59;20112:18;;5228:60:32;19783:353:105;5228:60:32;5300:12;5314:23;5341:6;-1:-1:-1;;;;;5341:11:32;5360:5;5367:4;5341:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5299:73;;;;5389:51;5406:7;5415:10;5427:12;5389:16;:51::i;:::-;5382:58;4948:499;-1:-1:-1;;;;;;;4948:499:32:o;7561:692::-;7707:12;7735:7;7731:516;;;-1:-1:-1;7765:10:32;7758:17;;7731:516;7876:17;;:21;7872:365;;8070:10;8064:17;8130:15;8117:10;8113:2;8109:19;8102:44;7872:365;8209:12;8202:20;;-1:-1:-1;;;8202:20:32;;;;;;;;:::i;14:286:105:-;72:6;125:2;113:9;104:7;100:23;96:32;93:52;;;141:1;138;131:12;93:52;167:23;;-1:-1:-1;;;;;;219:32:105;;209:43;;199:71;;266:1;263;256:12;497:131;-1:-1:-1;;;;;572:31:105;;562:42;;552:70;;618:1;615;608:12;552:70;497:131;:::o;633:134::-;701:20;;730:31;701:20;730:31;:::i;:::-;633:134;;;:::o;772:127::-;833:10;828:3;824:20;821:1;814:31;864:4;861:1;854:15;888:4;885:1;878:15;904:253;976:2;970:9;1018:4;1006:17;;1053:18;1038:34;;1074:22;;;1035:62;1032:88;;;1100:18;;:::i;:::-;1136:2;1129:22;904:253;:::o;1162:275::-;1233:2;1227:9;1298:2;1279:13;;-1:-1:-1;;1275:27:105;1263:40;;1333:18;1318:34;;1354:22;;;1315:62;1312:88;;;1380:18;;:::i;:::-;1416:2;1409:22;1162:275;;-1:-1:-1;1162:275:105:o;1442:186::-;1490:4;1523:18;1515:6;1512:30;1509:56;;;1545:18;;:::i;:::-;-1:-1:-1;1611:2:105;1590:15;-1:-1:-1;;1586:29:105;1617:4;1582:40;;1442:186::o;1633:462::-;1675:5;1728:3;1721:4;1713:6;1709:17;1705:27;1695:55;;1746:1;1743;1736:12;1695:55;1782:6;1769:20;1813:48;1829:31;1857:2;1829:31;:::i;:::-;1813:48;:::i;:::-;1886:2;1877:7;1870:19;1932:3;1925:4;1920:2;1912:6;1908:15;1904:26;1901:35;1898:55;;;1949:1;1946;1939:12;1898:55;2014:2;2007:4;1999:6;1995:17;1988:4;1979:7;1975:18;1962:55;2062:1;2037:16;;;2055:4;2033:27;2026:38;;;;2041:7;1633:462;-1:-1:-1;;;1633:462:105:o;2100:665::-;2195:6;2203;2211;2219;2272:3;2260:9;2251:7;2247:23;2243:33;2240:53;;;2289:1;2286;2279:12;2240:53;2328:9;2315:23;2347:31;2372:5;2347:31;:::i;:::-;2397:5;-1:-1:-1;2454:2:105;2439:18;;2426:32;2467:33;2426:32;2467:33;:::i;:::-;2519:7;-1:-1:-1;2573:2:105;2558:18;;2545:32;;-1:-1:-1;2628:2:105;2613:18;;2600:32;2655:18;2644:30;;2641:50;;;2687:1;2684;2677:12;2641:50;2710:49;2751:7;2742:6;2731:9;2727:22;2710:49;:::i;:::-;2700:59;;;2100:665;;;;;;;:::o;2977:180::-;3036:6;3089:2;3077:9;3068:7;3064:23;3060:32;3057:52;;;3105:1;3102;3095:12;3057:52;-1:-1:-1;3128:23:105;;2977:180;-1:-1:-1;2977:180:105:o;3344:315::-;3412:6;3420;3473:2;3461:9;3452:7;3448:23;3444:32;3441:52;;;3489:1;3486;3479:12;3441:52;3525:9;3512:23;3502:33;;3585:2;3574:9;3570:18;3557:32;3598:31;3623:5;3598:31;:::i;:::-;3648:5;3638:15;;;3344:315;;;;;:::o;3664:388::-;3732:6;3740;3793:2;3781:9;3772:7;3768:23;3764:32;3761:52;;;3809:1;3806;3799:12;3761:52;3848:9;3835:23;3867:31;3892:5;3867:31;:::i;:::-;3917:5;-1:-1:-1;3974:2:105;3959:18;;3946:32;3987:33;3946:32;3987:33;:::i;4057:523::-;4143:6;4151;4159;4212:2;4200:9;4191:7;4187:23;4183:32;4180:52;;;4228:1;4225;4218:12;4180:52;4267:9;4254:23;4286:31;4311:5;4286:31;:::i;:::-;4336:5;-1:-1:-1;4388:2:105;4373:18;;4360:32;;-1:-1:-1;4443:2:105;4428:18;;4415:32;4470:18;4459:30;;4456:50;;;4502:1;4499;4492:12;4456:50;4525:49;4566:7;4557:6;4546:9;4542:22;4525:49;:::i;:::-;4515:59;;;4057:523;;;;;:::o;4767:248::-;4835:6;4843;4896:2;4884:9;4875:7;4871:23;4867:32;4864:52;;;4912:1;4909;4902:12;4864:52;-1:-1:-1;;4935:23:105;;;5005:2;4990:18;;;4977:32;;-1:-1:-1;4767:248:105:o;5228:183::-;5288:4;5321:18;5313:6;5310:30;5307:56;;;5343:18;;:::i;:::-;-1:-1:-1;5388:1:105;5384:14;5400:4;5380:25;;5228:183::o;5416:662::-;5470:5;5523:3;5516:4;5508:6;5504:17;5500:27;5490:55;;5541:1;5538;5531:12;5490:55;5577:6;5564:20;5603:4;5627:60;5643:43;5683:2;5643:43;:::i;5627:60::-;5721:15;;;5807:1;5803:10;;;;5791:23;;5787:32;;;5752:12;;;;5831:15;;;5828:35;;;5859:1;5856;5849:12;5828:35;5895:2;5887:6;5883:15;5907:142;5923:6;5918:3;5915:15;5907:142;;;5989:17;;5977:30;;6027:12;;;;5940;;5907:142;;;-1:-1:-1;6067:5:105;5416:662;-1:-1:-1;;;;;;5416:662:105:o;6083:1071::-;6237:6;6245;6253;6261;6269;6322:3;6310:9;6301:7;6297:23;6293:33;6290:53;;;6339:1;6336;6329:12;6290:53;6378:9;6365:23;6397:31;6422:5;6397:31;:::i;:::-;6447:5;-1:-1:-1;6504:2:105;6489:18;;6476:32;6517:33;6476:32;6517:33;:::i;:::-;6569:7;-1:-1:-1;6627:2:105;6612:18;;6599:32;6650:18;6680:14;;;6677:34;;;6707:1;6704;6697:12;6677:34;6730:61;6783:7;6774:6;6763:9;6759:22;6730:61;:::i;:::-;6720:71;;6844:2;6833:9;6829:18;6816:32;6800:48;;6873:2;6863:8;6860:16;6857:36;;;6889:1;6886;6879:12;6857:36;6912:63;6967:7;6956:8;6945:9;6941:24;6912:63;:::i;:::-;6902:73;;7028:3;7017:9;7013:19;7000:33;6984:49;;7058:2;7048:8;7045:16;7042:36;;;7074:1;7071;7064:12;7042:36;;7097:51;7140:7;7129:8;7118:9;7114:24;7097:51;:::i;:::-;7087:61;;;6083:1071;;;;;;;;:::o;7159:2236::-;7303:6;7311;7319;7327;7380:3;7368:9;7359:7;7355:23;7351:33;7348:53;;;7397:1;7394;7387:12;7348:53;7410:49;7448:9;7435:23;7410:49;:::i;:::-;7491:9;7478:23;7468:33;;7551:2;7540:9;7536:18;7523:32;7564:31;7589:5;7564:31;:::i;:::-;7614:5;-1:-1:-1;7666:2:105;7651:18;;7638:32;;-1:-1:-1;7721:2:105;7706:18;;7693:32;7744:18;7774:14;;;7771:34;;;7801:1;7798;7791:12;7771:34;7839:6;7828:9;7824:22;7814:32;;7884:7;7877:4;7873:2;7869:13;7865:27;7855:55;;7906:1;7903;7896:12;7855:55;7942:2;7929:16;7965:60;7981:43;8021:2;7981:43;:::i;7965:60::-;8047:3;8071:2;8066:3;8059:15;8099:2;8094:3;8090:12;8083:19;;8150:2;8144;8141:1;8137:10;8133:2;8129:19;8125:28;8111:42;;8176:7;8168:6;8165:19;8162:39;;;8197:1;8194;8187:12;8162:39;8229:2;8225;8221:11;8241:1124;8257:6;8252:3;8249:15;8241:1124;;;8336:2;8330:3;8317:17;8314:25;8311:45;;;8352:1;8349;8342:12;8311:45;8387:17;;8379:26;;8457:4;8429:16;;;-1:-1:-1;;8425:30:105;8421:41;8418:61;;;8475:1;8472;8465:12;8418:61;8507:22;;:::i;:::-;8579:2;8575;8571:11;8558:25;8549:7;8542:42;8633:2;8629;8625:11;8612:25;8650:33;8675:7;8650:33;:::i;:::-;8716:2;8703:16;;8696:33;8778:2;8770:11;;8757:25;8795:33;8757:25;8795:33;:::i;:::-;8861:2;8848:16;;8841:33;8923:3;8915:12;;8902:26;8941:33;8902:26;8941:33;:::i;:::-;9007:2;8994:16;;8987:33;9059:32;9086:3;9078:12;;9059:32;:::i;:::-;9053:3;9044:7;9040:17;9033:59;9142:4;9138:2;9134:13;9121:27;9177:2;9167:8;9164:16;9161:36;;;9193:1;9190;9183:12;9161:36;9236:53;9281:7;9276:2;9265:8;9261:2;9257:17;9253:26;9236:53;:::i;:::-;9230:3;9217:17;;9210:80;-1:-1:-1;9303:20:105;;-1:-1:-1;9352:2:105;9343:12;;;;8274;8241:1124;;;-1:-1:-1;7159:2236:105;;;;-1:-1:-1;7159:2236:105;;-1:-1:-1;;;;;;7159:2236:105:o;9400:734::-;9504:6;9512;9520;9528;9536;9589:3;9577:9;9568:7;9564:23;9560:33;9557:53;;;9606:1;9603;9596:12;9557:53;9645:9;9632:23;9664:31;9689:5;9664:31;:::i;:::-;9714:5;-1:-1:-1;9771:2:105;9756:18;;9743:32;9784:33;9743:32;9784:33;:::i;:::-;9836:7;-1:-1:-1;9890:2:105;9875:18;;9862:32;;-1:-1:-1;9941:2:105;9926:18;;9913:32;;-1:-1:-1;9996:3:105;9981:19;;9968:33;10024:18;10013:30;;10010:50;;;10056:1;10053;10046:12;10010:50;10079:49;10120:7;10111:6;10100:9;10096:22;10079:49;:::i;10971:138::-;11050:13;;11072:31;11050:13;11072:31;:::i;11114:258::-;11186:1;11196:113;11210:6;11207:1;11204:13;11196:113;;;11286:11;;;11280:18;11267:11;;;11260:39;11232:2;11225:10;11196:113;;;11327:6;11324:1;11321:13;11318:48;;;-1:-1:-1;;11362:1:105;11344:16;;11337:27;11114:258::o;11377:428::-;11430:5;11483:3;11476:4;11468:6;11464:17;11460:27;11450:55;;11501:1;11498;11491:12;11450:55;11530:6;11524:13;11561:48;11577:31;11605:2;11577:31;:::i;11561:48::-;11634:2;11625:7;11618:19;11680:3;11673:4;11668:2;11660:6;11656:15;11652:26;11649:35;11646:55;;;11697:1;11694;11687:12;11646:55;11710:64;11771:2;11764:4;11755:7;11751:18;11744:4;11736:6;11732:17;11710:64;:::i;11810:2141::-;11956:6;11964;11972;12025:2;12013:9;12004:7;12000:23;11996:32;11993:52;;;12041:1;12038;12031:12;11993:52;12070:9;12064:16;12054:26;;12099:2;12145;12134:9;12130:18;12124:25;12168:18;12209:2;12201:6;12198:14;12195:34;;;12225:1;12222;12215:12;12195:34;12263:6;12252:9;12248:22;12238:32;;12308:7;12301:4;12297:2;12293:13;12289:27;12279:55;;12330:1;12327;12320:12;12279:55;12359:2;12353:9;12382:60;12398:43;12438:2;12398:43;:::i;12382:60::-;12476:15;;;12558:1;12554:10;;;;12546:19;;12542:28;;;12507:12;;;;12582:19;;;12579:39;;;12614:1;12611;12604:12;12579:39;12646:2;12642;12638:11;12658:1195;12674:6;12669:3;12666:15;12658:1195;;;12753:3;12747:10;12789:2;12776:11;12773:19;12770:39;;;12805:1;12802;12795:12;12770:39;12832:20;;12904:4;12876:16;;;-1:-1:-1;;12872:30:105;12868:41;12865:61;;;12922:1;12919;12912:12;12865:61;12952:22;;:::i;:::-;13015:2;13011;13007:11;13001:18;12994:5;12987:33;13062:2;13058;13054:11;13048:18;13079:33;13104:7;13079:33;:::i;:::-;13132:14;;;13125:31;13198:2;13190:11;;13184:18;13215:33;13184:18;13215:33;:::i;:::-;13279:2;13268:14;;13261:31;13334:3;13326:12;;13320:19;13352:33;13320:19;13352:33;:::i;:::-;13416:2;13405:14;;13398:31;13466:43;13504:3;13496:12;;13466:43;:::i;:::-;13460:3;13453:5;13449:15;13442:68;13553:4;13549:2;13545:13;13539:20;13588:2;13578:8;13575:16;13572:106;;;13632:1;13661:2;13657;13650:14;13572:106;13715:64;13771:7;13766:2;13755:8;13751:2;13747:17;13743:26;13715:64;:::i;:::-;13709:3;13698:15;;13691:89;-1:-1:-1;13793:18:105;;-1:-1:-1;13831:12:105;;;;12691;;12658:1195;;;12662:3;13872:5;13862:15;;;;;;;;13896:49;13941:2;13930:9;13926:18;13896:49;:::i;:::-;13886:59;;11810:2141;;;;;:::o;13956:127::-;14017:10;14012:3;14008:20;14005:1;13998:31;14048:4;14045:1;14038:15;14072:4;14069:1;14062:15;14088:274;14217:3;14255:6;14249:13;14271:53;14317:6;14312:3;14305:4;14297:6;14293:17;14271:53;:::i;:::-;14340:16;;;;;14088:274;-1:-1:-1;;14088:274:105:o;14367:127::-;14428:10;14423:3;14419:20;14416:1;14409:31;14459:4;14456:1;14449:15;14483:4;14480:1;14473:15;14499:135;14538:3;-1:-1:-1;;14559:17:105;;14556:43;;;14579:18;;:::i;:::-;-1:-1:-1;14626:1:105;14615:13;;14499:135::o;15056:184::-;15126:6;15179:2;15167:9;15158:7;15154:23;15150:32;15147:52;;;15195:1;15192;15185:12;15147:52;-1:-1:-1;15218:16:105;;15056:184;-1:-1:-1;15056:184:105:o;15455:125::-;15495:4;15523:1;15520;15517:8;15514:34;;;15528:18;;:::i;:::-;-1:-1:-1;15565:9:105;;15455:125::o;15585:257::-;15626:3;15664:5;15658:12;15691:6;15686:3;15679:19;15707:63;15763:6;15756:4;15751:3;15747:14;15740:4;15733:5;15729:16;15707:63;:::i;:::-;15824:2;15803:15;-1:-1:-1;;15799:29:105;15790:39;;;;15831:4;15786:50;;15585:257;-1:-1:-1;;15585:257:105:o;15847:1664::-;16139:4;16168:3;16209:2;16198:9;16194:18;16248:1;16244;16239:3;16235:11;16231:19;16289:2;16281:6;16277:15;16266:9;16259:34;16312:2;16362;16354:6;16350:15;16345:2;16334:9;16330:18;16323:43;16385:2;16423:6;16418:2;16407:9;16403:18;16396:34;16449:2;16487;16482;16471:9;16467:18;16460:30;16510:6;16545;16539:13;16576:6;16568;16561:22;16602:3;16592:13;;16636:2;16625:9;16621:18;16614:25;;16698:2;16688:6;16685:1;16681:14;16670:9;16666:30;16662:39;16736:2;16728:6;16724:15;16757:1;16767:715;16781:6;16778:1;16775:13;16767:715;;;16846:22;;;-1:-1:-1;;16842:37:105;16830:50;;16903:13;;16971:9;;16956:25;;17028:11;;;17022:18;17018:27;;17001:15;;;16994:52;17093:11;;;17087:18;17083:27;;17066:15;;;17059:52;17158:11;;;17152:18;17148:27;;17131:15;;;17124:52;17223:11;;;17217:18;17213:27;;17196:15;;;17189:52;17280:11;;17274:18;16939:4;17312:15;;;17305:27;;;17355:47;17386:15;;;17274:18;17355:47;:::i;:::-;17460:12;;;;17345:57;-1:-1:-1;;;17425:15:105;;;;16803:1;16796:9;16767:715;;;-1:-1:-1;17499:6:105;;15847:1664;-1:-1:-1;;;;;;;;;;;;;;;15847:1664:105:o;18551:127::-;18612:10;18607:3;18603:20;18600:1;18593:31;18643:4;18640:1;18633:15;18667:4;18664:1;18657:15;18683:277;18750:6;18803:2;18791:9;18782:7;18778:23;18774:32;18771:52;;;18819:1;18816;18809:12;18771:52;18851:9;18845:16;18904:5;18897:13;18890:21;18883:5;18880:32;18870:60;;18926:1;18923;18916:12;20141:219;20290:2;20279:9;20272:21;20253:4;20310:44;20350:2;20339:9;20335:18;20327:6;20310:44;:::i",
  "source": "// SPDX-License-Identifier: MIT\npragma solidity 0.8.11;\n\nimport \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\nimport \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\";\nimport \"@openzeppelin/contracts/token/ERC721/utils/ERC721Holder.sol\";\nimport \"@openzeppelin/contracts/token/ERC1155/utils/ERC1155Holder.sol\";\nimport \"../utils/AccessControl.sol\";\nimport \"../interfaces/ISygmaMessageReceiver.sol\";\n\n/**\n    @title Optinal Message Call made as part of other handlers proposal execution.\n    @author ChainSafe Systems.\n */\ncontract DefaultMessageReceiver is ISygmaMessageReceiver, AccessControl, ERC721Holder, ERC1155Holder {\n    bytes32 public constant SYGMA_HANDLER_ROLE = keccak256(\"SYGMA_HANDLER_ROLE\");\n\n    address internal constant zeroAddress = address(0);\n\n    uint256 public immutable _recoverGas;\n\n    struct Action {\n        uint256 nativeValue;\n        address callTo;\n        address approveTo;\n        address tokenSend;\n        address tokenReceive;\n        bytes data;\n    }\n\n    error InsufficientGasLimit();\n    error InvalidContract();\n    error InsufficientPermission();\n    error ActionFailed();\n    error InsufficientNativeBalance();\n    error ReturnNativeLeftOverFailed();\n    \n    event Executed(\n        bytes32 transactionId,\n        address tokenSend,\n        address receiver,\n        uint256 amount\n    );\n\n    event TransferRecovered(\n        bytes32 transactionId,\n        address tokenSend,\n        address receiver,\n        uint256 amount\n    );\n\n    /**\n        @param sygmaHandlers The contract addresses with access to message processing.\n        @param recoverGas The amount of gas needed to forward the original amount to receiver.\n     */\n    constructor(address[] memory sygmaHandlers, uint256 recoverGas) {\n        _recoverGas = recoverGas;\n        _setupRole(DEFAULT_ADMIN_ROLE, msg.sender);\n        for (uint i = 0; i < sygmaHandlers.length; i++) {\n            _setupRole(SYGMA_HANDLER_ROLE, sygmaHandlers[i]);\n        }\n    }\n\n    /**\n        @notice Users have to understand the design and limitations behind the Actions processing.\n        The contract will try to return all the leftover tokens and native token to the\n        receiver address. This logic is applied to the native token if there was a balance\n        increase during the message processing, then to the tokenSent which is received from\n        Sygma proposal and finally to every Action.tokenReceive. In the vast majority of\n        cases that would be enough, though user can come up with a scenario where an Action\n        produces results in a receival of more than one token, while only one could be\n        specified in this particular Action.tokenReceive property. In such a case it is\n        a users responsibility to either send it all with a transferBalanceAction() Action or to\n        include an extra action[s] with tokenReceive set to each of the tokens received.\n        @param tokenSent Optional address of the token sent along or prior to calling this function.\n        @param amount Amount of the token sent along or prior to calling this function.\n        @param message User generated execution command which consists of\n        {transactionId} an arbitrary identifier.\n        {actions} array of Action items that allow generic logic execution.\n        {receiver} a fallback address that will receive any leftovers after either success of fail.\n     */\n    function handleSygmaMessage(\n        address tokenSent,\n        uint256 amount,\n        bytes memory message\n    ) external payable override {\n        if (!hasRole(SYGMA_HANDLER_ROLE, _msgSender())) revert InsufficientPermission();\n        (\n            bytes32 transactionId,\n            Action[] memory actions,\n            address receiver\n        ) = abi.decode(message, (bytes32, Action[], address));\n\n        _execute(transactionId, actions, tokenSent, payable(receiver), amount);\n    }\n\n    function _execute(\n        bytes32 transactionId,\n        Action[] memory actions,\n        address tokenSent,\n        address payable receiver,\n        uint256 amount\n    ) internal {\n        uint256 cacheGasLeft = gasleft();\n        if (cacheGasLeft < _recoverGas) revert InsufficientGasLimit();\n        \n        uint256 startingNativeBalance = address(this).balance - msg.value;\n        /// We are wrapping the Actions processing in new call in order to be\n        /// able to recover, ie. send funds to the receiver, in case of fail or\n        /// running out of gas. Otherwise we can only revert whole execution\n        /// which would result in the need to manually process proposal resolution\n        /// to unstuck the assets.\n        try this.performActions{gas: cacheGasLeft - _recoverGas}(\n            tokenSent,\n            receiver,\n            startingNativeBalance,\n            actions\n        ) {\n            emit Executed(\n                transactionId,\n                tokenSent,\n                receiver,\n                amount\n            );\n        } catch {\n            cacheGasLeft = gasleft();\n            if (cacheGasLeft < _recoverGas) revert InsufficientGasLimit();\n            transferBalance(tokenSent, receiver);\n            if (address(this).balance > startingNativeBalance) {\n                transferNativeBalance(receiver);\n            }\n\n            emit TransferRecovered(\n                transactionId,\n                tokenSent,\n                receiver,\n                amount\n            );\n        }\n    }\n\n    /// @dev See the comment inside of the _execute() function.\n    function performActions(\n        address tokenSent,\n        address payable receiver,\n        uint256 startingNativeBalance,\n        Action[] memory actions\n    ) external {\n        if (msg.sender != address(this)) revert InsufficientPermission();\n\n        uint256 numActions = actions.length;\n        for (uint256 i = 0; i < numActions; i++) {\n            // Allow EOA if the data is empty. Could be used to send native currency.\n            if (!isContract(actions[i].callTo) && actions[i].data.length > 0) revert InvalidContract();\n            uint256 nativeValue = actions[i].nativeValue;\n            if (nativeValue > 0 && address(this).balance < nativeValue) {\n                revert InsufficientNativeBalance();\n            }\n            approveERC20(IERC20(actions[i].tokenSend), actions[i].approveTo, type(uint256).max);\n\n            (bool success, ) = actions[i].callTo.call{value: nativeValue}(actions[i].data);\n            if (!success) {\n                revert ActionFailed();\n            }\n        }\n        if (address(this).balance > startingNativeBalance) {\n            transferNativeBalance(receiver);\n        }\n        transferBalance(tokenSent, receiver);\n        returnLeftOvers(actions, receiver);\n    }\n\n    function returnLeftOvers(Action[] memory actions, address payable receiver) internal {\n        for (uint256 i; i < actions.length; i++) {\n            transferBalance(actions[i].tokenReceive, receiver);\n            approveERC20(IERC20(actions[i].tokenSend), actions[i].approveTo, 0);\n        }\n    }\n\n    function transferNativeBalance(address payable receiver) internal {\n        (bool success, ) = receiver.call{value: address(this).balance}(\"\");\n        if (!success) {\n            revert ReturnNativeLeftOverFailed();\n        }\n    }\n\n    function transferBalance(address token, address receiver) internal {\n        if (token != zeroAddress) {\n            uint256 tokenBalance = IERC20(token).balanceOf(address(this));\n            if (tokenBalance > 0) {\n                SafeERC20.safeTransfer(IERC20(token), receiver, tokenBalance);\n            }\n        }\n    }\n\n    /**\n        @notice Helper function that could be used as an Action to itself to transfer whole\n        balance of a particular token.\n        @param token Address of the ERC20 token or 0x0 for native token.\n        @param receiver Address that should receive the whole balance.\n     */\n    function transferBalanceAction(address token, address receiver) external {\n        if (msg.sender != address(this)) revert InsufficientPermission();\n        if (token != zeroAddress) {\n            transferBalance(token, receiver);\n        } else {\n            transferNativeBalance(payable(receiver));\n        }\n    }\n\n    function isContract(address contractAddr) internal view returns (bool) {\n        uint256 size;\n        assembly {\n            size := extcodesize(contractAddr)\n        }\n        return size > 0;\n    }\n\n    function approveERC20(\n        IERC20 token,\n        address spender,\n        uint256 amount\n    ) internal {\n        if (address(token) != zeroAddress && spender != zeroAddress) {\n            // Ad-hoc SafeERC20.forceApprove() because OZ lib from dependencies does not have one yet.\n            (bool success, ) = address(token).call(abi.encodeWithSelector(token.approve.selector, spender, 0));\n            if (amount > 0) {\n                (success, ) = address(token).call(abi.encodeWithSelector(token.approve.selector, spender, amount));\n            }\n        }\n    }\n\n    receive() external payable {}\n}\n",
  "sourcePath": "/home/runner/work/sygma-solidity/sygma-solidity/contracts/handlers/DefaultMessageReceiver.sol",
  "ast": {
    "absolutePath": "project:/contracts/handlers/DefaultMessageReceiver.sol",
    "exportedSymbols": {
      "AccessControl": [
        18612
      ],
      "Address": [
        5283
      ],
      "Context": [
        5305
      ],
      "DefaultMessageReceiver": [
        13325
      ],
      "ERC1155Holder": [
        2368
      ],
      "ERC1155Receiver": [
        2402
      ],
      "ERC165": [
        6167
      ],
      "ERC721Holder": [
        4988
      ],
      "EnumerableSet": [
        7373
      ],
      "IERC1155Receiver": [
        1987
      ],
      "IERC165": [
        6381
      ],
      "IERC20": [
        3068
      ],
      "IERC721Receiver": [
        4739
      ],
      "ISygmaMessageReceiver": [
        18315
      ],
      "SafeERC20": [
        3739
      ]
    },
    "id": 13326,
    "license": "MIT",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 12680,
        "literals": [
          "solidity",
          "0.8",
          ".11"
        ],
        "nodeType": "PragmaDirective",
        "src": "32:23:71"
      },
      {
        "absolutePath": "@openzeppelin/contracts/token/ERC20/IERC20.sol",
        "file": "@openzeppelin/contracts/token/ERC20/IERC20.sol",
        "id": 12681,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 13326,
        "sourceUnit": 3069,
        "src": "57:56:71",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol",
        "file": "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol",
        "id": 12682,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 13326,
        "sourceUnit": 3740,
        "src": "114:65:71",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@openzeppelin/contracts/token/ERC721/utils/ERC721Holder.sol",
        "file": "@openzeppelin/contracts/token/ERC721/utils/ERC721Holder.sol",
        "id": 12683,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 13326,
        "sourceUnit": 4989,
        "src": "180:69:71",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@openzeppelin/contracts/token/ERC1155/utils/ERC1155Holder.sol",
        "file": "@openzeppelin/contracts/token/ERC1155/utils/ERC1155Holder.sol",
        "id": 12684,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 13326,
        "sourceUnit": 2369,
        "src": "250:71:71",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "project:/contracts/utils/AccessControl.sol",
        "file": "../utils/AccessControl.sol",
        "id": 12685,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 13326,
        "sourceUnit": 18613,
        "src": "322:36:71",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "project:/contracts/interfaces/ISygmaMessageReceiver.sol",
        "file": "../interfaces/ISygmaMessageReceiver.sol",
        "id": 12686,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 13326,
        "sourceUnit": 18316,
        "src": "359:49:71",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [
          {
            "baseName": {
              "id": 12688,
              "name": "ISygmaMessageReceiver",
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 18315,
              "src": "567:21:71"
            },
            "id": 12689,
            "nodeType": "InheritanceSpecifier",
            "src": "567:21:71"
          },
          {
            "baseName": {
              "id": 12690,
              "name": "AccessControl",
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 18612,
              "src": "590:13:71"
            },
            "id": 12691,
            "nodeType": "InheritanceSpecifier",
            "src": "590:13:71"
          },
          {
            "baseName": {
              "id": 12692,
              "name": "ERC721Holder",
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 4988,
              "src": "605:12:71"
            },
            "id": 12693,
            "nodeType": "InheritanceSpecifier",
            "src": "605:12:71"
          },
          {
            "baseName": {
              "id": 12694,
              "name": "ERC1155Holder",
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 2368,
              "src": "619:13:71"
            },
            "id": 12695,
            "nodeType": "InheritanceSpecifier",
            "src": "619:13:71"
          }
        ],
        "canonicalName": "DefaultMessageReceiver",
        "contractDependencies": [],
        "contractKind": "contract",
        "documentation": {
          "id": 12687,
          "nodeType": "StructuredDocumentation",
          "src": "410:121:71",
          "text": "@title Optinal Message Call made as part of other handlers proposal execution.\n@author ChainSafe Systems."
        },
        "fullyImplemented": true,
        "id": 13325,
        "linearizedBaseContracts": [
          13325,
          2368,
          2402,
          1987,
          6167,
          6381,
          4988,
          4739,
          18612,
          5305,
          18315
        ],
        "name": "DefaultMessageReceiver",
        "nameLocation": "541:22:71",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "constant": true,
            "functionSelector": "c865fa5e",
            "id": 12700,
            "mutability": "constant",
            "name": "SYGMA_HANDLER_ROLE",
            "nameLocation": "663:18:71",
            "nodeType": "VariableDeclaration",
            "scope": 13325,
            "src": "639:76:71",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 12696,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "639:7:71",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "arguments": [
                {
                  "hexValue": "5359474d415f48414e444c45525f524f4c45",
                  "id": 12698,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "kind": "string",
                  "lValueRequested": false,
                  "nodeType": "Literal",
                  "src": "694:20:71",
                  "typeDescriptions": {
                    "typeIdentifier": "t_stringliteral_b712335d5b6789b3c7e11e1e9aea60ec1540076405f8ca833b4307162683afdb",
                    "typeString": "literal_string \"SYGMA_HANDLER_ROLE\""
                  },
                  "value": "SYGMA_HANDLER_ROLE"
                }
              ],
              "expression": {
                "argumentTypes": [
                  {
                    "typeIdentifier": "t_stringliteral_b712335d5b6789b3c7e11e1e9aea60ec1540076405f8ca833b4307162683afdb",
                    "typeString": "literal_string \"SYGMA_HANDLER_ROLE\""
                  }
                ],
                "id": 12697,
                "name": "keccak256",
                "nodeType": "Identifier",
                "overloadedDeclarations": [],
                "referencedDeclaration": 4294967288,
                "src": "684:9:71",
                "typeDescriptions": {
                  "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                  "typeString": "function (bytes memory) pure returns (bytes32)"
                }
              },
              "id": 12699,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "functionCall",
              "lValueRequested": false,
              "names": [],
              "nodeType": "FunctionCall",
              "src": "684:31:71",
              "tryCall": false,
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "visibility": "public"
          },
          {
            "constant": true,
            "id": 12706,
            "mutability": "constant",
            "name": "zeroAddress",
            "nameLocation": "748:11:71",
            "nodeType": "VariableDeclaration",
            "scope": 13325,
            "src": "722:50:71",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 12701,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "722:7:71",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "value": {
              "arguments": [
                {
                  "hexValue": "30",
                  "id": 12704,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "kind": "number",
                  "lValueRequested": false,
                  "nodeType": "Literal",
                  "src": "770:1:71",
                  "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": 12703,
                "isConstant": false,
                "isLValue": false,
                "isPure": true,
                "lValueRequested": false,
                "nodeType": "ElementaryTypeNameExpression",
                "src": "762:7:71",
                "typeDescriptions": {
                  "typeIdentifier": "t_type$_t_address_$",
                  "typeString": "type(address)"
                },
                "typeName": {
                  "id": 12702,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "762:7:71",
                  "typeDescriptions": {}
                }
              },
              "id": 12705,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "typeConversion",
              "lValueRequested": false,
              "names": [],
              "nodeType": "FunctionCall",
              "src": "762:10:71",
              "tryCall": false,
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "visibility": "internal"
          },
          {
            "constant": false,
            "functionSelector": "98474ffa",
            "id": 12708,
            "mutability": "immutable",
            "name": "_recoverGas",
            "nameLocation": "804:11:71",
            "nodeType": "VariableDeclaration",
            "scope": 13325,
            "src": "779:36:71",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 12707,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "779:7:71",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "visibility": "public"
          },
          {
            "canonicalName": "DefaultMessageReceiver.Action",
            "id": 12721,
            "members": [
              {
                "constant": false,
                "id": 12710,
                "mutability": "mutable",
                "name": "nativeValue",
                "nameLocation": "854:11:71",
                "nodeType": "VariableDeclaration",
                "scope": 12721,
                "src": "846:19:71",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 12709,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "846:7:71",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 12712,
                "mutability": "mutable",
                "name": "callTo",
                "nameLocation": "883:6:71",
                "nodeType": "VariableDeclaration",
                "scope": 12721,
                "src": "875:14:71",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                },
                "typeName": {
                  "id": 12711,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "875:7:71",
                  "stateMutability": "nonpayable",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 12714,
                "mutability": "mutable",
                "name": "approveTo",
                "nameLocation": "907:9:71",
                "nodeType": "VariableDeclaration",
                "scope": 12721,
                "src": "899:17:71",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                },
                "typeName": {
                  "id": 12713,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "899:7:71",
                  "stateMutability": "nonpayable",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 12716,
                "mutability": "mutable",
                "name": "tokenSend",
                "nameLocation": "934:9:71",
                "nodeType": "VariableDeclaration",
                "scope": 12721,
                "src": "926:17:71",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                },
                "typeName": {
                  "id": 12715,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "926:7:71",
                  "stateMutability": "nonpayable",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 12718,
                "mutability": "mutable",
                "name": "tokenReceive",
                "nameLocation": "961:12:71",
                "nodeType": "VariableDeclaration",
                "scope": 12721,
                "src": "953:20:71",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                },
                "typeName": {
                  "id": 12717,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "953:7:71",
                  "stateMutability": "nonpayable",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 12720,
                "mutability": "mutable",
                "name": "data",
                "nameLocation": "989:4:71",
                "nodeType": "VariableDeclaration",
                "scope": 12721,
                "src": "983:10:71",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes_storage_ptr",
                  "typeString": "bytes"
                },
                "typeName": {
                  "id": 12719,
                  "name": "bytes",
                  "nodeType": "ElementaryTypeName",
                  "src": "983:5:71",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_storage_ptr",
                    "typeString": "bytes"
                  }
                },
                "visibility": "internal"
              }
            ],
            "name": "Action",
            "nameLocation": "829:6:71",
            "nodeType": "StructDefinition",
            "scope": 13325,
            "src": "822:178:71",
            "visibility": "public"
          },
          {
            "id": 12723,
            "name": "InsufficientGasLimit",
            "nameLocation": "1012:20:71",
            "nodeType": "ErrorDefinition",
            "parameters": {
              "id": 12722,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1032:2:71"
            },
            "src": "1006:29:71"
          },
          {
            "id": 12725,
            "name": "InvalidContract",
            "nameLocation": "1046:15:71",
            "nodeType": "ErrorDefinition",
            "parameters": {
              "id": 12724,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1061:2:71"
            },
            "src": "1040:24:71"
          },
          {
            "id": 12727,
            "name": "InsufficientPermission",
            "nameLocation": "1075:22:71",
            "nodeType": "ErrorDefinition",
            "parameters": {
              "id": 12726,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1097:2:71"
            },
            "src": "1069:31:71"
          },
          {
            "id": 12729,
            "name": "ActionFailed",
            "nameLocation": "1111:12:71",
            "nodeType": "ErrorDefinition",
            "parameters": {
              "id": 12728,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1123:2:71"
            },
            "src": "1105:21:71"
          },
          {
            "id": 12731,
            "name": "InsufficientNativeBalance",
            "nameLocation": "1137:25:71",
            "nodeType": "ErrorDefinition",
            "parameters": {
              "id": 12730,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1162:2:71"
            },
            "src": "1131:34:71"
          },
          {
            "id": 12733,
            "name": "ReturnNativeLeftOverFailed",
            "nameLocation": "1176:26:71",
            "nodeType": "ErrorDefinition",
            "parameters": {
              "id": 12732,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1202:2:71"
            },
            "src": "1170:35:71"
          },
          {
            "anonymous": false,
            "id": 12743,
            "name": "Executed",
            "nameLocation": "1221:8:71",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 12742,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12735,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "transactionId",
                  "nameLocation": "1247:13:71",
                  "nodeType": "VariableDeclaration",
                  "scope": 12743,
                  "src": "1239:21:71",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 12734,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1239:7:71",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12737,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "tokenSend",
                  "nameLocation": "1278:9:71",
                  "nodeType": "VariableDeclaration",
                  "scope": 12743,
                  "src": "1270:17:71",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 12736,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1270:7:71",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12739,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "receiver",
                  "nameLocation": "1305:8:71",
                  "nodeType": "VariableDeclaration",
                  "scope": 12743,
                  "src": "1297:16:71",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 12738,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1297:7:71",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12741,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "1331:6:71",
                  "nodeType": "VariableDeclaration",
                  "scope": 12743,
                  "src": "1323:14:71",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 12740,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1323:7:71",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1229:114:71"
            },
            "src": "1215:129:71"
          },
          {
            "anonymous": false,
            "id": 12753,
            "name": "TransferRecovered",
            "nameLocation": "1356:17:71",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 12752,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12745,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "transactionId",
                  "nameLocation": "1391:13:71",
                  "nodeType": "VariableDeclaration",
                  "scope": 12753,
                  "src": "1383:21:71",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 12744,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1383:7:71",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12747,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "tokenSend",
                  "nameLocation": "1422:9:71",
                  "nodeType": "VariableDeclaration",
                  "scope": 12753,
                  "src": "1414:17:71",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 12746,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1414:7:71",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12749,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "receiver",
                  "nameLocation": "1449:8:71",
                  "nodeType": "VariableDeclaration",
                  "scope": 12753,
                  "src": "1441:16:71",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 12748,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1441:7:71",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12751,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "1475:6:71",
                  "nodeType": "VariableDeclaration",
                  "scope": 12753,
                  "src": "1467:14:71",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 12750,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1467:7:71",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1373:114:71"
            },
            "src": "1350:138:71"
          },
          {
            "body": {
              "id": 12792,
              "nodeType": "Block",
              "src": "1756:223:71",
              "statements": [
                {
                  "expression": {
                    "id": 12764,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 12762,
                      "name": "_recoverGas",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12708,
                      "src": "1766:11:71",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 12763,
                      "name": "recoverGas",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12759,
                      "src": "1780:10:71",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "1766:24:71",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 12765,
                  "nodeType": "ExpressionStatement",
                  "src": "1766:24:71"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 12767,
                        "name": "DEFAULT_ADMIN_ROLE",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18344,
                        "src": "1811:18:71",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "expression": {
                          "id": 12768,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4294967281,
                          "src": "1831:3:71",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 12769,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "1831:10:71",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 12766,
                      "name": "_setupRole",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18547,
                      "src": "1800:10:71",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$",
                        "typeString": "function (bytes32,address)"
                      }
                    },
                    "id": 12770,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1800:42:71",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 12771,
                  "nodeType": "ExpressionStatement",
                  "src": "1800:42:71"
                },
                {
                  "body": {
                    "id": 12790,
                    "nodeType": "Block",
                    "src": "1900:73:71",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 12784,
                              "name": "SYGMA_HANDLER_ROLE",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 12700,
                              "src": "1925:18:71",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "baseExpression": {
                                "id": 12785,
                                "name": "sygmaHandlers",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 12757,
                                "src": "1945:13:71",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                  "typeString": "address[] memory"
                                }
                              },
                              "id": 12787,
                              "indexExpression": {
                                "id": 12786,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 12773,
                                "src": "1959:1:71",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "1945:16:71",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 12783,
                            "name": "_setupRole",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18547,
                            "src": "1914:10:71",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$",
                              "typeString": "function (bytes32,address)"
                            }
                          },
                          "id": 12788,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1914:48:71",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 12789,
                        "nodeType": "ExpressionStatement",
                        "src": "1914:48:71"
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 12779,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 12776,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12773,
                      "src": "1869:1:71",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "expression": {
                        "id": 12777,
                        "name": "sygmaHandlers",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12757,
                        "src": "1873:13:71",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[] memory"
                        }
                      },
                      "id": 12778,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "src": "1873:20:71",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "1869:24:71",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 12791,
                  "initializationExpression": {
                    "assignments": [
                      12773
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 12773,
                        "mutability": "mutable",
                        "name": "i",
                        "nameLocation": "1862:1:71",
                        "nodeType": "VariableDeclaration",
                        "scope": 12791,
                        "src": "1857:6:71",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 12772,
                          "name": "uint",
                          "nodeType": "ElementaryTypeName",
                          "src": "1857:4:71",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "id": 12775,
                    "initialValue": {
                      "hexValue": "30",
                      "id": 12774,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "1866:1:71",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "1857:10:71"
                  },
                  "loopExpression": {
                    "expression": {
                      "id": 12781,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "1895:3:71",
                      "subExpression": {
                        "id": 12780,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12773,
                        "src": "1895:1:71",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 12782,
                    "nodeType": "ExpressionStatement",
                    "src": "1895:3:71"
                  },
                  "nodeType": "ForStatement",
                  "src": "1852:121:71"
                }
              ]
            },
            "documentation": {
              "id": 12754,
              "nodeType": "StructuredDocumentation",
              "src": "1494:193:71",
              "text": "@param sygmaHandlers The contract addresses with access to message processing.\n@param recoverGas The amount of gas needed to forward the original amount to receiver."
            },
            "id": 12793,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [],
            "name": "",
            "nameLocation": "-1:-1:-1",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 12760,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12757,
                  "mutability": "mutable",
                  "name": "sygmaHandlers",
                  "nameLocation": "1721:13:71",
                  "nodeType": "VariableDeclaration",
                  "scope": 12793,
                  "src": "1704:30:71",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                    "typeString": "address[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 12755,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "1704:7:71",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 12756,
                    "nodeType": "ArrayTypeName",
                    "src": "1704:9:71",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                      "typeString": "address[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12759,
                  "mutability": "mutable",
                  "name": "recoverGas",
                  "nameLocation": "1744:10:71",
                  "nodeType": "VariableDeclaration",
                  "scope": 12793,
                  "src": "1736:18:71",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 12758,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1736:7:71",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1703:52:71"
            },
            "returnParameters": {
              "id": 12761,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1756:0:71"
            },
            "scope": 13325,
            "src": "1692:287:71",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              18314
            ],
            "body": {
              "id": 12845,
              "nodeType": "Block",
              "src": "3543:351:71",
              "statements": [
                {
                  "condition": {
                    "id": 12809,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "!",
                    "prefix": true,
                    "src": "3557:42:71",
                    "subExpression": {
                      "arguments": [
                        {
                          "id": 12805,
                          "name": "SYGMA_HANDLER_ROLE",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 12700,
                          "src": "3566:18:71",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 12806,
                            "name": "_msgSender",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5295,
                            "src": "3586:10:71",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                              "typeString": "function () view returns (address)"
                            }
                          },
                          "id": 12807,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3586:12:71",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          },
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 12804,
                        "name": "hasRole",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18381,
                        "src": "3558:7:71",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_bytes32_$_t_address_$returns$_t_bool_$",
                          "typeString": "function (bytes32,address) view returns (bool)"
                        }
                      },
                      "id": 12808,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "3558:41:71",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 12813,
                  "nodeType": "IfStatement",
                  "src": "3553:79:71",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 12810,
                        "name": "InsufficientPermission",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12727,
                        "src": "3608:22:71",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$__$returns$__$",
                          "typeString": "function () pure"
                        }
                      },
                      "id": 12811,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "3608:24:71",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 12812,
                    "nodeType": "RevertStatement",
                    "src": "3601:31:71"
                  }
                },
                {
                  "assignments": [
                    12815,
                    12819,
                    12821
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 12815,
                      "mutability": "mutable",
                      "name": "transactionId",
                      "nameLocation": "3664:13:71",
                      "nodeType": "VariableDeclaration",
                      "scope": 12845,
                      "src": "3656:21:71",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 12814,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "3656:7:71",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 12819,
                      "mutability": "mutable",
                      "name": "actions",
                      "nameLocation": "3707:7:71",
                      "nodeType": "VariableDeclaration",
                      "scope": 12845,
                      "src": "3691:23:71",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_struct$_Action_$12721_memory_ptr_$dyn_memory_ptr",
                        "typeString": "struct DefaultMessageReceiver.Action[]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 12817,
                          "nodeType": "UserDefinedTypeName",
                          "pathNode": {
                            "id": 12816,
                            "name": "Action",
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 12721,
                            "src": "3691:6:71"
                          },
                          "referencedDeclaration": 12721,
                          "src": "3691:6:71",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Action_$12721_storage_ptr",
                            "typeString": "struct DefaultMessageReceiver.Action"
                          }
                        },
                        "id": 12818,
                        "nodeType": "ArrayTypeName",
                        "src": "3691:8:71",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_Action_$12721_storage_$dyn_storage_ptr",
                          "typeString": "struct DefaultMessageReceiver.Action[]"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 12821,
                      "mutability": "mutable",
                      "name": "receiver",
                      "nameLocation": "3736:8:71",
                      "nodeType": "VariableDeclaration",
                      "scope": 12845,
                      "src": "3728:16:71",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 12820,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "3728:7:71",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 12833,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 12824,
                        "name": "message",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12800,
                        "src": "3768:7:71",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "components": [
                          {
                            "id": 12826,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "3778:7:71",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_bytes32_$",
                              "typeString": "type(bytes32)"
                            },
                            "typeName": {
                              "id": 12825,
                              "name": "bytes32",
                              "nodeType": "ElementaryTypeName",
                              "src": "3778:7:71",
                              "typeDescriptions": {}
                            }
                          },
                          {
                            "baseExpression": {
                              "id": 12827,
                              "name": "Action",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 12721,
                              "src": "3787:6:71",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_struct$_Action_$12721_storage_ptr_$",
                                "typeString": "type(struct DefaultMessageReceiver.Action storage pointer)"
                              }
                            },
                            "id": 12828,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "3787:8:71",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_array$_t_struct$_Action_$12721_memory_ptr_$dyn_memory_ptr_$",
                              "typeString": "type(struct DefaultMessageReceiver.Action memory[] memory)"
                            }
                          },
                          {
                            "id": 12830,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "3797:7:71",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 12829,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "3797:7:71",
                              "typeDescriptions": {}
                            }
                          }
                        ],
                        "id": 12831,
                        "isConstant": false,
                        "isInlineArray": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "TupleExpression",
                        "src": "3777:28:71",
                        "typeDescriptions": {
                          "typeIdentifier": "t_tuple$_t_type$_t_bytes32_$_$_t_type$_t_array$_t_struct$_Action_$12721_memory_ptr_$dyn_memory_ptr_$_$_t_type$_t_address_$_$",
                          "typeString": "tuple(type(bytes32),type(struct DefaultMessageReceiver.Action memory[] memory),type(address))"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_tuple$_t_type$_t_bytes32_$_$_t_type$_t_array$_t_struct$_Action_$12721_memory_ptr_$dyn_memory_ptr_$_$_t_type$_t_address_$_$",
                          "typeString": "tuple(type(bytes32),type(struct DefaultMessageReceiver.Action memory[] memory),type(address))"
                        }
                      ],
                      "expression": {
                        "id": 12822,
                        "name": "abi",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4294967295,
                        "src": "3757:3:71",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_abi",
                          "typeString": "abi"
                        }
                      },
                      "id": 12823,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "decode",
                      "nodeType": "MemberAccess",
                      "src": "3757:10:71",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_abidecode_pure$__$returns$__$",
                        "typeString": "function () pure"
                      }
                    },
                    "id": 12832,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3757:49:71",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_bytes32_$_t_array$_t_struct$_Action_$12721_memory_ptr_$dyn_memory_ptr_$_t_address_payable_$",
                      "typeString": "tuple(bytes32,struct DefaultMessageReceiver.Action memory[] memory,address payable)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3642:164:71"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 12835,
                        "name": "transactionId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12815,
                        "src": "3826:13:71",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "id": 12836,
                        "name": "actions",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12819,
                        "src": "3841:7:71",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_Action_$12721_memory_ptr_$dyn_memory_ptr",
                          "typeString": "struct DefaultMessageReceiver.Action memory[] memory"
                        }
                      },
                      {
                        "id": 12837,
                        "name": "tokenSent",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12796,
                        "src": "3850:9:71",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "id": 12840,
                            "name": "receiver",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 12821,
                            "src": "3869:8:71",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 12839,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "3861:8:71",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_payable_$",
                            "typeString": "type(address payable)"
                          },
                          "typeName": {
                            "id": 12838,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "3861:8:71",
                            "stateMutability": "payable",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 12841,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3861:17:71",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "id": 12842,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12798,
                        "src": "3880:6:71",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_array$_t_struct$_Action_$12721_memory_ptr_$dyn_memory_ptr",
                          "typeString": "struct DefaultMessageReceiver.Action memory[] memory"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 12834,
                      "name": "_execute",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12945,
                      "src": "3817:8:71",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_array$_t_struct$_Action_$12721_memory_ptr_$dyn_memory_ptr_$_t_address_$_t_address_payable_$_t_uint256_$returns$__$",
                        "typeString": "function (bytes32,struct DefaultMessageReceiver.Action memory[] memory,address,address payable,uint256)"
                      }
                    },
                    "id": 12843,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3817:70:71",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 12844,
                  "nodeType": "ExpressionStatement",
                  "src": "3817:70:71"
                }
              ]
            },
            "documentation": {
              "id": 12794,
              "nodeType": "StructuredDocumentation",
              "src": "1985:1412:71",
              "text": "@notice Users have to understand the design and limitations behind the Actions processing.\nThe contract will try to return all the leftover tokens and native token to the\nreceiver address. This logic is applied to the native token if there was a balance\nincrease during the message processing, then to the tokenSent which is received from\nSygma proposal and finally to every Action.tokenReceive. In the vast majority of\ncases that would be enough, though user can come up with a scenario where an Action\nproduces results in a receival of more than one token, while only one could be\nspecified in this particular Action.tokenReceive property. In such a case it is\na users responsibility to either send it all with a transferBalanceAction() Action or to\ninclude an extra action[s] with tokenReceive set to each of the tokens received.\n@param tokenSent Optional address of the token sent along or prior to calling this function.\n@param amount Amount of the token sent along or prior to calling this function.\n@param message User generated execution command which consists of\n{transactionId} an arbitrary identifier.\n{actions} array of Action items that allow generic logic execution.\n{receiver} a fallback address that will receive any leftovers after either success of fail."
            },
            "functionSelector": "4726ca43",
            "id": 12846,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "handleSygmaMessage",
            "nameLocation": "3411:18:71",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 12802,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "3534:8:71"
            },
            "parameters": {
              "id": 12801,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12796,
                  "mutability": "mutable",
                  "name": "tokenSent",
                  "nameLocation": "3447:9:71",
                  "nodeType": "VariableDeclaration",
                  "scope": 12846,
                  "src": "3439:17:71",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 12795,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3439:7:71",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12798,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "3474:6:71",
                  "nodeType": "VariableDeclaration",
                  "scope": 12846,
                  "src": "3466:14:71",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 12797,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3466:7:71",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12800,
                  "mutability": "mutable",
                  "name": "message",
                  "nameLocation": "3503:7:71",
                  "nodeType": "VariableDeclaration",
                  "scope": 12846,
                  "src": "3490:20:71",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 12799,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "3490:5:71",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3429:87:71"
            },
            "returnParameters": {
              "id": 12803,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3543:0:71"
            },
            "scope": 13325,
            "src": "3402:492:71",
            "stateMutability": "payable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 12944,
              "nodeType": "Block",
              "src": "4082:1362:71",
              "statements": [
                {
                  "assignments": [
                    12862
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 12862,
                      "mutability": "mutable",
                      "name": "cacheGasLeft",
                      "nameLocation": "4100:12:71",
                      "nodeType": "VariableDeclaration",
                      "scope": 12944,
                      "src": "4092:20:71",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 12861,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "4092:7:71",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 12865,
                  "initialValue": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 12863,
                      "name": "gasleft",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4294967289,
                      "src": "4115:7:71",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_gasleft_view$__$returns$_t_uint256_$",
                        "typeString": "function () view returns (uint256)"
                      }
                    },
                    "id": 12864,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4115:9:71",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4092:32:71"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 12868,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 12866,
                      "name": "cacheGasLeft",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12862,
                      "src": "4138:12:71",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "id": 12867,
                      "name": "_recoverGas",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12708,
                      "src": "4153:11:71",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "4138:26:71",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 12872,
                  "nodeType": "IfStatement",
                  "src": "4134:61:71",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 12869,
                        "name": "InsufficientGasLimit",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12723,
                        "src": "4173:20:71",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$__$returns$__$",
                          "typeString": "function () pure"
                        }
                      },
                      "id": 12870,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "4173:22:71",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 12871,
                    "nodeType": "RevertStatement",
                    "src": "4166:29:71"
                  }
                },
                {
                  "assignments": [
                    12874
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 12874,
                      "mutability": "mutable",
                      "name": "startingNativeBalance",
                      "nameLocation": "4222:21:71",
                      "nodeType": "VariableDeclaration",
                      "scope": 12944,
                      "src": "4214:29:71",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 12873,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "4214:7:71",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 12883,
                  "initialValue": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 12882,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "arguments": [
                          {
                            "id": 12877,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4294967268,
                            "src": "4254:4:71",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_DefaultMessageReceiver_$13325",
                              "typeString": "contract DefaultMessageReceiver"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_DefaultMessageReceiver_$13325",
                              "typeString": "contract DefaultMessageReceiver"
                            }
                          ],
                          "id": 12876,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "4246:7:71",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 12875,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "4246:7:71",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 12878,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "4246:13:71",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "id": 12879,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "balance",
                      "nodeType": "MemberAccess",
                      "src": "4246:21:71",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "-",
                    "rightExpression": {
                      "expression": {
                        "id": 12880,
                        "name": "msg",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4294967281,
                        "src": "4270:3:71",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_message",
                          "typeString": "msg"
                        }
                      },
                      "id": 12881,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "value",
                      "nodeType": "MemberAccess",
                      "src": "4270:9:71",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "4246:33:71",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4214:65:71"
                },
                {
                  "clauses": [
                    {
                      "block": {
                        "id": 12902,
                        "nodeType": "Block",
                        "src": "4810:160:71",
                        "statements": [
                          {
                            "eventCall": {
                              "arguments": [
                                {
                                  "id": 12896,
                                  "name": "transactionId",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 12848,
                                  "src": "4855:13:71",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                {
                                  "id": 12897,
                                  "name": "tokenSent",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 12854,
                                  "src": "4886:9:71",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "id": 12898,
                                  "name": "receiver",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 12856,
                                  "src": "4913:8:71",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address_payable",
                                    "typeString": "address payable"
                                  }
                                },
                                {
                                  "id": 12899,
                                  "name": "amount",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 12858,
                                  "src": "4939:6:71",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  },
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_address_payable",
                                    "typeString": "address payable"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 12895,
                                "name": "Executed",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 12743,
                                "src": "4829:8:71",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_address_$_t_address_$_t_uint256_$returns$__$",
                                  "typeString": "function (bytes32,address,address,uint256)"
                                }
                              },
                              "id": 12900,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "4829:130:71",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_tuple$__$",
                                "typeString": "tuple()"
                              }
                            },
                            "id": 12901,
                            "nodeType": "EmitStatement",
                            "src": "4824:135:71"
                          }
                        ]
                      },
                      "errorName": "",
                      "id": 12903,
                      "nodeType": "TryCatchClause",
                      "src": "4810:160:71"
                    },
                    {
                      "block": {
                        "id": 12941,
                        "nodeType": "Block",
                        "src": "4977:461:71",
                        "statements": [
                          {
                            "expression": {
                              "id": 12907,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "id": 12904,
                                "name": "cacheGasLeft",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 12862,
                                "src": "4991:12:71",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "id": 12905,
                                  "name": "gasleft",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4294967289,
                                  "src": "5006:7:71",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_gasleft_view$__$returns$_t_uint256_$",
                                    "typeString": "function () view returns (uint256)"
                                  }
                                },
                                "id": 12906,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "5006:9:71",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "4991:24:71",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 12908,
                            "nodeType": "ExpressionStatement",
                            "src": "4991:24:71"
                          },
                          {
                            "condition": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 12911,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 12909,
                                "name": "cacheGasLeft",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 12862,
                                "src": "5033:12:71",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "<",
                              "rightExpression": {
                                "id": 12910,
                                "name": "_recoverGas",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 12708,
                                "src": "5048:11:71",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "5033:26:71",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "id": 12915,
                            "nodeType": "IfStatement",
                            "src": "5029:61:71",
                            "trueBody": {
                              "errorCall": {
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "id": 12912,
                                  "name": "InsufficientGasLimit",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 12723,
                                  "src": "5068:20:71",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$__$returns$__$",
                                    "typeString": "function () pure"
                                  }
                                },
                                "id": 12913,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "5068:22:71",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 12914,
                              "nodeType": "RevertStatement",
                              "src": "5061:29:71"
                            }
                          },
                          {
                            "expression": {
                              "arguments": [
                                {
                                  "id": 12917,
                                  "name": "tokenSent",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 12854,
                                  "src": "5120:9:71",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "id": 12918,
                                  "name": "receiver",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 12856,
                                  "src": "5131:8:71",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address_payable",
                                    "typeString": "address payable"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_address_payable",
                                    "typeString": "address payable"
                                  }
                                ],
                                "id": 12916,
                                "name": "transferBalance",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 13203,
                                "src": "5104:15:71",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$returns$__$",
                                  "typeString": "function (address,address)"
                                }
                              },
                              "id": 12919,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "5104:36:71",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_tuple$__$",
                                "typeString": "tuple()"
                              }
                            },
                            "id": 12920,
                            "nodeType": "ExpressionStatement",
                            "src": "5104:36:71"
                          },
                          {
                            "condition": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 12927,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "expression": {
                                  "arguments": [
                                    {
                                      "id": 12923,
                                      "name": "this",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4294967268,
                                      "src": "5166:4:71",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_DefaultMessageReceiver_$13325",
                                        "typeString": "contract DefaultMessageReceiver"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_contract$_DefaultMessageReceiver_$13325",
                                        "typeString": "contract DefaultMessageReceiver"
                                      }
                                    ],
                                    "id": 12922,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "5158:7:71",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_address_$",
                                      "typeString": "type(address)"
                                    },
                                    "typeName": {
                                      "id": 12921,
                                      "name": "address",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "5158:7:71",
                                      "typeDescriptions": {}
                                    }
                                  },
                                  "id": 12924,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "5158:13:71",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "id": 12925,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "balance",
                                "nodeType": "MemberAccess",
                                "src": "5158:21:71",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">",
                              "rightExpression": {
                                "id": 12926,
                                "name": "startingNativeBalance",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 12874,
                                "src": "5182:21:71",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "5158:45:71",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "id": 12933,
                            "nodeType": "IfStatement",
                            "src": "5154:115:71",
                            "trueBody": {
                              "id": 12932,
                              "nodeType": "Block",
                              "src": "5205:64:71",
                              "statements": [
                                {
                                  "expression": {
                                    "arguments": [
                                      {
                                        "id": 12929,
                                        "name": "receiver",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 12856,
                                        "src": "5245:8:71",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address_payable",
                                          "typeString": "address payable"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address_payable",
                                          "typeString": "address payable"
                                        }
                                      ],
                                      "id": 12928,
                                      "name": "transferNativeBalance",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 13163,
                                      "src": "5223:21:71",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_payable_$returns$__$",
                                        "typeString": "function (address payable)"
                                      }
                                    },
                                    "id": 12930,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "5223:31:71",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_tuple$__$",
                                      "typeString": "tuple()"
                                    }
                                  },
                                  "id": 12931,
                                  "nodeType": "ExpressionStatement",
                                  "src": "5223:31:71"
                                }
                              ]
                            }
                          },
                          {
                            "eventCall": {
                              "arguments": [
                                {
                                  "id": 12935,
                                  "name": "transactionId",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 12848,
                                  "src": "5323:13:71",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                {
                                  "id": 12936,
                                  "name": "tokenSent",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 12854,
                                  "src": "5354:9:71",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "id": 12937,
                                  "name": "receiver",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 12856,
                                  "src": "5381:8:71",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address_payable",
                                    "typeString": "address payable"
                                  }
                                },
                                {
                                  "id": 12938,
                                  "name": "amount",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 12858,
                                  "src": "5407:6:71",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  },
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_address_payable",
                                    "typeString": "address payable"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 12934,
                                "name": "TransferRecovered",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 12753,
                                "src": "5288:17:71",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_address_$_t_address_$_t_uint256_$returns$__$",
                                  "typeString": "function (bytes32,address,address,uint256)"
                                }
                              },
                              "id": 12939,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "5288:139:71",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_tuple$__$",
                                "typeString": "tuple()"
                              }
                            },
                            "id": 12940,
                            "nodeType": "EmitStatement",
                            "src": "5283:144:71"
                          }
                        ]
                      },
                      "errorName": "",
                      "id": 12942,
                      "nodeType": "TryCatchClause",
                      "src": "4971:467:71"
                    }
                  ],
                  "documentation": "We are wrapping the Actions processing in new call in order to be\n able to recover, ie. send funds to the receiver, in case of fail or\n running out of gas. Otherwise we can only revert whole execution\n which would result in the need to manually process proposal resolution\n to unstuck the assets.",
                  "externalCall": {
                    "arguments": [
                      {
                        "id": 12890,
                        "name": "tokenSent",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12854,
                        "src": "4712:9:71",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 12891,
                        "name": "receiver",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12856,
                        "src": "4735:8:71",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "id": 12892,
                        "name": "startingNativeBalance",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12874,
                        "src": "4757:21:71",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 12893,
                        "name": "actions",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12852,
                        "src": "4792:7:71",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_Action_$12721_memory_ptr_$dyn_memory_ptr",
                          "typeString": "struct DefaultMessageReceiver.Action memory[] memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_array$_t_struct$_Action_$12721_memory_ptr_$dyn_memory_ptr",
                          "typeString": "struct DefaultMessageReceiver.Action memory[] memory"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_array$_t_struct$_Action_$12721_memory_ptr_$dyn_memory_ptr",
                            "typeString": "struct DefaultMessageReceiver.Action memory[] memory"
                          }
                        ],
                        "expression": {
                          "id": 12884,
                          "name": "this",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4294967268,
                          "src": "4646:4:71",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_DefaultMessageReceiver_$13325",
                            "typeString": "contract DefaultMessageReceiver"
                          }
                        },
                        "id": 12885,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "performActions",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 13093,
                        "src": "4646:19:71",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_payable_$_t_uint256_$_t_array$_t_struct$_Action_$12721_memory_ptr_$dyn_memory_ptr_$returns$__$",
                          "typeString": "function (address,address payable,uint256,struct DefaultMessageReceiver.Action memory[] memory) external"
                        }
                      },
                      "id": 12889,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "names": [
                        "gas"
                      ],
                      "nodeType": "FunctionCallOptions",
                      "options": [
                        {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 12888,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 12886,
                            "name": "cacheGasLeft",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 12862,
                            "src": "4671:12:71",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "-",
                          "rightExpression": {
                            "id": 12887,
                            "name": "_recoverGas",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 12708,
                            "src": "4686:11:71",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "4671:26:71",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "src": "4646:52:71",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_payable_$_t_uint256_$_t_array$_t_struct$_Action_$12721_memory_ptr_$dyn_memory_ptr_$returns$__$gas",
                        "typeString": "function (address,address payable,uint256,struct DefaultMessageReceiver.Action memory[] memory) external"
                      }
                    },
                    "id": 12894,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4646:163:71",
                    "tryCall": true,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 12943,
                  "nodeType": "TryStatement",
                  "src": "4642:796:71"
                }
              ]
            },
            "id": 12945,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_execute",
            "nameLocation": "3909:8:71",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 12859,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12848,
                  "mutability": "mutable",
                  "name": "transactionId",
                  "nameLocation": "3935:13:71",
                  "nodeType": "VariableDeclaration",
                  "scope": 12945,
                  "src": "3927:21:71",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 12847,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "3927:7:71",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12852,
                  "mutability": "mutable",
                  "name": "actions",
                  "nameLocation": "3974:7:71",
                  "nodeType": "VariableDeclaration",
                  "scope": 12945,
                  "src": "3958:23:71",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_struct$_Action_$12721_memory_ptr_$dyn_memory_ptr",
                    "typeString": "struct DefaultMessageReceiver.Action[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 12850,
                      "nodeType": "UserDefinedTypeName",
                      "pathNode": {
                        "id": 12849,
                        "name": "Action",
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 12721,
                        "src": "3958:6:71"
                      },
                      "referencedDeclaration": 12721,
                      "src": "3958:6:71",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Action_$12721_storage_ptr",
                        "typeString": "struct DefaultMessageReceiver.Action"
                      }
                    },
                    "id": 12851,
                    "nodeType": "ArrayTypeName",
                    "src": "3958:8:71",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_struct$_Action_$12721_storage_$dyn_storage_ptr",
                      "typeString": "struct DefaultMessageReceiver.Action[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12854,
                  "mutability": "mutable",
                  "name": "tokenSent",
                  "nameLocation": "3999:9:71",
                  "nodeType": "VariableDeclaration",
                  "scope": 12945,
                  "src": "3991:17:71",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 12853,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3991:7:71",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12856,
                  "mutability": "mutable",
                  "name": "receiver",
                  "nameLocation": "4034:8:71",
                  "nodeType": "VariableDeclaration",
                  "scope": 12945,
                  "src": "4018:24:71",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address_payable",
                    "typeString": "address payable"
                  },
                  "typeName": {
                    "id": 12855,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4018:15:71",
                    "stateMutability": "payable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12858,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "4060:6:71",
                  "nodeType": "VariableDeclaration",
                  "scope": 12945,
                  "src": "4052:14:71",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 12857,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4052:7:71",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3917:155:71"
            },
            "returnParameters": {
              "id": 12860,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4082:0:71"
            },
            "scope": 13325,
            "src": "3900:1544:71",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 13092,
              "nodeType": "Block",
              "src": "5686:1053:71",
              "statements": [
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 12965,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 12959,
                        "name": "msg",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4294967281,
                        "src": "5700:3:71",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_message",
                          "typeString": "msg"
                        }
                      },
                      "id": 12960,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sender",
                      "nodeType": "MemberAccess",
                      "src": "5700:10:71",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "arguments": [
                        {
                          "id": 12963,
                          "name": "this",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4294967268,
                          "src": "5722:4:71",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_DefaultMessageReceiver_$13325",
                            "typeString": "contract DefaultMessageReceiver"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_contract$_DefaultMessageReceiver_$13325",
                            "typeString": "contract DefaultMessageReceiver"
                          }
                        ],
                        "id": 12962,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "5714:7:71",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": {
                          "id": 12961,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "5714:7:71",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 12964,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "5714:13:71",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "5700:27:71",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 12969,
                  "nodeType": "IfStatement",
                  "src": "5696:64:71",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 12966,
                        "name": "InsufficientPermission",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12727,
                        "src": "5736:22:71",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$__$returns$__$",
                          "typeString": "function () pure"
                        }
                      },
                      "id": 12967,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "5736:24:71",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 12968,
                    "nodeType": "RevertStatement",
                    "src": "5729:31:71"
                  }
                },
                {
                  "assignments": [
                    12971
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 12971,
                      "mutability": "mutable",
                      "name": "numActions",
                      "nameLocation": "5779:10:71",
                      "nodeType": "VariableDeclaration",
                      "scope": 13092,
                      "src": "5771:18:71",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 12970,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "5771:7:71",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 12974,
                  "initialValue": {
                    "expression": {
                      "id": 12972,
                      "name": "actions",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12956,
                      "src": "5792:7:71",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_struct$_Action_$12721_memory_ptr_$dyn_memory_ptr",
                        "typeString": "struct DefaultMessageReceiver.Action memory[] memory"
                      }
                    },
                    "id": 12973,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "length",
                    "nodeType": "MemberAccess",
                    "src": "5792:14:71",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5771:35:71"
                },
                {
                  "body": {
                    "id": 13067,
                    "nodeType": "Block",
                    "src": "5857:670:71",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 12999,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 12991,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "UnaryOperation",
                            "operator": "!",
                            "prefix": true,
                            "src": "5961:30:71",
                            "subExpression": {
                              "arguments": [
                                {
                                  "expression": {
                                    "baseExpression": {
                                      "id": 12986,
                                      "name": "actions",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 12956,
                                      "src": "5973:7:71",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_struct$_Action_$12721_memory_ptr_$dyn_memory_ptr",
                                        "typeString": "struct DefaultMessageReceiver.Action memory[] memory"
                                      }
                                    },
                                    "id": 12988,
                                    "indexExpression": {
                                      "id": 12987,
                                      "name": "i",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 12976,
                                      "src": "5981:1:71",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "5973:10:71",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Action_$12721_memory_ptr",
                                      "typeString": "struct DefaultMessageReceiver.Action memory"
                                    }
                                  },
                                  "id": 12989,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "callTo",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 12712,
                                  "src": "5973:17:71",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 12985,
                                "name": "isContract",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 13257,
                                "src": "5962:10:71",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                                  "typeString": "function (address) view returns (bool)"
                                }
                              },
                              "id": 12990,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "5962:29:71",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "&&",
                          "rightExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 12998,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "expression": {
                                "expression": {
                                  "baseExpression": {
                                    "id": 12992,
                                    "name": "actions",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 12956,
                                    "src": "5995:7:71",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_struct$_Action_$12721_memory_ptr_$dyn_memory_ptr",
                                      "typeString": "struct DefaultMessageReceiver.Action memory[] memory"
                                    }
                                  },
                                  "id": 12994,
                                  "indexExpression": {
                                    "id": 12993,
                                    "name": "i",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 12976,
                                    "src": "6003:1:71",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "5995:10:71",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_Action_$12721_memory_ptr",
                                    "typeString": "struct DefaultMessageReceiver.Action memory"
                                  }
                                },
                                "id": 12995,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "data",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 12720,
                                "src": "5995:15:71",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              },
                              "id": 12996,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "length",
                              "nodeType": "MemberAccess",
                              "src": "5995:22:71",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": ">",
                            "rightExpression": {
                              "hexValue": "30",
                              "id": 12997,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "6020:1:71",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            "src": "5995:26:71",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "5961:60:71",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 13003,
                        "nodeType": "IfStatement",
                        "src": "5957:90:71",
                        "trueBody": {
                          "errorCall": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 13000,
                              "name": "InvalidContract",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 12725,
                              "src": "6030:15:71",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_error_pure$__$returns$__$",
                                "typeString": "function () pure"
                              }
                            },
                            "id": 13001,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "6030:17:71",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 13002,
                          "nodeType": "RevertStatement",
                          "src": "6023:24:71"
                        }
                      },
                      {
                        "assignments": [
                          13005
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 13005,
                            "mutability": "mutable",
                            "name": "nativeValue",
                            "nameLocation": "6069:11:71",
                            "nodeType": "VariableDeclaration",
                            "scope": 13067,
                            "src": "6061:19:71",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 13004,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "6061:7:71",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 13010,
                        "initialValue": {
                          "expression": {
                            "baseExpression": {
                              "id": 13006,
                              "name": "actions",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 12956,
                              "src": "6083:7:71",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_struct$_Action_$12721_memory_ptr_$dyn_memory_ptr",
                                "typeString": "struct DefaultMessageReceiver.Action memory[] memory"
                              }
                            },
                            "id": 13008,
                            "indexExpression": {
                              "id": 13007,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 12976,
                              "src": "6091:1:71",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "6083:10:71",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Action_$12721_memory_ptr",
                              "typeString": "struct DefaultMessageReceiver.Action memory"
                            }
                          },
                          "id": 13009,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "nativeValue",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 12710,
                          "src": "6083:22:71",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "6061:44:71"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 13021,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 13013,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 13011,
                              "name": "nativeValue",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 13005,
                              "src": "6123:11:71",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": ">",
                            "rightExpression": {
                              "hexValue": "30",
                              "id": 13012,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "6137:1:71",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            "src": "6123:15:71",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "&&",
                          "rightExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 13020,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "expression": {
                                "arguments": [
                                  {
                                    "id": 13016,
                                    "name": "this",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4294967268,
                                    "src": "6150:4:71",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_DefaultMessageReceiver_$13325",
                                      "typeString": "contract DefaultMessageReceiver"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_contract$_DefaultMessageReceiver_$13325",
                                      "typeString": "contract DefaultMessageReceiver"
                                    }
                                  ],
                                  "id": 13015,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "6142:7:71",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_address_$",
                                    "typeString": "type(address)"
                                  },
                                  "typeName": {
                                    "id": 13014,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "6142:7:71",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 13017,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "6142:13:71",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "id": 13018,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "balance",
                              "nodeType": "MemberAccess",
                              "src": "6142:21:71",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "<",
                            "rightExpression": {
                              "id": 13019,
                              "name": "nativeValue",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 13005,
                              "src": "6166:11:71",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "6142:35:71",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "6123:54:71",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 13026,
                        "nodeType": "IfStatement",
                        "src": "6119:127:71",
                        "trueBody": {
                          "id": 13025,
                          "nodeType": "Block",
                          "src": "6179:67:71",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "id": 13022,
                                  "name": "InsufficientNativeBalance",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 12731,
                                  "src": "6204:25:71",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$__$returns$__$",
                                    "typeString": "function () pure"
                                  }
                                },
                                "id": 13023,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "6204:27:71",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 13024,
                              "nodeType": "RevertStatement",
                              "src": "6197:34:71"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "expression": {
                                    "baseExpression": {
                                      "id": 13029,
                                      "name": "actions",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 12956,
                                      "src": "6279:7:71",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_struct$_Action_$12721_memory_ptr_$dyn_memory_ptr",
                                        "typeString": "struct DefaultMessageReceiver.Action memory[] memory"
                                      }
                                    },
                                    "id": 13031,
                                    "indexExpression": {
                                      "id": 13030,
                                      "name": "i",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 12976,
                                      "src": "6287:1:71",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "6279:10:71",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Action_$12721_memory_ptr",
                                      "typeString": "struct DefaultMessageReceiver.Action memory"
                                    }
                                  },
                                  "id": 13032,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "tokenSend",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 12716,
                                  "src": "6279:20:71",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 13028,
                                "name": "IERC20",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3068,
                                "src": "6272:6:71",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_IERC20_$3068_$",
                                  "typeString": "type(contract IERC20)"
                                }
                              },
                              "id": 13033,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "6272:28:71",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20_$3068",
                                "typeString": "contract IERC20"
                              }
                            },
                            {
                              "expression": {
                                "baseExpression": {
                                  "id": 13034,
                                  "name": "actions",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 12956,
                                  "src": "6302:7:71",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_struct$_Action_$12721_memory_ptr_$dyn_memory_ptr",
                                    "typeString": "struct DefaultMessageReceiver.Action memory[] memory"
                                  }
                                },
                                "id": 13036,
                                "indexExpression": {
                                  "id": 13035,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 12976,
                                  "src": "6310:1:71",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "6302:10:71",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Action_$12721_memory_ptr",
                                  "typeString": "struct DefaultMessageReceiver.Action memory"
                                }
                              },
                              "id": 13037,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "approveTo",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 12714,
                              "src": "6302:20:71",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "id": 13040,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "6329:7:71",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_uint256_$",
                                      "typeString": "type(uint256)"
                                    },
                                    "typeName": {
                                      "id": 13039,
                                      "name": "uint256",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "6329:7:71",
                                      "typeDescriptions": {}
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_type$_t_uint256_$",
                                      "typeString": "type(uint256)"
                                    }
                                  ],
                                  "id": 13038,
                                  "name": "type",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4294967269,
                                  "src": "6324:4:71",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                    "typeString": "function () pure"
                                  }
                                },
                                "id": 13041,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "6324:13:71",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_meta_type_t_uint256",
                                  "typeString": "type(uint256)"
                                }
                              },
                              "id": 13042,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "max",
                              "nodeType": "MemberAccess",
                              "src": "6324:17:71",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_IERC20_$3068",
                                "typeString": "contract IERC20"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 13027,
                            "name": "approveERC20",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13320,
                            "src": "6259:12:71",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$3068_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (contract IERC20,address,uint256)"
                            }
                          },
                          "id": 13043,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6259:83:71",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 13044,
                        "nodeType": "ExpressionStatement",
                        "src": "6259:83:71"
                      },
                      {
                        "assignments": [
                          13046,
                          null
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 13046,
                            "mutability": "mutable",
                            "name": "success",
                            "nameLocation": "6363:7:71",
                            "nodeType": "VariableDeclaration",
                            "scope": 13067,
                            "src": "6358:12:71",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "typeName": {
                              "id": 13045,
                              "name": "bool",
                              "nodeType": "ElementaryTypeName",
                              "src": "6358:4:71",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "visibility": "internal"
                          },
                          null
                        ],
                        "id": 13059,
                        "initialValue": {
                          "arguments": [
                            {
                              "expression": {
                                "baseExpression": {
                                  "id": 13054,
                                  "name": "actions",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 12956,
                                  "src": "6419:7:71",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_struct$_Action_$12721_memory_ptr_$dyn_memory_ptr",
                                    "typeString": "struct DefaultMessageReceiver.Action memory[] memory"
                                  }
                                },
                                "id": 13056,
                                "indexExpression": {
                                  "id": 13055,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 12976,
                                  "src": "6427:1:71",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "6419:10:71",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Action_$12721_memory_ptr",
                                  "typeString": "struct DefaultMessageReceiver.Action memory"
                                }
                              },
                              "id": 13057,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "data",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 12720,
                              "src": "6419:15:71",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              ],
                              "expression": {
                                "expression": {
                                  "baseExpression": {
                                    "id": 13047,
                                    "name": "actions",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 12956,
                                    "src": "6376:7:71",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_struct$_Action_$12721_memory_ptr_$dyn_memory_ptr",
                                      "typeString": "struct DefaultMessageReceiver.Action memory[] memory"
                                    }
                                  },
                                  "id": 13049,
                                  "indexExpression": {
                                    "id": 13048,
                                    "name": "i",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 12976,
                                    "src": "6384:1:71",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "6376:10:71",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_Action_$12721_memory_ptr",
                                    "typeString": "struct DefaultMessageReceiver.Action memory"
                                  }
                                },
                                "id": 13050,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "callTo",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 12712,
                                "src": "6376:17:71",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "id": 13051,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "call",
                              "nodeType": "MemberAccess",
                              "src": "6376:22:71",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                                "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                              }
                            },
                            "id": 13053,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "names": [
                              "value"
                            ],
                            "nodeType": "FunctionCallOptions",
                            "options": [
                              {
                                "id": 13052,
                                "name": "nativeValue",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 13005,
                                "src": "6406:11:71",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "src": "6376:42:71",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value",
                              "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                            }
                          },
                          "id": 13058,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6376:59:71",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                            "typeString": "tuple(bool,bytes memory)"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "6357:78:71"
                      },
                      {
                        "condition": {
                          "id": 13061,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "!",
                          "prefix": true,
                          "src": "6453:8:71",
                          "subExpression": {
                            "id": 13060,
                            "name": "success",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13046,
                            "src": "6454:7:71",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 13066,
                        "nodeType": "IfStatement",
                        "src": "6449:68:71",
                        "trueBody": {
                          "id": 13065,
                          "nodeType": "Block",
                          "src": "6463:54:71",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "id": 13062,
                                  "name": "ActionFailed",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 12729,
                                  "src": "6488:12:71",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$__$returns$__$",
                                    "typeString": "function () pure"
                                  }
                                },
                                "id": 13063,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "6488:14:71",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 13064,
                              "nodeType": "RevertStatement",
                              "src": "6481:21:71"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 12981,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 12979,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12976,
                      "src": "5836:1:71",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "id": 12980,
                      "name": "numActions",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12971,
                      "src": "5840:10:71",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "5836:14:71",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 13068,
                  "initializationExpression": {
                    "assignments": [
                      12976
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 12976,
                        "mutability": "mutable",
                        "name": "i",
                        "nameLocation": "5829:1:71",
                        "nodeType": "VariableDeclaration",
                        "scope": 13068,
                        "src": "5821:9:71",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 12975,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "5821:7:71",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "id": 12978,
                    "initialValue": {
                      "hexValue": "30",
                      "id": 12977,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "5833:1:71",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "5821:13:71"
                  },
                  "loopExpression": {
                    "expression": {
                      "id": 12983,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "5852:3:71",
                      "subExpression": {
                        "id": 12982,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12976,
                        "src": "5852:1:71",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 12984,
                    "nodeType": "ExpressionStatement",
                    "src": "5852:3:71"
                  },
                  "nodeType": "ForStatement",
                  "src": "5816:711:71"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 13075,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "arguments": [
                          {
                            "id": 13071,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4294967268,
                            "src": "6548:4:71",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_DefaultMessageReceiver_$13325",
                              "typeString": "contract DefaultMessageReceiver"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_DefaultMessageReceiver_$13325",
                              "typeString": "contract DefaultMessageReceiver"
                            }
                          ],
                          "id": 13070,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "6540:7:71",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 13069,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "6540:7:71",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 13072,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "6540:13:71",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "id": 13073,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "balance",
                      "nodeType": "MemberAccess",
                      "src": "6540:21:71",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "id": 13074,
                      "name": "startingNativeBalance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12952,
                      "src": "6564:21:71",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "6540:45:71",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 13081,
                  "nodeType": "IfStatement",
                  "src": "6536:107:71",
                  "trueBody": {
                    "id": 13080,
                    "nodeType": "Block",
                    "src": "6587:56:71",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 13077,
                              "name": "receiver",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 12950,
                              "src": "6623:8:71",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            ],
                            "id": 13076,
                            "name": "transferNativeBalance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13163,
                            "src": "6601:21:71",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_payable_$returns$__$",
                              "typeString": "function (address payable)"
                            }
                          },
                          "id": 13078,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6601:31:71",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 13079,
                        "nodeType": "ExpressionStatement",
                        "src": "6601:31:71"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 13083,
                        "name": "tokenSent",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12948,
                        "src": "6668:9:71",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 13084,
                        "name": "receiver",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12950,
                        "src": "6679:8:71",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "id": 13082,
                      "name": "transferBalance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 13203,
                      "src": "6652:15:71",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$returns$__$",
                        "typeString": "function (address,address)"
                      }
                    },
                    "id": 13085,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6652:36:71",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 13086,
                  "nodeType": "ExpressionStatement",
                  "src": "6652:36:71"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 13088,
                        "name": "actions",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12956,
                        "src": "6714:7:71",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_Action_$12721_memory_ptr_$dyn_memory_ptr",
                          "typeString": "struct DefaultMessageReceiver.Action memory[] memory"
                        }
                      },
                      {
                        "id": 13089,
                        "name": "receiver",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12950,
                        "src": "6723:8:71",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_array$_t_struct$_Action_$12721_memory_ptr_$dyn_memory_ptr",
                          "typeString": "struct DefaultMessageReceiver.Action memory[] memory"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "id": 13087,
                      "name": "returnLeftOvers",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 13137,
                      "src": "6698:15:71",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_array$_t_struct$_Action_$12721_memory_ptr_$dyn_memory_ptr_$_t_address_payable_$returns$__$",
                        "typeString": "function (struct DefaultMessageReceiver.Action memory[] memory,address payable)"
                      }
                    },
                    "id": 13090,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6698:34:71",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 13091,
                  "nodeType": "ExpressionStatement",
                  "src": "6698:34:71"
                }
              ]
            },
            "documentation": {
              "id": 12946,
              "nodeType": "StructuredDocumentation",
              "src": "5450:59:71",
              "text": "@dev See the comment inside of the _execute() function."
            },
            "functionSelector": "cd986c96",
            "id": 13093,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "performActions",
            "nameLocation": "5523:14:71",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 12957,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12948,
                  "mutability": "mutable",
                  "name": "tokenSent",
                  "nameLocation": "5555:9:71",
                  "nodeType": "VariableDeclaration",
                  "scope": 13093,
                  "src": "5547:17:71",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 12947,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5547:7:71",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12950,
                  "mutability": "mutable",
                  "name": "receiver",
                  "nameLocation": "5590:8:71",
                  "nodeType": "VariableDeclaration",
                  "scope": 13093,
                  "src": "5574:24:71",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address_payable",
                    "typeString": "address payable"
                  },
                  "typeName": {
                    "id": 12949,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5574:15:71",
                    "stateMutability": "payable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12952,
                  "mutability": "mutable",
                  "name": "startingNativeBalance",
                  "nameLocation": "5616:21:71",
                  "nodeType": "VariableDeclaration",
                  "scope": 13093,
                  "src": "5608:29:71",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 12951,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5608:7:71",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12956,
                  "mutability": "mutable",
                  "name": "actions",
                  "nameLocation": "5663:7:71",
                  "nodeType": "VariableDeclaration",
                  "scope": 13093,
                  "src": "5647:23:71",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_struct$_Action_$12721_memory_ptr_$dyn_memory_ptr",
                    "typeString": "struct DefaultMessageReceiver.Action[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 12954,
                      "nodeType": "UserDefinedTypeName",
                      "pathNode": {
                        "id": 12953,
                        "name": "Action",
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 12721,
                        "src": "5647:6:71"
                      },
                      "referencedDeclaration": 12721,
                      "src": "5647:6:71",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Action_$12721_storage_ptr",
                        "typeString": "struct DefaultMessageReceiver.Action"
                      }
                    },
                    "id": 12955,
                    "nodeType": "ArrayTypeName",
                    "src": "5647:8:71",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_struct$_Action_$12721_storage_$dyn_storage_ptr",
                      "typeString": "struct DefaultMessageReceiver.Action[]"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5537:139:71"
            },
            "returnParameters": {
              "id": 12958,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5686:0:71"
            },
            "scope": 13325,
            "src": "5514:1225:71",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 13136,
              "nodeType": "Block",
              "src": "6830:213:71",
              "statements": [
                {
                  "body": {
                    "id": 13134,
                    "nodeType": "Block",
                    "src": "6881:156:71",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "expression": {
                                "baseExpression": {
                                  "id": 13113,
                                  "name": "actions",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 13097,
                                  "src": "6911:7:71",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_struct$_Action_$12721_memory_ptr_$dyn_memory_ptr",
                                    "typeString": "struct DefaultMessageReceiver.Action memory[] memory"
                                  }
                                },
                                "id": 13115,
                                "indexExpression": {
                                  "id": 13114,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 13103,
                                  "src": "6919:1:71",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "6911:10:71",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Action_$12721_memory_ptr",
                                  "typeString": "struct DefaultMessageReceiver.Action memory"
                                }
                              },
                              "id": 13116,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "tokenReceive",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 12718,
                              "src": "6911:23:71",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 13117,
                              "name": "receiver",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 13099,
                              "src": "6936:8:71",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            ],
                            "id": 13112,
                            "name": "transferBalance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13203,
                            "src": "6895:15:71",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$returns$__$",
                              "typeString": "function (address,address)"
                            }
                          },
                          "id": 13118,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6895:50:71",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 13119,
                        "nodeType": "ExpressionStatement",
                        "src": "6895:50:71"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "expression": {
                                    "baseExpression": {
                                      "id": 13122,
                                      "name": "actions",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 13097,
                                      "src": "6979:7:71",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_struct$_Action_$12721_memory_ptr_$dyn_memory_ptr",
                                        "typeString": "struct DefaultMessageReceiver.Action memory[] memory"
                                      }
                                    },
                                    "id": 13124,
                                    "indexExpression": {
                                      "id": 13123,
                                      "name": "i",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 13103,
                                      "src": "6987:1:71",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "6979:10:71",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Action_$12721_memory_ptr",
                                      "typeString": "struct DefaultMessageReceiver.Action memory"
                                    }
                                  },
                                  "id": 13125,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "tokenSend",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 12716,
                                  "src": "6979:20:71",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 13121,
                                "name": "IERC20",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3068,
                                "src": "6972:6:71",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_IERC20_$3068_$",
                                  "typeString": "type(contract IERC20)"
                                }
                              },
                              "id": 13126,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "6972:28:71",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20_$3068",
                                "typeString": "contract IERC20"
                              }
                            },
                            {
                              "expression": {
                                "baseExpression": {
                                  "id": 13127,
                                  "name": "actions",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 13097,
                                  "src": "7002:7:71",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_struct$_Action_$12721_memory_ptr_$dyn_memory_ptr",
                                    "typeString": "struct DefaultMessageReceiver.Action memory[] memory"
                                  }
                                },
                                "id": 13129,
                                "indexExpression": {
                                  "id": 13128,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 13103,
                                  "src": "7010:1:71",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "7002:10:71",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Action_$12721_memory_ptr",
                                  "typeString": "struct DefaultMessageReceiver.Action memory"
                                }
                              },
                              "id": 13130,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "approveTo",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 12714,
                              "src": "7002:20:71",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "hexValue": "30",
                              "id": 13131,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "7024:1:71",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_IERC20_$3068",
                                "typeString": "contract IERC20"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 13120,
                            "name": "approveERC20",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13320,
                            "src": "6959:12:71",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$3068_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (contract IERC20,address,uint256)"
                            }
                          },
                          "id": 13132,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6959:67:71",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 13133,
                        "nodeType": "ExpressionStatement",
                        "src": "6959:67:71"
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 13108,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 13105,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 13103,
                      "src": "6856:1:71",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "expression": {
                        "id": 13106,
                        "name": "actions",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13097,
                        "src": "6860:7:71",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_Action_$12721_memory_ptr_$dyn_memory_ptr",
                          "typeString": "struct DefaultMessageReceiver.Action memory[] memory"
                        }
                      },
                      "id": 13107,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "src": "6860:14:71",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "6856:18:71",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 13135,
                  "initializationExpression": {
                    "assignments": [
                      13103
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 13103,
                        "mutability": "mutable",
                        "name": "i",
                        "nameLocation": "6853:1:71",
                        "nodeType": "VariableDeclaration",
                        "scope": 13135,
                        "src": "6845:9:71",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 13102,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "6845:7:71",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "id": 13104,
                    "nodeType": "VariableDeclarationStatement",
                    "src": "6845:9:71"
                  },
                  "loopExpression": {
                    "expression": {
                      "id": 13110,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "6876:3:71",
                      "subExpression": {
                        "id": 13109,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13103,
                        "src": "6876:1:71",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 13111,
                    "nodeType": "ExpressionStatement",
                    "src": "6876:3:71"
                  },
                  "nodeType": "ForStatement",
                  "src": "6840:197:71"
                }
              ]
            },
            "id": 13137,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "returnLeftOvers",
            "nameLocation": "6754:15:71",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 13100,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13097,
                  "mutability": "mutable",
                  "name": "actions",
                  "nameLocation": "6786:7:71",
                  "nodeType": "VariableDeclaration",
                  "scope": 13137,
                  "src": "6770:23:71",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_struct$_Action_$12721_memory_ptr_$dyn_memory_ptr",
                    "typeString": "struct DefaultMessageReceiver.Action[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 13095,
                      "nodeType": "UserDefinedTypeName",
                      "pathNode": {
                        "id": 13094,
                        "name": "Action",
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 12721,
                        "src": "6770:6:71"
                      },
                      "referencedDeclaration": 12721,
                      "src": "6770:6:71",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Action_$12721_storage_ptr",
                        "typeString": "struct DefaultMessageReceiver.Action"
                      }
                    },
                    "id": 13096,
                    "nodeType": "ArrayTypeName",
                    "src": "6770:8:71",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_struct$_Action_$12721_storage_$dyn_storage_ptr",
                      "typeString": "struct DefaultMessageReceiver.Action[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13099,
                  "mutability": "mutable",
                  "name": "receiver",
                  "nameLocation": "6811:8:71",
                  "nodeType": "VariableDeclaration",
                  "scope": 13137,
                  "src": "6795:24:71",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address_payable",
                    "typeString": "address payable"
                  },
                  "typeName": {
                    "id": 13098,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6795:15:71",
                    "stateMutability": "payable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6769:51:71"
            },
            "returnParameters": {
              "id": 13101,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6830:0:71"
            },
            "scope": 13325,
            "src": "6745:298:71",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 13162,
              "nodeType": "Block",
              "src": "7115:166:71",
              "statements": [
                {
                  "assignments": [
                    13143,
                    null
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 13143,
                      "mutability": "mutable",
                      "name": "success",
                      "nameLocation": "7131:7:71",
                      "nodeType": "VariableDeclaration",
                      "scope": 13162,
                      "src": "7126:12:71",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 13142,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "7126:4:71",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "visibility": "internal"
                    },
                    null
                  ],
                  "id": 13154,
                  "initialValue": {
                    "arguments": [
                      {
                        "hexValue": "",
                        "id": 13152,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7188:2:71",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                          "typeString": "literal_string \"\""
                        },
                        "value": ""
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                          "typeString": "literal_string \"\""
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                            "typeString": "literal_string \"\""
                          }
                        ],
                        "expression": {
                          "id": 13144,
                          "name": "receiver",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 13139,
                          "src": "7144:8:71",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "id": 13145,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "call",
                        "nodeType": "MemberAccess",
                        "src": "7144:13:71",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                          "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                        }
                      },
                      "id": 13151,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "names": [
                        "value"
                      ],
                      "nodeType": "FunctionCallOptions",
                      "options": [
                        {
                          "expression": {
                            "arguments": [
                              {
                                "id": 13148,
                                "name": "this",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4294967268,
                                "src": "7173:4:71",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_DefaultMessageReceiver_$13325",
                                  "typeString": "contract DefaultMessageReceiver"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_DefaultMessageReceiver_$13325",
                                  "typeString": "contract DefaultMessageReceiver"
                                }
                              ],
                              "id": 13147,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "7165:7:71",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 13146,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "7165:7:71",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 13149,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "7165:13:71",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "id": 13150,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "balance",
                          "nodeType": "MemberAccess",
                          "src": "7165:21:71",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "src": "7144:43:71",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value",
                        "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                      }
                    },
                    "id": 13153,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7144:47:71",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                      "typeString": "tuple(bool,bytes memory)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7125:66:71"
                },
                {
                  "condition": {
                    "id": 13156,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "!",
                    "prefix": true,
                    "src": "7205:8:71",
                    "subExpression": {
                      "id": 13155,
                      "name": "success",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 13143,
                      "src": "7206:7:71",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 13161,
                  "nodeType": "IfStatement",
                  "src": "7201:74:71",
                  "trueBody": {
                    "id": 13160,
                    "nodeType": "Block",
                    "src": "7215:60:71",
                    "statements": [
                      {
                        "errorCall": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 13157,
                            "name": "ReturnNativeLeftOverFailed",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 12733,
                            "src": "7236:26:71",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_error_pure$__$returns$__$",
                              "typeString": "function () pure"
                            }
                          },
                          "id": 13158,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7236:28:71",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 13159,
                        "nodeType": "RevertStatement",
                        "src": "7229:35:71"
                      }
                    ]
                  }
                }
              ]
            },
            "id": 13163,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "transferNativeBalance",
            "nameLocation": "7058:21:71",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 13140,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13139,
                  "mutability": "mutable",
                  "name": "receiver",
                  "nameLocation": "7096:8:71",
                  "nodeType": "VariableDeclaration",
                  "scope": 13163,
                  "src": "7080:24:71",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address_payable",
                    "typeString": "address payable"
                  },
                  "typeName": {
                    "id": 13138,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7080:15:71",
                    "stateMutability": "payable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "7079:26:71"
            },
            "returnParameters": {
              "id": 13141,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7115:0:71"
            },
            "scope": 13325,
            "src": "7049:232:71",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 13202,
              "nodeType": "Block",
              "src": "7354:257:71",
              "statements": [
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 13172,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 13170,
                      "name": "token",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 13165,
                      "src": "7368:5:71",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "id": 13171,
                      "name": "zeroAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12706,
                      "src": "7377:11:71",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "7368:20:71",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 13201,
                  "nodeType": "IfStatement",
                  "src": "7364:241:71",
                  "trueBody": {
                    "id": 13200,
                    "nodeType": "Block",
                    "src": "7390:215:71",
                    "statements": [
                      {
                        "assignments": [
                          13174
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 13174,
                            "mutability": "mutable",
                            "name": "tokenBalance",
                            "nameLocation": "7412:12:71",
                            "nodeType": "VariableDeclaration",
                            "scope": 13200,
                            "src": "7404:20:71",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 13173,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "7404:7:71",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 13184,
                        "initialValue": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "id": 13181,
                                  "name": "this",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4294967268,
                                  "src": "7459:4:71",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_DefaultMessageReceiver_$13325",
                                    "typeString": "contract DefaultMessageReceiver"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_DefaultMessageReceiver_$13325",
                                    "typeString": "contract DefaultMessageReceiver"
                                  }
                                ],
                                "id": 13180,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "7451:7:71",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 13179,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "7451:7:71",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 13182,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "7451:13:71",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "arguments": [
                                {
                                  "id": 13176,
                                  "name": "token",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 13165,
                                  "src": "7434:5:71",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 13175,
                                "name": "IERC20",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3068,
                                "src": "7427:6:71",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_IERC20_$3068_$",
                                  "typeString": "type(contract IERC20)"
                                }
                              },
                              "id": 13177,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "7427:13:71",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20_$3068",
                                "typeString": "contract IERC20"
                              }
                            },
                            "id": 13178,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "balanceOf",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3007,
                            "src": "7427:23:71",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                              "typeString": "function (address) view external returns (uint256)"
                            }
                          },
                          "id": 13183,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7427:38:71",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "7404:61:71"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 13187,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 13185,
                            "name": "tokenBalance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13174,
                            "src": "7483:12:71",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 13186,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "7498:1:71",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "7483:16:71",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 13199,
                        "nodeType": "IfStatement",
                        "src": "7479:116:71",
                        "trueBody": {
                          "id": 13198,
                          "nodeType": "Block",
                          "src": "7501:94:71",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "id": 13192,
                                        "name": "token",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 13165,
                                        "src": "7549:5:71",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      ],
                                      "id": 13191,
                                      "name": "IERC20",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 3068,
                                      "src": "7542:6:71",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_contract$_IERC20_$3068_$",
                                        "typeString": "type(contract IERC20)"
                                      }
                                    },
                                    "id": 13193,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "7542:13:71",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_IERC20_$3068",
                                      "typeString": "contract IERC20"
                                    }
                                  },
                                  {
                                    "id": 13194,
                                    "name": "receiver",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 13167,
                                    "src": "7557:8:71",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "id": 13195,
                                    "name": "tokenBalance",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 13174,
                                    "src": "7567:12:71",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_contract$_IERC20_$3068",
                                      "typeString": "contract IERC20"
                                    },
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "id": 13188,
                                    "name": "SafeERC20",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3739,
                                    "src": "7519:9:71",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_contract$_SafeERC20_$3739_$",
                                      "typeString": "type(library SafeERC20)"
                                    }
                                  },
                                  "id": 13190,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "safeTransfer",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 3546,
                                  "src": "7519:22:71",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$3068_$_t_address_$_t_uint256_$returns$__$",
                                    "typeString": "function (contract IERC20,address,uint256)"
                                  }
                                },
                                "id": 13196,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "7519:61:71",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 13197,
                              "nodeType": "ExpressionStatement",
                              "src": "7519:61:71"
                            }
                          ]
                        }
                      }
                    ]
                  }
                }
              ]
            },
            "id": 13203,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "transferBalance",
            "nameLocation": "7296:15:71",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 13168,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13165,
                  "mutability": "mutable",
                  "name": "token",
                  "nameLocation": "7320:5:71",
                  "nodeType": "VariableDeclaration",
                  "scope": 13203,
                  "src": "7312:13:71",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 13164,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7312:7:71",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13167,
                  "mutability": "mutable",
                  "name": "receiver",
                  "nameLocation": "7335:8:71",
                  "nodeType": "VariableDeclaration",
                  "scope": 13203,
                  "src": "7327:16:71",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 13166,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7327:7:71",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "7311:33:71"
            },
            "returnParameters": {
              "id": 13169,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7354:0:71"
            },
            "scope": 13325,
            "src": "7287:324:71",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 13240,
              "nodeType": "Block",
              "src": "7981:244:71",
              "statements": [
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 13217,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 13211,
                        "name": "msg",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4294967281,
                        "src": "7995:3:71",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_message",
                          "typeString": "msg"
                        }
                      },
                      "id": 13212,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sender",
                      "nodeType": "MemberAccess",
                      "src": "7995:10:71",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "arguments": [
                        {
                          "id": 13215,
                          "name": "this",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4294967268,
                          "src": "8017:4:71",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_DefaultMessageReceiver_$13325",
                            "typeString": "contract DefaultMessageReceiver"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_contract$_DefaultMessageReceiver_$13325",
                            "typeString": "contract DefaultMessageReceiver"
                          }
                        ],
                        "id": 13214,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "8009:7:71",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": {
                          "id": 13213,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "8009:7:71",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 13216,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "8009:13:71",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "7995:27:71",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 13221,
                  "nodeType": "IfStatement",
                  "src": "7991:64:71",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 13218,
                        "name": "InsufficientPermission",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12727,
                        "src": "8031:22:71",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$__$returns$__$",
                          "typeString": "function () pure"
                        }
                      },
                      "id": 13219,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "8031:24:71",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 13220,
                    "nodeType": "RevertStatement",
                    "src": "8024:31:71"
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 13224,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 13222,
                      "name": "token",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 13206,
                      "src": "8069:5:71",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "id": 13223,
                      "name": "zeroAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12706,
                      "src": "8078:11:71",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "8069:20:71",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 13238,
                    "nodeType": "Block",
                    "src": "8154:65:71",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "id": 13234,
                                  "name": "receiver",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 13208,
                                  "src": "8198:8:71",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 13233,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "8190:8:71",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_payable_$",
                                  "typeString": "type(address payable)"
                                },
                                "typeName": {
                                  "id": 13232,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "8190:8:71",
                                  "stateMutability": "payable",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 13235,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "8190:17:71",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            ],
                            "id": 13231,
                            "name": "transferNativeBalance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13163,
                            "src": "8168:21:71",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_payable_$returns$__$",
                              "typeString": "function (address payable)"
                            }
                          },
                          "id": 13236,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8168:40:71",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 13237,
                        "nodeType": "ExpressionStatement",
                        "src": "8168:40:71"
                      }
                    ]
                  },
                  "id": 13239,
                  "nodeType": "IfStatement",
                  "src": "8065:154:71",
                  "trueBody": {
                    "id": 13230,
                    "nodeType": "Block",
                    "src": "8091:57:71",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 13226,
                              "name": "token",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 13206,
                              "src": "8121:5:71",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 13227,
                              "name": "receiver",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 13208,
                              "src": "8128:8:71",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 13225,
                            "name": "transferBalance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13203,
                            "src": "8105:15:71",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$returns$__$",
                              "typeString": "function (address,address)"
                            }
                          },
                          "id": 13228,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8105:32:71",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 13229,
                        "nodeType": "ExpressionStatement",
                        "src": "8105:32:71"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": {
              "id": 13204,
              "nodeType": "StructuredDocumentation",
              "src": "7617:286:71",
              "text": "@notice Helper function that could be used as an Action to itself to transfer whole\nbalance of a particular token.\n@param token Address of the ERC20 token or 0x0 for native token.\n@param receiver Address that should receive the whole balance."
            },
            "functionSelector": "419bf1ea",
            "id": 13241,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "transferBalanceAction",
            "nameLocation": "7917:21:71",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 13209,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13206,
                  "mutability": "mutable",
                  "name": "token",
                  "nameLocation": "7947:5:71",
                  "nodeType": "VariableDeclaration",
                  "scope": 13241,
                  "src": "7939:13:71",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 13205,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7939:7:71",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13208,
                  "mutability": "mutable",
                  "name": "receiver",
                  "nameLocation": "7962:8:71",
                  "nodeType": "VariableDeclaration",
                  "scope": 13241,
                  "src": "7954:16:71",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 13207,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7954:7:71",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "7938:33:71"
            },
            "returnParameters": {
              "id": 13210,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7981:0:71"
            },
            "scope": 13325,
            "src": "7908:317:71",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 13256,
              "nodeType": "Block",
              "src": "8302:129:71",
              "statements": [
                {
                  "assignments": [
                    13249
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 13249,
                      "mutability": "mutable",
                      "name": "size",
                      "nameLocation": "8320:4:71",
                      "nodeType": "VariableDeclaration",
                      "scope": 13256,
                      "src": "8312:12:71",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 13248,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "8312:7:71",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 13250,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "8312:12:71"
                },
                {
                  "AST": {
                    "nodeType": "YulBlock",
                    "src": "8343:57:71",
                    "statements": [
                      {
                        "nodeType": "YulAssignment",
                        "src": "8357:33:71",
                        "value": {
                          "arguments": [
                            {
                              "name": "contractAddr",
                              "nodeType": "YulIdentifier",
                              "src": "8377:12:71"
                            }
                          ],
                          "functionName": {
                            "name": "extcodesize",
                            "nodeType": "YulIdentifier",
                            "src": "8365:11:71"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "8365:25:71"
                        },
                        "variableNames": [
                          {
                            "name": "size",
                            "nodeType": "YulIdentifier",
                            "src": "8357:4:71"
                          }
                        ]
                      }
                    ]
                  },
                  "evmVersion": "london",
                  "externalReferences": [
                    {
                      "declaration": 13243,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "8377:12:71",
                      "valueSize": 1
                    },
                    {
                      "declaration": 13249,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "8357:4:71",
                      "valueSize": 1
                    }
                  ],
                  "id": 13251,
                  "nodeType": "InlineAssembly",
                  "src": "8334:66:71"
                },
                {
                  "expression": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 13254,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 13252,
                      "name": "size",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 13249,
                      "src": "8416:4:71",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 13253,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "8423:1:71",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "8416:8:71",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 13247,
                  "id": 13255,
                  "nodeType": "Return",
                  "src": "8409:15:71"
                }
              ]
            },
            "id": 13257,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "isContract",
            "nameLocation": "8240:10:71",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 13244,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13243,
                  "mutability": "mutable",
                  "name": "contractAddr",
                  "nameLocation": "8259:12:71",
                  "nodeType": "VariableDeclaration",
                  "scope": 13257,
                  "src": "8251:20:71",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 13242,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "8251:7:71",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "8250:22:71"
            },
            "returnParameters": {
              "id": 13247,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13246,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 13257,
                  "src": "8296:4:71",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 13245,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "8296:4:71",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "8295:6:71"
            },
            "scope": 13325,
            "src": "8231:200:71",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 13319,
              "nodeType": "Block",
              "src": "8545:463:71",
              "statements": [
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 13276,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "commonType": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "id": 13272,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "arguments": [
                          {
                            "id": 13269,
                            "name": "token",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13260,
                            "src": "8567:5:71",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IERC20_$3068",
                              "typeString": "contract IERC20"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_IERC20_$3068",
                              "typeString": "contract IERC20"
                            }
                          ],
                          "id": 13268,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "8559:7:71",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 13267,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "8559:7:71",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 13270,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "8559:14:71",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "!=",
                      "rightExpression": {
                        "id": 13271,
                        "name": "zeroAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12706,
                        "src": "8577:11:71",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "src": "8559:29:71",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "commonType": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "id": 13275,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 13273,
                        "name": "spender",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13262,
                        "src": "8592:7:71",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "!=",
                      "rightExpression": {
                        "id": 13274,
                        "name": "zeroAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12706,
                        "src": "8603:11:71",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "src": "8592:22:71",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "8559:55:71",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 13318,
                  "nodeType": "IfStatement",
                  "src": "8555:447:71",
                  "trueBody": {
                    "id": 13317,
                    "nodeType": "Block",
                    "src": "8616:386:71",
                    "statements": [
                      {
                        "assignments": [
                          13278,
                          null
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 13278,
                            "mutability": "mutable",
                            "name": "success",
                            "nameLocation": "8739:7:71",
                            "nodeType": "VariableDeclaration",
                            "scope": 13317,
                            "src": "8734:12:71",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "typeName": {
                              "id": 13277,
                              "name": "bool",
                              "nodeType": "ElementaryTypeName",
                              "src": "8734:4:71",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "visibility": "internal"
                          },
                          null
                        ],
                        "id": 13293,
                        "initialValue": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "expression": {
                                    "expression": {
                                      "id": 13286,
                                      "name": "token",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 13260,
                                      "src": "8795:5:71",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_IERC20_$3068",
                                        "typeString": "contract IERC20"
                                      }
                                    },
                                    "id": 13287,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "approve",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 3037,
                                    "src": "8795:13:71",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                                      "typeString": "function (address,uint256) external returns (bool)"
                                    }
                                  },
                                  "id": 13288,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "selector",
                                  "nodeType": "MemberAccess",
                                  "src": "8795:22:71",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes4",
                                    "typeString": "bytes4"
                                  }
                                },
                                {
                                  "id": 13289,
                                  "name": "spender",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 13262,
                                  "src": "8819:7:71",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "hexValue": "30",
                                  "id": 13290,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "8828:1:71",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes4",
                                    "typeString": "bytes4"
                                  },
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  }
                                ],
                                "expression": {
                                  "id": 13284,
                                  "name": "abi",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4294967295,
                                  "src": "8772:3:71",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_abi",
                                    "typeString": "abi"
                                  }
                                },
                                "id": 13285,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "memberName": "encodeWithSelector",
                                "nodeType": "MemberAccess",
                                "src": "8772:22:71",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$",
                                  "typeString": "function (bytes4) pure returns (bytes memory)"
                                }
                              },
                              "id": 13291,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "8772:58:71",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "expression": {
                              "arguments": [
                                {
                                  "id": 13281,
                                  "name": "token",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 13260,
                                  "src": "8760:5:71",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_IERC20_$3068",
                                    "typeString": "contract IERC20"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_IERC20_$3068",
                                    "typeString": "contract IERC20"
                                  }
                                ],
                                "id": 13280,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "8752:7:71",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 13279,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "8752:7:71",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 13282,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "8752:14:71",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "id": 13283,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "call",
                            "nodeType": "MemberAccess",
                            "src": "8752:19:71",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                              "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                            }
                          },
                          "id": 13292,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8752:79:71",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                            "typeString": "tuple(bool,bytes memory)"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "8733:98:71"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 13296,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 13294,
                            "name": "amount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13264,
                            "src": "8849:6:71",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 13295,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "8858:1:71",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "8849:10:71",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 13316,
                        "nodeType": "IfStatement",
                        "src": "8845:147:71",
                        "trueBody": {
                          "id": 13315,
                          "nodeType": "Block",
                          "src": "8861:131:71",
                          "statements": [
                            {
                              "expression": {
                                "id": 13313,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "components": [
                                    {
                                      "id": 13297,
                                      "name": "success",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 13278,
                                      "src": "8880:7:71",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    null
                                  ],
                                  "id": 13298,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "nodeType": "TupleExpression",
                                  "src": "8879:11:71",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_tuple$_t_bool_$__$",
                                    "typeString": "tuple(bool,)"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "arguments": [
                                    {
                                      "arguments": [
                                        {
                                          "expression": {
                                            "expression": {
                                              "id": 13306,
                                              "name": "token",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 13260,
                                              "src": "8936:5:71",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_contract$_IERC20_$3068",
                                                "typeString": "contract IERC20"
                                              }
                                            },
                                            "id": 13307,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "approve",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 3037,
                                            "src": "8936:13:71",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                                              "typeString": "function (address,uint256) external returns (bool)"
                                            }
                                          },
                                          "id": 13308,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberName": "selector",
                                          "nodeType": "MemberAccess",
                                          "src": "8936:22:71",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_bytes4",
                                            "typeString": "bytes4"
                                          }
                                        },
                                        {
                                          "id": 13309,
                                          "name": "spender",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 13262,
                                          "src": "8960:7:71",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        },
                                        {
                                          "id": 13310,
                                          "name": "amount",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 13264,
                                          "src": "8969:6:71",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_bytes4",
                                            "typeString": "bytes4"
                                          },
                                          {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          },
                                          {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        ],
                                        "expression": {
                                          "id": 13304,
                                          "name": "abi",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 4294967295,
                                          "src": "8913:3:71",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_magic_abi",
                                            "typeString": "abi"
                                          }
                                        },
                                        "id": 13305,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "lValueRequested": false,
                                        "memberName": "encodeWithSelector",
                                        "nodeType": "MemberAccess",
                                        "src": "8913:22:71",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$",
                                          "typeString": "function (bytes4) pure returns (bytes memory)"
                                        }
                                      },
                                      "id": 13311,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "8913:63:71",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes memory"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes memory"
                                      }
                                    ],
                                    "expression": {
                                      "arguments": [
                                        {
                                          "id": 13301,
                                          "name": "token",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 13260,
                                          "src": "8901:5:71",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_contract$_IERC20_$3068",
                                            "typeString": "contract IERC20"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_contract$_IERC20_$3068",
                                            "typeString": "contract IERC20"
                                          }
                                        ],
                                        "id": 13300,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "lValueRequested": false,
                                        "nodeType": "ElementaryTypeNameExpression",
                                        "src": "8893:7:71",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_type$_t_address_$",
                                          "typeString": "type(address)"
                                        },
                                        "typeName": {
                                          "id": 13299,
                                          "name": "address",
                                          "nodeType": "ElementaryTypeName",
                                          "src": "8893:7:71",
                                          "typeDescriptions": {}
                                        }
                                      },
                                      "id": 13302,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "typeConversion",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "8893:14:71",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    "id": 13303,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "call",
                                    "nodeType": "MemberAccess",
                                    "src": "8893:19:71",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                                      "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                                    }
                                  },
                                  "id": 13312,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "8893:84:71",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                                    "typeString": "tuple(bool,bytes memory)"
                                  }
                                },
                                "src": "8879:98:71",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 13314,
                              "nodeType": "ExpressionStatement",
                              "src": "8879:98:71"
                            }
                          ]
                        }
                      }
                    ]
                  }
                }
              ]
            },
            "id": 13320,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "approveERC20",
            "nameLocation": "8446:12:71",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 13265,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13260,
                  "mutability": "mutable",
                  "name": "token",
                  "nameLocation": "8475:5:71",
                  "nodeType": "VariableDeclaration",
                  "scope": 13320,
                  "src": "8468:12:71",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC20_$3068",
                    "typeString": "contract IERC20"
                  },
                  "typeName": {
                    "id": 13259,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 13258,
                      "name": "IERC20",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 3068,
                      "src": "8468:6:71"
                    },
                    "referencedDeclaration": 3068,
                    "src": "8468:6:71",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20_$3068",
                      "typeString": "contract IERC20"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13262,
                  "mutability": "mutable",
                  "name": "spender",
                  "nameLocation": "8498:7:71",
                  "nodeType": "VariableDeclaration",
                  "scope": 13320,
                  "src": "8490:15:71",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 13261,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "8490:7:71",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13264,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "8523:6:71",
                  "nodeType": "VariableDeclaration",
                  "scope": 13320,
                  "src": "8515:14:71",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 13263,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8515:7:71",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "8458:77:71"
            },
            "returnParameters": {
              "id": 13266,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8545:0:71"
            },
            "scope": 13325,
            "src": "8437:571:71",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 13323,
              "nodeType": "Block",
              "src": "9041:2:71",
              "statements": []
            },
            "id": 13324,
            "implemented": true,
            "kind": "receive",
            "modifiers": [],
            "name": "",
            "nameLocation": "-1:-1:-1",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 13321,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "9021:2:71"
            },
            "returnParameters": {
              "id": 13322,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "9041:0:71"
            },
            "scope": 13325,
            "src": "9014:29:71",
            "stateMutability": "payable",
            "virtual": false,
            "visibility": "external"
          }
        ],
        "scope": 13326,
        "src": "532:8513:71",
        "usedErrors": [
          12723,
          12725,
          12727,
          12729,
          12731,
          12733
        ]
      }
    ],
    "src": "32:9014:71"
  },
  "legacyAST": {
    "absolutePath": "project:/contracts/handlers/DefaultMessageReceiver.sol",
    "exportedSymbols": {
      "AccessControl": [
        18612
      ],
      "Address": [
        5283
      ],
      "Context": [
        5305
      ],
      "DefaultMessageReceiver": [
        13325
      ],
      "ERC1155Holder": [
        2368
      ],
      "ERC1155Receiver": [
        2402
      ],
      "ERC165": [
        6167
      ],
      "ERC721Holder": [
        4988
      ],
      "EnumerableSet": [
        7373
      ],
      "IERC1155Receiver": [
        1987
      ],
      "IERC165": [
        6381
      ],
      "IERC20": [
        3068
      ],
      "IERC721Receiver": [
        4739
      ],
      "ISygmaMessageReceiver": [
        18315
      ],
      "SafeERC20": [
        3739
      ]
    },
    "id": 13326,
    "license": "MIT",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 12680,
        "literals": [
          "solidity",
          "0.8",
          ".11"
        ],
        "nodeType": "PragmaDirective",
        "src": "32:23:71"
      },
      {
        "absolutePath": "@openzeppelin/contracts/token/ERC20/IERC20.sol",
        "file": "@openzeppelin/contracts/token/ERC20/IERC20.sol",
        "id": 12681,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 13326,
        "sourceUnit": 3069,
        "src": "57:56:71",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol",
        "file": "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol",
        "id": 12682,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 13326,
        "sourceUnit": 3740,
        "src": "114:65:71",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@openzeppelin/contracts/token/ERC721/utils/ERC721Holder.sol",
        "file": "@openzeppelin/contracts/token/ERC721/utils/ERC721Holder.sol",
        "id": 12683,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 13326,
        "sourceUnit": 4989,
        "src": "180:69:71",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@openzeppelin/contracts/token/ERC1155/utils/ERC1155Holder.sol",
        "file": "@openzeppelin/contracts/token/ERC1155/utils/ERC1155Holder.sol",
        "id": 12684,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 13326,
        "sourceUnit": 2369,
        "src": "250:71:71",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "project:/contracts/utils/AccessControl.sol",
        "file": "../utils/AccessControl.sol",
        "id": 12685,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 13326,
        "sourceUnit": 18613,
        "src": "322:36:71",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "project:/contracts/interfaces/ISygmaMessageReceiver.sol",
        "file": "../interfaces/ISygmaMessageReceiver.sol",
        "id": 12686,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 13326,
        "sourceUnit": 18316,
        "src": "359:49:71",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [
          {
            "baseName": {
              "id": 12688,
              "name": "ISygmaMessageReceiver",
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 18315,
              "src": "567:21:71"
            },
            "id": 12689,
            "nodeType": "InheritanceSpecifier",
            "src": "567:21:71"
          },
          {
            "baseName": {
              "id": 12690,
              "name": "AccessControl",
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 18612,
              "src": "590:13:71"
            },
            "id": 12691,
            "nodeType": "InheritanceSpecifier",
            "src": "590:13:71"
          },
          {
            "baseName": {
              "id": 12692,
              "name": "ERC721Holder",
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 4988,
              "src": "605:12:71"
            },
            "id": 12693,
            "nodeType": "InheritanceSpecifier",
            "src": "605:12:71"
          },
          {
            "baseName": {
              "id": 12694,
              "name": "ERC1155Holder",
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 2368,
              "src": "619:13:71"
            },
            "id": 12695,
            "nodeType": "InheritanceSpecifier",
            "src": "619:13:71"
          }
        ],
        "canonicalName": "DefaultMessageReceiver",
        "contractDependencies": [],
        "contractKind": "contract",
        "documentation": {
          "id": 12687,
          "nodeType": "StructuredDocumentation",
          "src": "410:121:71",
          "text": "@title Optinal Message Call made as part of other handlers proposal execution.\n@author ChainSafe Systems."
        },
        "fullyImplemented": true,
        "id": 13325,
        "linearizedBaseContracts": [
          13325,
          2368,
          2402,
          1987,
          6167,
          6381,
          4988,
          4739,
          18612,
          5305,
          18315
        ],
        "name": "DefaultMessageReceiver",
        "nameLocation": "541:22:71",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "constant": true,
            "functionSelector": "c865fa5e",
            "id": 12700,
            "mutability": "constant",
            "name": "SYGMA_HANDLER_ROLE",
            "nameLocation": "663:18:71",
            "nodeType": "VariableDeclaration",
            "scope": 13325,
            "src": "639:76:71",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 12696,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "639:7:71",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "arguments": [
                {
                  "hexValue": "5359474d415f48414e444c45525f524f4c45",
                  "id": 12698,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "kind": "string",
                  "lValueRequested": false,
                  "nodeType": "Literal",
                  "src": "694:20:71",
                  "typeDescriptions": {
                    "typeIdentifier": "t_stringliteral_b712335d5b6789b3c7e11e1e9aea60ec1540076405f8ca833b4307162683afdb",
                    "typeString": "literal_string \"SYGMA_HANDLER_ROLE\""
                  },
                  "value": "SYGMA_HANDLER_ROLE"
                }
              ],
              "expression": {
                "argumentTypes": [
                  {
                    "typeIdentifier": "t_stringliteral_b712335d5b6789b3c7e11e1e9aea60ec1540076405f8ca833b4307162683afdb",
                    "typeString": "literal_string \"SYGMA_HANDLER_ROLE\""
                  }
                ],
                "id": 12697,
                "name": "keccak256",
                "nodeType": "Identifier",
                "overloadedDeclarations": [],
                "referencedDeclaration": 4294967288,
                "src": "684:9:71",
                "typeDescriptions": {
                  "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                  "typeString": "function (bytes memory) pure returns (bytes32)"
                }
              },
              "id": 12699,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "functionCall",
              "lValueRequested": false,
              "names": [],
              "nodeType": "FunctionCall",
              "src": "684:31:71",
              "tryCall": false,
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "visibility": "public"
          },
          {
            "constant": true,
            "id": 12706,
            "mutability": "constant",
            "name": "zeroAddress",
            "nameLocation": "748:11:71",
            "nodeType": "VariableDeclaration",
            "scope": 13325,
            "src": "722:50:71",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 12701,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "722:7:71",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "value": {
              "arguments": [
                {
                  "hexValue": "30",
                  "id": 12704,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "kind": "number",
                  "lValueRequested": false,
                  "nodeType": "Literal",
                  "src": "770:1:71",
                  "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": 12703,
                "isConstant": false,
                "isLValue": false,
                "isPure": true,
                "lValueRequested": false,
                "nodeType": "ElementaryTypeNameExpression",
                "src": "762:7:71",
                "typeDescriptions": {
                  "typeIdentifier": "t_type$_t_address_$",
                  "typeString": "type(address)"
                },
                "typeName": {
                  "id": 12702,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "762:7:71",
                  "typeDescriptions": {}
                }
              },
              "id": 12705,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "typeConversion",
              "lValueRequested": false,
              "names": [],
              "nodeType": "FunctionCall",
              "src": "762:10:71",
              "tryCall": false,
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "visibility": "internal"
          },
          {
            "constant": false,
            "functionSelector": "98474ffa",
            "id": 12708,
            "mutability": "immutable",
            "name": "_recoverGas",
            "nameLocation": "804:11:71",
            "nodeType": "VariableDeclaration",
            "scope": 13325,
            "src": "779:36:71",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 12707,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "779:7:71",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "visibility": "public"
          },
          {
            "canonicalName": "DefaultMessageReceiver.Action",
            "id": 12721,
            "members": [
              {
                "constant": false,
                "id": 12710,
                "mutability": "mutable",
                "name": "nativeValue",
                "nameLocation": "854:11:71",
                "nodeType": "VariableDeclaration",
                "scope": 12721,
                "src": "846:19:71",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 12709,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "846:7:71",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 12712,
                "mutability": "mutable",
                "name": "callTo",
                "nameLocation": "883:6:71",
                "nodeType": "VariableDeclaration",
                "scope": 12721,
                "src": "875:14:71",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                },
                "typeName": {
                  "id": 12711,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "875:7:71",
                  "stateMutability": "nonpayable",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 12714,
                "mutability": "mutable",
                "name": "approveTo",
                "nameLocation": "907:9:71",
                "nodeType": "VariableDeclaration",
                "scope": 12721,
                "src": "899:17:71",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                },
                "typeName": {
                  "id": 12713,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "899:7:71",
                  "stateMutability": "nonpayable",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 12716,
                "mutability": "mutable",
                "name": "tokenSend",
                "nameLocation": "934:9:71",
                "nodeType": "VariableDeclaration",
                "scope": 12721,
                "src": "926:17:71",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                },
                "typeName": {
                  "id": 12715,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "926:7:71",
                  "stateMutability": "nonpayable",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 12718,
                "mutability": "mutable",
                "name": "tokenReceive",
                "nameLocation": "961:12:71",
                "nodeType": "VariableDeclaration",
                "scope": 12721,
                "src": "953:20:71",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                },
                "typeName": {
                  "id": 12717,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "953:7:71",
                  "stateMutability": "nonpayable",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 12720,
                "mutability": "mutable",
                "name": "data",
                "nameLocation": "989:4:71",
                "nodeType": "VariableDeclaration",
                "scope": 12721,
                "src": "983:10:71",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes_storage_ptr",
                  "typeString": "bytes"
                },
                "typeName": {
                  "id": 12719,
                  "name": "bytes",
                  "nodeType": "ElementaryTypeName",
                  "src": "983:5:71",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_storage_ptr",
                    "typeString": "bytes"
                  }
                },
                "visibility": "internal"
              }
            ],
            "name": "Action",
            "nameLocation": "829:6:71",
            "nodeType": "StructDefinition",
            "scope": 13325,
            "src": "822:178:71",
            "visibility": "public"
          },
          {
            "id": 12723,
            "name": "InsufficientGasLimit",
            "nameLocation": "1012:20:71",
            "nodeType": "ErrorDefinition",
            "parameters": {
              "id": 12722,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1032:2:71"
            },
            "src": "1006:29:71"
          },
          {
            "id": 12725,
            "name": "InvalidContract",
            "nameLocation": "1046:15:71",
            "nodeType": "ErrorDefinition",
            "parameters": {
              "id": 12724,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1061:2:71"
            },
            "src": "1040:24:71"
          },
          {
            "id": 12727,
            "name": "InsufficientPermission",
            "nameLocation": "1075:22:71",
            "nodeType": "ErrorDefinition",
            "parameters": {
              "id": 12726,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1097:2:71"
            },
            "src": "1069:31:71"
          },
          {
            "id": 12729,
            "name": "ActionFailed",
            "nameLocation": "1111:12:71",
            "nodeType": "ErrorDefinition",
            "parameters": {
              "id": 12728,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1123:2:71"
            },
            "src": "1105:21:71"
          },
          {
            "id": 12731,
            "name": "InsufficientNativeBalance",
            "nameLocation": "1137:25:71",
            "nodeType": "ErrorDefinition",
            "parameters": {
              "id": 12730,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1162:2:71"
            },
            "src": "1131:34:71"
          },
          {
            "id": 12733,
            "name": "ReturnNativeLeftOverFailed",
            "nameLocation": "1176:26:71",
            "nodeType": "ErrorDefinition",
            "parameters": {
              "id": 12732,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1202:2:71"
            },
            "src": "1170:35:71"
          },
          {
            "anonymous": false,
            "id": 12743,
            "name": "Executed",
            "nameLocation": "1221:8:71",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 12742,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12735,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "transactionId",
                  "nameLocation": "1247:13:71",
                  "nodeType": "VariableDeclaration",
                  "scope": 12743,
                  "src": "1239:21:71",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 12734,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1239:7:71",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12737,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "tokenSend",
                  "nameLocation": "1278:9:71",
                  "nodeType": "VariableDeclaration",
                  "scope": 12743,
                  "src": "1270:17:71",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 12736,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1270:7:71",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12739,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "receiver",
                  "nameLocation": "1305:8:71",
                  "nodeType": "VariableDeclaration",
                  "scope": 12743,
                  "src": "1297:16:71",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 12738,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1297:7:71",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12741,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "1331:6:71",
                  "nodeType": "VariableDeclaration",
                  "scope": 12743,
                  "src": "1323:14:71",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 12740,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1323:7:71",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1229:114:71"
            },
            "src": "1215:129:71"
          },
          {
            "anonymous": false,
            "id": 12753,
            "name": "TransferRecovered",
            "nameLocation": "1356:17:71",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 12752,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12745,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "transactionId",
                  "nameLocation": "1391:13:71",
                  "nodeType": "VariableDeclaration",
                  "scope": 12753,
                  "src": "1383:21:71",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 12744,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1383:7:71",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12747,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "tokenSend",
                  "nameLocation": "1422:9:71",
                  "nodeType": "VariableDeclaration",
                  "scope": 12753,
                  "src": "1414:17:71",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 12746,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1414:7:71",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12749,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "receiver",
                  "nameLocation": "1449:8:71",
                  "nodeType": "VariableDeclaration",
                  "scope": 12753,
                  "src": "1441:16:71",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 12748,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1441:7:71",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12751,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "1475:6:71",
                  "nodeType": "VariableDeclaration",
                  "scope": 12753,
                  "src": "1467:14:71",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 12750,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1467:7:71",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1373:114:71"
            },
            "src": "1350:138:71"
          },
          {
            "body": {
              "id": 12792,
              "nodeType": "Block",
              "src": "1756:223:71",
              "statements": [
                {
                  "expression": {
                    "id": 12764,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 12762,
                      "name": "_recoverGas",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12708,
                      "src": "1766:11:71",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 12763,
                      "name": "recoverGas",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12759,
                      "src": "1780:10:71",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "1766:24:71",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 12765,
                  "nodeType": "ExpressionStatement",
                  "src": "1766:24:71"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 12767,
                        "name": "DEFAULT_ADMIN_ROLE",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18344,
                        "src": "1811:18:71",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "expression": {
                          "id": 12768,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4294967281,
                          "src": "1831:3:71",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 12769,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "1831:10:71",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 12766,
                      "name": "_setupRole",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18547,
                      "src": "1800:10:71",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$",
                        "typeString": "function (bytes32,address)"
                      }
                    },
                    "id": 12770,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1800:42:71",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 12771,
                  "nodeType": "ExpressionStatement",
                  "src": "1800:42:71"
                },
                {
                  "body": {
                    "id": 12790,
                    "nodeType": "Block",
                    "src": "1900:73:71",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 12784,
                              "name": "SYGMA_HANDLER_ROLE",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 12700,
                              "src": "1925:18:71",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "baseExpression": {
                                "id": 12785,
                                "name": "sygmaHandlers",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 12757,
                                "src": "1945:13:71",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                  "typeString": "address[] memory"
                                }
                              },
                              "id": 12787,
                              "indexExpression": {
                                "id": 12786,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 12773,
                                "src": "1959:1:71",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "1945:16:71",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 12783,
                            "name": "_setupRole",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18547,
                            "src": "1914:10:71",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$",
                              "typeString": "function (bytes32,address)"
                            }
                          },
                          "id": 12788,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1914:48:71",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 12789,
                        "nodeType": "ExpressionStatement",
                        "src": "1914:48:71"
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 12779,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 12776,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12773,
                      "src": "1869:1:71",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "expression": {
                        "id": 12777,
                        "name": "sygmaHandlers",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12757,
                        "src": "1873:13:71",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[] memory"
                        }
                      },
                      "id": 12778,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "src": "1873:20:71",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "1869:24:71",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 12791,
                  "initializationExpression": {
                    "assignments": [
                      12773
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 12773,
                        "mutability": "mutable",
                        "name": "i",
                        "nameLocation": "1862:1:71",
                        "nodeType": "VariableDeclaration",
                        "scope": 12791,
                        "src": "1857:6:71",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 12772,
                          "name": "uint",
                          "nodeType": "ElementaryTypeName",
                          "src": "1857:4:71",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "id": 12775,
                    "initialValue": {
                      "hexValue": "30",
                      "id": 12774,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "1866:1:71",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "1857:10:71"
                  },
                  "loopExpression": {
                    "expression": {
                      "id": 12781,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "1895:3:71",
                      "subExpression": {
                        "id": 12780,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12773,
                        "src": "1895:1:71",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 12782,
                    "nodeType": "ExpressionStatement",
                    "src": "1895:3:71"
                  },
                  "nodeType": "ForStatement",
                  "src": "1852:121:71"
                }
              ]
            },
            "documentation": {
              "id": 12754,
              "nodeType": "StructuredDocumentation",
              "src": "1494:193:71",
              "text": "@param sygmaHandlers The contract addresses with access to message processing.\n@param recoverGas The amount of gas needed to forward the original amount to receiver."
            },
            "id": 12793,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [],
            "name": "",
            "nameLocation": "-1:-1:-1",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 12760,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12757,
                  "mutability": "mutable",
                  "name": "sygmaHandlers",
                  "nameLocation": "1721:13:71",
                  "nodeType": "VariableDeclaration",
                  "scope": 12793,
                  "src": "1704:30:71",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                    "typeString": "address[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 12755,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "1704:7:71",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 12756,
                    "nodeType": "ArrayTypeName",
                    "src": "1704:9:71",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                      "typeString": "address[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12759,
                  "mutability": "mutable",
                  "name": "recoverGas",
                  "nameLocation": "1744:10:71",
                  "nodeType": "VariableDeclaration",
                  "scope": 12793,
                  "src": "1736:18:71",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 12758,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1736:7:71",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1703:52:71"
            },
            "returnParameters": {
              "id": 12761,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1756:0:71"
            },
            "scope": 13325,
            "src": "1692:287:71",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              18314
            ],
            "body": {
              "id": 12845,
              "nodeType": "Block",
              "src": "3543:351:71",
              "statements": [
                {
                  "condition": {
                    "id": 12809,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "!",
                    "prefix": true,
                    "src": "3557:42:71",
                    "subExpression": {
                      "arguments": [
                        {
                          "id": 12805,
                          "name": "SYGMA_HANDLER_ROLE",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 12700,
                          "src": "3566:18:71",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 12806,
                            "name": "_msgSender",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5295,
                            "src": "3586:10:71",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                              "typeString": "function () view returns (address)"
                            }
                          },
                          "id": 12807,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3586:12:71",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          },
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 12804,
                        "name": "hasRole",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18381,
                        "src": "3558:7:71",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_bytes32_$_t_address_$returns$_t_bool_$",
                          "typeString": "function (bytes32,address) view returns (bool)"
                        }
                      },
                      "id": 12808,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "3558:41:71",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 12813,
                  "nodeType": "IfStatement",
                  "src": "3553:79:71",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 12810,
                        "name": "InsufficientPermission",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12727,
                        "src": "3608:22:71",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$__$returns$__$",
                          "typeString": "function () pure"
                        }
                      },
                      "id": 12811,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "3608:24:71",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 12812,
                    "nodeType": "RevertStatement",
                    "src": "3601:31:71"
                  }
                },
                {
                  "assignments": [
                    12815,
                    12819,
                    12821
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 12815,
                      "mutability": "mutable",
                      "name": "transactionId",
                      "nameLocation": "3664:13:71",
                      "nodeType": "VariableDeclaration",
                      "scope": 12845,
                      "src": "3656:21:71",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 12814,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "3656:7:71",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 12819,
                      "mutability": "mutable",
                      "name": "actions",
                      "nameLocation": "3707:7:71",
                      "nodeType": "VariableDeclaration",
                      "scope": 12845,
                      "src": "3691:23:71",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_struct$_Action_$12721_memory_ptr_$dyn_memory_ptr",
                        "typeString": "struct DefaultMessageReceiver.Action[]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 12817,
                          "nodeType": "UserDefinedTypeName",
                          "pathNode": {
                            "id": 12816,
                            "name": "Action",
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 12721,
                            "src": "3691:6:71"
                          },
                          "referencedDeclaration": 12721,
                          "src": "3691:6:71",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Action_$12721_storage_ptr",
                            "typeString": "struct DefaultMessageReceiver.Action"
                          }
                        },
                        "id": 12818,
                        "nodeType": "ArrayTypeName",
                        "src": "3691:8:71",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_Action_$12721_storage_$dyn_storage_ptr",
                          "typeString": "struct DefaultMessageReceiver.Action[]"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 12821,
                      "mutability": "mutable",
                      "name": "receiver",
                      "nameLocation": "3736:8:71",
                      "nodeType": "VariableDeclaration",
                      "scope": 12845,
                      "src": "3728:16:71",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 12820,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "3728:7:71",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 12833,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 12824,
                        "name": "message",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12800,
                        "src": "3768:7:71",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "components": [
                          {
                            "id": 12826,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "3778:7:71",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_bytes32_$",
                              "typeString": "type(bytes32)"
                            },
                            "typeName": {
                              "id": 12825,
                              "name": "bytes32",
                              "nodeType": "ElementaryTypeName",
                              "src": "3778:7:71",
                              "typeDescriptions": {}
                            }
                          },
                          {
                            "baseExpression": {
                              "id": 12827,
                              "name": "Action",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 12721,
                              "src": "3787:6:71",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_struct$_Action_$12721_storage_ptr_$",
                                "typeString": "type(struct DefaultMessageReceiver.Action storage pointer)"
                              }
                            },
                            "id": 12828,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "3787:8:71",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_array$_t_struct$_Action_$12721_memory_ptr_$dyn_memory_ptr_$",
                              "typeString": "type(struct DefaultMessageReceiver.Action memory[] memory)"
                            }
                          },
                          {
                            "id": 12830,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "3797:7:71",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 12829,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "3797:7:71",
                              "typeDescriptions": {}
                            }
                          }
                        ],
                        "id": 12831,
                        "isConstant": false,
                        "isInlineArray": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "TupleExpression",
                        "src": "3777:28:71",
                        "typeDescriptions": {
                          "typeIdentifier": "t_tuple$_t_type$_t_bytes32_$_$_t_type$_t_array$_t_struct$_Action_$12721_memory_ptr_$dyn_memory_ptr_$_$_t_type$_t_address_$_$",
                          "typeString": "tuple(type(bytes32),type(struct DefaultMessageReceiver.Action memory[] memory),type(address))"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_tuple$_t_type$_t_bytes32_$_$_t_type$_t_array$_t_struct$_Action_$12721_memory_ptr_$dyn_memory_ptr_$_$_t_type$_t_address_$_$",
                          "typeString": "tuple(type(bytes32),type(struct DefaultMessageReceiver.Action memory[] memory),type(address))"
                        }
                      ],
                      "expression": {
                        "id": 12822,
                        "name": "abi",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4294967295,
                        "src": "3757:3:71",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_abi",
                          "typeString": "abi"
                        }
                      },
                      "id": 12823,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "decode",
                      "nodeType": "MemberAccess",
                      "src": "3757:10:71",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_abidecode_pure$__$returns$__$",
                        "typeString": "function () pure"
                      }
                    },
                    "id": 12832,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3757:49:71",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_bytes32_$_t_array$_t_struct$_Action_$12721_memory_ptr_$dyn_memory_ptr_$_t_address_payable_$",
                      "typeString": "tuple(bytes32,struct DefaultMessageReceiver.Action memory[] memory,address payable)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3642:164:71"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 12835,
                        "name": "transactionId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12815,
                        "src": "3826:13:71",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "id": 12836,
                        "name": "actions",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12819,
                        "src": "3841:7:71",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_Action_$12721_memory_ptr_$dyn_memory_ptr",
                          "typeString": "struct DefaultMessageReceiver.Action memory[] memory"
                        }
                      },
                      {
                        "id": 12837,
                        "name": "tokenSent",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12796,
                        "src": "3850:9:71",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "id": 12840,
                            "name": "receiver",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 12821,
                            "src": "3869:8:71",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 12839,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "3861:8:71",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_payable_$",
                            "typeString": "type(address payable)"
                          },
                          "typeName": {
                            "id": 12838,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "3861:8:71",
                            "stateMutability": "payable",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 12841,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3861:17:71",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "id": 12842,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12798,
                        "src": "3880:6:71",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_array$_t_struct$_Action_$12721_memory_ptr_$dyn_memory_ptr",
                          "typeString": "struct DefaultMessageReceiver.Action memory[] memory"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 12834,
                      "name": "_execute",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12945,
                      "src": "3817:8:71",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_array$_t_struct$_Action_$12721_memory_ptr_$dyn_memory_ptr_$_t_address_$_t_address_payable_$_t_uint256_$returns$__$",
                        "typeString": "function (bytes32,struct DefaultMessageReceiver.Action memory[] memory,address,address payable,uint256)"
                      }
                    },
                    "id": 12843,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3817:70:71",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 12844,
                  "nodeType": "ExpressionStatement",
                  "src": "3817:70:71"
                }
              ]
            },
            "documentation": {
              "id": 12794,
              "nodeType": "StructuredDocumentation",
              "src": "1985:1412:71",
              "text": "@notice Users have to understand the design and limitations behind the Actions processing.\nThe contract will try to return all the leftover tokens and native token to the\nreceiver address. This logic is applied to the native token if there was a balance\nincrease during the message processing, then to the tokenSent which is received from\nSygma proposal and finally to every Action.tokenReceive. In the vast majority of\ncases that would be enough, though user can come up with a scenario where an Action\nproduces results in a receival of more than one token, while only one could be\nspecified in this particular Action.tokenReceive property. In such a case it is\na users responsibility to either send it all with a transferBalanceAction() Action or to\ninclude an extra action[s] with tokenReceive set to each of the tokens received.\n@param tokenSent Optional address of the token sent along or prior to calling this function.\n@param amount Amount of the token sent along or prior to calling this function.\n@param message User generated execution command which consists of\n{transactionId} an arbitrary identifier.\n{actions} array of Action items that allow generic logic execution.\n{receiver} a fallback address that will receive any leftovers after either success of fail."
            },
            "functionSelector": "4726ca43",
            "id": 12846,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "handleSygmaMessage",
            "nameLocation": "3411:18:71",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 12802,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "3534:8:71"
            },
            "parameters": {
              "id": 12801,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12796,
                  "mutability": "mutable",
                  "name": "tokenSent",
                  "nameLocation": "3447:9:71",
                  "nodeType": "VariableDeclaration",
                  "scope": 12846,
                  "src": "3439:17:71",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 12795,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3439:7:71",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12798,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "3474:6:71",
                  "nodeType": "VariableDeclaration",
                  "scope": 12846,
                  "src": "3466:14:71",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 12797,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3466:7:71",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12800,
                  "mutability": "mutable",
                  "name": "message",
                  "nameLocation": "3503:7:71",
                  "nodeType": "VariableDeclaration",
                  "scope": 12846,
                  "src": "3490:20:71",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 12799,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "3490:5:71",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3429:87:71"
            },
            "returnParameters": {
              "id": 12803,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3543:0:71"
            },
            "scope": 13325,
            "src": "3402:492:71",
            "stateMutability": "payable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 12944,
              "nodeType": "Block",
              "src": "4082:1362:71",
              "statements": [
                {
                  "assignments": [
                    12862
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 12862,
                      "mutability": "mutable",
                      "name": "cacheGasLeft",
                      "nameLocation": "4100:12:71",
                      "nodeType": "VariableDeclaration",
                      "scope": 12944,
                      "src": "4092:20:71",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 12861,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "4092:7:71",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 12865,
                  "initialValue": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 12863,
                      "name": "gasleft",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4294967289,
                      "src": "4115:7:71",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_gasleft_view$__$returns$_t_uint256_$",
                        "typeString": "function () view returns (uint256)"
                      }
                    },
                    "id": 12864,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4115:9:71",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4092:32:71"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 12868,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 12866,
                      "name": "cacheGasLeft",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12862,
                      "src": "4138:12:71",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "id": 12867,
                      "name": "_recoverGas",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12708,
                      "src": "4153:11:71",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "4138:26:71",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 12872,
                  "nodeType": "IfStatement",
                  "src": "4134:61:71",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 12869,
                        "name": "InsufficientGasLimit",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12723,
                        "src": "4173:20:71",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$__$returns$__$",
                          "typeString": "function () pure"
                        }
                      },
                      "id": 12870,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "4173:22:71",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 12871,
                    "nodeType": "RevertStatement",
                    "src": "4166:29:71"
                  }
                },
                {
                  "assignments": [
                    12874
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 12874,
                      "mutability": "mutable",
                      "name": "startingNativeBalance",
                      "nameLocation": "4222:21:71",
                      "nodeType": "VariableDeclaration",
                      "scope": 12944,
                      "src": "4214:29:71",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 12873,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "4214:7:71",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 12883,
                  "initialValue": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 12882,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "arguments": [
                          {
                            "id": 12877,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4294967268,
                            "src": "4254:4:71",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_DefaultMessageReceiver_$13325",
                              "typeString": "contract DefaultMessageReceiver"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_DefaultMessageReceiver_$13325",
                              "typeString": "contract DefaultMessageReceiver"
                            }
                          ],
                          "id": 12876,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "4246:7:71",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 12875,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "4246:7:71",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 12878,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "4246:13:71",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "id": 12879,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "balance",
                      "nodeType": "MemberAccess",
                      "src": "4246:21:71",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "-",
                    "rightExpression": {
                      "expression": {
                        "id": 12880,
                        "name": "msg",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4294967281,
                        "src": "4270:3:71",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_message",
                          "typeString": "msg"
                        }
                      },
                      "id": 12881,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "value",
                      "nodeType": "MemberAccess",
                      "src": "4270:9:71",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "4246:33:71",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4214:65:71"
                },
                {
                  "clauses": [
                    {
                      "block": {
                        "id": 12902,
                        "nodeType": "Block",
                        "src": "4810:160:71",
                        "statements": [
                          {
                            "eventCall": {
                              "arguments": [
                                {
                                  "id": 12896,
                                  "name": "transactionId",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 12848,
                                  "src": "4855:13:71",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                {
                                  "id": 12897,
                                  "name": "tokenSent",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 12854,
                                  "src": "4886:9:71",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "id": 12898,
                                  "name": "receiver",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 12856,
                                  "src": "4913:8:71",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address_payable",
                                    "typeString": "address payable"
                                  }
                                },
                                {
                                  "id": 12899,
                                  "name": "amount",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 12858,
                                  "src": "4939:6:71",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  },
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_address_payable",
                                    "typeString": "address payable"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 12895,
                                "name": "Executed",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 12743,
                                "src": "4829:8:71",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_address_$_t_address_$_t_uint256_$returns$__$",
                                  "typeString": "function (bytes32,address,address,uint256)"
                                }
                              },
                              "id": 12900,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "4829:130:71",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_tuple$__$",
                                "typeString": "tuple()"
                              }
                            },
                            "id": 12901,
                            "nodeType": "EmitStatement",
                            "src": "4824:135:71"
                          }
                        ]
                      },
                      "errorName": "",
                      "id": 12903,
                      "nodeType": "TryCatchClause",
                      "src": "4810:160:71"
                    },
                    {
                      "block": {
                        "id": 12941,
                        "nodeType": "Block",
                        "src": "4977:461:71",
                        "statements": [
                          {
                            "expression": {
                              "id": 12907,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "id": 12904,
                                "name": "cacheGasLeft",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 12862,
                                "src": "4991:12:71",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "id": 12905,
                                  "name": "gasleft",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4294967289,
                                  "src": "5006:7:71",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_gasleft_view$__$returns$_t_uint256_$",
                                    "typeString": "function () view returns (uint256)"
                                  }
                                },
                                "id": 12906,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "5006:9:71",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "4991:24:71",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 12908,
                            "nodeType": "ExpressionStatement",
                            "src": "4991:24:71"
                          },
                          {
                            "condition": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 12911,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 12909,
                                "name": "cacheGasLeft",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 12862,
                                "src": "5033:12:71",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "<",
                              "rightExpression": {
                                "id": 12910,
                                "name": "_recoverGas",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 12708,
                                "src": "5048:11:71",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "5033:26:71",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "id": 12915,
                            "nodeType": "IfStatement",
                            "src": "5029:61:71",
                            "trueBody": {
                              "errorCall": {
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "id": 12912,
                                  "name": "InsufficientGasLimit",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 12723,
                                  "src": "5068:20:71",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$__$returns$__$",
                                    "typeString": "function () pure"
                                  }
                                },
                                "id": 12913,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "5068:22:71",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 12914,
                              "nodeType": "RevertStatement",
                              "src": "5061:29:71"
                            }
                          },
                          {
                            "expression": {
                              "arguments": [
                                {
                                  "id": 12917,
                                  "name": "tokenSent",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 12854,
                                  "src": "5120:9:71",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "id": 12918,
                                  "name": "receiver",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 12856,
                                  "src": "5131:8:71",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address_payable",
                                    "typeString": "address payable"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_address_payable",
                                    "typeString": "address payable"
                                  }
                                ],
                                "id": 12916,
                                "name": "transferBalance",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 13203,
                                "src": "5104:15:71",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$returns$__$",
                                  "typeString": "function (address,address)"
                                }
                              },
                              "id": 12919,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "5104:36:71",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_tuple$__$",
                                "typeString": "tuple()"
                              }
                            },
                            "id": 12920,
                            "nodeType": "ExpressionStatement",
                            "src": "5104:36:71"
                          },
                          {
                            "condition": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 12927,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "expression": {
                                  "arguments": [
                                    {
                                      "id": 12923,
                                      "name": "this",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4294967268,
                                      "src": "5166:4:71",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_DefaultMessageReceiver_$13325",
                                        "typeString": "contract DefaultMessageReceiver"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_contract$_DefaultMessageReceiver_$13325",
                                        "typeString": "contract DefaultMessageReceiver"
                                      }
                                    ],
                                    "id": 12922,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "5158:7:71",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_address_$",
                                      "typeString": "type(address)"
                                    },
                                    "typeName": {
                                      "id": 12921,
                                      "name": "address",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "5158:7:71",
                                      "typeDescriptions": {}
                                    }
                                  },
                                  "id": 12924,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "5158:13:71",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "id": 12925,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "balance",
                                "nodeType": "MemberAccess",
                                "src": "5158:21:71",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">",
                              "rightExpression": {
                                "id": 12926,
                                "name": "startingNativeBalance",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 12874,
                                "src": "5182:21:71",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "5158:45:71",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "id": 12933,
                            "nodeType": "IfStatement",
                            "src": "5154:115:71",
                            "trueBody": {
                              "id": 12932,
                              "nodeType": "Block",
                              "src": "5205:64:71",
                              "statements": [
                                {
                                  "expression": {
                                    "arguments": [
                                      {
                                        "id": 12929,
                                        "name": "receiver",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 12856,
                                        "src": "5245:8:71",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address_payable",
                                          "typeString": "address payable"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address_payable",
                                          "typeString": "address payable"
                                        }
                                      ],
                                      "id": 12928,
                                      "name": "transferNativeBalance",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 13163,
                                      "src": "5223:21:71",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_payable_$returns$__$",
                                        "typeString": "function (address payable)"
                                      }
                                    },
                                    "id": 12930,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "5223:31:71",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_tuple$__$",
                                      "typeString": "tuple()"
                                    }
                                  },
                                  "id": 12931,
                                  "nodeType": "ExpressionStatement",
                                  "src": "5223:31:71"
                                }
                              ]
                            }
                          },
                          {
                            "eventCall": {
                              "arguments": [
                                {
                                  "id": 12935,
                                  "name": "transactionId",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 12848,
                                  "src": "5323:13:71",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                {
                                  "id": 12936,
                                  "name": "tokenSent",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 12854,
                                  "src": "5354:9:71",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "id": 12937,
                                  "name": "receiver",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 12856,
                                  "src": "5381:8:71",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address_payable",
                                    "typeString": "address payable"
                                  }
                                },
                                {
                                  "id": 12938,
                                  "name": "amount",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 12858,
                                  "src": "5407:6:71",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  },
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_address_payable",
                                    "typeString": "address payable"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 12934,
                                "name": "TransferRecovered",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 12753,
                                "src": "5288:17:71",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_address_$_t_address_$_t_uint256_$returns$__$",
                                  "typeString": "function (bytes32,address,address,uint256)"
                                }
                              },
                              "id": 12939,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "5288:139:71",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_tuple$__$",
                                "typeString": "tuple()"
                              }
                            },
                            "id": 12940,
                            "nodeType": "EmitStatement",
                            "src": "5283:144:71"
                          }
                        ]
                      },
                      "errorName": "",
                      "id": 12942,
                      "nodeType": "TryCatchClause",
                      "src": "4971:467:71"
                    }
                  ],
                  "documentation": "We are wrapping the Actions processing in new call in order to be\n able to recover, ie. send funds to the receiver, in case of fail or\n running out of gas. Otherwise we can only revert whole execution\n which would result in the need to manually process proposal resolution\n to unstuck the assets.",
                  "externalCall": {
                    "arguments": [
                      {
                        "id": 12890,
                        "name": "tokenSent",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12854,
                        "src": "4712:9:71",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 12891,
                        "name": "receiver",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12856,
                        "src": "4735:8:71",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "id": 12892,
                        "name": "startingNativeBalance",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12874,
                        "src": "4757:21:71",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 12893,
                        "name": "actions",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12852,
                        "src": "4792:7:71",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_Action_$12721_memory_ptr_$dyn_memory_ptr",
                          "typeString": "struct DefaultMessageReceiver.Action memory[] memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_array$_t_struct$_Action_$12721_memory_ptr_$dyn_memory_ptr",
                          "typeString": "struct DefaultMessageReceiver.Action memory[] memory"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_array$_t_struct$_Action_$12721_memory_ptr_$dyn_memory_ptr",
                            "typeString": "struct DefaultMessageReceiver.Action memory[] memory"
                          }
                        ],
                        "expression": {
                          "id": 12884,
                          "name": "this",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4294967268,
                          "src": "4646:4:71",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_DefaultMessageReceiver_$13325",
                            "typeString": "contract DefaultMessageReceiver"
                          }
                        },
                        "id": 12885,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "performActions",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 13093,
                        "src": "4646:19:71",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_payable_$_t_uint256_$_t_array$_t_struct$_Action_$12721_memory_ptr_$dyn_memory_ptr_$returns$__$",
                          "typeString": "function (address,address payable,uint256,struct DefaultMessageReceiver.Action memory[] memory) external"
                        }
                      },
                      "id": 12889,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "names": [
                        "gas"
                      ],
                      "nodeType": "FunctionCallOptions",
                      "options": [
                        {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 12888,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 12886,
                            "name": "cacheGasLeft",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 12862,
                            "src": "4671:12:71",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "-",
                          "rightExpression": {
                            "id": 12887,
                            "name": "_recoverGas",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 12708,
                            "src": "4686:11:71",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "4671:26:71",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "src": "4646:52:71",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_payable_$_t_uint256_$_t_array$_t_struct$_Action_$12721_memory_ptr_$dyn_memory_ptr_$returns$__$gas",
                        "typeString": "function (address,address payable,uint256,struct DefaultMessageReceiver.Action memory[] memory) external"
                      }
                    },
                    "id": 12894,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4646:163:71",
                    "tryCall": true,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 12943,
                  "nodeType": "TryStatement",
                  "src": "4642:796:71"
                }
              ]
            },
            "id": 12945,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_execute",
            "nameLocation": "3909:8:71",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 12859,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12848,
                  "mutability": "mutable",
                  "name": "transactionId",
                  "nameLocation": "3935:13:71",
                  "nodeType": "VariableDeclaration",
                  "scope": 12945,
                  "src": "3927:21:71",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 12847,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "3927:7:71",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12852,
                  "mutability": "mutable",
                  "name": "actions",
                  "nameLocation": "3974:7:71",
                  "nodeType": "VariableDeclaration",
                  "scope": 12945,
                  "src": "3958:23:71",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_struct$_Action_$12721_memory_ptr_$dyn_memory_ptr",
                    "typeString": "struct DefaultMessageReceiver.Action[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 12850,
                      "nodeType": "UserDefinedTypeName",
                      "pathNode": {
                        "id": 12849,
                        "name": "Action",
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 12721,
                        "src": "3958:6:71"
                      },
                      "referencedDeclaration": 12721,
                      "src": "3958:6:71",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Action_$12721_storage_ptr",
                        "typeString": "struct DefaultMessageReceiver.Action"
                      }
                    },
                    "id": 12851,
                    "nodeType": "ArrayTypeName",
                    "src": "3958:8:71",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_struct$_Action_$12721_storage_$dyn_storage_ptr",
                      "typeString": "struct DefaultMessageReceiver.Action[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12854,
                  "mutability": "mutable",
                  "name": "tokenSent",
                  "nameLocation": "3999:9:71",
                  "nodeType": "VariableDeclaration",
                  "scope": 12945,
                  "src": "3991:17:71",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 12853,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3991:7:71",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12856,
                  "mutability": "mutable",
                  "name": "receiver",
                  "nameLocation": "4034:8:71",
                  "nodeType": "VariableDeclaration",
                  "scope": 12945,
                  "src": "4018:24:71",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address_payable",
                    "typeString": "address payable"
                  },
                  "typeName": {
                    "id": 12855,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4018:15:71",
                    "stateMutability": "payable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12858,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "4060:6:71",
                  "nodeType": "VariableDeclaration",
                  "scope": 12945,
                  "src": "4052:14:71",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 12857,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4052:7:71",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3917:155:71"
            },
            "returnParameters": {
              "id": 12860,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4082:0:71"
            },
            "scope": 13325,
            "src": "3900:1544:71",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 13092,
              "nodeType": "Block",
              "src": "5686:1053:71",
              "statements": [
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 12965,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 12959,
                        "name": "msg",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4294967281,
                        "src": "5700:3:71",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_message",
                          "typeString": "msg"
                        }
                      },
                      "id": 12960,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sender",
                      "nodeType": "MemberAccess",
                      "src": "5700:10:71",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "arguments": [
                        {
                          "id": 12963,
                          "name": "this",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4294967268,
                          "src": "5722:4:71",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_DefaultMessageReceiver_$13325",
                            "typeString": "contract DefaultMessageReceiver"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_contract$_DefaultMessageReceiver_$13325",
                            "typeString": "contract DefaultMessageReceiver"
                          }
                        ],
                        "id": 12962,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "5714:7:71",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": {
                          "id": 12961,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "5714:7:71",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 12964,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "5714:13:71",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "5700:27:71",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 12969,
                  "nodeType": "IfStatement",
                  "src": "5696:64:71",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 12966,
                        "name": "InsufficientPermission",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12727,
                        "src": "5736:22:71",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$__$returns$__$",
                          "typeString": "function () pure"
                        }
                      },
                      "id": 12967,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "5736:24:71",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 12968,
                    "nodeType": "RevertStatement",
                    "src": "5729:31:71"
                  }
                },
                {
                  "assignments": [
                    12971
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 12971,
                      "mutability": "mutable",
                      "name": "numActions",
                      "nameLocation": "5779:10:71",
                      "nodeType": "VariableDeclaration",
                      "scope": 13092,
                      "src": "5771:18:71",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 12970,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "5771:7:71",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 12974,
                  "initialValue": {
                    "expression": {
                      "id": 12972,
                      "name": "actions",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12956,
                      "src": "5792:7:71",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_struct$_Action_$12721_memory_ptr_$dyn_memory_ptr",
                        "typeString": "struct DefaultMessageReceiver.Action memory[] memory"
                      }
                    },
                    "id": 12973,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "length",
                    "nodeType": "MemberAccess",
                    "src": "5792:14:71",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5771:35:71"
                },
                {
                  "body": {
                    "id": 13067,
                    "nodeType": "Block",
                    "src": "5857:670:71",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 12999,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 12991,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "UnaryOperation",
                            "operator": "!",
                            "prefix": true,
                            "src": "5961:30:71",
                            "subExpression": {
                              "arguments": [
                                {
                                  "expression": {
                                    "baseExpression": {
                                      "id": 12986,
                                      "name": "actions",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 12956,
                                      "src": "5973:7:71",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_struct$_Action_$12721_memory_ptr_$dyn_memory_ptr",
                                        "typeString": "struct DefaultMessageReceiver.Action memory[] memory"
                                      }
                                    },
                                    "id": 12988,
                                    "indexExpression": {
                                      "id": 12987,
                                      "name": "i",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 12976,
                                      "src": "5981:1:71",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "5973:10:71",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Action_$12721_memory_ptr",
                                      "typeString": "struct DefaultMessageReceiver.Action memory"
                                    }
                                  },
                                  "id": 12989,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "callTo",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 12712,
                                  "src": "5973:17:71",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 12985,
                                "name": "isContract",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 13257,
                                "src": "5962:10:71",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                                  "typeString": "function (address) view returns (bool)"
                                }
                              },
                              "id": 12990,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "5962:29:71",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "&&",
                          "rightExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 12998,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "expression": {
                                "expression": {
                                  "baseExpression": {
                                    "id": 12992,
                                    "name": "actions",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 12956,
                                    "src": "5995:7:71",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_struct$_Action_$12721_memory_ptr_$dyn_memory_ptr",
                                      "typeString": "struct DefaultMessageReceiver.Action memory[] memory"
                                    }
                                  },
                                  "id": 12994,
                                  "indexExpression": {
                                    "id": 12993,
                                    "name": "i",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 12976,
                                    "src": "6003:1:71",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "5995:10:71",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_Action_$12721_memory_ptr",
                                    "typeString": "struct DefaultMessageReceiver.Action memory"
                                  }
                                },
                                "id": 12995,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "data",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 12720,
                                "src": "5995:15:71",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              },
                              "id": 12996,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "length",
                              "nodeType": "MemberAccess",
                              "src": "5995:22:71",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": ">",
                            "rightExpression": {
                              "hexValue": "30",
                              "id": 12997,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "6020:1:71",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            "src": "5995:26:71",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "5961:60:71",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 13003,
                        "nodeType": "IfStatement",
                        "src": "5957:90:71",
                        "trueBody": {
                          "errorCall": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 13000,
                              "name": "InvalidContract",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 12725,
                              "src": "6030:15:71",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_error_pure$__$returns$__$",
                                "typeString": "function () pure"
                              }
                            },
                            "id": 13001,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "6030:17:71",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 13002,
                          "nodeType": "RevertStatement",
                          "src": "6023:24:71"
                        }
                      },
                      {
                        "assignments": [
                          13005
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 13005,
                            "mutability": "mutable",
                            "name": "nativeValue",
                            "nameLocation": "6069:11:71",
                            "nodeType": "VariableDeclaration",
                            "scope": 13067,
                            "src": "6061:19:71",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 13004,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "6061:7:71",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 13010,
                        "initialValue": {
                          "expression": {
                            "baseExpression": {
                              "id": 13006,
                              "name": "actions",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 12956,
                              "src": "6083:7:71",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_struct$_Action_$12721_memory_ptr_$dyn_memory_ptr",
                                "typeString": "struct DefaultMessageReceiver.Action memory[] memory"
                              }
                            },
                            "id": 13008,
                            "indexExpression": {
                              "id": 13007,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 12976,
                              "src": "6091:1:71",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "6083:10:71",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Action_$12721_memory_ptr",
                              "typeString": "struct DefaultMessageReceiver.Action memory"
                            }
                          },
                          "id": 13009,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "nativeValue",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 12710,
                          "src": "6083:22:71",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "6061:44:71"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 13021,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 13013,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 13011,
                              "name": "nativeValue",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 13005,
                              "src": "6123:11:71",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": ">",
                            "rightExpression": {
                              "hexValue": "30",
                              "id": 13012,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "6137:1:71",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            "src": "6123:15:71",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "&&",
                          "rightExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 13020,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "expression": {
                                "arguments": [
                                  {
                                    "id": 13016,
                                    "name": "this",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4294967268,
                                    "src": "6150:4:71",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_DefaultMessageReceiver_$13325",
                                      "typeString": "contract DefaultMessageReceiver"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_contract$_DefaultMessageReceiver_$13325",
                                      "typeString": "contract DefaultMessageReceiver"
                                    }
                                  ],
                                  "id": 13015,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "6142:7:71",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_address_$",
                                    "typeString": "type(address)"
                                  },
                                  "typeName": {
                                    "id": 13014,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "6142:7:71",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 13017,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "6142:13:71",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "id": 13018,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "balance",
                              "nodeType": "MemberAccess",
                              "src": "6142:21:71",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "<",
                            "rightExpression": {
                              "id": 13019,
                              "name": "nativeValue",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 13005,
                              "src": "6166:11:71",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "6142:35:71",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "6123:54:71",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 13026,
                        "nodeType": "IfStatement",
                        "src": "6119:127:71",
                        "trueBody": {
                          "id": 13025,
                          "nodeType": "Block",
                          "src": "6179:67:71",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "id": 13022,
                                  "name": "InsufficientNativeBalance",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 12731,
                                  "src": "6204:25:71",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$__$returns$__$",
                                    "typeString": "function () pure"
                                  }
                                },
                                "id": 13023,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "6204:27:71",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 13024,
                              "nodeType": "RevertStatement",
                              "src": "6197:34:71"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "expression": {
                                    "baseExpression": {
                                      "id": 13029,
                                      "name": "actions",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 12956,
                                      "src": "6279:7:71",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_struct$_Action_$12721_memory_ptr_$dyn_memory_ptr",
                                        "typeString": "struct DefaultMessageReceiver.Action memory[] memory"
                                      }
                                    },
                                    "id": 13031,
                                    "indexExpression": {
                                      "id": 13030,
                                      "name": "i",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 12976,
                                      "src": "6287:1:71",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "6279:10:71",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Action_$12721_memory_ptr",
                                      "typeString": "struct DefaultMessageReceiver.Action memory"
                                    }
                                  },
                                  "id": 13032,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "tokenSend",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 12716,
                                  "src": "6279:20:71",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 13028,
                                "name": "IERC20",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3068,
                                "src": "6272:6:71",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_IERC20_$3068_$",
                                  "typeString": "type(contract IERC20)"
                                }
                              },
                              "id": 13033,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "6272:28:71",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20_$3068",
                                "typeString": "contract IERC20"
                              }
                            },
                            {
                              "expression": {
                                "baseExpression": {
                                  "id": 13034,
                                  "name": "actions",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 12956,
                                  "src": "6302:7:71",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_struct$_Action_$12721_memory_ptr_$dyn_memory_ptr",
                                    "typeString": "struct DefaultMessageReceiver.Action memory[] memory"
                                  }
                                },
                                "id": 13036,
                                "indexExpression": {
                                  "id": 13035,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 12976,
                                  "src": "6310:1:71",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "6302:10:71",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Action_$12721_memory_ptr",
                                  "typeString": "struct DefaultMessageReceiver.Action memory"
                                }
                              },
                              "id": 13037,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "approveTo",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 12714,
                              "src": "6302:20:71",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "id": 13040,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "6329:7:71",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_uint256_$",
                                      "typeString": "type(uint256)"
                                    },
                                    "typeName": {
                                      "id": 13039,
                                      "name": "uint256",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "6329:7:71",
                                      "typeDescriptions": {}
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_type$_t_uint256_$",
                                      "typeString": "type(uint256)"
                                    }
                                  ],
                                  "id": 13038,
                                  "name": "type",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4294967269,
                                  "src": "6324:4:71",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                    "typeString": "function () pure"
                                  }
                                },
                                "id": 13041,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "6324:13:71",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_meta_type_t_uint256",
                                  "typeString": "type(uint256)"
                                }
                              },
                              "id": 13042,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "max",
                              "nodeType": "MemberAccess",
                              "src": "6324:17:71",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_IERC20_$3068",
                                "typeString": "contract IERC20"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 13027,
                            "name": "approveERC20",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13320,
                            "src": "6259:12:71",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$3068_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (contract IERC20,address,uint256)"
                            }
                          },
                          "id": 13043,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6259:83:71",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 13044,
                        "nodeType": "ExpressionStatement",
                        "src": "6259:83:71"
                      },
                      {
                        "assignments": [
                          13046,
                          null
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 13046,
                            "mutability": "mutable",
                            "name": "success",
                            "nameLocation": "6363:7:71",
                            "nodeType": "VariableDeclaration",
                            "scope": 13067,
                            "src": "6358:12:71",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "typeName": {
                              "id": 13045,
                              "name": "bool",
                              "nodeType": "ElementaryTypeName",
                              "src": "6358:4:71",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "visibility": "internal"
                          },
                          null
                        ],
                        "id": 13059,
                        "initialValue": {
                          "arguments": [
                            {
                              "expression": {
                                "baseExpression": {
                                  "id": 13054,
                                  "name": "actions",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 12956,
                                  "src": "6419:7:71",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_struct$_Action_$12721_memory_ptr_$dyn_memory_ptr",
                                    "typeString": "struct DefaultMessageReceiver.Action memory[] memory"
                                  }
                                },
                                "id": 13056,
                                "indexExpression": {
                                  "id": 13055,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 12976,
                                  "src": "6427:1:71",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "6419:10:71",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Action_$12721_memory_ptr",
                                  "typeString": "struct DefaultMessageReceiver.Action memory"
                                }
                              },
                              "id": 13057,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "data",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 12720,
                              "src": "6419:15:71",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              ],
                              "expression": {
                                "expression": {
                                  "baseExpression": {
                                    "id": 13047,
                                    "name": "actions",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 12956,
                                    "src": "6376:7:71",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_struct$_Action_$12721_memory_ptr_$dyn_memory_ptr",
                                      "typeString": "struct DefaultMessageReceiver.Action memory[] memory"
                                    }
                                  },
                                  "id": 13049,
                                  "indexExpression": {
                                    "id": 13048,
                                    "name": "i",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 12976,
                                    "src": "6384:1:71",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "6376:10:71",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_Action_$12721_memory_ptr",
                                    "typeString": "struct DefaultMessageReceiver.Action memory"
                                  }
                                },
                                "id": 13050,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "callTo",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 12712,
                                "src": "6376:17:71",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "id": 13051,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "call",
                              "nodeType": "MemberAccess",
                              "src": "6376:22:71",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                                "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                              }
                            },
                            "id": 13053,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "names": [
                              "value"
                            ],
                            "nodeType": "FunctionCallOptions",
                            "options": [
                              {
                                "id": 13052,
                                "name": "nativeValue",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 13005,
                                "src": "6406:11:71",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "src": "6376:42:71",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value",
                              "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                            }
                          },
                          "id": 13058,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6376:59:71",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                            "typeString": "tuple(bool,bytes memory)"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "6357:78:71"
                      },
                      {
                        "condition": {
                          "id": 13061,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "!",
                          "prefix": true,
                          "src": "6453:8:71",
                          "subExpression": {
                            "id": 13060,
                            "name": "success",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13046,
                            "src": "6454:7:71",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 13066,
                        "nodeType": "IfStatement",
                        "src": "6449:68:71",
                        "trueBody": {
                          "id": 13065,
                          "nodeType": "Block",
                          "src": "6463:54:71",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "id": 13062,
                                  "name": "ActionFailed",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 12729,
                                  "src": "6488:12:71",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$__$returns$__$",
                                    "typeString": "function () pure"
                                  }
                                },
                                "id": 13063,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "6488:14:71",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 13064,
                              "nodeType": "RevertStatement",
                              "src": "6481:21:71"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 12981,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 12979,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12976,
                      "src": "5836:1:71",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "id": 12980,
                      "name": "numActions",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12971,
                      "src": "5840:10:71",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "5836:14:71",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 13068,
                  "initializationExpression": {
                    "assignments": [
                      12976
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 12976,
                        "mutability": "mutable",
                        "name": "i",
                        "nameLocation": "5829:1:71",
                        "nodeType": "VariableDeclaration",
                        "scope": 13068,
                        "src": "5821:9:71",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 12975,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "5821:7:71",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "id": 12978,
                    "initialValue": {
                      "hexValue": "30",
                      "id": 12977,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "5833:1:71",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "5821:13:71"
                  },
                  "loopExpression": {
                    "expression": {
                      "id": 12983,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "5852:3:71",
                      "subExpression": {
                        "id": 12982,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12976,
                        "src": "5852:1:71",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 12984,
                    "nodeType": "ExpressionStatement",
                    "src": "5852:3:71"
                  },
                  "nodeType": "ForStatement",
                  "src": "5816:711:71"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 13075,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "arguments": [
                          {
                            "id": 13071,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4294967268,
                            "src": "6548:4:71",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_DefaultMessageReceiver_$13325",
                              "typeString": "contract DefaultMessageReceiver"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_DefaultMessageReceiver_$13325",
                              "typeString": "contract DefaultMessageReceiver"
                            }
                          ],
                          "id": 13070,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "6540:7:71",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 13069,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "6540:7:71",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 13072,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "6540:13:71",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "id": 13073,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "balance",
                      "nodeType": "MemberAccess",
                      "src": "6540:21:71",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "id": 13074,
                      "name": "startingNativeBalance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12952,
                      "src": "6564:21:71",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "6540:45:71",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 13081,
                  "nodeType": "IfStatement",
                  "src": "6536:107:71",
                  "trueBody": {
                    "id": 13080,
                    "nodeType": "Block",
                    "src": "6587:56:71",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 13077,
                              "name": "receiver",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 12950,
                              "src": "6623:8:71",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            ],
                            "id": 13076,
                            "name": "transferNativeBalance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13163,
                            "src": "6601:21:71",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_payable_$returns$__$",
                              "typeString": "function (address payable)"
                            }
                          },
                          "id": 13078,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6601:31:71",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 13079,
                        "nodeType": "ExpressionStatement",
                        "src": "6601:31:71"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 13083,
                        "name": "tokenSent",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12948,
                        "src": "6668:9:71",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 13084,
                        "name": "receiver",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12950,
                        "src": "6679:8:71",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "id": 13082,
                      "name": "transferBalance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 13203,
                      "src": "6652:15:71",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$returns$__$",
                        "typeString": "function (address,address)"
                      }
                    },
                    "id": 13085,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6652:36:71",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 13086,
                  "nodeType": "ExpressionStatement",
                  "src": "6652:36:71"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 13088,
                        "name": "actions",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12956,
                        "src": "6714:7:71",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_Action_$12721_memory_ptr_$dyn_memory_ptr",
                          "typeString": "struct DefaultMessageReceiver.Action memory[] memory"
                        }
                      },
                      {
                        "id": 13089,
                        "name": "receiver",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12950,
                        "src": "6723:8:71",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_array$_t_struct$_Action_$12721_memory_ptr_$dyn_memory_ptr",
                          "typeString": "struct DefaultMessageReceiver.Action memory[] memory"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "id": 13087,
                      "name": "returnLeftOvers",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 13137,
                      "src": "6698:15:71",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_array$_t_struct$_Action_$12721_memory_ptr_$dyn_memory_ptr_$_t_address_payable_$returns$__$",
                        "typeString": "function (struct DefaultMessageReceiver.Action memory[] memory,address payable)"
                      }
                    },
                    "id": 13090,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6698:34:71",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 13091,
                  "nodeType": "ExpressionStatement",
                  "src": "6698:34:71"
                }
              ]
            },
            "documentation": {
              "id": 12946,
              "nodeType": "StructuredDocumentation",
              "src": "5450:59:71",
              "text": "@dev See the comment inside of the _execute() function."
            },
            "functionSelector": "cd986c96",
            "id": 13093,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "performActions",
            "nameLocation": "5523:14:71",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 12957,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12948,
                  "mutability": "mutable",
                  "name": "tokenSent",
                  "nameLocation": "5555:9:71",
                  "nodeType": "VariableDeclaration",
                  "scope": 13093,
                  "src": "5547:17:71",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 12947,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5547:7:71",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12950,
                  "mutability": "mutable",
                  "name": "receiver",
                  "nameLocation": "5590:8:71",
                  "nodeType": "VariableDeclaration",
                  "scope": 13093,
                  "src": "5574:24:71",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address_payable",
                    "typeString": "address payable"
                  },
                  "typeName": {
                    "id": 12949,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5574:15:71",
                    "stateMutability": "payable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12952,
                  "mutability": "mutable",
                  "name": "startingNativeBalance",
                  "nameLocation": "5616:21:71",
                  "nodeType": "VariableDeclaration",
                  "scope": 13093,
                  "src": "5608:29:71",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 12951,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5608:7:71",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12956,
                  "mutability": "mutable",
                  "name": "actions",
                  "nameLocation": "5663:7:71",
                  "nodeType": "VariableDeclaration",
                  "scope": 13093,
                  "src": "5647:23:71",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_struct$_Action_$12721_memory_ptr_$dyn_memory_ptr",
                    "typeString": "struct DefaultMessageReceiver.Action[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 12954,
                      "nodeType": "UserDefinedTypeName",
                      "pathNode": {
                        "id": 12953,
                        "name": "Action",
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 12721,
                        "src": "5647:6:71"
                      },
                      "referencedDeclaration": 12721,
                      "src": "5647:6:71",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Action_$12721_storage_ptr",
                        "typeString": "struct DefaultMessageReceiver.Action"
                      }
                    },
                    "id": 12955,
                    "nodeType": "ArrayTypeName",
                    "src": "5647:8:71",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_struct$_Action_$12721_storage_$dyn_storage_ptr",
                      "typeString": "struct DefaultMessageReceiver.Action[]"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5537:139:71"
            },
            "returnParameters": {
              "id": 12958,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5686:0:71"
            },
            "scope": 13325,
            "src": "5514:1225:71",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 13136,
              "nodeType": "Block",
              "src": "6830:213:71",
              "statements": [
                {
                  "body": {
                    "id": 13134,
                    "nodeType": "Block",
                    "src": "6881:156:71",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "expression": {
                                "baseExpression": {
                                  "id": 13113,
                                  "name": "actions",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 13097,
                                  "src": "6911:7:71",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_struct$_Action_$12721_memory_ptr_$dyn_memory_ptr",
                                    "typeString": "struct DefaultMessageReceiver.Action memory[] memory"
                                  }
                                },
                                "id": 13115,
                                "indexExpression": {
                                  "id": 13114,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 13103,
                                  "src": "6919:1:71",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "6911:10:71",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Action_$12721_memory_ptr",
                                  "typeString": "struct DefaultMessageReceiver.Action memory"
                                }
                              },
                              "id": 13116,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "tokenReceive",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 12718,
                              "src": "6911:23:71",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 13117,
                              "name": "receiver",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 13099,
                              "src": "6936:8:71",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            ],
                            "id": 13112,
                            "name": "transferBalance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13203,
                            "src": "6895:15:71",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$returns$__$",
                              "typeString": "function (address,address)"
                            }
                          },
                          "id": 13118,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6895:50:71",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 13119,
                        "nodeType": "ExpressionStatement",
                        "src": "6895:50:71"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "expression": {
                                    "baseExpression": {
                                      "id": 13122,
                                      "name": "actions",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 13097,
                                      "src": "6979:7:71",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_struct$_Action_$12721_memory_ptr_$dyn_memory_ptr",
                                        "typeString": "struct DefaultMessageReceiver.Action memory[] memory"
                                      }
                                    },
                                    "id": 13124,
                                    "indexExpression": {
                                      "id": 13123,
                                      "name": "i",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 13103,
                                      "src": "6987:1:71",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "6979:10:71",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Action_$12721_memory_ptr",
                                      "typeString": "struct DefaultMessageReceiver.Action memory"
                                    }
                                  },
                                  "id": 13125,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "tokenSend",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 12716,
                                  "src": "6979:20:71",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 13121,
                                "name": "IERC20",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3068,
                                "src": "6972:6:71",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_IERC20_$3068_$",
                                  "typeString": "type(contract IERC20)"
                                }
                              },
                              "id": 13126,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "6972:28:71",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20_$3068",
                                "typeString": "contract IERC20"
                              }
                            },
                            {
                              "expression": {
                                "baseExpression": {
                                  "id": 13127,
                                  "name": "actions",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 13097,
                                  "src": "7002:7:71",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_struct$_Action_$12721_memory_ptr_$dyn_memory_ptr",
                                    "typeString": "struct DefaultMessageReceiver.Action memory[] memory"
                                  }
                                },
                                "id": 13129,
                                "indexExpression": {
                                  "id": 13128,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 13103,
                                  "src": "7010:1:71",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "7002:10:71",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Action_$12721_memory_ptr",
                                  "typeString": "struct DefaultMessageReceiver.Action memory"
                                }
                              },
                              "id": 13130,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "approveTo",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 12714,
                              "src": "7002:20:71",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "hexValue": "30",
                              "id": 13131,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "7024:1:71",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_IERC20_$3068",
                                "typeString": "contract IERC20"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 13120,
                            "name": "approveERC20",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13320,
                            "src": "6959:12:71",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$3068_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (contract IERC20,address,uint256)"
                            }
                          },
                          "id": 13132,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6959:67:71",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 13133,
                        "nodeType": "ExpressionStatement",
                        "src": "6959:67:71"
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 13108,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 13105,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 13103,
                      "src": "6856:1:71",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "expression": {
                        "id": 13106,
                        "name": "actions",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13097,
                        "src": "6860:7:71",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_Action_$12721_memory_ptr_$dyn_memory_ptr",
                          "typeString": "struct DefaultMessageReceiver.Action memory[] memory"
                        }
                      },
                      "id": 13107,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "src": "6860:14:71",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "6856:18:71",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 13135,
                  "initializationExpression": {
                    "assignments": [
                      13103
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 13103,
                        "mutability": "mutable",
                        "name": "i",
                        "nameLocation": "6853:1:71",
                        "nodeType": "VariableDeclaration",
                        "scope": 13135,
                        "src": "6845:9:71",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 13102,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "6845:7:71",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "id": 13104,
                    "nodeType": "VariableDeclarationStatement",
                    "src": "6845:9:71"
                  },
                  "loopExpression": {
                    "expression": {
                      "id": 13110,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "6876:3:71",
                      "subExpression": {
                        "id": 13109,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13103,
                        "src": "6876:1:71",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 13111,
                    "nodeType": "ExpressionStatement",
                    "src": "6876:3:71"
                  },
                  "nodeType": "ForStatement",
                  "src": "6840:197:71"
                }
              ]
            },
            "id": 13137,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "returnLeftOvers",
            "nameLocation": "6754:15:71",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 13100,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13097,
                  "mutability": "mutable",
                  "name": "actions",
                  "nameLocation": "6786:7:71",
                  "nodeType": "VariableDeclaration",
                  "scope": 13137,
                  "src": "6770:23:71",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_struct$_Action_$12721_memory_ptr_$dyn_memory_ptr",
                    "typeString": "struct DefaultMessageReceiver.Action[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 13095,
                      "nodeType": "UserDefinedTypeName",
                      "pathNode": {
                        "id": 13094,
                        "name": "Action",
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 12721,
                        "src": "6770:6:71"
                      },
                      "referencedDeclaration": 12721,
                      "src": "6770:6:71",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Action_$12721_storage_ptr",
                        "typeString": "struct DefaultMessageReceiver.Action"
                      }
                    },
                    "id": 13096,
                    "nodeType": "ArrayTypeName",
                    "src": "6770:8:71",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_struct$_Action_$12721_storage_$dyn_storage_ptr",
                      "typeString": "struct DefaultMessageReceiver.Action[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13099,
                  "mutability": "mutable",
                  "name": "receiver",
                  "nameLocation": "6811:8:71",
                  "nodeType": "VariableDeclaration",
                  "scope": 13137,
                  "src": "6795:24:71",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address_payable",
                    "typeString": "address payable"
                  },
                  "typeName": {
                    "id": 13098,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6795:15:71",
                    "stateMutability": "payable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6769:51:71"
            },
            "returnParameters": {
              "id": 13101,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6830:0:71"
            },
            "scope": 13325,
            "src": "6745:298:71",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 13162,
              "nodeType": "Block",
              "src": "7115:166:71",
              "statements": [
                {
                  "assignments": [
                    13143,
                    null
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 13143,
                      "mutability": "mutable",
                      "name": "success",
                      "nameLocation": "7131:7:71",
                      "nodeType": "VariableDeclaration",
                      "scope": 13162,
                      "src": "7126:12:71",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 13142,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "7126:4:71",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "visibility": "internal"
                    },
                    null
                  ],
                  "id": 13154,
                  "initialValue": {
                    "arguments": [
                      {
                        "hexValue": "",
                        "id": 13152,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7188:2:71",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                          "typeString": "literal_string \"\""
                        },
                        "value": ""
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                          "typeString": "literal_string \"\""
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                            "typeString": "literal_string \"\""
                          }
                        ],
                        "expression": {
                          "id": 13144,
                          "name": "receiver",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 13139,
                          "src": "7144:8:71",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "id": 13145,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "call",
                        "nodeType": "MemberAccess",
                        "src": "7144:13:71",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                          "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                        }
                      },
                      "id": 13151,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "names": [
                        "value"
                      ],
                      "nodeType": "FunctionCallOptions",
                      "options": [
                        {
                          "expression": {
                            "arguments": [
                              {
                                "id": 13148,
                                "name": "this",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4294967268,
                                "src": "7173:4:71",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_DefaultMessageReceiver_$13325",
                                  "typeString": "contract DefaultMessageReceiver"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_DefaultMessageReceiver_$13325",
                                  "typeString": "contract DefaultMessageReceiver"
                                }
                              ],
                              "id": 13147,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "7165:7:71",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 13146,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "7165:7:71",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 13149,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "7165:13:71",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "id": 13150,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "balance",
                          "nodeType": "MemberAccess",
                          "src": "7165:21:71",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "src": "7144:43:71",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value",
                        "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                      }
                    },
                    "id": 13153,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7144:47:71",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                      "typeString": "tuple(bool,bytes memory)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7125:66:71"
                },
                {
                  "condition": {
                    "id": 13156,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "!",
                    "prefix": true,
                    "src": "7205:8:71",
                    "subExpression": {
                      "id": 13155,
                      "name": "success",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 13143,
                      "src": "7206:7:71",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 13161,
                  "nodeType": "IfStatement",
                  "src": "7201:74:71",
                  "trueBody": {
                    "id": 13160,
                    "nodeType": "Block",
                    "src": "7215:60:71",
                    "statements": [
                      {
                        "errorCall": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 13157,
                            "name": "ReturnNativeLeftOverFailed",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 12733,
                            "src": "7236:26:71",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_error_pure$__$returns$__$",
                              "typeString": "function () pure"
                            }
                          },
                          "id": 13158,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7236:28:71",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 13159,
                        "nodeType": "RevertStatement",
                        "src": "7229:35:71"
                      }
                    ]
                  }
                }
              ]
            },
            "id": 13163,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "transferNativeBalance",
            "nameLocation": "7058:21:71",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 13140,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13139,
                  "mutability": "mutable",
                  "name": "receiver",
                  "nameLocation": "7096:8:71",
                  "nodeType": "VariableDeclaration",
                  "scope": 13163,
                  "src": "7080:24:71",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address_payable",
                    "typeString": "address payable"
                  },
                  "typeName": {
                    "id": 13138,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7080:15:71",
                    "stateMutability": "payable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "7079:26:71"
            },
            "returnParameters": {
              "id": 13141,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7115:0:71"
            },
            "scope": 13325,
            "src": "7049:232:71",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 13202,
              "nodeType": "Block",
              "src": "7354:257:71",
              "statements": [
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 13172,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 13170,
                      "name": "token",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 13165,
                      "src": "7368:5:71",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "id": 13171,
                      "name": "zeroAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12706,
                      "src": "7377:11:71",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "7368:20:71",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 13201,
                  "nodeType": "IfStatement",
                  "src": "7364:241:71",
                  "trueBody": {
                    "id": 13200,
                    "nodeType": "Block",
                    "src": "7390:215:71",
                    "statements": [
                      {
                        "assignments": [
                          13174
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 13174,
                            "mutability": "mutable",
                            "name": "tokenBalance",
                            "nameLocation": "7412:12:71",
                            "nodeType": "VariableDeclaration",
                            "scope": 13200,
                            "src": "7404:20:71",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 13173,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "7404:7:71",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 13184,
                        "initialValue": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "id": 13181,
                                  "name": "this",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4294967268,
                                  "src": "7459:4:71",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_DefaultMessageReceiver_$13325",
                                    "typeString": "contract DefaultMessageReceiver"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_DefaultMessageReceiver_$13325",
                                    "typeString": "contract DefaultMessageReceiver"
                                  }
                                ],
                                "id": 13180,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "7451:7:71",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 13179,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "7451:7:71",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 13182,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "7451:13:71",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "arguments": [
                                {
                                  "id": 13176,
                                  "name": "token",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 13165,
                                  "src": "7434:5:71",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 13175,
                                "name": "IERC20",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3068,
                                "src": "7427:6:71",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_IERC20_$3068_$",
                                  "typeString": "type(contract IERC20)"
                                }
                              },
                              "id": 13177,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "7427:13:71",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20_$3068",
                                "typeString": "contract IERC20"
                              }
                            },
                            "id": 13178,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "balanceOf",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3007,
                            "src": "7427:23:71",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                              "typeString": "function (address) view external returns (uint256)"
                            }
                          },
                          "id": 13183,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7427:38:71",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "7404:61:71"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 13187,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 13185,
                            "name": "tokenBalance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13174,
                            "src": "7483:12:71",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 13186,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "7498:1:71",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "7483:16:71",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 13199,
                        "nodeType": "IfStatement",
                        "src": "7479:116:71",
                        "trueBody": {
                          "id": 13198,
                          "nodeType": "Block",
                          "src": "7501:94:71",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "id": 13192,
                                        "name": "token",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 13165,
                                        "src": "7549:5:71",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      ],
                                      "id": 13191,
                                      "name": "IERC20",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 3068,
                                      "src": "7542:6:71",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_contract$_IERC20_$3068_$",
                                        "typeString": "type(contract IERC20)"
                                      }
                                    },
                                    "id": 13193,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "7542:13:71",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_IERC20_$3068",
                                      "typeString": "contract IERC20"
                                    }
                                  },
                                  {
                                    "id": 13194,
                                    "name": "receiver",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 13167,
                                    "src": "7557:8:71",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "id": 13195,
                                    "name": "tokenBalance",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 13174,
                                    "src": "7567:12:71",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_contract$_IERC20_$3068",
                                      "typeString": "contract IERC20"
                                    },
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "id": 13188,
                                    "name": "SafeERC20",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3739,
                                    "src": "7519:9:71",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_contract$_SafeERC20_$3739_$",
                                      "typeString": "type(library SafeERC20)"
                                    }
                                  },
                                  "id": 13190,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "safeTransfer",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 3546,
                                  "src": "7519:22:71",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$3068_$_t_address_$_t_uint256_$returns$__$",
                                    "typeString": "function (contract IERC20,address,uint256)"
                                  }
                                },
                                "id": 13196,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "7519:61:71",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 13197,
                              "nodeType": "ExpressionStatement",
                              "src": "7519:61:71"
                            }
                          ]
                        }
                      }
                    ]
                  }
                }
              ]
            },
            "id": 13203,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "transferBalance",
            "nameLocation": "7296:15:71",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 13168,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13165,
                  "mutability": "mutable",
                  "name": "token",
                  "nameLocation": "7320:5:71",
                  "nodeType": "VariableDeclaration",
                  "scope": 13203,
                  "src": "7312:13:71",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 13164,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7312:7:71",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13167,
                  "mutability": "mutable",
                  "name": "receiver",
                  "nameLocation": "7335:8:71",
                  "nodeType": "VariableDeclaration",
                  "scope": 13203,
                  "src": "7327:16:71",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 13166,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7327:7:71",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "7311:33:71"
            },
            "returnParameters": {
              "id": 13169,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7354:0:71"
            },
            "scope": 13325,
            "src": "7287:324:71",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 13240,
              "nodeType": "Block",
              "src": "7981:244:71",
              "statements": [
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 13217,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 13211,
                        "name": "msg",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4294967281,
                        "src": "7995:3:71",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_message",
                          "typeString": "msg"
                        }
                      },
                      "id": 13212,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sender",
                      "nodeType": "MemberAccess",
                      "src": "7995:10:71",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "arguments": [
                        {
                          "id": 13215,
                          "name": "this",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4294967268,
                          "src": "8017:4:71",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_DefaultMessageReceiver_$13325",
                            "typeString": "contract DefaultMessageReceiver"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_contract$_DefaultMessageReceiver_$13325",
                            "typeString": "contract DefaultMessageReceiver"
                          }
                        ],
                        "id": 13214,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "8009:7:71",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": {
                          "id": 13213,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "8009:7:71",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 13216,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "8009:13:71",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "7995:27:71",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 13221,
                  "nodeType": "IfStatement",
                  "src": "7991:64:71",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 13218,
                        "name": "InsufficientPermission",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12727,
                        "src": "8031:22:71",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$__$returns$__$",
                          "typeString": "function () pure"
                        }
                      },
                      "id": 13219,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "8031:24:71",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 13220,
                    "nodeType": "RevertStatement",
                    "src": "8024:31:71"
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 13224,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 13222,
                      "name": "token",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 13206,
                      "src": "8069:5:71",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "id": 13223,
                      "name": "zeroAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12706,
                      "src": "8078:11:71",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "8069:20:71",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 13238,
                    "nodeType": "Block",
                    "src": "8154:65:71",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "id": 13234,
                                  "name": "receiver",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 13208,
                                  "src": "8198:8:71",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 13233,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "8190:8:71",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_payable_$",
                                  "typeString": "type(address payable)"
                                },
                                "typeName": {
                                  "id": 13232,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "8190:8:71",
                                  "stateMutability": "payable",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 13235,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "8190:17:71",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            ],
                            "id": 13231,
                            "name": "transferNativeBalance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13163,
                            "src": "8168:21:71",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_payable_$returns$__$",
                              "typeString": "function (address payable)"
                            }
                          },
                          "id": 13236,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8168:40:71",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 13237,
                        "nodeType": "ExpressionStatement",
                        "src": "8168:40:71"
                      }
                    ]
                  },
                  "id": 13239,
                  "nodeType": "IfStatement",
                  "src": "8065:154:71",
                  "trueBody": {
                    "id": 13230,
                    "nodeType": "Block",
                    "src": "8091:57:71",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 13226,
                              "name": "token",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 13206,
                              "src": "8121:5:71",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 13227,
                              "name": "receiver",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 13208,
                              "src": "8128:8:71",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 13225,
                            "name": "transferBalance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13203,
                            "src": "8105:15:71",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$returns$__$",
                              "typeString": "function (address,address)"
                            }
                          },
                          "id": 13228,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8105:32:71",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 13229,
                        "nodeType": "ExpressionStatement",
                        "src": "8105:32:71"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": {
              "id": 13204,
              "nodeType": "StructuredDocumentation",
              "src": "7617:286:71",
              "text": "@notice Helper function that could be used as an Action to itself to transfer whole\nbalance of a particular token.\n@param token Address of the ERC20 token or 0x0 for native token.\n@param receiver Address that should receive the whole balance."
            },
            "functionSelector": "419bf1ea",
            "id": 13241,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "transferBalanceAction",
            "nameLocation": "7917:21:71",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 13209,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13206,
                  "mutability": "mutable",
                  "name": "token",
                  "nameLocation": "7947:5:71",
                  "nodeType": "VariableDeclaration",
                  "scope": 13241,
                  "src": "7939:13:71",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 13205,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7939:7:71",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13208,
                  "mutability": "mutable",
                  "name": "receiver",
                  "nameLocation": "7962:8:71",
                  "nodeType": "VariableDeclaration",
                  "scope": 13241,
                  "src": "7954:16:71",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 13207,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7954:7:71",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "7938:33:71"
            },
            "returnParameters": {
              "id": 13210,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7981:0:71"
            },
            "scope": 13325,
            "src": "7908:317:71",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 13256,
              "nodeType": "Block",
              "src": "8302:129:71",
              "statements": [
                {
                  "assignments": [
                    13249
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 13249,
                      "mutability": "mutable",
                      "name": "size",
                      "nameLocation": "8320:4:71",
                      "nodeType": "VariableDeclaration",
                      "scope": 13256,
                      "src": "8312:12:71",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 13248,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "8312:7:71",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 13250,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "8312:12:71"
                },
                {
                  "AST": {
                    "nodeType": "YulBlock",
                    "src": "8343:57:71",
                    "statements": [
                      {
                        "nodeType": "YulAssignment",
                        "src": "8357:33:71",
                        "value": {
                          "arguments": [
                            {
                              "name": "contractAddr",
                              "nodeType": "YulIdentifier",
                              "src": "8377:12:71"
                            }
                          ],
                          "functionName": {
                            "name": "extcodesize",
                            "nodeType": "YulIdentifier",
                            "src": "8365:11:71"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "8365:25:71"
                        },
                        "variableNames": [
                          {
                            "name": "size",
                            "nodeType": "YulIdentifier",
                            "src": "8357:4:71"
                          }
                        ]
                      }
                    ]
                  },
                  "evmVersion": "london",
                  "externalReferences": [
                    {
                      "declaration": 13243,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "8377:12:71",
                      "valueSize": 1
                    },
                    {
                      "declaration": 13249,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "8357:4:71",
                      "valueSize": 1
                    }
                  ],
                  "id": 13251,
                  "nodeType": "InlineAssembly",
                  "src": "8334:66:71"
                },
                {
                  "expression": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 13254,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 13252,
                      "name": "size",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 13249,
                      "src": "8416:4:71",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 13253,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "8423:1:71",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "8416:8:71",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 13247,
                  "id": 13255,
                  "nodeType": "Return",
                  "src": "8409:15:71"
                }
              ]
            },
            "id": 13257,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "isContract",
            "nameLocation": "8240:10:71",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 13244,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13243,
                  "mutability": "mutable",
                  "name": "contractAddr",
                  "nameLocation": "8259:12:71",
                  "nodeType": "VariableDeclaration",
                  "scope": 13257,
                  "src": "8251:20:71",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 13242,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "8251:7:71",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "8250:22:71"
            },
            "returnParameters": {
              "id": 13247,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13246,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 13257,
                  "src": "8296:4:71",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 13245,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "8296:4:71",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "8295:6:71"
            },
            "scope": 13325,
            "src": "8231:200:71",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 13319,
              "nodeType": "Block",
              "src": "8545:463:71",
              "statements": [
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 13276,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "commonType": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "id": 13272,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "arguments": [
                          {
                            "id": 13269,
                            "name": "token",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13260,
                            "src": "8567:5:71",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IERC20_$3068",
                              "typeString": "contract IERC20"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_IERC20_$3068",
                              "typeString": "contract IERC20"
                            }
                          ],
                          "id": 13268,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "8559:7:71",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 13267,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "8559:7:71",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 13270,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "8559:14:71",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "!=",
                      "rightExpression": {
                        "id": 13271,
                        "name": "zeroAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12706,
                        "src": "8577:11:71",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "src": "8559:29:71",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "commonType": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "id": 13275,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 13273,
                        "name": "spender",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13262,
                        "src": "8592:7:71",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "!=",
                      "rightExpression": {
                        "id": 13274,
                        "name": "zeroAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12706,
                        "src": "8603:11:71",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "src": "8592:22:71",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "8559:55:71",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 13318,
                  "nodeType": "IfStatement",
                  "src": "8555:447:71",
                  "trueBody": {
                    "id": 13317,
                    "nodeType": "Block",
                    "src": "8616:386:71",
                    "statements": [
                      {
                        "assignments": [
                          13278,
                          null
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 13278,
                            "mutability": "mutable",
                            "name": "success",
                            "nameLocation": "8739:7:71",
                            "nodeType": "VariableDeclaration",
                            "scope": 13317,
                            "src": "8734:12:71",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "typeName": {
                              "id": 13277,
                              "name": "bool",
                              "nodeType": "ElementaryTypeName",
                              "src": "8734:4:71",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "visibility": "internal"
                          },
                          null
                        ],
                        "id": 13293,
                        "initialValue": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "expression": {
                                    "expression": {
                                      "id": 13286,
                                      "name": "token",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 13260,
                                      "src": "8795:5:71",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_IERC20_$3068",
                                        "typeString": "contract IERC20"
                                      }
                                    },
                                    "id": 13287,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "approve",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 3037,
                                    "src": "8795:13:71",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                                      "typeString": "function (address,uint256) external returns (bool)"
                                    }
                                  },
                                  "id": 13288,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "selector",
                                  "nodeType": "MemberAccess",
                                  "src": "8795:22:71",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes4",
                                    "typeString": "bytes4"
                                  }
                                },
                                {
                                  "id": 13289,
                                  "name": "spender",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 13262,
                                  "src": "8819:7:71",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "hexValue": "30",
                                  "id": 13290,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "8828:1:71",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes4",
                                    "typeString": "bytes4"
                                  },
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  }
                                ],
                                "expression": {
                                  "id": 13284,
                                  "name": "abi",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4294967295,
                                  "src": "8772:3:71",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_abi",
                                    "typeString": "abi"
                                  }
                                },
                                "id": 13285,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "memberName": "encodeWithSelector",
                                "nodeType": "MemberAccess",
                                "src": "8772:22:71",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$",
                                  "typeString": "function (bytes4) pure returns (bytes memory)"
                                }
                              },
                              "id": 13291,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "8772:58:71",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "expression": {
                              "arguments": [
                                {
                                  "id": 13281,
                                  "name": "token",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 13260,
                                  "src": "8760:5:71",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_IERC20_$3068",
                                    "typeString": "contract IERC20"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_IERC20_$3068",
                                    "typeString": "contract IERC20"
                                  }
                                ],
                                "id": 13280,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "8752:7:71",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 13279,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "8752:7:71",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 13282,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "8752:14:71",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "id": 13283,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "call",
                            "nodeType": "MemberAccess",
                            "src": "8752:19:71",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                              "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                            }
                          },
                          "id": 13292,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8752:79:71",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                            "typeString": "tuple(bool,bytes memory)"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "8733:98:71"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 13296,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 13294,
                            "name": "amount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13264,
                            "src": "8849:6:71",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 13295,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "8858:1:71",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "8849:10:71",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 13316,
                        "nodeType": "IfStatement",
                        "src": "8845:147:71",
                        "trueBody": {
                          "id": 13315,
                          "nodeType": "Block",
                          "src": "8861:131:71",
                          "statements": [
                            {
                              "expression": {
                                "id": 13313,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "components": [
                                    {
                                      "id": 13297,
                                      "name": "success",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 13278,
                                      "src": "8880:7:71",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    null
                                  ],
                                  "id": 13298,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "nodeType": "TupleExpression",
                                  "src": "8879:11:71",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_tuple$_t_bool_$__$",
                                    "typeString": "tuple(bool,)"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "arguments": [
                                    {
                                      "arguments": [
                                        {
                                          "expression": {
                                            "expression": {
                                              "id": 13306,
                                              "name": "token",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 13260,
                                              "src": "8936:5:71",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_contract$_IERC20_$3068",
                                                "typeString": "contract IERC20"
                                              }
                                            },
                                            "id": 13307,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "approve",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 3037,
                                            "src": "8936:13:71",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                                              "typeString": "function (address,uint256) external returns (bool)"
                                            }
                                          },
                                          "id": 13308,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberName": "selector",
                                          "nodeType": "MemberAccess",
                                          "src": "8936:22:71",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_bytes4",
                                            "typeString": "bytes4"
                                          }
                                        },
                                        {
                                          "id": 13309,
                                          "name": "spender",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 13262,
                                          "src": "8960:7:71",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        },
                                        {
                                          "id": 13310,
                                          "name": "amount",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 13264,
                                          "src": "8969:6:71",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_bytes4",
                                            "typeString": "bytes4"
                                          },
                                          {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          },
                                          {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        ],
                                        "expression": {
                                          "id": 13304,
                                          "name": "abi",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 4294967295,
                                          "src": "8913:3:71",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_magic_abi",
                                            "typeString": "abi"
                                          }
                                        },
                                        "id": 13305,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "lValueRequested": false,
                                        "memberName": "encodeWithSelector",
                                        "nodeType": "MemberAccess",
                                        "src": "8913:22:71",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$",
                                          "typeString": "function (bytes4) pure returns (bytes memory)"
                                        }
                                      },
                                      "id": 13311,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "8913:63:71",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes memory"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes memory"
                                      }
                                    ],
                                    "expression": {
                                      "arguments": [
                                        {
                                          "id": 13301,
                                          "name": "token",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 13260,
                                          "src": "8901:5:71",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_contract$_IERC20_$3068",
                                            "typeString": "contract IERC20"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_contract$_IERC20_$3068",
                                            "typeString": "contract IERC20"
                                          }
                                        ],
                                        "id": 13300,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "lValueRequested": false,
                                        "nodeType": "ElementaryTypeNameExpression",
                                        "src": "8893:7:71",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_type$_t_address_$",
                                          "typeString": "type(address)"
                                        },
                                        "typeName": {
                                          "id": 13299,
                                          "name": "address",
                                          "nodeType": "ElementaryTypeName",
                                          "src": "8893:7:71",
                                          "typeDescriptions": {}
                                        }
                                      },
                                      "id": 13302,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "typeConversion",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "8893:14:71",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    "id": 13303,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "call",
                                    "nodeType": "MemberAccess",
                                    "src": "8893:19:71",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                                      "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                                    }
                                  },
                                  "id": 13312,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "8893:84:71",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                                    "typeString": "tuple(bool,bytes memory)"
                                  }
                                },
                                "src": "8879:98:71",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 13314,
                              "nodeType": "ExpressionStatement",
                              "src": "8879:98:71"
                            }
                          ]
                        }
                      }
                    ]
                  }
                }
              ]
            },
            "id": 13320,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "approveERC20",
            "nameLocation": "8446:12:71",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 13265,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13260,
                  "mutability": "mutable",
                  "name": "token",
                  "nameLocation": "8475:5:71",
                  "nodeType": "VariableDeclaration",
                  "scope": 13320,
                  "src": "8468:12:71",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC20_$3068",
                    "typeString": "contract IERC20"
                  },
                  "typeName": {
                    "id": 13259,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 13258,
                      "name": "IERC20",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 3068,
                      "src": "8468:6:71"
                    },
                    "referencedDeclaration": 3068,
                    "src": "8468:6:71",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20_$3068",
                      "typeString": "contract IERC20"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13262,
                  "mutability": "mutable",
                  "name": "spender",
                  "nameLocation": "8498:7:71",
                  "nodeType": "VariableDeclaration",
                  "scope": 13320,
                  "src": "8490:15:71",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 13261,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "8490:7:71",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13264,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "8523:6:71",
                  "nodeType": "VariableDeclaration",
                  "scope": 13320,
                  "src": "8515:14:71",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 13263,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8515:7:71",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "8458:77:71"
            },
            "returnParameters": {
              "id": 13266,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8545:0:71"
            },
            "scope": 13325,
            "src": "8437:571:71",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 13323,
              "nodeType": "Block",
              "src": "9041:2:71",
              "statements": []
            },
            "id": 13324,
            "implemented": true,
            "kind": "receive",
            "modifiers": [],
            "name": "",
            "nameLocation": "-1:-1:-1",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 13321,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "9021:2:71"
            },
            "returnParameters": {
              "id": 13322,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "9041:0:71"
            },
            "scope": 13325,
            "src": "9014:29:71",
            "stateMutability": "payable",
            "virtual": false,
            "visibility": "external"
          }
        ],
        "scope": 13326,
        "src": "532:8513:71",
        "usedErrors": [
          12723,
          12725,
          12727,
          12729,
          12731,
          12733
        ]
      }
    ],
    "src": "32:9014:71"
  },
  "compiler": {
    "name": "solc",
    "version": "0.8.11+commit.d7f03943.Emscripten.clang"
  },
  "networks": {
    "1727170272871": {
      "events": {
        "0xe57dd573634102b6cae74aab341f709f6fc3ae2bdc0a35f9a47a85f45b677a21": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": false,
              "internalType": "bytes32",
              "name": "transactionId",
              "type": "bytes32"
            },
            {
              "indexed": false,
              "internalType": "address",
              "name": "tokenSend",
              "type": "address"
            },
            {
              "indexed": false,
              "internalType": "address",
              "name": "receiver",
              "type": "address"
            },
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "amount",
              "type": "uint256"
            }
          ],
          "name": "Executed",
          "type": "event"
        },
        "0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "bytes32",
              "name": "role",
              "type": "bytes32"
            },
            {
              "indexed": true,
              "internalType": "address",
              "name": "account",
              "type": "address"
            },
            {
              "indexed": true,
              "internalType": "address",
              "name": "sender",
              "type": "address"
            }
          ],
          "name": "RoleGranted",
          "type": "event"
        },
        "0xf6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "bytes32",
              "name": "role",
              "type": "bytes32"
            },
            {
              "indexed": true,
              "internalType": "address",
              "name": "account",
              "type": "address"
            },
            {
              "indexed": true,
              "internalType": "address",
              "name": "sender",
              "type": "address"
            }
          ],
          "name": "RoleRevoked",
          "type": "event"
        },
        "0x57968afb28f9cb89277d581a1ace43ee213e6d7f79b4c14f4e815e3eadf1eade": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": false,
              "internalType": "bytes32",
              "name": "transactionId",
              "type": "bytes32"
            },
            {
              "indexed": false,
              "internalType": "address",
              "name": "tokenSend",
              "type": "address"
            },
            {
              "indexed": false,
              "internalType": "address",
              "name": "receiver",
              "type": "address"
            },
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "amount",
              "type": "uint256"
            }
          ],
          "name": "TransferRecovered",
          "type": "event"
        }
      },
      "links": {},
      "address": "0x02091EefF969b33A5CE8A729DaE325879bf76f90",
      "transactionHash": "0xa20acc024decd705bdfff01a56f4a2702c11829498123c05c3f66bcb147e4d19"
    },
    "1727170313921": {
      "events": {
        "0xe57dd573634102b6cae74aab341f709f6fc3ae2bdc0a35f9a47a85f45b677a21": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": false,
              "internalType": "bytes32",
              "name": "transactionId",
              "type": "bytes32"
            },
            {
              "indexed": false,
              "internalType": "address",
              "name": "tokenSend",
              "type": "address"
            },
            {
              "indexed": false,
              "internalType": "address",
              "name": "receiver",
              "type": "address"
            },
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "amount",
              "type": "uint256"
            }
          ],
          "name": "Executed",
          "type": "event"
        },
        "0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "bytes32",
              "name": "role",
              "type": "bytes32"
            },
            {
              "indexed": true,
              "internalType": "address",
              "name": "account",
              "type": "address"
            },
            {
              "indexed": true,
              "internalType": "address",
              "name": "sender",
              "type": "address"
            }
          ],
          "name": "RoleGranted",
          "type": "event"
        },
        "0xf6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "bytes32",
              "name": "role",
              "type": "bytes32"
            },
            {
              "indexed": true,
              "internalType": "address",
              "name": "account",
              "type": "address"
            },
            {
              "indexed": true,
              "internalType": "address",
              "name": "sender",
              "type": "address"
            }
          ],
          "name": "RoleRevoked",
          "type": "event"
        },
        "0x57968afb28f9cb89277d581a1ace43ee213e6d7f79b4c14f4e815e3eadf1eade": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": false,
              "internalType": "bytes32",
              "name": "transactionId",
              "type": "bytes32"
            },
            {
              "indexed": false,
              "internalType": "address",
              "name": "tokenSend",
              "type": "address"
            },
            {
              "indexed": false,
              "internalType": "address",
              "name": "receiver",
              "type": "address"
            },
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "amount",
              "type": "uint256"
            }
          ],
          "name": "TransferRecovered",
          "type": "event"
        }
      },
      "links": {},
      "address": "0x02091EefF969b33A5CE8A729DaE325879bf76f90",
      "transactionHash": "0x8a540ffa110b5fc35cbe5ae3440babec4a3b58bd26d714ecc3763446e05e58d6"
    }
  },
  "schemaVersion": "3.4.6",
  "updatedAt": "2024-09-24T09:32:14.828Z",
  "networkType": "ethereum",
  "devdoc": {
    "author": "ChainSafe Systems.",
    "kind": "dev",
    "methods": {
      "constructor": {
        "params": {
          "recoverGas": "The amount of gas needed to forward the original amount to receiver.",
          "sygmaHandlers": "The contract addresses with access to message processing."
        }
      },
      "getRoleAdmin(bytes32)": {
        "details": "Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}."
      },
      "getRoleMember(bytes32,uint256)": {
        "details": "Returns one of the accounts that have `role`. `index` must be a value between 0 and {getRoleMemberCount}, non-inclusive. Role bearers are not sorted in any particular way, and their ordering may change at any point. WARNING: When using {getRoleMember} and {getRoleMemberCount}, make sure you perform all queries on the same block. See the following https://forum.openzeppelin.com/t/iterating-over-elements-on-enumerableset-in-openzeppelin-contracts/2296[forum post] for more information."
      },
      "getRoleMemberCount(bytes32)": {
        "details": "Returns the number of accounts that have `role`. Can be used together with {getRoleMember} to enumerate all bearers of a role."
      },
      "getRoleMemberIndex(bytes32,address)": {
        "details": "Returns the index of the account that have `role`."
      },
      "grantRole(bytes32,address)": {
        "details": "Grants `role` to `account`. If `account` had not been already granted `role`, emits a {RoleGranted} event. Requirements: - the caller must have ``role``'s admin role."
      },
      "handleSygmaMessage(address,uint256,bytes)": {
        "params": {
          "amount": "Amount of the token sent along or prior to calling this function.",
          "message": "User generated execution command which consists of {transactionId} an arbitrary identifier. {actions} array of Action items that allow generic logic execution. {receiver} a fallback address that will receive any leftovers after either success of fail.",
          "tokenSent": "Optional address of the token sent along or prior to calling this function."
        }
      },
      "hasRole(bytes32,address)": {
        "details": "Returns `true` if `account` has been granted `role`."
      },
      "onERC721Received(address,address,uint256,bytes)": {
        "details": "See {IERC721Receiver-onERC721Received}. Always returns `IERC721Receiver.onERC721Received.selector`."
      },
      "performActions(address,address,uint256,(uint256,address,address,address,address,bytes)[])": {
        "details": "See the comment inside of the _execute() function."
      },
      "renounceRole(bytes32,address)": {
        "details": "Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `account`."
      },
      "revokeRole(bytes32,address)": {
        "details": "Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role."
      },
      "supportsInterface(bytes4)": {
        "details": "See {IERC165-supportsInterface}."
      },
      "transferBalanceAction(address,address)": {
        "params": {
          "receiver": "Address that should receive the whole balance.",
          "token": "Address of the ERC20 token or 0x0 for native token."
        }
      }
    },
    "title": "Optinal Message Call made as part of other handlers proposal execution.",
    "version": 1
  },
  "userdoc": {
    "kind": "user",
    "methods": {
      "handleSygmaMessage(address,uint256,bytes)": {
        "notice": "Users have to understand the design and limitations behind the Actions processing. The contract will try to return all the leftover tokens and native token to the receiver address. This logic is applied to the native token if there was a balance increase during the message processing, then to the tokenSent which is received from Sygma proposal and finally to every Action.tokenReceive. In the vast majority of cases that would be enough, though user can come up with a scenario where an Action produces results in a receival of more than one token, while only one could be specified in this particular Action.tokenReceive property. In such a case it is a users responsibility to either send it all with a transferBalanceAction() Action or to include an extra action[s] with tokenReceive set to each of the tokens received."
      },
      "transferBalanceAction(address,address)": {
        "notice": "Helper function that could be used as an Action to itself to transfer whole balance of a particular token."
      }
    },
    "version": 1
  }
}