{
  "contractName": "MarineCoinSale",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "contract MarineCoin",
          "name": "_tokenContract",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_tokenPrice",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "Paused",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "_buyer",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "Sell",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "Unpaused",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "paused",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "tokenContract",
      "outputs": [
        {
          "internalType": "contract MarineCoin",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "tokenPrice",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "tokensSold",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_numberOfTokens",
          "type": "uint256"
        }
      ],
      "name": "buyTokens",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "endSale",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "setAdmin",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract MarineCoin\",\"name\":\"_tokenContract\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_tokenPrice\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_buyer\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"Sell\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_numberOfTokens\",\"type\":\"uint256\"}],\"name\":\"buyTokens\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"endSale\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"setAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"tokenContract\",\"outputs\":[{\"internalType\":\"contract MarineCoin\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"tokenPrice\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"tokensSold\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"paused()\":{\"details\":\"Returns true if the contract is paused, and false otherwise.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"project:/contracts/MarineCoinSale/MarineCoinSale.sol\":\"MarineCoinSale\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":10},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xa94b34880e3c1b0b931662cb1c09e5dfa6662f31cba80e07c5ee71cd135c9673\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://40fb1b5102468f783961d0af743f91b9980cf66b50d1d12009f6bb1869cea4d2\",\"dweb:/ipfs/QmYqEbJML4jB1GHbzD4cUZDtJg5wVwNm3vDJq1GbyDus8y\"]},\"@openzeppelin/contracts/security/Pausable.sol\":{\"keccak256\":\"0x0849d93b16c9940beb286a7864ed02724b248b93e0d80ef6355af5ef15c64773\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4ddabb16009cd17eaca3143feadf450ac13e72919ebe2ca50e00f61cb78bc004\",\"dweb:/ipfs/QmSPwPxX7d6TTWakN5jy5wsaGkS1y9TW8fuhGSraMkLk2B\"]},\"@openzeppelin/contracts/security/ReentrancyGuard.sol\":{\"keccak256\":\"0x0e9621f60b2faabe65549f7ed0f24e8853a45c1b7990d47e8160e523683f3935\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://287a2f8d5814dd0f05f22b740f18ca8321acc21c9bd03a6cb2203ea626e2f3f2\",\"dweb:/ipfs/QmZRQv9iuwU817VuqkA2WweiaibKii69x9QxYBBEfbNEud\"]},\"@openzeppelin/contracts/token/ERC20/ERC20.sol\":{\"keccak256\":\"0x24b04b8aacaaf1a4a0719117b29c9c3647b1f479c5ac2a60f5ff1bb6d839c238\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://43e46da9d9f49741ecd876a269e71bc7494058d7a8e9478429998adb5bc3eaa0\",\"dweb:/ipfs/QmUtp4cqzf22C5rJ76AabKADquGWcjsc33yjYXxXC4sDvy\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x9750c6b834f7b43000631af5cc30001c5f547b3ceb3635488f140f60e897ea6b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5a7d5b1ef5d8d5889ad2ed89d8619c09383b80b72ab226e0fe7bde1636481e34\",\"dweb:/ipfs/QmebXWgtEfumQGBdVeM6c71McLixYXQP5Bk6kKXuoY4Bmr\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0x8de418a5503946cabe331f35fe242d3201a73f67f77aaeb7110acb1f30423aca\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5a376d3dda2cb70536c0a45c208b29b34ac560c4cb4f513a42079f96ba47d2dd\",\"dweb:/ipfs/QmZQg6gn1sUpM8wHzwNvSnihumUCAhxD119MpXeKp8B9s8\"]},\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6df0ddf21ce9f58271bdfaa85cde98b200ef242a05a3f85c2bc10a8294800a92\",\"dweb:/ipfs/QmRK2Y5Yc6BK7tGKkgsgn3aJEQGi5aakeSPZvS65PV8Xp3\"]},\"project:/contracts/MarineCoin.sol\":{\"keccak256\":\"0x07a7a7b884f02d0f745f93a43c3e76a1afa53b29f8b5295cb468f2c3b3d72831\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://41ee0b5a830d6ab86b1b554dc131924aae5789486b2ec3571b7f2d90004df871\",\"dweb:/ipfs/QmZ4zBGrRkDWT6WURCDnpPZybE4f19WVnFGtx8ukPRYTVV\"]},\"project:/contracts/MarineCoinSale/MarineCoinSale.sol\":{\"keccak256\":\"0xdeb2a3a725cf2196abe11996fe33271c68e0358a2691dc098faf8b7234fab5cb\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://d39e17c30d3dc5fc1084e618ca0add80ad0d0bdf7c157565495d11667bcf54b9\",\"dweb:/ipfs/QmScbNfAx6hubyqi6QeYabvvZPUN8cM6mSBwgyfPc4EheF\"]}},\"version\":1}",
  "bytecode": "0x608060405234801561001057600080fd5b5060405161091a38038061091a83398101604081905261002f916100d8565b60016000819055805460ff191690556100473361007e565b60028054336001600160a01b031991821617909155600380549091166001600160a01b039390931692909217909155600455610112565b600180546001600160a01b03838116610100818102610100600160a81b031985161790945560405193909204169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600080604083850312156100eb57600080fd5b82516001600160a01b038116811461010257600080fd5b6020939093015192949293505050565b6107f9806101216000396000f3fe6080604052600436106100815760003560e01c80632cae2096146100865780633610724e1461009d578063380d831b146100b0578063518ab2a8146100c557806355a373d6146100ee5780635c975abb1461011b578063715018a61461013e5780637ff9b596146101535780638da5cb5b14610169578063f2fde38b1461017e575b600080fd5b34801561009257600080fd5b5061009b61019e565b005b61009b6100ab3660046106b0565b6101ba565b3480156100bc57600080fd5b5061009b610397565b3480156100d157600080fd5b506100db60055481565b6040519081526020015b60405180910390f35b3480156100fa57600080fd5b5060035461010e906001600160a01b031681565b6040516100e591906106c9565b34801561012757600080fd5b5060015460ff1660405190151581526020016100e5565b34801561014a57600080fd5b5061009b6104dd565b34801561015f57600080fd5b506100db60045481565b34801561017557600080fd5b5061010e6104f1565b34801561018a57600080fd5b5061009b6101993660046106dd565b610505565b6101a661057e565b600280546001600160a01b03191633179055565b6002600054036102115760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b600260005561021e6105dd565b61022a81600454610623565b341461023557600080fd5b6003546040516370a0823160e01b815282916001600160a01b0316906370a08231906102659030906004016106c9565b602060405180830381865afa158015610282573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102a6919061070d565b10156102b157600080fd5b6003546001600160a01b031663a9059cbb336102d584670de0b6b3a764000061073c565b6040518363ffffffff1660e01b81526004016102f2929190610753565b6020604051808303816000875af1158015610311573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610335919061076c565b61033e57600080fd5b8060056000828254610350919061078e565b90915550506040517f5e5e995ce3133561afceaa51a9a154d5db228cd7525d34df5185582c18d3df09906103879033908490610753565b60405180910390a1506001600055565b6002546001600160a01b031633146103ae57600080fd5b6003546002546040516370a0823160e01b81526001600160a01b039283169263a9059cbb92169083906370a08231906103eb9030906004016106c9565b602060405180830381865afa158015610408573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061042c919061070d565b6040518363ffffffff1660e01b8152600401610449929190610753565b6020604051808303816000875af1158015610468573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061048c919061076c565b61049557600080fd5b6002546040516001600160a01b03909116904780156108fc02916000818181858888f193505050501580156104ce573d6000803e3d6000fd5b506002546001600160a01b0316ff5b6104e561057e565b6104ef6000610656565b565b60015461010090046001600160a01b031690565b61050d61057e565b6001600160a01b0381166105725760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610208565b61057b81610656565b50565b336105876104f1565b6001600160a01b0316146104ef5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610208565b60015460ff16156104ef5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610208565b600081158061064757508282610639818361073c565b925061064590836107a1565b145b61065057600080fd5b92915050565b600180546001600160a01b03838116610100818102610100600160a81b031985161790945560405193909204169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000602082840312156106c257600080fd5b5035919050565b6001600160a01b0391909116815260200190565b6000602082840312156106ef57600080fd5b81356001600160a01b038116811461070657600080fd5b9392505050565b60006020828403121561071f57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761065057610650610726565b6001600160a01b03929092168252602082015260400190565b60006020828403121561077e57600080fd5b8151801515811461070657600080fd5b8082018082111561065057610650610726565b6000826107be57634e487b7160e01b600052601260045260246000fd5b50049056fea2646970667358221220b33c4f09e48db5e4dee3cdd92851d37bb454beed13deef66793932d0d74f663c64736f6c63430008110033",
  "deployedBytecode": "0x6080604052600436106100815760003560e01c80632cae2096146100865780633610724e1461009d578063380d831b146100b0578063518ab2a8146100c557806355a373d6146100ee5780635c975abb1461011b578063715018a61461013e5780637ff9b596146101535780638da5cb5b14610169578063f2fde38b1461017e575b600080fd5b34801561009257600080fd5b5061009b61019e565b005b61009b6100ab3660046106b0565b6101ba565b3480156100bc57600080fd5b5061009b610397565b3480156100d157600080fd5b506100db60055481565b6040519081526020015b60405180910390f35b3480156100fa57600080fd5b5060035461010e906001600160a01b031681565b6040516100e591906106c9565b34801561012757600080fd5b5060015460ff1660405190151581526020016100e5565b34801561014a57600080fd5b5061009b6104dd565b34801561015f57600080fd5b506100db60045481565b34801561017557600080fd5b5061010e6104f1565b34801561018a57600080fd5b5061009b6101993660046106dd565b610505565b6101a661057e565b600280546001600160a01b03191633179055565b6002600054036102115760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b600260005561021e6105dd565b61022a81600454610623565b341461023557600080fd5b6003546040516370a0823160e01b815282916001600160a01b0316906370a08231906102659030906004016106c9565b602060405180830381865afa158015610282573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102a6919061070d565b10156102b157600080fd5b6003546001600160a01b031663a9059cbb336102d584670de0b6b3a764000061073c565b6040518363ffffffff1660e01b81526004016102f2929190610753565b6020604051808303816000875af1158015610311573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610335919061076c565b61033e57600080fd5b8060056000828254610350919061078e565b90915550506040517f5e5e995ce3133561afceaa51a9a154d5db228cd7525d34df5185582c18d3df09906103879033908490610753565b60405180910390a1506001600055565b6002546001600160a01b031633146103ae57600080fd5b6003546002546040516370a0823160e01b81526001600160a01b039283169263a9059cbb92169083906370a08231906103eb9030906004016106c9565b602060405180830381865afa158015610408573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061042c919061070d565b6040518363ffffffff1660e01b8152600401610449929190610753565b6020604051808303816000875af1158015610468573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061048c919061076c565b61049557600080fd5b6002546040516001600160a01b03909116904780156108fc02916000818181858888f193505050501580156104ce573d6000803e3d6000fd5b506002546001600160a01b0316ff5b6104e561057e565b6104ef6000610656565b565b60015461010090046001600160a01b031690565b61050d61057e565b6001600160a01b0381166105725760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610208565b61057b81610656565b50565b336105876104f1565b6001600160a01b0316146104ef5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610208565b60015460ff16156104ef5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610208565b600081158061064757508282610639818361073c565b925061064590836107a1565b145b61065057600080fd5b92915050565b600180546001600160a01b03838116610100818102610100600160a81b031985161790945560405193909204169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000602082840312156106c257600080fd5b5035919050565b6001600160a01b0391909116815260200190565b6000602082840312156106ef57600080fd5b81356001600160a01b038116811461070657600080fd5b9392505050565b60006020828403121561071f57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761065057610650610726565b6001600160a01b03929092168252602082015260400190565b60006020828403121561077e57600080fd5b8151801515811461070657600080fd5b8082018082111561065057610650610726565b6000826107be57634e487b7160e01b600052601260045260246000fd5b50049056fea2646970667358221220b33c4f09e48db5e4dee3cdd92851d37bb454beed13deef66793932d0d74f663c64736f6c63430008110033",
  "immutableReferences": {},
  "generatedSources": [
    {
      "ast": {
        "nodeType": "YulBlock",
        "src": "0:386:54",
        "statements": [
          {
            "nodeType": "YulBlock",
            "src": "6:3:54",
            "statements": []
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "131:253:54",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "177:16:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "186:1:54",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "189:1:54",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "179:6:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "179:12:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "179:12:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "152:7:54"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "161:9:54"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "148:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "148:23:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "173:2:54",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "144:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "144:32:54"
                  },
                  "nodeType": "YulIf",
                  "src": "141:52:54"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "202:29:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "221:9:54"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nodeType": "YulIdentifier",
                      "src": "215:5:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "215:16:54"
                  },
                  "variables": [
                    {
                      "name": "value",
                      "nodeType": "YulTypedName",
                      "src": "206:5:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "294:16:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "303:1:54",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "306:1:54",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "296:6:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "296:12:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "296:12:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "value",
                            "nodeType": "YulIdentifier",
                            "src": "253:5:54"
                          },
                          {
                            "arguments": [
                              {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "264:5:54"
                              },
                              {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "279:3:54",
                                        "type": "",
                                        "value": "160"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "284:1:54",
                                        "type": "",
                                        "value": "1"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "275:3:54"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "275:11:54"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "288:1:54",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "sub",
                                  "nodeType": "YulIdentifier",
                                  "src": "271:3:54"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "271:19:54"
                              }
                            ],
                            "functionName": {
                              "name": "and",
                              "nodeType": "YulIdentifier",
                              "src": "260:3:54"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "260:31:54"
                          }
                        ],
                        "functionName": {
                          "name": "eq",
                          "nodeType": "YulIdentifier",
                          "src": "250:2:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "250:42:54"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "243:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "243:50:54"
                  },
                  "nodeType": "YulIf",
                  "src": "240:70:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "319:15:54",
                  "value": {
                    "name": "value",
                    "nodeType": "YulIdentifier",
                    "src": "329:5:54"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "319:6:54"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "343:35:54",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "363:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "374:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "359:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "359:18:54"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nodeType": "YulIdentifier",
                      "src": "353:5:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "353:25:54"
                  },
                  "variableNames": [
                    {
                      "name": "value1",
                      "nodeType": "YulIdentifier",
                      "src": "343:6:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_contract$_MarineCoin_$4620t_uint256_fromMemory",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "89:9:54",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "100:7:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "112:6:54",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "120:6:54",
                "type": ""
              }
            ],
            "src": "14:370:54"
          }
        ]
      },
      "contents": "{\n    { }\n    function abi_decode_tuple_t_contract$_MarineCoin_$4620t_uint256_fromMemory(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let value := mload(headStart)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n        value0 := value\n        value1 := mload(add(headStart, 32))\n    }\n}",
      "id": 54,
      "language": "Yul",
      "name": "#utility.yul"
    }
  ],
  "deployedGeneratedSources": [
    {
      "ast": {
        "nodeType": "YulBlock",
        "src": "0:4176:54",
        "statements": [
          {
            "nodeType": "YulBlock",
            "src": "6:3:54",
            "statements": []
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "84:110:54",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "130:16:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "139:1:54",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "142:1:54",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "132:6:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "132:12:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "132:12:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "105:7:54"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "114:9:54"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "101:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "101:23:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "126:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "97:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "97:32:54"
                  },
                  "nodeType": "YulIf",
                  "src": "94:52:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "155:33:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "178:9:54"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "165:12:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "165:23:54"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "155:6:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_uint256",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "50:9:54",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "61:7:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "73:6:54",
                "type": ""
              }
            ],
            "src": "14:180:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "300:76:54",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "310:26:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "322:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "333:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "318:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "318:18:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "310:4:54"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "352:9:54"
                      },
                      {
                        "name": "value0",
                        "nodeType": "YulIdentifier",
                        "src": "363:6:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "345:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "345:25:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "345:25:54"
                }
              ]
            },
            "name": "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "269:9:54",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "280:6:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "291:4:54",
                "type": ""
              }
            ],
            "src": "199:177:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "501:102:54",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "511:26:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "523:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "534:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "519:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "519:18:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "511:4:54"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "553:9:54"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value0",
                            "nodeType": "YulIdentifier",
                            "src": "568:6:54"
                          },
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "584:3:54",
                                    "type": "",
                                    "value": "160"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "589:1:54",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "shl",
                                  "nodeType": "YulIdentifier",
                                  "src": "580:3:54"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "580:11:54"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "593:1:54",
                                "type": "",
                                "value": "1"
                              }
                            ],
                            "functionName": {
                              "name": "sub",
                              "nodeType": "YulIdentifier",
                              "src": "576:3:54"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "576:19:54"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "564:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "564:32:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "546:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "546:51:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "546:51:54"
                }
              ]
            },
            "name": "abi_encode_tuple_t_contract$_MarineCoin_$4620__to_t_address__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "470:9:54",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "481:6:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "492:4:54",
                "type": ""
              }
            ],
            "src": "381:222:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "703:92:54",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "713:26:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "725:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "736:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "721:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "721:18:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "713:4:54"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "755:9:54"
                      },
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "value0",
                                "nodeType": "YulIdentifier",
                                "src": "780:6:54"
                              }
                            ],
                            "functionName": {
                              "name": "iszero",
                              "nodeType": "YulIdentifier",
                              "src": "773:6:54"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "773:14:54"
                          }
                        ],
                        "functionName": {
                          "name": "iszero",
                          "nodeType": "YulIdentifier",
                          "src": "766:6:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "766:22:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "748:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "748:41:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "748:41:54"
                }
              ]
            },
            "name": "abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "672:9:54",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "683:6:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "694:4:54",
                "type": ""
              }
            ],
            "src": "608:187:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "901:102:54",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "911:26:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "923:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "934:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "919:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "919:18:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "911:4:54"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "953:9:54"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value0",
                            "nodeType": "YulIdentifier",
                            "src": "968:6:54"
                          },
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "984:3:54",
                                    "type": "",
                                    "value": "160"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "989:1:54",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "shl",
                                  "nodeType": "YulIdentifier",
                                  "src": "980:3:54"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "980:11:54"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "993:1:54",
                                "type": "",
                                "value": "1"
                              }
                            ],
                            "functionName": {
                              "name": "sub",
                              "nodeType": "YulIdentifier",
                              "src": "976:3:54"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "976:19:54"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "964:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "964:32:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "946:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "946:51:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "946:51:54"
                }
              ]
            },
            "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "870:9:54",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "881:6:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "892:4:54",
                "type": ""
              }
            ],
            "src": "800:203:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "1078:216:54",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "1124:16:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "1133:1:54",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "1136:1:54",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "1126:6:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "1126:12:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "1126:12:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "1099:7:54"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "1108:9:54"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "1095:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1095:23:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "1120:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "1091:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1091:32:54"
                  },
                  "nodeType": "YulIf",
                  "src": "1088:52:54"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "1149:36:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "1175:9:54"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "1162:12:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1162:23:54"
                  },
                  "variables": [
                    {
                      "name": "value",
                      "nodeType": "YulTypedName",
                      "src": "1153:5:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "1248:16:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "1257:1:54",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "1260:1:54",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "1250:6:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "1250:12:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "1250:12:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "value",
                            "nodeType": "YulIdentifier",
                            "src": "1207:5:54"
                          },
                          {
                            "arguments": [
                              {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "1218:5:54"
                              },
                              {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1233:3:54",
                                        "type": "",
                                        "value": "160"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1238:1:54",
                                        "type": "",
                                        "value": "1"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "1229:3:54"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1229:11:54"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1242:1:54",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "sub",
                                  "nodeType": "YulIdentifier",
                                  "src": "1225:3:54"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1225:19:54"
                              }
                            ],
                            "functionName": {
                              "name": "and",
                              "nodeType": "YulIdentifier",
                              "src": "1214:3:54"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "1214:31:54"
                          }
                        ],
                        "functionName": {
                          "name": "eq",
                          "nodeType": "YulIdentifier",
                          "src": "1204:2:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1204:42:54"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "1197:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1197:50:54"
                  },
                  "nodeType": "YulIf",
                  "src": "1194:70:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "1273:15:54",
                  "value": {
                    "name": "value",
                    "nodeType": "YulIdentifier",
                    "src": "1283:5:54"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "1273:6:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_address",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "1044:9:54",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "1055:7:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "1067:6:54",
                "type": ""
              }
            ],
            "src": "1008:286:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "1473:181:54",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "1490:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "1501:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "1483:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1483:21:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "1483:21:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "1524:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "1535:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "1520:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1520:18:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "1540:2:54",
                        "type": "",
                        "value": "31"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "1513:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1513:30:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "1513:30:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "1563:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "1574:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "1559:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1559:18:54"
                      },
                      {
                        "hexValue": "5265656e7472616e637947756172643a207265656e7472616e742063616c6c",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "1579:33:54",
                        "type": "",
                        "value": "ReentrancyGuard: reentrant call"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "1552:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1552:61:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "1552:61:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "1622:26:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "1634:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "1645:2:54",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "1630:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1630:18:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "1622:4:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_ebf73bba305590e4764d5cb53b69bffd6d4d092d1a67551cb346f8cfcdab8619__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "1450:9:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "1464:4:54",
                "type": ""
              }
            ],
            "src": "1299:355:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "1740:103:54",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "1786:16:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "1795:1:54",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "1798:1:54",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "1788:6:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "1788:12:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "1788:12:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "1761:7:54"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "1770:9:54"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "1757:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1757:23:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "1782:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "1753:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1753:32:54"
                  },
                  "nodeType": "YulIf",
                  "src": "1750:52:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "1811:26:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "1827:9:54"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nodeType": "YulIdentifier",
                      "src": "1821:5:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1821:16:54"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "1811:6:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_uint256_fromMemory",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "1706:9:54",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "1717:7:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "1729:6:54",
                "type": ""
              }
            ],
            "src": "1659:184:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "1880:95:54",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "1897:1:54",
                        "type": "",
                        "value": "0"
                      },
                      {
                        "arguments": [
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "1904:3:54",
                            "type": "",
                            "value": "224"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "1909:10:54",
                            "type": "",
                            "value": "0x4e487b71"
                          }
                        ],
                        "functionName": {
                          "name": "shl",
                          "nodeType": "YulIdentifier",
                          "src": "1900:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1900:20:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "1890:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1890:31:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "1890:31:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "1937:1:54",
                        "type": "",
                        "value": "4"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "1940:4:54",
                        "type": "",
                        "value": "0x11"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "1930:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1930:15:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "1930:15:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "1961:1:54",
                        "type": "",
                        "value": "0"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "1964:4:54",
                        "type": "",
                        "value": "0x24"
                      }
                    ],
                    "functionName": {
                      "name": "revert",
                      "nodeType": "YulIdentifier",
                      "src": "1954:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1954:15:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "1954:15:54"
                }
              ]
            },
            "name": "panic_error_0x11",
            "nodeType": "YulFunctionDefinition",
            "src": "1848:127:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "2032:116:54",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "2042:20:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "x",
                        "nodeType": "YulIdentifier",
                        "src": "2057:1:54"
                      },
                      {
                        "name": "y",
                        "nodeType": "YulIdentifier",
                        "src": "2060:1:54"
                      }
                    ],
                    "functionName": {
                      "name": "mul",
                      "nodeType": "YulIdentifier",
                      "src": "2053:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2053:9:54"
                  },
                  "variableNames": [
                    {
                      "name": "product",
                      "nodeType": "YulIdentifier",
                      "src": "2042:7:54"
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "2120:22:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "functionName": {
                            "name": "panic_error_0x11",
                            "nodeType": "YulIdentifier",
                            "src": "2122:16:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "2122:18:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "2122:18:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "x",
                                "nodeType": "YulIdentifier",
                                "src": "2091:1:54"
                              }
                            ],
                            "functionName": {
                              "name": "iszero",
                              "nodeType": "YulIdentifier",
                              "src": "2084:6:54"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "2084:9:54"
                          },
                          {
                            "arguments": [
                              {
                                "name": "y",
                                "nodeType": "YulIdentifier",
                                "src": "2098:1:54"
                              },
                              {
                                "arguments": [
                                  {
                                    "name": "product",
                                    "nodeType": "YulIdentifier",
                                    "src": "2105:7:54"
                                  },
                                  {
                                    "name": "x",
                                    "nodeType": "YulIdentifier",
                                    "src": "2114:1:54"
                                  }
                                ],
                                "functionName": {
                                  "name": "div",
                                  "nodeType": "YulIdentifier",
                                  "src": "2101:3:54"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2101:15:54"
                              }
                            ],
                            "functionName": {
                              "name": "eq",
                              "nodeType": "YulIdentifier",
                              "src": "2095:2:54"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "2095:22:54"
                          }
                        ],
                        "functionName": {
                          "name": "or",
                          "nodeType": "YulIdentifier",
                          "src": "2081:2:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2081:37:54"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "2074:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2074:45:54"
                  },
                  "nodeType": "YulIf",
                  "src": "2071:71:54"
                }
              ]
            },
            "name": "checked_mul_t_uint256",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "x",
                "nodeType": "YulTypedName",
                "src": "2011:1:54",
                "type": ""
              },
              {
                "name": "y",
                "nodeType": "YulTypedName",
                "src": "2014:1:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "product",
                "nodeType": "YulTypedName",
                "src": "2020:7:54",
                "type": ""
              }
            ],
            "src": "1980:168:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "2282:145:54",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "2292:26:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "2304:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "2315:2:54",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "2300:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2300:18:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "2292:4:54"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "2334:9:54"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value0",
                            "nodeType": "YulIdentifier",
                            "src": "2349:6:54"
                          },
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2365:3:54",
                                    "type": "",
                                    "value": "160"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2370:1:54",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "shl",
                                  "nodeType": "YulIdentifier",
                                  "src": "2361:3:54"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2361:11:54"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "2374:1:54",
                                "type": "",
                                "value": "1"
                              }
                            ],
                            "functionName": {
                              "name": "sub",
                              "nodeType": "YulIdentifier",
                              "src": "2357:3:54"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "2357:19:54"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "2345:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2345:32:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "2327:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2327:51:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "2327:51:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "2398:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "2409:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "2394:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2394:18:54"
                      },
                      {
                        "name": "value1",
                        "nodeType": "YulIdentifier",
                        "src": "2414:6:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "2387:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2387:34:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "2387:34:54"
                }
              ]
            },
            "name": "abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "2243:9:54",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "2254:6:54",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "2262:6:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "2273:4:54",
                "type": ""
              }
            ],
            "src": "2153:274:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "2510:199:54",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "2556:16:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "2565:1:54",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "2568:1:54",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "2558:6:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "2558:12:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "2558:12:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "2531:7:54"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "2540:9:54"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "2527:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2527:23:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "2552:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "2523:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2523:32:54"
                  },
                  "nodeType": "YulIf",
                  "src": "2520:52:54"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "2581:29:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "2600:9:54"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nodeType": "YulIdentifier",
                      "src": "2594:5:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2594:16:54"
                  },
                  "variables": [
                    {
                      "name": "value",
                      "nodeType": "YulTypedName",
                      "src": "2585:5:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "2663:16:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "2672:1:54",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "2675:1:54",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "2665:6:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "2665:12:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "2665:12:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "value",
                            "nodeType": "YulIdentifier",
                            "src": "2632:5:54"
                          },
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "2653:5:54"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "2646:6:54"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2646:13:54"
                              }
                            ],
                            "functionName": {
                              "name": "iszero",
                              "nodeType": "YulIdentifier",
                              "src": "2639:6:54"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "2639:21:54"
                          }
                        ],
                        "functionName": {
                          "name": "eq",
                          "nodeType": "YulIdentifier",
                          "src": "2629:2:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2629:32:54"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "2622:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2622:40:54"
                  },
                  "nodeType": "YulIf",
                  "src": "2619:60:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "2688:15:54",
                  "value": {
                    "name": "value",
                    "nodeType": "YulIdentifier",
                    "src": "2698:5:54"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "2688:6:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_bool_fromMemory",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "2476:9:54",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "2487:7:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "2499:6:54",
                "type": ""
              }
            ],
            "src": "2432:277:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "2762:77:54",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "2772:16:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "x",
                        "nodeType": "YulIdentifier",
                        "src": "2783:1:54"
                      },
                      {
                        "name": "y",
                        "nodeType": "YulIdentifier",
                        "src": "2786:1:54"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "2779:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2779:9:54"
                  },
                  "variableNames": [
                    {
                      "name": "sum",
                      "nodeType": "YulIdentifier",
                      "src": "2772:3:54"
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "2811:22:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "functionName": {
                            "name": "panic_error_0x11",
                            "nodeType": "YulIdentifier",
                            "src": "2813:16:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "2813:18:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "2813:18:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "x",
                        "nodeType": "YulIdentifier",
                        "src": "2803:1:54"
                      },
                      {
                        "name": "sum",
                        "nodeType": "YulIdentifier",
                        "src": "2806:3:54"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "2800:2:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2800:10:54"
                  },
                  "nodeType": "YulIf",
                  "src": "2797:36:54"
                }
              ]
            },
            "name": "checked_add_t_uint256",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "x",
                "nodeType": "YulTypedName",
                "src": "2745:1:54",
                "type": ""
              },
              {
                "name": "y",
                "nodeType": "YulTypedName",
                "src": "2748:1:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "sum",
                "nodeType": "YulTypedName",
                "src": "2754:3:54",
                "type": ""
              }
            ],
            "src": "2714:125:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "3018:228:54",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "3035:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "3046:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "3028:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3028:21:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "3028:21:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "3069:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "3080:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "3065:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3065:18:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "3085:2:54",
                        "type": "",
                        "value": "38"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "3058:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3058:30:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "3058:30:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "3108:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "3119:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "3104:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3104:18:54"
                      },
                      {
                        "hexValue": "4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "3124:34:54",
                        "type": "",
                        "value": "Ownable: new owner is the zero a"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "3097:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3097:62:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "3097:62:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "3179:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "3190:2:54",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "3175:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3175:18:54"
                      },
                      {
                        "hexValue": "646472657373",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "3195:8:54",
                        "type": "",
                        "value": "ddress"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "3168:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3168:36:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "3168:36:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "3213:27:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "3225:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "3236:3:54",
                        "type": "",
                        "value": "128"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "3221:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3221:19:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "3213:4:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "2995:9:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "3009:4:54",
                "type": ""
              }
            ],
            "src": "2844:402:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "3425:182:54",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "3442:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "3453:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "3435:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3435:21:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "3435:21:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "3476:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "3487:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "3472:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3472:18:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "3492:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "3465:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3465:30:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "3465:30:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "3515:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "3526:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "3511:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3511:18:54"
                      },
                      {
                        "hexValue": "4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "3531:34:54",
                        "type": "",
                        "value": "Ownable: caller is not the owner"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "3504:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3504:62:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "3504:62:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "3575:26:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "3587:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "3598:2:54",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "3583:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3583:18:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "3575:4:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "3402:9:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "3416:4:54",
                "type": ""
              }
            ],
            "src": "3251:356:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "3786:166:54",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "3803:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "3814:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "3796:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3796:21:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "3796:21:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "3837:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "3848:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "3833:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3833:18:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "3853:2:54",
                        "type": "",
                        "value": "16"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "3826:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3826:30:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "3826:30:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "3876:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "3887:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "3872:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3872:18:54"
                      },
                      {
                        "hexValue": "5061757361626c653a20706175736564",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "3892:18:54",
                        "type": "",
                        "value": "Pausable: paused"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "3865:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3865:46:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "3865:46:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "3920:26:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "3932:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "3943:2:54",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "3928:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3928:18:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "3920:4:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_68571e1369f7a6dcdcd736cb0343b35a58ed0f64d245c2ed839c98d412744f8a__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "3763:9:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "3777:4:54",
                "type": ""
              }
            ],
            "src": "3612:340:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "4003:171:54",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "4034:111:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "4055:1:54",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "arguments": [
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "4062:3:54",
                                  "type": "",
                                  "value": "224"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "4067:10:54",
                                  "type": "",
                                  "value": "0x4e487b71"
                                }
                              ],
                              "functionName": {
                                "name": "shl",
                                "nodeType": "YulIdentifier",
                                "src": "4058:3:54"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "4058:20:54"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "4048:6:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "4048:31:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "4048:31:54"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "4099:1:54",
                              "type": "",
                              "value": "4"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "4102:4:54",
                              "type": "",
                              "value": "0x12"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "4092:6:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "4092:15:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "4092:15:54"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "4127:1:54",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "4130:4:54",
                              "type": "",
                              "value": "0x24"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "4120:6:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "4120:15:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "4120:15:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "y",
                        "nodeType": "YulIdentifier",
                        "src": "4023:1:54"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "4016:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4016:9:54"
                  },
                  "nodeType": "YulIf",
                  "src": "4013:132:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "4154:14:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "x",
                        "nodeType": "YulIdentifier",
                        "src": "4163:1:54"
                      },
                      {
                        "name": "y",
                        "nodeType": "YulIdentifier",
                        "src": "4166:1:54"
                      }
                    ],
                    "functionName": {
                      "name": "div",
                      "nodeType": "YulIdentifier",
                      "src": "4159:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4159:9:54"
                  },
                  "variableNames": [
                    {
                      "name": "r",
                      "nodeType": "YulIdentifier",
                      "src": "4154:1:54"
                    }
                  ]
                }
              ]
            },
            "name": "checked_div_t_uint256",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "x",
                "nodeType": "YulTypedName",
                "src": "3988:1:54",
                "type": ""
              },
              {
                "name": "y",
                "nodeType": "YulTypedName",
                "src": "3991:1:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "r",
                "nodeType": "YulTypedName",
                "src": "3997:1:54",
                "type": ""
              }
            ],
            "src": "3957:217:54"
          }
        ]
      },
      "contents": "{\n    { }\n    function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := calldataload(headStart)\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_encode_tuple_t_contract$_MarineCoin_$4620__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n    function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, iszero(iszero(value0)))\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n    function abi_decode_tuple_t_address(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, sub(shl(160, 1), 1)))) { revert(0, 0) }\n        value0 := value\n    }\n    function abi_encode_tuple_t_stringliteral_ebf73bba305590e4764d5cb53b69bffd6d4d092d1a67551cb346f8cfcdab8619__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 31)\n        mstore(add(headStart, 64), \"ReentrancyGuard: reentrant call\")\n        tail := add(headStart, 96)\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 panic_error_0x11()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x11)\n        revert(0, 0x24)\n    }\n    function checked_mul_t_uint256(x, y) -> product\n    {\n        product := mul(x, y)\n        if iszero(or(iszero(x), eq(y, div(product, x)))) { panic_error_0x11() }\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 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 checked_add_t_uint256(x, y) -> sum\n    {\n        sum := add(x, y)\n        if gt(x, sum) { panic_error_0x11() }\n    }\n    function abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__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), \"Ownable: new owner is the zero a\")\n        mstore(add(headStart, 96), \"ddress\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 32)\n        mstore(add(headStart, 64), \"Ownable: caller is not the owner\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_68571e1369f7a6dcdcd736cb0343b35a58ed0f64d245c2ed839c98d412744f8a__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 16)\n        mstore(add(headStart, 64), \"Pausable: paused\")\n        tail := add(headStart, 96)\n    }\n    function checked_div_t_uint256(x, y) -> r\n    {\n        if iszero(y)\n        {\n            mstore(0, shl(224, 0x4e487b71))\n            mstore(4, 0x12)\n            revert(0, 0x24)\n        }\n        r := div(x, y)\n    }\n}",
      "id": 54,
      "language": "Yul",
      "name": "#utility.yul"
    }
  ],
  "sourceMap": "265:1343:24:-:0;;;508:207;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1701:1:15;1806:7;:22;;;996:15:14;;-1:-1:-1;;996:15:14;;;936:32:13;719:10:20;936:18:13;:32::i;:::-;607:5:24::2;:27:::0;;623:10:::2;-1:-1:-1::0;;;;;;607:27:24;;::::2;;::::0;;;644:13:::2;:30:::0;;;;::::2;-1:-1:-1::0;;;;;644:30:24;;;::::2;::::0;;;::::2;::::0;;;684:10:::2;:24:::0;265:1343;;2433:187:13;2525:6;;;-1:-1:-1;;;;;2541:17:13;;;2525:6;2541:17;;;-1:-1:-1;;;;;;2541:17:13;;;;;;2573:40;;2525:6;;;;;;;;2573:40;;2506:16;;2573:40;2496:124;2433:187;:::o;14:370:54:-;112:6;120;173:2;161:9;152:7;148:23;144:32;141:52;;;189:1;186;179:12;141:52;215:16;;-1:-1:-1;;;;;260:31:54;;250:42;;240:70;;306:1;303;296:12;240:70;374:2;359:18;;;;353:25;329:5;;353:25;;-1:-1:-1;;;14:370:54:o;:::-;265:1343:24;;;;;;",
  "deployedSourceMap": "265:1343:24:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1517:83;;;;;;;;;;;;;:::i;:::-;;848:404;;;;;;:::i;:::-;;:::i;1258:253::-;;;;;;;;;;;;;:::i;426:25::-;;;;;;;;;;;;;;;;;;;345::54;;;333:2;318:18;426:25:24;;;;;;;;358:31;;;;;;;;;;-1:-1:-1;358:31:24;;;;-1:-1:-1;;;;;358:31:24;;;;;;;;;;:::i;1615:84:14:-;;;;;;;;;;-1:-1:-1;1685:7:14;;;;1615:84;;773:14:54;;766:22;748:41;;736:2;721:18;1615:84:14;608:187:54;1831:101:13;;;;;;;;;;;;;:::i;395:25:24:-;;;;;;;;;;;;;;;;1201:85:13;;;;;;;;;;;;;:::i;2081:198::-;;;;;;;;;;-1:-1:-1;2081:198:13;;;;;:::i;:::-;;:::i;1517:83:24:-;1094:13:13;:11;:13::i;:::-;1566:5:24::1;:27:::0;;-1:-1:-1;;;;;;1566:27:24::1;1582:10;1566:27;::::0;;1517:83::o;848:404::-;1744:1:15;2325:7;;:19;2317:63;;;;-1:-1:-1;;;2317:63:15;;1501:2:54;2317:63:15;;;1483:21:54;1540:2;1520:18;;;1513:30;1579:33;1559:18;;;1552:61;1630:18;;2317:63:15;;;;;;;;;1744:1;2455:7;:18;1239:19:14::1;:17;:19::i;:::-;965:37:24::2;974:15;991:10;;965:8;:37::i;:::-;952:9;:50;944:59;;;::::0;::::2;;1021:13;::::0;:38:::2;::::0;-1:-1:-1;;;1021:38:24;;1063:15;;-1:-1:-1;;;;;1021:13:24::2;::::0;:23:::2;::::0;:38:::2;::::0;1053:4:::2;::::0;1021:38:::2;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:57;;1013:66;;;::::0;::::2;;1097:13;::::0;-1:-1:-1;;;;;1097:13:24::2;:22;1120:10;1132:22;:15:::0;1150:4:::2;1132:22;:::i;:::-;1097:58;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1089:67;;;::::0;::::2;;1181:15;1167:10;;:29;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;1212:33:24::2;::::0;::::2;::::0;::::2;::::0;1217:10:::2;::::0;1229:15;;1212:33:::2;:::i;:::-;;;;;;;;-1:-1:-1::0;1701:1:15;2628:7;:22;848:404:24:o;1258:253::-;1316:5;;-1:-1:-1;;;;;1316:5:24;1302:10;:19;1294:28;;;;;;1340:13;;1371:5;;1379:38;;-1:-1:-1;;;1379:38:24;;-1:-1:-1;;;;;1340:13:24;;;;:22;;1371:5;;1340:13;;1379:23;;:38;;1411:4;;1379:38;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1340:78;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1332:87;;;;;;1437:5;;1429:46;;-1:-1:-1;;;;;1437:5:24;;;;1453:21;1429:46;;;;;1437:5;1429:46;1437:5;1429:46;1453:21;1437:5;1429:46;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1498:5:24;;-1:-1:-1;;;;;1498:5:24;1485:19;1831:101:13;1094:13;:11;:13::i;:::-;1895:30:::1;1922:1;1895:18;:30::i;:::-;1831:101::o:0;1201:85::-;1273:6;;;;;-1:-1:-1;;;;;1273:6:13;;1201:85::o;2081:198::-;1094:13;:11;:13::i;:::-;-1:-1:-1;;;;;2169:22:13;::::1;2161:73;;;::::0;-1:-1:-1;;;2161:73:13;;3046:2:54;2161:73:13::1;::::0;::::1;3028:21:54::0;3085:2;3065:18;;;3058:30;3124:34;3104:18;;;3097:62;-1:-1:-1;;;3175:18:54;;;3168:36;3221:19;;2161:73:13::1;2844:402:54::0;2161:73:13::1;2244:28;2263:8;2244:18;:28::i;:::-;2081:198:::0;:::o;1359:130::-;719:10:20;1422:7:13;:5;:7::i;:::-;-1:-1:-1;;;;;1422:23:13;;1414:68;;;;-1:-1:-1;;;1414:68:13;;3453:2:54;1414:68:13;;;3435:21:54;;;3472:18;;;3465:30;3531:34;3511:18;;;3504:62;3583:18;;1414:68:13;3251:356:54;1767:106:14;1685:7;;;;1836:9;1828:38;;;;-1:-1:-1;;;1828:38:14;;3814:2:54;1828:38:14;;;3796:21:54;3853:2;3833:18;;;3826:30;-1:-1:-1;;;3872:18:54;;;3865:46;3928:18;;1828:38:14;3612:340:54;721:121:24;778:6;804;;;:30;;-1:-1:-1;833:1:24;828;819:5;828:1;833;819:5;:::i;:::-;815:9;-1:-1:-1;814:15:24;;815:9;814:15;:::i;:::-;:20;804:30;796:39;;;;;;721:121;;;;:::o;2433:187:13:-;2525:6;;;-1:-1:-1;;;;;2541:17:13;;;2525:6;2541:17;;;-1:-1:-1;;;;;;2541:17:13;;;;;;2573:40;;2525:6;;;;;;;;2573:40;;2506:16;;2573:40;2496:124;2433:187;:::o;14:180:54:-;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;-1:-1:-1;165:23:54;;14:180;-1:-1:-1;14:180:54:o;381:222::-;-1:-1:-1;;;;;564:32:54;;;;546:51;;534:2;519:18;;381:222::o;1008:286::-;1067:6;1120:2;1108:9;1099:7;1095:23;1091:32;1088:52;;;1136:1;1133;1126:12;1088:52;1162:23;;-1:-1:-1;;;;;1214:31:54;;1204:42;;1194:70;;1260:1;1257;1250:12;1194:70;1283:5;1008:286;-1:-1:-1;;;1008:286:54:o;1659:184::-;1729:6;1782:2;1770:9;1761:7;1757:23;1753:32;1750:52;;;1798:1;1795;1788:12;1750:52;-1:-1:-1;1821:16:54;;1659:184;-1:-1:-1;1659:184:54:o;1848:127::-;1909:10;1904:3;1900:20;1897:1;1890:31;1940:4;1937:1;1930:15;1964:4;1961:1;1954:15;1980:168;2053:9;;;2084;;2101:15;;;2095:22;;2081:37;2071:71;;2122:18;;:::i;2153:274::-;-1:-1:-1;;;;;2345:32:54;;;;2327:51;;2409:2;2394:18;;2387:34;2315:2;2300:18;;2153:274::o;2432:277::-;2499:6;2552:2;2540:9;2531:7;2527:23;2523:32;2520:52;;;2568:1;2565;2558:12;2520:52;2600:9;2594:16;2653:5;2646:13;2639:21;2632:5;2629:32;2619:60;;2675:1;2672;2665:12;2714:125;2779:9;;;2800:10;;;2797:36;;;2813:18;;:::i;3957:217::-;3997:1;4023;4013:132;;4067:10;4062:3;4058:20;4055:1;4048:31;4102:4;4099:1;4092:15;4130:4;4127:1;4120:15;4013:132;-1:-1:-1;4159:9:54;;3957:217::o",
  "source": "// SPDX-License-Identifier: UNLICENSED\npragma solidity ^0.8.0;\n\nimport '@openzeppelin/contracts/security/Pausable.sol';\nimport '@openzeppelin/contracts/security/ReentrancyGuard.sol';\nimport '@openzeppelin/contracts/access/Ownable.sol';\nimport '../MarineCoin.sol';\n\ncontract MarineCoinSale is ReentrancyGuard,Pausable,Ownable {\n    address payable admin;\n    MarineCoin public tokenContract;\n    uint256 public tokenPrice;\n    uint256 public tokensSold;\n\n    event Sell(address _buyer, uint256 _amount);\n\n    constructor(MarineCoin _tokenContract, uint256 _tokenPrice) ReentrancyGuard() Pausable() {\n        admin = payable(msg.sender);\n        tokenContract = _tokenContract;\n        tokenPrice = _tokenPrice;\n    }\n\n    function multiply(uint x, uint y) internal pure returns (uint z) {\n        require(y == 0 || (z = x * y) / y == x);\n    }\n\n    function buyTokens(uint256 _numberOfTokens) nonReentrant whenNotPaused() public payable {\n      require(msg.value == multiply(_numberOfTokens, tokenPrice));\n        require(tokenContract.balanceOf(address(this)) >= _numberOfTokens);\n        require(tokenContract.transfer(msg.sender, _numberOfTokens * 1e18));\n\n        tokensSold += _numberOfTokens;\n\n        emit Sell(msg.sender, _numberOfTokens);\n    }\n\n    function endSale() public {\n        require(msg.sender == admin);\n        require(tokenContract.transfer(address(admin), tokenContract.balanceOf(address(this))));\n        payable(admin).transfer(address(this).balance);\n        selfdestruct(admin);\n    }\n\n    function setAdmin() external onlyOwner {\n        admin = payable(msg.sender);\n    }\n\n\n   \n}",
  "sourcePath": "/home/webxpert/workspace/shipfinex/latest-repos/tokenx_smartcontract/contracts/MarineCoinSale/MarineCoinSale.sol",
  "ast": {
    "absolutePath": "project:/contracts/MarineCoinSale/MarineCoinSale.sol",
    "exportedSymbols": {
      "Context": [
        3401
      ],
      "ERC20": [
        3239
      ],
      "IERC20": [
        3317
      ],
      "IERC20Metadata": [
        3379
      ],
      "MarineCoin": [
        4620
      ],
      "MarineCoinSale": [
        4815
      ],
      "Ownable": [
        2505
      ],
      "Pausable": [
        2613
      ],
      "ReentrancyGuard": [
        2653
      ]
    },
    "id": 4816,
    "license": "UNLICENSED",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 4622,
        "literals": [
          "solidity",
          "^",
          "0.8",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "39:23:24"
      },
      {
        "absolutePath": "@openzeppelin/contracts/security/Pausable.sol",
        "file": "@openzeppelin/contracts/security/Pausable.sol",
        "id": 4623,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 4816,
        "sourceUnit": 2614,
        "src": "64:55:24",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@openzeppelin/contracts/security/ReentrancyGuard.sol",
        "file": "@openzeppelin/contracts/security/ReentrancyGuard.sol",
        "id": 4624,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 4816,
        "sourceUnit": 2654,
        "src": "120:62:24",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@openzeppelin/contracts/access/Ownable.sol",
        "file": "@openzeppelin/contracts/access/Ownable.sol",
        "id": 4625,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 4816,
        "sourceUnit": 2506,
        "src": "183:52:24",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "project:/contracts/MarineCoin.sol",
        "file": "../MarineCoin.sol",
        "id": 4626,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 4816,
        "sourceUnit": 4621,
        "src": "236:27:24",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [
          {
            "baseName": {
              "id": 4627,
              "name": "ReentrancyGuard",
              "nameLocations": [
                "292:15:24"
              ],
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 2653,
              "src": "292:15:24"
            },
            "id": 4628,
            "nodeType": "InheritanceSpecifier",
            "src": "292:15:24"
          },
          {
            "baseName": {
              "id": 4629,
              "name": "Pausable",
              "nameLocations": [
                "308:8:24"
              ],
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 2613,
              "src": "308:8:24"
            },
            "id": 4630,
            "nodeType": "InheritanceSpecifier",
            "src": "308:8:24"
          },
          {
            "baseName": {
              "id": 4631,
              "name": "Ownable",
              "nameLocations": [
                "317:7:24"
              ],
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 2505,
              "src": "317:7:24"
            },
            "id": 4632,
            "nodeType": "InheritanceSpecifier",
            "src": "317:7:24"
          }
        ],
        "canonicalName": "MarineCoinSale",
        "contractDependencies": [],
        "contractKind": "contract",
        "fullyImplemented": true,
        "id": 4815,
        "linearizedBaseContracts": [
          4815,
          2505,
          2613,
          3401,
          2653
        ],
        "name": "MarineCoinSale",
        "nameLocation": "274:14:24",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "constant": false,
            "id": 4634,
            "mutability": "mutable",
            "name": "admin",
            "nameLocation": "347:5:24",
            "nodeType": "VariableDeclaration",
            "scope": 4815,
            "src": "331:21:24",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address_payable",
              "typeString": "address payable"
            },
            "typeName": {
              "id": 4633,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "331:15:24",
              "stateMutability": "payable",
              "typeDescriptions": {
                "typeIdentifier": "t_address_payable",
                "typeString": "address payable"
              }
            },
            "visibility": "internal"
          },
          {
            "constant": false,
            "functionSelector": "55a373d6",
            "id": 4637,
            "mutability": "mutable",
            "name": "tokenContract",
            "nameLocation": "376:13:24",
            "nodeType": "VariableDeclaration",
            "scope": 4815,
            "src": "358:31:24",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_MarineCoin_$4620",
              "typeString": "contract MarineCoin"
            },
            "typeName": {
              "id": 4636,
              "nodeType": "UserDefinedTypeName",
              "pathNode": {
                "id": 4635,
                "name": "MarineCoin",
                "nameLocations": [
                  "358:10:24"
                ],
                "nodeType": "IdentifierPath",
                "referencedDeclaration": 4620,
                "src": "358:10:24"
              },
              "referencedDeclaration": 4620,
              "src": "358:10:24",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_MarineCoin_$4620",
                "typeString": "contract MarineCoin"
              }
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "7ff9b596",
            "id": 4639,
            "mutability": "mutable",
            "name": "tokenPrice",
            "nameLocation": "410:10:24",
            "nodeType": "VariableDeclaration",
            "scope": 4815,
            "src": "395:25:24",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 4638,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "395:7:24",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "518ab2a8",
            "id": 4641,
            "mutability": "mutable",
            "name": "tokensSold",
            "nameLocation": "441:10:24",
            "nodeType": "VariableDeclaration",
            "scope": 4815,
            "src": "426:25:24",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 4640,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "426:7:24",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "visibility": "public"
          },
          {
            "anonymous": false,
            "eventSelector": "5e5e995ce3133561afceaa51a9a154d5db228cd7525d34df5185582c18d3df09",
            "id": 4647,
            "name": "Sell",
            "nameLocation": "464:4:24",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 4646,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4643,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "_buyer",
                  "nameLocation": "477:6:24",
                  "nodeType": "VariableDeclaration",
                  "scope": 4647,
                  "src": "469:14:24",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4642,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "469:7:24",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4645,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "_amount",
                  "nameLocation": "493:7:24",
                  "nodeType": "VariableDeclaration",
                  "scope": 4647,
                  "src": "485:15:24",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4644,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "485:7:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "468:33:24"
            },
            "src": "458:44:24"
          },
          {
            "body": {
              "id": 4675,
              "nodeType": "Block",
              "src": "597:118:24",
              "statements": [
                {
                  "expression": {
                    "id": 4665,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 4659,
                      "name": "admin",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4634,
                      "src": "607:5:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "expression": {
                            "id": 4662,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4294967281,
                            "src": "623:3:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 4663,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "627:6:24",
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "src": "623:10:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 4661,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "615:8:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_payable_$",
                          "typeString": "type(address payable)"
                        },
                        "typeName": {
                          "id": 4660,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "615:8:24",
                          "stateMutability": "payable",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 4664,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "615:19:24",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "src": "607:27:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "id": 4666,
                  "nodeType": "ExpressionStatement",
                  "src": "607:27:24"
                },
                {
                  "expression": {
                    "id": 4669,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 4667,
                      "name": "tokenContract",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4637,
                      "src": "644:13:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_MarineCoin_$4620",
                        "typeString": "contract MarineCoin"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 4668,
                      "name": "_tokenContract",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4650,
                      "src": "660:14:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_MarineCoin_$4620",
                        "typeString": "contract MarineCoin"
                      }
                    },
                    "src": "644:30:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_MarineCoin_$4620",
                      "typeString": "contract MarineCoin"
                    }
                  },
                  "id": 4670,
                  "nodeType": "ExpressionStatement",
                  "src": "644:30:24"
                },
                {
                  "expression": {
                    "id": 4673,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 4671,
                      "name": "tokenPrice",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4639,
                      "src": "684:10:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 4672,
                      "name": "_tokenPrice",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4652,
                      "src": "697:11:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "684:24:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 4674,
                  "nodeType": "ExpressionStatement",
                  "src": "684:24:24"
                }
              ]
            },
            "id": 4676,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [
              {
                "arguments": [],
                "id": 4655,
                "kind": "baseConstructorSpecifier",
                "modifierName": {
                  "id": 4654,
                  "name": "ReentrancyGuard",
                  "nameLocations": [
                    "568:15:24"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 2653,
                  "src": "568:15:24"
                },
                "nodeType": "ModifierInvocation",
                "src": "568:17:24"
              },
              {
                "arguments": [],
                "id": 4657,
                "kind": "baseConstructorSpecifier",
                "modifierName": {
                  "id": 4656,
                  "name": "Pausable",
                  "nameLocations": [
                    "586:8:24"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 2613,
                  "src": "586:8:24"
                },
                "nodeType": "ModifierInvocation",
                "src": "586:10:24"
              }
            ],
            "name": "",
            "nameLocation": "-1:-1:-1",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4653,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4650,
                  "mutability": "mutable",
                  "name": "_tokenContract",
                  "nameLocation": "531:14:24",
                  "nodeType": "VariableDeclaration",
                  "scope": 4676,
                  "src": "520:25:24",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_MarineCoin_$4620",
                    "typeString": "contract MarineCoin"
                  },
                  "typeName": {
                    "id": 4649,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 4648,
                      "name": "MarineCoin",
                      "nameLocations": [
                        "520:10:24"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 4620,
                      "src": "520:10:24"
                    },
                    "referencedDeclaration": 4620,
                    "src": "520:10:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_MarineCoin_$4620",
                      "typeString": "contract MarineCoin"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4652,
                  "mutability": "mutable",
                  "name": "_tokenPrice",
                  "nameLocation": "555:11:24",
                  "nodeType": "VariableDeclaration",
                  "scope": 4676,
                  "src": "547:19:24",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4651,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "547:7:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "519:48:24"
            },
            "returnParameters": {
              "id": 4658,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "597:0:24"
            },
            "scope": 4815,
            "src": "508:207:24",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 4702,
              "nodeType": "Block",
              "src": "786:56:24",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 4699,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 4688,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 4686,
                            "name": "y",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4680,
                            "src": "804:1:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 4687,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "809:1:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "804:6:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "||",
                        "rightExpression": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 4698,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 4696,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "components": [
                                {
                                  "id": 4693,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftHandSide": {
                                    "id": 4689,
                                    "name": "z",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4683,
                                    "src": "815:1:24",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "Assignment",
                                  "operator": "=",
                                  "rightHandSide": {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 4692,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "id": 4690,
                                      "name": "x",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4678,
                                      "src": "819:1:24",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "*",
                                    "rightExpression": {
                                      "id": 4691,
                                      "name": "y",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4680,
                                      "src": "823:1:24",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "819:5:24",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "815:9:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "id": 4694,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "TupleExpression",
                              "src": "814:11:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "/",
                            "rightExpression": {
                              "id": 4695,
                              "name": "y",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4680,
                              "src": "828:1:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "814:15:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "id": 4697,
                            "name": "x",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4678,
                            "src": "833:1:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "814:20:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "804:30:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 4685,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "796:7:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 4700,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "796:39:24",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4701,
                  "nodeType": "ExpressionStatement",
                  "src": "796:39:24"
                }
              ]
            },
            "id": 4703,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "multiply",
            "nameLocation": "730:8:24",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4681,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4678,
                  "mutability": "mutable",
                  "name": "x",
                  "nameLocation": "744:1:24",
                  "nodeType": "VariableDeclaration",
                  "scope": 4703,
                  "src": "739:6:24",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4677,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "739:4:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4680,
                  "mutability": "mutable",
                  "name": "y",
                  "nameLocation": "752:1:24",
                  "nodeType": "VariableDeclaration",
                  "scope": 4703,
                  "src": "747:6:24",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4679,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "747:4:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "738:16:24"
            },
            "returnParameters": {
              "id": 4684,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4683,
                  "mutability": "mutable",
                  "name": "z",
                  "nameLocation": "783:1:24",
                  "nodeType": "VariableDeclaration",
                  "scope": 4703,
                  "src": "778:6:24",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4682,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "778:4:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "777:8:24"
            },
            "scope": 4815,
            "src": "721:121:24",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 4755,
              "nodeType": "Block",
              "src": "936:316:24",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 4719,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "expression": {
                            "id": 4713,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4294967281,
                            "src": "952:3:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 4714,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "956:5:24",
                          "memberName": "value",
                          "nodeType": "MemberAccess",
                          "src": "952:9:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "arguments": [
                            {
                              "id": 4716,
                              "name": "_numberOfTokens",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4705,
                              "src": "974:15:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 4717,
                              "name": "tokenPrice",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4639,
                              "src": "991:10:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 4715,
                            "name": "multiply",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4703,
                            "src": "965:8:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                              "typeString": "function (uint256,uint256) pure returns (uint256)"
                            }
                          },
                          "id": 4718,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "965:37:24",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "952:50:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 4712,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "944:7:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 4720,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "944:59:24",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4721,
                  "nodeType": "ExpressionStatement",
                  "src": "944:59:24"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 4731,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "id": 4727,
                                  "name": "this",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4294967268,
                                  "src": "1053:4:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_MarineCoinSale_$4815",
                                    "typeString": "contract MarineCoinSale"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_MarineCoinSale_$4815",
                                    "typeString": "contract MarineCoinSale"
                                  }
                                ],
                                "id": 4726,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "1045:7:24",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 4725,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "1045:7:24",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 4728,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "1045:13:24",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "id": 4723,
                              "name": "tokenContract",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4637,
                              "src": "1021:13:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_MarineCoin_$4620",
                                "typeString": "contract MarineCoin"
                              }
                            },
                            "id": 4724,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "1035:9:24",
                            "memberName": "balanceOf",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 2752,
                            "src": "1021:23:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                              "typeString": "function (address) view external returns (uint256)"
                            }
                          },
                          "id": 4729,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1021:38:24",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "id": 4730,
                          "name": "_numberOfTokens",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4705,
                          "src": "1063:15:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "1021:57:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 4722,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "1013:7:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 4732,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1013:66:24",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4733,
                  "nodeType": "ExpressionStatement",
                  "src": "1013:66:24"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "expression": {
                              "id": 4737,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4294967281,
                              "src": "1120:3:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 4738,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "1124:6:24",
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "src": "1120:10:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 4741,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 4739,
                              "name": "_numberOfTokens",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4705,
                              "src": "1132:15:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "*",
                            "rightExpression": {
                              "hexValue": "31653138",
                              "id": 4740,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1150:4:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1000000000000000000_by_1",
                                "typeString": "int_const 1000000000000000000"
                              },
                              "value": "1e18"
                            },
                            "src": "1132:22:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "id": 4735,
                            "name": "tokenContract",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4637,
                            "src": "1097:13:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_MarineCoin_$4620",
                              "typeString": "contract MarineCoin"
                            }
                          },
                          "id": 4736,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "1111:8:24",
                          "memberName": "transfer",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 2777,
                          "src": "1097:22:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                            "typeString": "function (address,uint256) external returns (bool)"
                          }
                        },
                        "id": 4742,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1097:58:24",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 4734,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "1089:7:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 4743,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1089:67:24",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4744,
                  "nodeType": "ExpressionStatement",
                  "src": "1089:67:24"
                },
                {
                  "expression": {
                    "id": 4747,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 4745,
                      "name": "tokensSold",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4641,
                      "src": "1167:10:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "+=",
                    "rightHandSide": {
                      "id": 4746,
                      "name": "_numberOfTokens",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4705,
                      "src": "1181:15:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "1167:29:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 4748,
                  "nodeType": "ExpressionStatement",
                  "src": "1167:29:24"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 4750,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4294967281,
                          "src": "1217:3:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 4751,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "1221:6:24",
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "1217:10:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 4752,
                        "name": "_numberOfTokens",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4705,
                        "src": "1229:15:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 4749,
                      "name": "Sell",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4647,
                      "src": "1212:4:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256)"
                      }
                    },
                    "id": 4753,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1212:33:24",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4754,
                  "nodeType": "EmitStatement",
                  "src": "1207:38:24"
                }
              ]
            },
            "functionSelector": "3610724e",
            "id": 4756,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 4708,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 4707,
                  "name": "nonReentrant",
                  "nameLocations": [
                    "892:12:24"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 2652,
                  "src": "892:12:24"
                },
                "nodeType": "ModifierInvocation",
                "src": "892:12:24"
              },
              {
                "arguments": [],
                "id": 4710,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 4709,
                  "name": "whenNotPaused",
                  "nameLocations": [
                    "905:13:24"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 2540,
                  "src": "905:13:24"
                },
                "nodeType": "ModifierInvocation",
                "src": "905:15:24"
              }
            ],
            "name": "buyTokens",
            "nameLocation": "857:9:24",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4706,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4705,
                  "mutability": "mutable",
                  "name": "_numberOfTokens",
                  "nameLocation": "875:15:24",
                  "nodeType": "VariableDeclaration",
                  "scope": 4756,
                  "src": "867:23:24",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4704,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "867:7:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "866:25:24"
            },
            "returnParameters": {
              "id": 4711,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "936:0:24"
            },
            "scope": 4815,
            "src": "848:404:24",
            "stateMutability": "payable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 4799,
              "nodeType": "Block",
              "src": "1284:227:24",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 4763,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "expression": {
                            "id": 4760,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4294967281,
                            "src": "1302:3:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 4761,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "1306:6:24",
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "src": "1302:10:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "id": 4762,
                          "name": "admin",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4634,
                          "src": "1316:5:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "src": "1302:19:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 4759,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "1294:7:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 4764,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1294:28:24",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4765,
                  "nodeType": "ExpressionStatement",
                  "src": "1294:28:24"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "id": 4771,
                                "name": "admin",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4634,
                                "src": "1371:5:24",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              ],
                              "id": 4770,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "1363:7:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 4769,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "1363:7:24",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 4772,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1363:14:24",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "id": 4777,
                                    "name": "this",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4294967268,
                                    "src": "1411:4:24",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_MarineCoinSale_$4815",
                                      "typeString": "contract MarineCoinSale"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_contract$_MarineCoinSale_$4815",
                                      "typeString": "contract MarineCoinSale"
                                    }
                                  ],
                                  "id": 4776,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "1403:7:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_address_$",
                                    "typeString": "type(address)"
                                  },
                                  "typeName": {
                                    "id": 4775,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "1403:7:24",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 4778,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "1403:13:24",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "expression": {
                                "id": 4773,
                                "name": "tokenContract",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4637,
                                "src": "1379:13:24",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_MarineCoin_$4620",
                                  "typeString": "contract MarineCoin"
                                }
                              },
                              "id": 4774,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "1393:9:24",
                              "memberName": "balanceOf",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 2752,
                              "src": "1379:23:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                                "typeString": "function (address) view external returns (uint256)"
                              }
                            },
                            "id": 4779,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1379:38:24",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "id": 4767,
                            "name": "tokenContract",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4637,
                            "src": "1340:13:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_MarineCoin_$4620",
                              "typeString": "contract MarineCoin"
                            }
                          },
                          "id": 4768,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "1354:8:24",
                          "memberName": "transfer",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 2777,
                          "src": "1340:22:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                            "typeString": "function (address,uint256) external returns (bool)"
                          }
                        },
                        "id": 4780,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1340:78:24",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 4766,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "1332:7:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 4781,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1332:87:24",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4782,
                  "nodeType": "ExpressionStatement",
                  "src": "1332:87:24"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 4790,
                              "name": "this",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4294967268,
                              "src": "1461:4:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_MarineCoinSale_$4815",
                                "typeString": "contract MarineCoinSale"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_MarineCoinSale_$4815",
                                "typeString": "contract MarineCoinSale"
                              }
                            ],
                            "id": 4789,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "1453:7:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 4788,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "1453:7:24",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 4791,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1453:13:24",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 4792,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "1467:7:24",
                        "memberName": "balance",
                        "nodeType": "MemberAccess",
                        "src": "1453:21:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "arguments": [
                          {
                            "id": 4785,
                            "name": "admin",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4634,
                            "src": "1437:5:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          ],
                          "id": 4784,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "1429:8:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_payable_$",
                            "typeString": "type(address payable)"
                          },
                          "typeName": {
                            "id": 4783,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "1429:8:24",
                            "stateMutability": "payable",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 4786,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1429:14:24",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      "id": 4787,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "1444:8:24",
                      "memberName": "transfer",
                      "nodeType": "MemberAccess",
                      "src": "1429:23:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_transfer_nonpayable$_t_uint256_$returns$__$",
                        "typeString": "function (uint256)"
                      }
                    },
                    "id": 4793,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1429:46:24",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4794,
                  "nodeType": "ExpressionStatement",
                  "src": "1429:46:24"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 4796,
                        "name": "admin",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4634,
                        "src": "1498:5:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "id": 4795,
                      "name": "selfdestruct",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4294967275,
                      "src": "1485:12:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_selfdestruct_nonpayable$_t_address_payable_$returns$__$",
                        "typeString": "function (address payable)"
                      }
                    },
                    "id": 4797,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1485:19:24",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4798,
                  "nodeType": "ExpressionStatement",
                  "src": "1485:19:24"
                }
              ]
            },
            "functionSelector": "380d831b",
            "id": 4800,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "endSale",
            "nameLocation": "1267:7:24",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4757,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1274:2:24"
            },
            "returnParameters": {
              "id": 4758,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1284:0:24"
            },
            "scope": 4815,
            "src": "1258:253:24",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 4813,
              "nodeType": "Block",
              "src": "1556:44:24",
              "statements": [
                {
                  "expression": {
                    "id": 4811,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 4805,
                      "name": "admin",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4634,
                      "src": "1566:5:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "expression": {
                            "id": 4808,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4294967281,
                            "src": "1582:3:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 4809,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "1586:6:24",
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "src": "1582:10:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 4807,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "1574:8:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_payable_$",
                          "typeString": "type(address payable)"
                        },
                        "typeName": {
                          "id": 4806,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1574:8:24",
                          "stateMutability": "payable",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 4810,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1574:19:24",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "src": "1566:27:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "id": 4812,
                  "nodeType": "ExpressionStatement",
                  "src": "1566:27:24"
                }
              ]
            },
            "functionSelector": "2cae2096",
            "id": 4814,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 4803,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 4802,
                  "name": "onlyOwner",
                  "nameLocations": [
                    "1546:9:24"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 2424,
                  "src": "1546:9:24"
                },
                "nodeType": "ModifierInvocation",
                "src": "1546:9:24"
              }
            ],
            "name": "setAdmin",
            "nameLocation": "1526:8:24",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4801,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1534:2:24"
            },
            "returnParameters": {
              "id": 4804,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1556:0:24"
            },
            "scope": 4815,
            "src": "1517:83:24",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          }
        ],
        "scope": 4816,
        "src": "265:1343:24",
        "usedErrors": []
      }
    ],
    "src": "39:1569:24"
  },
  "compiler": {
    "name": "solc",
    "version": "0.8.17+commit.8df45f5f.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.4.8",
  "updatedAt": "2022-12-08T12:51:01.345Z",
  "devdoc": {
    "kind": "dev",
    "methods": {
      "owner()": {
        "details": "Returns the address of the current owner."
      },
      "paused()": {
        "details": "Returns true if the contract is paused, and false otherwise."
      },
      "renounceOwnership()": {
        "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner."
      },
      "transferOwnership(address)": {
        "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."
      }
    },
    "version": 1
  },
  "userdoc": {
    "kind": "user",
    "methods": {},
    "version": 1
  }
}