{
  "contractName": "MockPresale",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_tokenAddress",
          "type": "address"
        },
        {
          "internalType": "address payable",
          "name": "_presaleReceiver",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_endingTime",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [],
      "name": "presaleAmountOverdemand",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "presaleEndingTimeInvalid",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "presaleMaximumPresaleAmountInvalid",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "presaleMimumumUSDPurchaseInvalid",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "presaleNativeTokenPaymentNotSufficient",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "presaleNonZeroAddressInvalid",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "presaleRoundClosed",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "presaleStartingTimeInvalid",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "presaleTokenNotAvailable",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "presaleUSDPriceInvalid",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "presaleUSDPurchaseNotSufficient",
      "type": "error"
    },
    {
      "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": "uint256",
          "name": "endingTime",
          "type": "uint256"
        }
      ],
      "name": "PresaleEndingTimeUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "tokenAddress",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "bool",
          "name": "tokenAvailability",
          "type": "bool"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "aggregatorAddress",
          "type": "address"
        }
      ],
      "name": "PresalePaymentTokenUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "receiverAddress",
          "type": "address"
        }
      ],
      "name": "PresaleReceiverUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "presaleRound",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "startingTime",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "usdPrice",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "minimumUSDPurchase",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "maximumPresaleAmount",
          "type": "uint256"
        }
      ],
      "name": "PresaleRoundUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "tokenAddress",
          "type": "address"
        }
      ],
      "name": "PresaleTokenUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "paymentTokenAddress",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "paymentTokenamount",
          "type": "uint256"
        }
      ],
      "name": "TokenPresold",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "endingTime",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "presaleAmountByRoundMapping",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "presalePaymentTokenMapping",
      "outputs": [
        {
          "internalType": "bool",
          "name": "available",
          "type": "bool"
        },
        {
          "internalType": "address",
          "name": "aggregatorAddress",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "presaleReceiver",
      "outputs": [
        {
          "internalType": "address payable",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "tokenAddress",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "totalPresaleRound",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "_value",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getTotalPresaleRound",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_presaleRound",
          "type": "uint256"
        }
      ],
      "name": "getPresaleAmountByRound",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getTotalPresaleAmount",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getCurrentPresaleRound",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getCurrentPresaleDetails",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_paymentTokenAddress",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "presaleTokens",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address payable",
          "name": "_newPresaleReceiver",
          "type": "address"
        }
      ],
      "name": "setPresaleReceiver",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_newTokenAddress",
          "type": "address"
        }
      ],
      "name": "setPresaleTokenAddress",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_tokenAddress",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "_tokenAvailability",
          "type": "bool"
        },
        {
          "internalType": "address",
          "name": "_aggregatorAddress",
          "type": "address"
        }
      ],
      "name": "setPresalePaymentToken",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_newEndingTime",
          "type": "uint256"
        }
      ],
      "name": "setEndingTime",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_presaleRound",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_startingTime",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_usdPrice",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_minimumUSDPurchase",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_maximumPresaleAmount",
          "type": "uint256"
        }
      ],
      "name": "setPresaleRound",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.8.11+commit.d7f03943\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_tokenAddress\",\"type\":\"address\"},{\"internalType\":\"address payable\",\"name\":\"_presaleReceiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_endingTime\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"presaleAmountOverdemand\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"presaleEndingTimeInvalid\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"presaleMaximumPresaleAmountInvalid\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"presaleMimumumUSDPurchaseInvalid\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"presaleNativeTokenPaymentNotSufficient\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"presaleNonZeroAddressInvalid\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"presaleRoundClosed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"presaleStartingTimeInvalid\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"presaleTokenNotAvailable\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"presaleUSDPriceInvalid\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"presaleUSDPurchaseNotSufficient\",\"type\":\"error\"},{\"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\":\"uint256\",\"name\":\"endingTime\",\"type\":\"uint256\"}],\"name\":\"PresaleEndingTimeUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"tokenAvailability\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"aggregatorAddress\",\"type\":\"address\"}],\"name\":\"PresalePaymentTokenUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"receiverAddress\",\"type\":\"address\"}],\"name\":\"PresaleReceiverUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"presaleRound\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"startingTime\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"usdPrice\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"minimumUSDPurchase\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"maximumPresaleAmount\",\"type\":\"uint256\"}],\"name\":\"PresaleRoundUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"}],\"name\":\"PresaleTokenUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"paymentTokenAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"paymentTokenamount\",\"type\":\"uint256\"}],\"name\":\"TokenPresold\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"endingTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCurrentPresaleDetails\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCurrentPresaleRound\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_presaleRound\",\"type\":\"uint256\"}],\"name\":\"getPresaleAmountByRound\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTotalPresaleAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTotalPresaleRound\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"presaleAmountByRoundMapping\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"presalePaymentTokenMapping\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"available\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"aggregatorAddress\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"presaleReceiver\",\"outputs\":[{\"internalType\":\"address payable\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_paymentTokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"presaleTokens\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_newEndingTime\",\"type\":\"uint256\"}],\"name\":\"setEndingTime\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_tokenAddress\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"_tokenAvailability\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"_aggregatorAddress\",\"type\":\"address\"}],\"name\":\"setPresalePaymentToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address payable\",\"name\":\"_newPresaleReceiver\",\"type\":\"address\"}],\"name\":\"setPresaleReceiver\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_presaleRound\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_startingTime\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_usdPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_minimumUSDPurchase\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_maximumPresaleAmount\",\"type\":\"uint256\"}],\"name\":\"setPresaleRound\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_newTokenAddress\",\"type\":\"address\"}],\"name\":\"setPresaleTokenAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"tokenAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalPresaleRound\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"getCurrentPresaleDetails()\":{\"details\":\"Getting the Current Presale Details, including:\",\"returns\":{\"_0\":\"Starting Time\",\"_1\":\"USD Price\",\"_2\":\"Minimum USD Purchase\",\"_3\":\"Maximum Presale Amount\"}},\"getCurrentPresaleRound()\":{\"details\":\"Get Current Presale Round\"},\"getPresaleAmountByRound(uint256)\":{\"details\":\"Get presale total amount By presale round\",\"params\":{\"_presaleRound\":\"- The presale round chosen\"}},\"getTotalPresaleAmount()\":{\"details\":\"Get total amount of presale from all rounds\"},\"getTotalPresaleRound()\":{\"details\":\"Get total amount of presale round\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"presaleTokens(address,uint256)\":{\"details\":\"Execute the Presale of ALPS Token in exchange of other token\",\"params\":{\"_amount\":\"- Amount denominated in the `paymentTokenAddress` being paid\",\"_paymentTokenAddress\":\"- Address of the token use to pay (address 0 is for native token)\"}},\"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.\"},\"setEndingTime(uint256)\":{\"details\":\"Set new Ending time\",\"params\":{\"_newEndingTime\":\"- New Ending Timestamp\"}},\"setPresalePaymentToken(address,bool,address)\":{\"details\":\"Set Presale Payment Token Info\",\"params\":{\"_aggregatorAddress\":\"- Chainlink's Aggregator Address to determine the USD price (for `presaleTokens`)\",\"_tokenAddress\":\"- Token Address use to purchase Presale\",\"_tokenAvailability\":\"- Indication whether Token Address can be used for Presale\"}},\"setPresaleReceiver(address)\":{\"details\":\"Set new Presale Receiver Address\",\"params\":{\"_newPresaleReceiver\":\"- Address that'll receive the presale payment token\"}},\"setPresaleRound(uint256,uint256,uint256,uint256,uint256)\":{\"details\":\"Creating/Updating a presale round information\",\"params\":{\"_maximumPresaleAmount\":\"- The maximum amount of token available for a presale round\",\"_minimumUSDPurchase\":\"- The minimum USD amount to purchase the token\",\"_presaleRound\":\"- The presale round chosen\",\"_startingTime\":\"- The starting Presale time\",\"_usdPrice\":\"- The USD Price of the Token in certain Presale Round\"}},\"setPresaleTokenAddress(address)\":{\"details\":\"Set new Presale Token Address\",\"params\":{\"_newTokenAddress\":\"- Address of token that'll be presaled\"}},\"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/presale/mocks/MockPresale.sol\":\"MockPresale\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@chainlink/contracts/src/v0.8/interfaces/AggregatorV3Interface.sol\":{\"keccak256\":\"0xf2b6c9adb3552254df1445b73563cf014434ff5e78663e9b961b6c059506ceb5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6c1f59e0c7334c22fb54288728fc32546bdc9c8133d6db0d60223e3c28f52120\",\"dweb:/ipfs/QmeuxawUVBhMWQJXaEhhnubCTc4Jwn5wYK8gbhq6NjrpfG\"]},\"@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0x24e0364e503a9bbde94c715d26573a76f14cd2a202d45f96f52134ab806b67b9\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e12cbaa7378fd9b62280e4e1d164bedcb4399ce238f5f98fc0eefb7e50577981\",\"dweb:/ipfs/QmXRoFGUgfsaRkoPT5bxNMtSayKTQ8GZATLPXf69HcRA51\"]},\"@openzeppelin/contracts/security/ReentrancyGuard.sol\":{\"keccak256\":\"0x0e9621f60b2faabe65549f7ed0f24e8853a45c1b7990d47e8160e523683f3935\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://287a2f8d5814dd0f05f22b740f18ca8321acc21c9bd03a6cb2203ea626e2f3f2\",\"dweb:/ipfs/QmZRQv9iuwU817VuqkA2WweiaibKii69x9QxYBBEfbNEud\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xbbc8ac883ac3c0078ce5ad3e288fbb3ffcc8a30c3a98c0fda0114d64fc44fca2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://87a7a5d2f6f63f84598af02b8c50ca2df2631cb8ba2453e8d95fcb17e4be9824\",\"dweb:/ipfs/QmR76hqtAcRqoFj33tmNjcWTLrgNsAaakYwnKZ8zoJtKei\"]},\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6df0ddf21ce9f58271bdfaa85cde98b200ef242a05a3f85c2bc10a8294800a92\",\"dweb:/ipfs/QmRK2Y5Yc6BK7tGKkgsgn3aJEQGi5aakeSPZvS65PV8Xp3\"]},\"@openzeppelin/contracts/utils/Counters.sol\":{\"keccak256\":\"0xf0018c2440fbe238dd3a8732fa8e17a0f9dce84d31451dc8a32f6d62b349c9f1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://59e1c62884d55b70f3ae5432b44bb3166ad71ae3acd19c57ab6ddc3c87c325ee\",\"dweb:/ipfs/QmezuXg5GK5oeA4F91EZhozBFekhq5TD966bHPH18cCqhu\"]},\"@openzeppelin/contracts/utils/math/SafeMath.sol\":{\"keccak256\":\"0xa2f576be637946f767aa56601c26d717f48a0aff44f82e46f13807eea1009a21\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://973868f808e88e21a1a0a01d4839314515ee337ad096286c88e41b74dcc11fc2\",\"dweb:/ipfs/QmfYuZxRfx2J2xdk4EXN7jKg4bUYEMTaYk9BAw9Bqn4o2Y\"]},\"project:/contracts/libraries/PriceConverter.sol\":{\"keccak256\":\"0x1c7379e2f032a302a999b9f49bd5b0d79bc5d260aeae8d8e173dfdcae2bebbb8\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://c8968f30c2b173c3fa28a669fe95d09721ffad661b7632d36de73a286e06d124\",\"dweb:/ipfs/QmXCh1gfzimGC3WLPLyUSsdy7UWGNKt6Fsc7f45sRyYRJe\"]},\"project:/contracts/presale/mocks/MockPresale.sol\":{\"keccak256\":\"0x773bca1032fc62510c842e26ed8ed448cca3fcd9516f64e5918e7515cf1fa481\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://ce50470d735a55b02c0f4aeaa4598e51a44acd094a5624533e04c66ab8f71448\",\"dweb:/ipfs/Qme7AS4ue9GZ156SXkX1dKpQuxpgDLprtUJhRdXAdiXjn9\"]},\"project:/contracts/token/interfaces/IERC20Custom.sol\":{\"keccak256\":\"0x6f50952568dc5b577661f6d1730b39cfa7628a39390103c89190afdfc565d1f4\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://480386fcd5b5e3456e80150bf5444f1b2b067746be0245f287b78fc03e81133a\",\"dweb:/ipfs/QmWBfMsjQPEKj7jav96428j8Ss4AUVtkj69nsVsPZb8E1S\"]}},\"version\":1}",
  "bytecode": "0x608060405234801561001057600080fd5b5060405161137838038061137883398101604081905261002f916100dc565b61003833610074565b60018055600380546001600160a01b039485166001600160a01b031991821617909155600480549390941692169190911790915560055561011f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146100d957600080fd5b50565b6000806000606084860312156100f157600080fd5b83516100fc816100c4565b602085015190935061010d816100c4565b80925050604084015190509250925092565b61124a8061012e6000396000f3fe60806040526004361061011f5760003560e01c80638e7d41b7116100a0578063d958e00111610064578063d958e00114610338578063ec2b352314610365578063efca90491461039a578063f2fde38b146103ad578063feda925b146103cd57600080fd5b80638e7d41b714610262578063962de5c0146102c15780639d76ea58146102d8578063c1436415146102f8578063c829d1db1461031857600080fd5b80633c0c134d116100e75780633c0c134d146101c55780636c47a6c3146101e5578063715018a6146101fb578063736e38ef146102105780638da5cb5b1461023057600080fd5b80630aca575a146101245780631c63f0ed1461014c5780633473bf3014610161578063392f911b14610183578063398dcd26146101b0575b600080fd5b34801561013057600080fd5b506101396103ed565b6040519081526020015b60405180910390f35b34801561015857600080fd5b5061013961042f565b34801561016d57600080fd5b5061018161017c366004610e31565b610484565b005b34801561018f57600080fd5b5061013961019e366004610e31565b60076020526000908152604090205481565b3480156101bc57600080fd5b50610139610514565b3480156101d157600080fd5b506101816101e0366004610e5f565b610524565b3480156101f157600080fd5b5061013960055481565b34801561020757600080fd5b506101816105cb565b34801561021c57600080fd5b5061018161022b366004610e8a565b610601565b34801561023c57600080fd5b506000546001600160a01b03165b6040516001600160a01b039091168152602001610143565b34801561026e57600080fd5b506102a261027d366004610e5f565b60086020526000908152604090205460ff81169061010090046001600160a01b031682565b6040805192151583526001600160a01b03909116602083015201610143565b3480156102cd57600080fd5b506002546101399081565b3480156102e457600080fd5b5060035461024a906001600160a01b031681565b34801561030457600080fd5b5060045461024a906001600160a01b031681565b34801561032457600080fd5b50610181610333366004610ed5565b6106de565b34801561034457600080fd5b50610139610353366004610e31565b60009081526007602052604090205490565b34801561037157600080fd5b5061037a610888565b604080519485526020850193909352918301526060820152608001610143565b6101816103a8366004610f10565b6108c7565b3480156103b957600080fd5b506101816103c8366004610e5f565b610c3a565b3480156103d957600080fd5b506101816103e8366004610e5f565b610cd5565b600080805b600254811015610429576000818152600760205260409020546104159083610f52565b91508061042181610f6a565b9150506103f2565b50919050565b600080600161043d60025490565b6104479190610f85565b90505b801561047c57600081815260066020526040902054421061046a57919050565b8061047481610f9c565b91505061044a565b506000905090565b6000546001600160a01b031633146104b75760405162461bcd60e51b81526004016104ae90610fb3565b60405180910390fd5b428110156104d8576040516393d901df60e01b815260040160405180910390fd5b60058190556040518181527f5e50721573a3d3c427f04e866bbc258f046cad12af9fe4a334736b200773d677906020015b60405180910390a150565b600061051f60025490565b905090565b6000546001600160a01b0316331461054e5760405162461bcd60e51b81526004016104ae90610fb3565b806001600160a01b0381166105765760405163120d99cb60e11b815260040160405180910390fd5b600380546001600160a01b0319166001600160a01b0384169081179091556040519081527fee1a99df2103f0b252dbc99d29264423a2ff1bb9c2f60dc19903e2ce82989b8b9060200160405180910390a15050565b6000546001600160a01b031633146105f55760405162461bcd60e51b81526004016104ae90610fb3565b6105ff6000610d4d565b565b6000546001600160a01b0316331461062b5760405162461bcd60e51b81526004016104ae90610fb3565b806001600160a01b0381166106535760405163120d99cb60e11b815260040160405180910390fd5b6001600160a01b0384811660008181526008602090815260409182902080546001600160a81b031916881515610100600160a81b0319811691909117610100968916968702179091558251938452908301528101919091527f0808e27b4009f59d9d966410b0eead8697b72a10434291d723d6200ab3f343e59060600160405180910390a150505050565b6000546001600160a01b031633146107085760405162461bcd60e51b81526004016104ae90610fb3565b60008581526006602052604090208054600182015460028301546003909301549192909183158015610738575082155b8015610742575081155b801561074c575080155b1561075f5761075f600280546001019055565b8715806107955750881580159061079557506006600061078060018c610f85565b81526020019081526020016000206000015488105b156107b357604051633863ce1d60e01b815260040160405180910390fd5b866107d1576040516329198c7f60e11b815260040160405180910390fd5b856107ef57604051630746844f60e31b815260040160405180910390fd5b8461080d57604051639f2bfa4160e01b815260040160405180910390fd5b6000898152600660209081526040918290208a8155600181018a90556002810189905560030187905581518a81529081018990529081018790526060810186905289907f5460f1c76402b41ef0b7902b6b577fd351a2a6bc531d4a246d8be68dde775a2b9060800160405180910390a2505050505050505050565b600080600080600061089861042f565b600090815260066020526040902080546001820154600283015460039093015491989097509195509350915050565b6002600154141561091a5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016104ae565b6002600155600061092961042f565b9050600080600080610939610888565b93509350935093508342108061095157506005544210155b1561096f576040516304d61c6f60e41b815260040160405180910390fd5b6001600160a01b03871660009081526008602052604090205460ff166109a8576040516303003c8560e21b815260040160405180910390fd5b6003546001600160a01b031660006109c9601e670de0b6b3a7640000610d9d565b9050838110156109ec5760405163196d4a1d60e01b815260040160405180910390fd5b6000610a046109fb8388610db2565b60006012610dbe565b600089815260076020526040902054909150610a209085610f85565b811115610a40576040516317b1337360e31b815260040160405180910390fd5b60008881526007602052604081208054839290610a5e908490610f52565b90915550506001600160a01b038a16610aff5788341015610a925760405163854a356160e01b815260040160405180910390fd5b6004546040516001600160a01b03909116908a156108fc02908b906000818181858888f19350505050158015610acc573d6000803e3d6000fd5b5060405133904780156108fc02916000818181858888f19350505050158015610af9573d6000803e3d6000fd5b50610b84565b600480546040516323b872dd60e01b815233928101929092526001600160a01b039081166024830152604482018b90528b91908216906323b872dd906064016020604051808303816000875af1158015610b5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b819190610fe8565b50505b6040516340c10f1960e01b8152336004820152602481018290526001600160a01b038416906340c10f1990604401600060405180830381600087803b158015610bcc57600080fd5b505af1158015610be0573d6000803e3d6000fd5b505060408051848152602081018d90526001600160a01b038e1693503392507f69902df1d9bae4b2a08b9e9d689906299b4b15ac10fbbf560d019b5c73fd35d6910160405180910390a35050600180555050505050505050565b6000546001600160a01b03163314610c645760405162461bcd60e51b81526004016104ae90610fb3565b6001600160a01b038116610cc95760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016104ae565b610cd281610d4d565b50565b6000546001600160a01b03163314610cff5760405162461bcd60e51b81526004016104ae90610fb3565b600480546001600160a01b0319166001600160a01b0383169081179091556040519081527fb3df4b02428d73d6993c686e78b4a35e95f5be7d084aaee9277115379dc4ca9390602001610509565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000610da98284611005565b90505b92915050565b6000610da9828461103a565b60008160ff168360ff161015610df757610dd8838361104e565b610de69060ff16600a611155565b610df09085611161565b9050610e2a565b8160ff168360ff161115610e2757610e0f828461104e565b610e1d9060ff16600a611155565b610df090856111e6565b50825b9392505050565b600060208284031215610e4357600080fd5b5035919050565b6001600160a01b0381168114610cd257600080fd5b600060208284031215610e7157600080fd5b8135610e2a81610e4a565b8015158114610cd257600080fd5b600080600060608486031215610e9f57600080fd5b8335610eaa81610e4a565b92506020840135610eba81610e7c565b91506040840135610eca81610e4a565b809150509250925092565b600080600080600060a08688031215610eed57600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b60008060408385031215610f2357600080fd5b8235610f2e81610e4a565b946020939093013593505050565b634e487b7160e01b600052601160045260246000fd5b60008219821115610f6557610f65610f3c565b500190565b6000600019821415610f7e57610f7e610f3c565b5060010190565b600082821015610f9757610f97610f3c565b500390565b600081610fab57610fab610f3c565b506000190190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060208284031215610ffa57600080fd5b8151610e2a81610e7c565b600081600019048311821515161561101f5761101f610f3c565b500290565b634e487b7160e01b600052601260045260246000fd5b60008261104957611049611024565b500490565b600060ff821660ff84168082101561106857611068610f3c565b90039392505050565b600181815b808511156110ac57816000190482111561109257611092610f3c565b8085161561109f57918102915b93841c9390800290611076565b509250929050565b6000826110c357506001610dac565b816110d057506000610dac565b81600181146110e657600281146110f05761110c565b6001915050610dac565b60ff84111561110157611101610f3c565b50506001821b610dac565b5060208310610133831016604e8410600b841016171561112f575081810a610dac565b6111398383611071565b806000190482111561114d5761114d610f3c565b029392505050565b6000610da983836110b4565b60006001600160ff1b038184138284138082168684048611161561118757611187610f3c565b600160ff1b60008712828116878305891216156111a6576111a6610f3c565b600087129250878205871284841616156111c2576111c2610f3c565b878505871281841616156111d8576111d8610f3c565b505050929093029392505050565b6000826111f5576111f5611024565b600160ff1b82146000198414161561120f5761120f610f3c565b50059056fea264697066735822122090c469a0b430f74d05e4e2602e9e6534111cb151a898833bbb738c00605f3e8864736f6c634300080b0033",
  "deployedBytecode": "0x60806040526004361061011f5760003560e01c80638e7d41b7116100a0578063d958e00111610064578063d958e00114610338578063ec2b352314610365578063efca90491461039a578063f2fde38b146103ad578063feda925b146103cd57600080fd5b80638e7d41b714610262578063962de5c0146102c15780639d76ea58146102d8578063c1436415146102f8578063c829d1db1461031857600080fd5b80633c0c134d116100e75780633c0c134d146101c55780636c47a6c3146101e5578063715018a6146101fb578063736e38ef146102105780638da5cb5b1461023057600080fd5b80630aca575a146101245780631c63f0ed1461014c5780633473bf3014610161578063392f911b14610183578063398dcd26146101b0575b600080fd5b34801561013057600080fd5b506101396103ed565b6040519081526020015b60405180910390f35b34801561015857600080fd5b5061013961042f565b34801561016d57600080fd5b5061018161017c366004610e31565b610484565b005b34801561018f57600080fd5b5061013961019e366004610e31565b60076020526000908152604090205481565b3480156101bc57600080fd5b50610139610514565b3480156101d157600080fd5b506101816101e0366004610e5f565b610524565b3480156101f157600080fd5b5061013960055481565b34801561020757600080fd5b506101816105cb565b34801561021c57600080fd5b5061018161022b366004610e8a565b610601565b34801561023c57600080fd5b506000546001600160a01b03165b6040516001600160a01b039091168152602001610143565b34801561026e57600080fd5b506102a261027d366004610e5f565b60086020526000908152604090205460ff81169061010090046001600160a01b031682565b6040805192151583526001600160a01b03909116602083015201610143565b3480156102cd57600080fd5b506002546101399081565b3480156102e457600080fd5b5060035461024a906001600160a01b031681565b34801561030457600080fd5b5060045461024a906001600160a01b031681565b34801561032457600080fd5b50610181610333366004610ed5565b6106de565b34801561034457600080fd5b50610139610353366004610e31565b60009081526007602052604090205490565b34801561037157600080fd5b5061037a610888565b604080519485526020850193909352918301526060820152608001610143565b6101816103a8366004610f10565b6108c7565b3480156103b957600080fd5b506101816103c8366004610e5f565b610c3a565b3480156103d957600080fd5b506101816103e8366004610e5f565b610cd5565b600080805b600254811015610429576000818152600760205260409020546104159083610f52565b91508061042181610f6a565b9150506103f2565b50919050565b600080600161043d60025490565b6104479190610f85565b90505b801561047c57600081815260066020526040902054421061046a57919050565b8061047481610f9c565b91505061044a565b506000905090565b6000546001600160a01b031633146104b75760405162461bcd60e51b81526004016104ae90610fb3565b60405180910390fd5b428110156104d8576040516393d901df60e01b815260040160405180910390fd5b60058190556040518181527f5e50721573a3d3c427f04e866bbc258f046cad12af9fe4a334736b200773d677906020015b60405180910390a150565b600061051f60025490565b905090565b6000546001600160a01b0316331461054e5760405162461bcd60e51b81526004016104ae90610fb3565b806001600160a01b0381166105765760405163120d99cb60e11b815260040160405180910390fd5b600380546001600160a01b0319166001600160a01b0384169081179091556040519081527fee1a99df2103f0b252dbc99d29264423a2ff1bb9c2f60dc19903e2ce82989b8b9060200160405180910390a15050565b6000546001600160a01b031633146105f55760405162461bcd60e51b81526004016104ae90610fb3565b6105ff6000610d4d565b565b6000546001600160a01b0316331461062b5760405162461bcd60e51b81526004016104ae90610fb3565b806001600160a01b0381166106535760405163120d99cb60e11b815260040160405180910390fd5b6001600160a01b0384811660008181526008602090815260409182902080546001600160a81b031916881515610100600160a81b0319811691909117610100968916968702179091558251938452908301528101919091527f0808e27b4009f59d9d966410b0eead8697b72a10434291d723d6200ab3f343e59060600160405180910390a150505050565b6000546001600160a01b031633146107085760405162461bcd60e51b81526004016104ae90610fb3565b60008581526006602052604090208054600182015460028301546003909301549192909183158015610738575082155b8015610742575081155b801561074c575080155b1561075f5761075f600280546001019055565b8715806107955750881580159061079557506006600061078060018c610f85565b81526020019081526020016000206000015488105b156107b357604051633863ce1d60e01b815260040160405180910390fd5b866107d1576040516329198c7f60e11b815260040160405180910390fd5b856107ef57604051630746844f60e31b815260040160405180910390fd5b8461080d57604051639f2bfa4160e01b815260040160405180910390fd5b6000898152600660209081526040918290208a8155600181018a90556002810189905560030187905581518a81529081018990529081018790526060810186905289907f5460f1c76402b41ef0b7902b6b577fd351a2a6bc531d4a246d8be68dde775a2b9060800160405180910390a2505050505050505050565b600080600080600061089861042f565b600090815260066020526040902080546001820154600283015460039093015491989097509195509350915050565b6002600154141561091a5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016104ae565b6002600155600061092961042f565b9050600080600080610939610888565b93509350935093508342108061095157506005544210155b1561096f576040516304d61c6f60e41b815260040160405180910390fd5b6001600160a01b03871660009081526008602052604090205460ff166109a8576040516303003c8560e21b815260040160405180910390fd5b6003546001600160a01b031660006109c9601e670de0b6b3a7640000610d9d565b9050838110156109ec5760405163196d4a1d60e01b815260040160405180910390fd5b6000610a046109fb8388610db2565b60006012610dbe565b600089815260076020526040902054909150610a209085610f85565b811115610a40576040516317b1337360e31b815260040160405180910390fd5b60008881526007602052604081208054839290610a5e908490610f52565b90915550506001600160a01b038a16610aff5788341015610a925760405163854a356160e01b815260040160405180910390fd5b6004546040516001600160a01b03909116908a156108fc02908b906000818181858888f19350505050158015610acc573d6000803e3d6000fd5b5060405133904780156108fc02916000818181858888f19350505050158015610af9573d6000803e3d6000fd5b50610b84565b600480546040516323b872dd60e01b815233928101929092526001600160a01b039081166024830152604482018b90528b91908216906323b872dd906064016020604051808303816000875af1158015610b5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b819190610fe8565b50505b6040516340c10f1960e01b8152336004820152602481018290526001600160a01b038416906340c10f1990604401600060405180830381600087803b158015610bcc57600080fd5b505af1158015610be0573d6000803e3d6000fd5b505060408051848152602081018d90526001600160a01b038e1693503392507f69902df1d9bae4b2a08b9e9d689906299b4b15ac10fbbf560d019b5c73fd35d6910160405180910390a35050600180555050505050505050565b6000546001600160a01b03163314610c645760405162461bcd60e51b81526004016104ae90610fb3565b6001600160a01b038116610cc95760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016104ae565b610cd281610d4d565b50565b6000546001600160a01b03163314610cff5760405162461bcd60e51b81526004016104ae90610fb3565b600480546001600160a01b0319166001600160a01b0383169081179091556040519081527fb3df4b02428d73d6993c686e78b4a35e95f5be7d084aaee9277115379dc4ca9390602001610509565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000610da98284611005565b90505b92915050565b6000610da9828461103a565b60008160ff168360ff161015610df757610dd8838361104e565b610de69060ff16600a611155565b610df09085611161565b9050610e2a565b8160ff168360ff161115610e2757610e0f828461104e565b610e1d9060ff16600a611155565b610df090856111e6565b50825b9392505050565b600060208284031215610e4357600080fd5b5035919050565b6001600160a01b0381168114610cd257600080fd5b600060208284031215610e7157600080fd5b8135610e2a81610e4a565b8015158114610cd257600080fd5b600080600060608486031215610e9f57600080fd5b8335610eaa81610e4a565b92506020840135610eba81610e7c565b91506040840135610eca81610e4a565b809150509250925092565b600080600080600060a08688031215610eed57600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b60008060408385031215610f2357600080fd5b8235610f2e81610e4a565b946020939093013593505050565b634e487b7160e01b600052601160045260246000fd5b60008219821115610f6557610f65610f3c565b500190565b6000600019821415610f7e57610f7e610f3c565b5060010190565b600082821015610f9757610f97610f3c565b500390565b600081610fab57610fab610f3c565b506000190190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060208284031215610ffa57600080fd5b8151610e2a81610e7c565b600081600019048311821515161561101f5761101f610f3c565b500290565b634e487b7160e01b600052601260045260246000fd5b60008261104957611049611024565b500490565b600060ff821660ff84168082101561106857611068610f3c565b90039392505050565b600181815b808511156110ac57816000190482111561109257611092610f3c565b8085161561109f57918102915b93841c9390800290611076565b509250929050565b6000826110c357506001610dac565b816110d057506000610dac565b81600181146110e657600281146110f05761110c565b6001915050610dac565b60ff84111561110157611101610f3c565b50506001821b610dac565b5060208310610133831016604e8410600b841016171561112f575081810a610dac565b6111398383611071565b806000190482111561114d5761114d610f3c565b029392505050565b6000610da983836110b4565b60006001600160ff1b038184138284138082168684048611161561118757611187610f3c565b600160ff1b60008712828116878305891216156111a6576111a6610f3c565b600087129250878205871284841616156111c2576111c2610f3c565b878505871281841616156111d8576111d8610f3c565b505050929093029392505050565b6000826111f5576111f5611024565b600160ff1b82146000198414161561120f5761120f610f3c565b50059056fea264697066735822122090c469a0b430f74d05e4e2602e9e6534111cb151a898833bbb738c00605f3e8864736f6c634300080b0033",
  "immutableReferences": {},
  "generatedSources": [
    {
      "ast": {
        "nodeType": "YulBlock",
        "src": "0:606:56",
        "statements": [
          {
            "nodeType": "YulBlock",
            "src": "6:3:56",
            "statements": []
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "59:86:56",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "123:16:56",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "132:1:56",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "135:1:56",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "125:6:56"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "125:12:56"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "125:12:56"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "value",
                            "nodeType": "YulIdentifier",
                            "src": "82:5:56"
                          },
                          {
                            "arguments": [
                              {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "93:5:56"
                              },
                              {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "108:3:56",
                                        "type": "",
                                        "value": "160"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "113:1:56",
                                        "type": "",
                                        "value": "1"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "104:3:56"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "104:11:56"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "117:1:56",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "sub",
                                  "nodeType": "YulIdentifier",
                                  "src": "100:3:56"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "100:19:56"
                              }
                            ],
                            "functionName": {
                              "name": "and",
                              "nodeType": "YulIdentifier",
                              "src": "89:3:56"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "89:31:56"
                          }
                        ],
                        "functionName": {
                          "name": "eq",
                          "nodeType": "YulIdentifier",
                          "src": "79:2:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "79:42:56"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "72:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "72:50:56"
                  },
                  "nodeType": "YulIf",
                  "src": "69:70:56"
                }
              ]
            },
            "name": "validator_revert_address",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "48:5:56",
                "type": ""
              }
            ],
            "src": "14:131:56"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "273:331:56",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "319:16:56",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "328:1:56",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "331:1:56",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "321:6:56"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "321:12:56"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "321:12:56"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "294:7:56"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "303:9:56"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "290:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "290:23:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "315:2:56",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "286:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "286:32:56"
                  },
                  "nodeType": "YulIf",
                  "src": "283:52:56"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "344:29:56",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "363:9:56"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nodeType": "YulIdentifier",
                      "src": "357:5:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "357:16:56"
                  },
                  "variables": [
                    {
                      "name": "value",
                      "nodeType": "YulTypedName",
                      "src": "348:5:56",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "407:5:56"
                      }
                    ],
                    "functionName": {
                      "name": "validator_revert_address",
                      "nodeType": "YulIdentifier",
                      "src": "382:24:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "382:31:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "382:31:56"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "422:15:56",
                  "value": {
                    "name": "value",
                    "nodeType": "YulIdentifier",
                    "src": "432:5:56"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "422:6:56"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "446:40:56",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "471:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "482:2:56",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "467:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "467:18:56"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nodeType": "YulIdentifier",
                      "src": "461:5:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "461:25:56"
                  },
                  "variables": [
                    {
                      "name": "value_1",
                      "nodeType": "YulTypedName",
                      "src": "450:7:56",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value_1",
                        "nodeType": "YulIdentifier",
                        "src": "520:7:56"
                      }
                    ],
                    "functionName": {
                      "name": "validator_revert_address",
                      "nodeType": "YulIdentifier",
                      "src": "495:24:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "495:33:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "495:33:56"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "537:17:56",
                  "value": {
                    "name": "value_1",
                    "nodeType": "YulIdentifier",
                    "src": "547:7:56"
                  },
                  "variableNames": [
                    {
                      "name": "value1",
                      "nodeType": "YulIdentifier",
                      "src": "537:6:56"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "563:35:56",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "583:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "594:2:56",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "579:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "579:18:56"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nodeType": "YulIdentifier",
                      "src": "573:5:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "573:25:56"
                  },
                  "variableNames": [
                    {
                      "name": "value2",
                      "nodeType": "YulIdentifier",
                      "src": "563:6:56"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_addresst_address_payablet_uint256_fromMemory",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "223:9:56",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "234:7:56",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "246:6:56",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "254:6:56",
                "type": ""
              },
              {
                "name": "value2",
                "nodeType": "YulTypedName",
                "src": "262:6:56",
                "type": ""
              }
            ],
            "src": "150:454:56"
          }
        ]
      },
      "contents": "{\n    { }\n    function validator_revert_address(value)\n    {\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_addresst_address_payablet_uint256_fromMemory(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := mload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n        value2 := mload(add(headStart, 64))\n    }\n}",
      "id": 56,
      "language": "Yul",
      "name": "#utility.yul"
    }
  ],
  "deployedGeneratedSources": [
    {
      "ast": {
        "nodeType": "YulBlock",
        "src": "0:9913:56",
        "statements": [
          {
            "nodeType": "YulBlock",
            "src": "6:3:56",
            "statements": []
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "115:76:56",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "125:26:56",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "137:9:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "148:2:56",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "133:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "133:18:56"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "125:4:56"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "167:9:56"
                      },
                      {
                        "name": "value0",
                        "nodeType": "YulIdentifier",
                        "src": "178:6:56"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "160:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "160:25:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "160:25:56"
                }
              ]
            },
            "name": "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "84:9:56",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "95:6:56",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "106:4:56",
                "type": ""
              }
            ],
            "src": "14:177:56"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "266:110:56",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "312:16:56",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "321:1:56",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "324:1:56",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "314:6:56"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "314:12:56"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "314:12:56"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "287:7:56"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "296:9:56"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "283:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "283:23:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "308:2:56",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "279:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "279:32:56"
                  },
                  "nodeType": "YulIf",
                  "src": "276:52:56"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "337:33:56",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "360:9:56"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "347:12:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "347:23:56"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "337:6:56"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_uint256",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "232:9:56",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "243:7:56",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "255:6:56",
                "type": ""
              }
            ],
            "src": "196:180:56"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "426:86:56",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "490:16:56",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "499:1:56",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "502:1:56",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "492:6:56"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "492:12:56"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "492:12:56"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "value",
                            "nodeType": "YulIdentifier",
                            "src": "449:5:56"
                          },
                          {
                            "arguments": [
                              {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "460:5:56"
                              },
                              {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "475:3:56",
                                        "type": "",
                                        "value": "160"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "480:1:56",
                                        "type": "",
                                        "value": "1"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "471:3:56"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "471:11:56"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "484:1:56",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "sub",
                                  "nodeType": "YulIdentifier",
                                  "src": "467:3:56"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "467:19:56"
                              }
                            ],
                            "functionName": {
                              "name": "and",
                              "nodeType": "YulIdentifier",
                              "src": "456:3:56"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "456:31:56"
                          }
                        ],
                        "functionName": {
                          "name": "eq",
                          "nodeType": "YulIdentifier",
                          "src": "446:2:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "446:42:56"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "439:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "439:50:56"
                  },
                  "nodeType": "YulIf",
                  "src": "436:70:56"
                }
              ]
            },
            "name": "validator_revert_address",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "415:5:56",
                "type": ""
              }
            ],
            "src": "381:131:56"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "587:177:56",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "633:16:56",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "642:1:56",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "645:1:56",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "635:6:56"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "635:12:56"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "635:12:56"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "608:7:56"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "617:9:56"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "604:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "604:23:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "629:2:56",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "600:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "600:32:56"
                  },
                  "nodeType": "YulIf",
                  "src": "597:52:56"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "658:36:56",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "684:9:56"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "671:12:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "671:23:56"
                  },
                  "variables": [
                    {
                      "name": "value",
                      "nodeType": "YulTypedName",
                      "src": "662:5:56",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "728:5:56"
                      }
                    ],
                    "functionName": {
                      "name": "validator_revert_address",
                      "nodeType": "YulIdentifier",
                      "src": "703:24:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "703:31:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "703:31:56"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "743:15:56",
                  "value": {
                    "name": "value",
                    "nodeType": "YulIdentifier",
                    "src": "753:5:56"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "743:6:56"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_address",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "553:9:56",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "564:7:56",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "576:6:56",
                "type": ""
              }
            ],
            "src": "517:247:56"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "811:76:56",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "865:16:56",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "874:1:56",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "877:1:56",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "867:6:56"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "867:12:56"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "867:12:56"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "value",
                            "nodeType": "YulIdentifier",
                            "src": "834:5:56"
                          },
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "855:5:56"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "848:6:56"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "848:13:56"
                              }
                            ],
                            "functionName": {
                              "name": "iszero",
                              "nodeType": "YulIdentifier",
                              "src": "841:6:56"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "841:21:56"
                          }
                        ],
                        "functionName": {
                          "name": "eq",
                          "nodeType": "YulIdentifier",
                          "src": "831:2:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "831:32:56"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "824:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "824:40:56"
                  },
                  "nodeType": "YulIf",
                  "src": "821:60:56"
                }
              ]
            },
            "name": "validator_revert_bool",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "800:5:56",
                "type": ""
              }
            ],
            "src": "769:118:56"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "993:422:56",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "1039:16:56",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "1048:1:56",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "1051:1:56",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "1041:6:56"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "1041:12:56"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "1041:12:56"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "1014:7:56"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "1023:9:56"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "1010:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1010:23:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "1035:2:56",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "1006:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1006:32:56"
                  },
                  "nodeType": "YulIf",
                  "src": "1003:52:56"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "1064:36:56",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "1090:9:56"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "1077:12:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1077:23:56"
                  },
                  "variables": [
                    {
                      "name": "value",
                      "nodeType": "YulTypedName",
                      "src": "1068:5:56",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "1134:5:56"
                      }
                    ],
                    "functionName": {
                      "name": "validator_revert_address",
                      "nodeType": "YulIdentifier",
                      "src": "1109:24:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1109:31:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "1109:31:56"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "1149:15:56",
                  "value": {
                    "name": "value",
                    "nodeType": "YulIdentifier",
                    "src": "1159:5:56"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "1149:6:56"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "1173:47:56",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "1205:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "1216:2:56",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "1201:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1201:18:56"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "1188:12:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1188:32:56"
                  },
                  "variables": [
                    {
                      "name": "value_1",
                      "nodeType": "YulTypedName",
                      "src": "1177:7:56",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value_1",
                        "nodeType": "YulIdentifier",
                        "src": "1251:7:56"
                      }
                    ],
                    "functionName": {
                      "name": "validator_revert_bool",
                      "nodeType": "YulIdentifier",
                      "src": "1229:21:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1229:30:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "1229:30:56"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "1268:17:56",
                  "value": {
                    "name": "value_1",
                    "nodeType": "YulIdentifier",
                    "src": "1278:7:56"
                  },
                  "variableNames": [
                    {
                      "name": "value1",
                      "nodeType": "YulIdentifier",
                      "src": "1268:6:56"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "1294:47:56",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "1326:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "1337:2:56",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "1322:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1322:18:56"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "1309:12:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1309:32:56"
                  },
                  "variables": [
                    {
                      "name": "value_2",
                      "nodeType": "YulTypedName",
                      "src": "1298:7:56",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value_2",
                        "nodeType": "YulIdentifier",
                        "src": "1375:7:56"
                      }
                    ],
                    "functionName": {
                      "name": "validator_revert_address",
                      "nodeType": "YulIdentifier",
                      "src": "1350:24:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1350:33:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "1350:33:56"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "1392:17:56",
                  "value": {
                    "name": "value_2",
                    "nodeType": "YulIdentifier",
                    "src": "1402:7:56"
                  },
                  "variableNames": [
                    {
                      "name": "value2",
                      "nodeType": "YulIdentifier",
                      "src": "1392:6:56"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_addresst_boolt_address",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "943:9:56",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "954:7:56",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "966:6:56",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "974:6:56",
                "type": ""
              },
              {
                "name": "value2",
                "nodeType": "YulTypedName",
                "src": "982:6:56",
                "type": ""
              }
            ],
            "src": "892:523:56"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "1521:102:56",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "1531:26:56",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "1543:9:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "1554:2:56",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "1539:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1539:18:56"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "1531:4:56"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "1573:9:56"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value0",
                            "nodeType": "YulIdentifier",
                            "src": "1588:6:56"
                          },
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1604:3:56",
                                    "type": "",
                                    "value": "160"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1609:1:56",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "shl",
                                  "nodeType": "YulIdentifier",
                                  "src": "1600:3:56"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1600:11:56"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "1613:1:56",
                                "type": "",
                                "value": "1"
                              }
                            ],
                            "functionName": {
                              "name": "sub",
                              "nodeType": "YulIdentifier",
                              "src": "1596:3:56"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "1596:19:56"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "1584:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1584:32:56"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "1566:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1566:51:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "1566:51:56"
                }
              ]
            },
            "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "1490:9:56",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "1501:6:56",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "1512:4:56",
                "type": ""
              }
            ],
            "src": "1420:203:56"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "1751:161:56",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "1761:26:56",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "1773:9:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "1784:2:56",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "1769:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1769:18:56"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "1761:4:56"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "1803:9:56"
                      },
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "value0",
                                "nodeType": "YulIdentifier",
                                "src": "1828:6:56"
                              }
                            ],
                            "functionName": {
                              "name": "iszero",
                              "nodeType": "YulIdentifier",
                              "src": "1821:6:56"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "1821:14:56"
                          }
                        ],
                        "functionName": {
                          "name": "iszero",
                          "nodeType": "YulIdentifier",
                          "src": "1814:6:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1814:22:56"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "1796:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1796:41:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "1796:41:56"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "1857:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "1868:2:56",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "1853:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1853:18:56"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value1",
                            "nodeType": "YulIdentifier",
                            "src": "1877:6:56"
                          },
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1893:3:56",
                                    "type": "",
                                    "value": "160"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1898:1:56",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "shl",
                                  "nodeType": "YulIdentifier",
                                  "src": "1889:3:56"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1889:11:56"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "1902:1:56",
                                "type": "",
                                "value": "1"
                              }
                            ],
                            "functionName": {
                              "name": "sub",
                              "nodeType": "YulIdentifier",
                              "src": "1885:3:56"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "1885:19:56"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "1873:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1873:32:56"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "1846:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1846:60:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "1846:60:56"
                }
              ]
            },
            "name": "abi_encode_tuple_t_bool_t_address__to_t_bool_t_address__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "1712:9:56",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "1723:6:56",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "1731:6:56",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "1742:4:56",
                "type": ""
              }
            ],
            "src": "1628:284:56"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "2034:102:56",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "2044:26:56",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "2056:9:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "2067:2:56",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "2052:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2052:18:56"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "2044:4:56"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "2086:9:56"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value0",
                            "nodeType": "YulIdentifier",
                            "src": "2101:6:56"
                          },
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2117:3:56",
                                    "type": "",
                                    "value": "160"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2122:1:56",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "shl",
                                  "nodeType": "YulIdentifier",
                                  "src": "2113:3:56"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2113:11:56"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "2126:1:56",
                                "type": "",
                                "value": "1"
                              }
                            ],
                            "functionName": {
                              "name": "sub",
                              "nodeType": "YulIdentifier",
                              "src": "2109:3:56"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "2109:19:56"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "2097:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2097:32:56"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "2079:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2079:51:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "2079:51:56"
                }
              ]
            },
            "name": "abi_encode_tuple_t_address_payable__to_t_address_payable__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "2003:9:56",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "2014:6:56",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "2025:4:56",
                "type": ""
              }
            ],
            "src": "1917:219:56"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "2279:316:56",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "2326:16:56",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "2335:1:56",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "2338:1:56",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "2328:6:56"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "2328:12:56"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "2328:12:56"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "2300:7:56"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "2309:9:56"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "2296:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2296:23:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "2321:3:56",
                        "type": "",
                        "value": "160"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "2292:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2292:33:56"
                  },
                  "nodeType": "YulIf",
                  "src": "2289:53:56"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "2351:33:56",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "2374:9:56"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "2361:12:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2361:23:56"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "2351:6:56"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "2393:42:56",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "2420:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "2431:2:56",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "2416:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2416:18:56"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "2403:12:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2403:32:56"
                  },
                  "variableNames": [
                    {
                      "name": "value1",
                      "nodeType": "YulIdentifier",
                      "src": "2393:6:56"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "2444:42:56",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "2471:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "2482:2:56",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "2467:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2467:18:56"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "2454:12:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2454:32:56"
                  },
                  "variableNames": [
                    {
                      "name": "value2",
                      "nodeType": "YulIdentifier",
                      "src": "2444:6:56"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "2495:42:56",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "2522:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "2533:2:56",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "2518:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2518:18:56"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "2505:12:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2505:32:56"
                  },
                  "variableNames": [
                    {
                      "name": "value3",
                      "nodeType": "YulIdentifier",
                      "src": "2495:6:56"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "2546:43:56",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "2573:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "2584:3:56",
                            "type": "",
                            "value": "128"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "2569:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2569:19:56"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "2556:12:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2556:33:56"
                  },
                  "variableNames": [
                    {
                      "name": "value4",
                      "nodeType": "YulIdentifier",
                      "src": "2546:6:56"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_uint256t_uint256t_uint256t_uint256t_uint256",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "2213:9:56",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "2224:7:56",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "2236:6:56",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "2244:6:56",
                "type": ""
              },
              {
                "name": "value2",
                "nodeType": "YulTypedName",
                "src": "2252:6:56",
                "type": ""
              },
              {
                "name": "value3",
                "nodeType": "YulTypedName",
                "src": "2260:6:56",
                "type": ""
              },
              {
                "name": "value4",
                "nodeType": "YulTypedName",
                "src": "2268:6:56",
                "type": ""
              }
            ],
            "src": "2141:454:56"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "2785:206:56",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "2795:27:56",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "2807:9:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "2818:3:56",
                        "type": "",
                        "value": "128"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "2803:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2803:19:56"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "2795:4:56"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "2838:9:56"
                      },
                      {
                        "name": "value0",
                        "nodeType": "YulIdentifier",
                        "src": "2849:6:56"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "2831:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2831:25:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "2831:25:56"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "2876:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "2887:2:56",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "2872:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2872:18:56"
                      },
                      {
                        "name": "value1",
                        "nodeType": "YulIdentifier",
                        "src": "2892:6:56"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "2865:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2865:34:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "2865:34:56"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "2919:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "2930:2:56",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "2915:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2915:18:56"
                      },
                      {
                        "name": "value2",
                        "nodeType": "YulIdentifier",
                        "src": "2935:6:56"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "2908:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2908:34:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "2908:34:56"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "2962:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "2973:2:56",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "2958:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2958:18:56"
                      },
                      {
                        "name": "value3",
                        "nodeType": "YulIdentifier",
                        "src": "2978:6:56"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "2951:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2951:34:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "2951:34:56"
                }
              ]
            },
            "name": "abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "2730:9:56",
                "type": ""
              },
              {
                "name": "value3",
                "nodeType": "YulTypedName",
                "src": "2741:6:56",
                "type": ""
              },
              {
                "name": "value2",
                "nodeType": "YulTypedName",
                "src": "2749:6:56",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "2757:6:56",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "2765:6:56",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "2776:4:56",
                "type": ""
              }
            ],
            "src": "2600:391:56"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "3083:228:56",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "3129:16:56",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "3138:1:56",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "3141:1:56",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "3131:6:56"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "3131:12:56"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "3131:12:56"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "3104:7:56"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "3113:9:56"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "3100:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3100:23:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "3125:2:56",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "3096:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3096:32:56"
                  },
                  "nodeType": "YulIf",
                  "src": "3093:52:56"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "3154:36:56",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "3180:9:56"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "3167:12:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3167:23:56"
                  },
                  "variables": [
                    {
                      "name": "value",
                      "nodeType": "YulTypedName",
                      "src": "3158:5:56",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "3224:5:56"
                      }
                    ],
                    "functionName": {
                      "name": "validator_revert_address",
                      "nodeType": "YulIdentifier",
                      "src": "3199:24:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3199:31:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "3199:31:56"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "3239:15:56",
                  "value": {
                    "name": "value",
                    "nodeType": "YulIdentifier",
                    "src": "3249:5:56"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "3239:6:56"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "3263:42:56",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "3290:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "3301:2:56",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "3286:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3286:18:56"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "3273:12:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3273:32:56"
                  },
                  "variableNames": [
                    {
                      "name": "value1",
                      "nodeType": "YulIdentifier",
                      "src": "3263:6:56"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_addresst_uint256",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "3041:9:56",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "3052:7:56",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "3064:6:56",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "3072:6:56",
                "type": ""
              }
            ],
            "src": "2996:315:56"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "3394:177:56",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "3440:16:56",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "3449:1:56",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "3452:1:56",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "3442:6:56"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "3442:12:56"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "3442:12:56"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "3415:7:56"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "3424:9:56"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "3411:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3411:23:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "3436:2:56",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "3407:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3407:32:56"
                  },
                  "nodeType": "YulIf",
                  "src": "3404:52:56"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "3465:36:56",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "3491:9:56"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "3478:12:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3478:23:56"
                  },
                  "variables": [
                    {
                      "name": "value",
                      "nodeType": "YulTypedName",
                      "src": "3469:5:56",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "3535:5:56"
                      }
                    ],
                    "functionName": {
                      "name": "validator_revert_address",
                      "nodeType": "YulIdentifier",
                      "src": "3510:24:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3510:31:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "3510:31:56"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "3550:15:56",
                  "value": {
                    "name": "value",
                    "nodeType": "YulIdentifier",
                    "src": "3560:5:56"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "3550:6:56"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_address_payable",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "3360:9:56",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "3371:7:56",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "3383:6:56",
                "type": ""
              }
            ],
            "src": "3316:255:56"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "3608:95:56",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "3625:1:56",
                        "type": "",
                        "value": "0"
                      },
                      {
                        "arguments": [
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "3632:3:56",
                            "type": "",
                            "value": "224"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "3637:10:56",
                            "type": "",
                            "value": "0x4e487b71"
                          }
                        ],
                        "functionName": {
                          "name": "shl",
                          "nodeType": "YulIdentifier",
                          "src": "3628:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3628:20:56"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "3618:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3618:31:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "3618:31:56"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "3665:1:56",
                        "type": "",
                        "value": "4"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "3668:4:56",
                        "type": "",
                        "value": "0x11"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "3658:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3658:15:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "3658:15:56"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "3689:1:56",
                        "type": "",
                        "value": "0"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "3692:4:56",
                        "type": "",
                        "value": "0x24"
                      }
                    ],
                    "functionName": {
                      "name": "revert",
                      "nodeType": "YulIdentifier",
                      "src": "3682:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3682:15:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "3682:15:56"
                }
              ]
            },
            "name": "panic_error_0x11",
            "nodeType": "YulFunctionDefinition",
            "src": "3576:127:56"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "3756:80:56",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "3783:22:56",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "functionName": {
                            "name": "panic_error_0x11",
                            "nodeType": "YulIdentifier",
                            "src": "3785:16:56"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "3785:18:56"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "3785:18:56"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "x",
                        "nodeType": "YulIdentifier",
                        "src": "3772:1:56"
                      },
                      {
                        "arguments": [
                          {
                            "name": "y",
                            "nodeType": "YulIdentifier",
                            "src": "3779:1:56"
                          }
                        ],
                        "functionName": {
                          "name": "not",
                          "nodeType": "YulIdentifier",
                          "src": "3775:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3775:6:56"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "3769:2:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3769:13:56"
                  },
                  "nodeType": "YulIf",
                  "src": "3766:39:56"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "3814:16:56",
                  "value": {
                    "arguments": [
                      {
                        "name": "x",
                        "nodeType": "YulIdentifier",
                        "src": "3825:1:56"
                      },
                      {
                        "name": "y",
                        "nodeType": "YulIdentifier",
                        "src": "3828:1:56"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "3821:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3821:9:56"
                  },
                  "variableNames": [
                    {
                      "name": "sum",
                      "nodeType": "YulIdentifier",
                      "src": "3814:3:56"
                    }
                  ]
                }
              ]
            },
            "name": "checked_add_t_uint256",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "x",
                "nodeType": "YulTypedName",
                "src": "3739:1:56",
                "type": ""
              },
              {
                "name": "y",
                "nodeType": "YulTypedName",
                "src": "3742:1:56",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "sum",
                "nodeType": "YulTypedName",
                "src": "3748:3:56",
                "type": ""
              }
            ],
            "src": "3708:128:56"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "3888:88:56",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "3919:22:56",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "functionName": {
                            "name": "panic_error_0x11",
                            "nodeType": "YulIdentifier",
                            "src": "3921:16:56"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "3921:18:56"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "3921:18:56"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "3904:5:56"
                      },
                      {
                        "arguments": [
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "3915:1:56",
                            "type": "",
                            "value": "0"
                          }
                        ],
                        "functionName": {
                          "name": "not",
                          "nodeType": "YulIdentifier",
                          "src": "3911:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3911:6:56"
                      }
                    ],
                    "functionName": {
                      "name": "eq",
                      "nodeType": "YulIdentifier",
                      "src": "3901:2:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3901:17:56"
                  },
                  "nodeType": "YulIf",
                  "src": "3898:43:56"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "3950:20:56",
                  "value": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "3961:5:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "3968:1:56",
                        "type": "",
                        "value": "1"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "3957:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3957:13:56"
                  },
                  "variableNames": [
                    {
                      "name": "ret",
                      "nodeType": "YulIdentifier",
                      "src": "3950:3:56"
                    }
                  ]
                }
              ]
            },
            "name": "increment_t_uint256",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "3870:5:56",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "ret",
                "nodeType": "YulTypedName",
                "src": "3880:3:56",
                "type": ""
              }
            ],
            "src": "3841:135:56"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "4030:76:56",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "4052:22:56",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "functionName": {
                            "name": "panic_error_0x11",
                            "nodeType": "YulIdentifier",
                            "src": "4054:16:56"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "4054:18:56"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "4054:18:56"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "x",
                        "nodeType": "YulIdentifier",
                        "src": "4046:1:56"
                      },
                      {
                        "name": "y",
                        "nodeType": "YulIdentifier",
                        "src": "4049:1:56"
                      }
                    ],
                    "functionName": {
                      "name": "lt",
                      "nodeType": "YulIdentifier",
                      "src": "4043:2:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4043:8:56"
                  },
                  "nodeType": "YulIf",
                  "src": "4040:34:56"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "4083:17:56",
                  "value": {
                    "arguments": [
                      {
                        "name": "x",
                        "nodeType": "YulIdentifier",
                        "src": "4095:1:56"
                      },
                      {
                        "name": "y",
                        "nodeType": "YulIdentifier",
                        "src": "4098:1:56"
                      }
                    ],
                    "functionName": {
                      "name": "sub",
                      "nodeType": "YulIdentifier",
                      "src": "4091:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4091:9:56"
                  },
                  "variableNames": [
                    {
                      "name": "diff",
                      "nodeType": "YulIdentifier",
                      "src": "4083:4:56"
                    }
                  ]
                }
              ]
            },
            "name": "checked_sub_t_uint256",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "x",
                "nodeType": "YulTypedName",
                "src": "4012:1:56",
                "type": ""
              },
              {
                "name": "y",
                "nodeType": "YulTypedName",
                "src": "4015:1:56",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "diff",
                "nodeType": "YulTypedName",
                "src": "4021:4:56",
                "type": ""
              }
            ],
            "src": "3981:125:56"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "4158:89:56",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "4185:22:56",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "functionName": {
                            "name": "panic_error_0x11",
                            "nodeType": "YulIdentifier",
                            "src": "4187:16:56"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "4187:18:56"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "4187:18:56"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "4178:5:56"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "4171:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4171:13:56"
                  },
                  "nodeType": "YulIf",
                  "src": "4168:39:56"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "4216:25:56",
                  "value": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "4227:5:56"
                      },
                      {
                        "arguments": [
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "4238:1:56",
                            "type": "",
                            "value": "0"
                          }
                        ],
                        "functionName": {
                          "name": "not",
                          "nodeType": "YulIdentifier",
                          "src": "4234:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4234:6:56"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "4223:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4223:18:56"
                  },
                  "variableNames": [
                    {
                      "name": "ret",
                      "nodeType": "YulIdentifier",
                      "src": "4216:3:56"
                    }
                  ]
                }
              ]
            },
            "name": "decrement_t_uint256",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "4140:5:56",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "ret",
                "nodeType": "YulTypedName",
                "src": "4150:3:56",
                "type": ""
              }
            ],
            "src": "4111:136:56"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "4426:182:56",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "4443:9:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "4454:2:56",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "4436:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4436:21:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "4436:21:56"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "4477:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "4488:2:56",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "4473:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4473:18:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "4493:2:56",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "4466:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4466:30:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "4466:30:56"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "4516:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "4527:2:56",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "4512:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4512:18:56"
                      },
                      {
                        "hexValue": "4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "4532:34:56",
                        "type": "",
                        "value": "Ownable: caller is not the owner"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "4505:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4505:62:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "4505:62:56"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "4576:26:56",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "4588:9:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "4599:2:56",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "4584:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4584:18:56"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "4576:4:56"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "4403:9:56",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "4417:4:56",
                "type": ""
              }
            ],
            "src": "4252:356:56"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "4764:234:56",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "4774:26:56",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "4786:9:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "4797:2:56",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "4782:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4782:18:56"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "4774:4:56"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "4809:29:56",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "4827:3:56",
                            "type": "",
                            "value": "160"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "4832:1:56",
                            "type": "",
                            "value": "1"
                          }
                        ],
                        "functionName": {
                          "name": "shl",
                          "nodeType": "YulIdentifier",
                          "src": "4823:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4823:11:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "4836:1:56",
                        "type": "",
                        "value": "1"
                      }
                    ],
                    "functionName": {
                      "name": "sub",
                      "nodeType": "YulIdentifier",
                      "src": "4819:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4819:19:56"
                  },
                  "variables": [
                    {
                      "name": "_1",
                      "nodeType": "YulTypedName",
                      "src": "4813:2:56",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "4854:9:56"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value0",
                            "nodeType": "YulIdentifier",
                            "src": "4869:6:56"
                          },
                          {
                            "name": "_1",
                            "nodeType": "YulIdentifier",
                            "src": "4877:2:56"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "4865:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4865:15:56"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "4847:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4847:34:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "4847:34:56"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "4901:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "4912:2:56",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "4897:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4897:18:56"
                      },
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "value1",
                                "nodeType": "YulIdentifier",
                                "src": "4931:6:56"
                              }
                            ],
                            "functionName": {
                              "name": "iszero",
                              "nodeType": "YulIdentifier",
                              "src": "4924:6:56"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "4924:14:56"
                          }
                        ],
                        "functionName": {
                          "name": "iszero",
                          "nodeType": "YulIdentifier",
                          "src": "4917:6:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4917:22:56"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "4890:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4890:50:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "4890:50:56"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "4960:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "4971:2:56",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "4956:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4956:18:56"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value2",
                            "nodeType": "YulIdentifier",
                            "src": "4980:6:56"
                          },
                          {
                            "name": "_1",
                            "nodeType": "YulIdentifier",
                            "src": "4988:2:56"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "4976:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4976:15:56"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "4949:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4949:43:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "4949:43:56"
                }
              ]
            },
            "name": "abi_encode_tuple_t_address_t_bool_t_address__to_t_address_t_bool_t_address__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "4717:9:56",
                "type": ""
              },
              {
                "name": "value2",
                "nodeType": "YulTypedName",
                "src": "4728:6:56",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "4736:6:56",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "4744:6:56",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "4755:4:56",
                "type": ""
              }
            ],
            "src": "4613:385:56"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "5177:181:56",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "5194:9:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "5205:2:56",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "5187:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5187:21:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "5187:21:56"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "5228:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "5239:2:56",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "5224:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "5224:18:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "5244:2:56",
                        "type": "",
                        "value": "31"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "5217:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5217:30:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "5217:30:56"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "5267:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "5278:2:56",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "5263:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "5263:18:56"
                      },
                      {
                        "hexValue": "5265656e7472616e637947756172643a207265656e7472616e742063616c6c",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "5283:33:56",
                        "type": "",
                        "value": "ReentrancyGuard: reentrant call"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "5256:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5256:61:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "5256:61:56"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "5326:26:56",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "5338:9:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "5349:2:56",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "5334:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5334:18:56"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "5326:4:56"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_ebf73bba305590e4764d5cb53b69bffd6d4d092d1a67551cb346f8cfcdab8619__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "5154:9:56",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "5168:4:56",
                "type": ""
              }
            ],
            "src": "5003:355:56"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "5528:218:56",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "5538:26:56",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "5550:9:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "5561:2:56",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "5546:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5546:18:56"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "5538:4:56"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "5573:29:56",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "5591:3:56",
                            "type": "",
                            "value": "160"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "5596:1:56",
                            "type": "",
                            "value": "1"
                          }
                        ],
                        "functionName": {
                          "name": "shl",
                          "nodeType": "YulIdentifier",
                          "src": "5587:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "5587:11:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "5600:1:56",
                        "type": "",
                        "value": "1"
                      }
                    ],
                    "functionName": {
                      "name": "sub",
                      "nodeType": "YulIdentifier",
                      "src": "5583:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5583:19:56"
                  },
                  "variables": [
                    {
                      "name": "_1",
                      "nodeType": "YulTypedName",
                      "src": "5577:2:56",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "5618:9:56"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value0",
                            "nodeType": "YulIdentifier",
                            "src": "5633:6:56"
                          },
                          {
                            "name": "_1",
                            "nodeType": "YulIdentifier",
                            "src": "5641:2:56"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "5629:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "5629:15:56"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "5611:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5611:34:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "5611:34:56"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "5665:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "5676:2:56",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "5661:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "5661:18:56"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value1",
                            "nodeType": "YulIdentifier",
                            "src": "5685:6:56"
                          },
                          {
                            "name": "_1",
                            "nodeType": "YulIdentifier",
                            "src": "5693:2:56"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "5681:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "5681:15:56"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "5654:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5654:43:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "5654:43:56"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "5717:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "5728:2:56",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "5713:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "5713:18:56"
                      },
                      {
                        "name": "value2",
                        "nodeType": "YulIdentifier",
                        "src": "5733:6:56"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "5706:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5706:34:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "5706:34:56"
                }
              ]
            },
            "name": "abi_encode_tuple_t_address_t_address_payable_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "5481:9:56",
                "type": ""
              },
              {
                "name": "value2",
                "nodeType": "YulTypedName",
                "src": "5492:6:56",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "5500:6:56",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "5508:6:56",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "5519:4:56",
                "type": ""
              }
            ],
            "src": "5363:383:56"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "5829:167:56",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "5875:16:56",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "5884:1:56",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "5887:1:56",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "5877:6:56"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "5877:12:56"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "5877:12:56"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "5850:7:56"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "5859:9:56"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "5846:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "5846:23:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "5871:2:56",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "5842:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5842:32:56"
                  },
                  "nodeType": "YulIf",
                  "src": "5839:52:56"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "5900:29:56",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "5919:9:56"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nodeType": "YulIdentifier",
                      "src": "5913:5:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5913:16:56"
                  },
                  "variables": [
                    {
                      "name": "value",
                      "nodeType": "YulTypedName",
                      "src": "5904:5:56",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "5960:5:56"
                      }
                    ],
                    "functionName": {
                      "name": "validator_revert_bool",
                      "nodeType": "YulIdentifier",
                      "src": "5938:21:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5938:28:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "5938:28:56"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "5975:15:56",
                  "value": {
                    "name": "value",
                    "nodeType": "YulIdentifier",
                    "src": "5985:5:56"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "5975:6:56"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_bool_fromMemory",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "5795:9:56",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "5806:7:56",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "5818:6:56",
                "type": ""
              }
            ],
            "src": "5751:245:56"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "6130:145:56",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "6140:26:56",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "6152:9:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "6163:2:56",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "6148:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6148:18:56"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "6140:4:56"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "6182:9:56"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value0",
                            "nodeType": "YulIdentifier",
                            "src": "6197:6:56"
                          },
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6213:3:56",
                                    "type": "",
                                    "value": "160"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6218:1:56",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "shl",
                                  "nodeType": "YulIdentifier",
                                  "src": "6209:3:56"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6209:11:56"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "6222:1:56",
                                "type": "",
                                "value": "1"
                              }
                            ],
                            "functionName": {
                              "name": "sub",
                              "nodeType": "YulIdentifier",
                              "src": "6205:3:56"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "6205:19:56"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "6193:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "6193:32:56"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "6175:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6175:51:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "6175:51:56"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "6246:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "6257:2:56",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "6242:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "6242:18:56"
                      },
                      {
                        "name": "value1",
                        "nodeType": "YulIdentifier",
                        "src": "6262:6:56"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "6235:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6235:34:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "6235:34:56"
                }
              ]
            },
            "name": "abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "6091:9:56",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "6102:6:56",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "6110:6:56",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "6121:4:56",
                "type": ""
              }
            ],
            "src": "6001:274:56"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "6409:119:56",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "6419:26:56",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "6431:9:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "6442:2:56",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "6427:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6427:18:56"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "6419:4:56"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "6461:9:56"
                      },
                      {
                        "name": "value0",
                        "nodeType": "YulIdentifier",
                        "src": "6472:6:56"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "6454:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6454:25:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "6454:25:56"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "6499:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "6510:2:56",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "6495:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "6495:18:56"
                      },
                      {
                        "name": "value1",
                        "nodeType": "YulIdentifier",
                        "src": "6515:6:56"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "6488:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6488:34:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "6488:34:56"
                }
              ]
            },
            "name": "abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "6370:9:56",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "6381:6:56",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "6389:6:56",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "6400:4:56",
                "type": ""
              }
            ],
            "src": "6280:248:56"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "6707:228:56",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "6724:9:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "6735:2:56",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "6717:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6717:21:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "6717:21:56"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "6758:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "6769:2:56",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "6754:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "6754:18:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "6774:2:56",
                        "type": "",
                        "value": "38"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "6747:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6747:30:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "6747:30:56"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "6797:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "6808:2:56",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "6793:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "6793:18:56"
                      },
                      {
                        "hexValue": "4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "6813:34:56",
                        "type": "",
                        "value": "Ownable: new owner is the zero a"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "6786:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6786:62:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "6786:62:56"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "6868:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "6879:2:56",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "6864:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "6864:18:56"
                      },
                      {
                        "hexValue": "646472657373",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "6884:8:56",
                        "type": "",
                        "value": "ddress"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "6857:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6857:36:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "6857:36:56"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "6902:27:56",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "6914:9:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "6925:3:56",
                        "type": "",
                        "value": "128"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "6910:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6910:19:56"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "6902:4:56"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "6684:9:56",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "6698:4:56",
                "type": ""
              }
            ],
            "src": "6533:402:56"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "7049:102:56",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "7059:26:56",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "7071:9:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "7082:2:56",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "7067:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7067:18:56"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "7059:4:56"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "7101:9:56"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value0",
                            "nodeType": "YulIdentifier",
                            "src": "7116:6:56"
                          },
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "7132:3:56",
                                    "type": "",
                                    "value": "160"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "7137:1:56",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "shl",
                                  "nodeType": "YulIdentifier",
                                  "src": "7128:3:56"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7128:11:56"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "7141:1:56",
                                "type": "",
                                "value": "1"
                              }
                            ],
                            "functionName": {
                              "name": "sub",
                              "nodeType": "YulIdentifier",
                              "src": "7124:3:56"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "7124:19:56"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "7112:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "7112:32:56"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "7094:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7094:51:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "7094:51:56"
                }
              ]
            },
            "name": "abi_encode_tuple_t_address_payable__to_t_address__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "7018:9:56",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "7029:6:56",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "7040:4:56",
                "type": ""
              }
            ],
            "src": "6940:211:56"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "7208:116:56",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "7267:22:56",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "functionName": {
                            "name": "panic_error_0x11",
                            "nodeType": "YulIdentifier",
                            "src": "7269:16:56"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "7269:18:56"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "7269:18:56"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "x",
                                "nodeType": "YulIdentifier",
                                "src": "7239:1:56"
                              }
                            ],
                            "functionName": {
                              "name": "iszero",
                              "nodeType": "YulIdentifier",
                              "src": "7232:6:56"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "7232:9:56"
                          }
                        ],
                        "functionName": {
                          "name": "iszero",
                          "nodeType": "YulIdentifier",
                          "src": "7225:6:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "7225:17:56"
                      },
                      {
                        "arguments": [
                          {
                            "name": "y",
                            "nodeType": "YulIdentifier",
                            "src": "7247:1:56"
                          },
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "7258:1:56",
                                    "type": "",
                                    "value": "0"
                                  }
                                ],
                                "functionName": {
                                  "name": "not",
                                  "nodeType": "YulIdentifier",
                                  "src": "7254:3:56"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7254:6:56"
                              },
                              {
                                "name": "x",
                                "nodeType": "YulIdentifier",
                                "src": "7262:1:56"
                              }
                            ],
                            "functionName": {
                              "name": "div",
                              "nodeType": "YulIdentifier",
                              "src": "7250:3:56"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "7250:14:56"
                          }
                        ],
                        "functionName": {
                          "name": "gt",
                          "nodeType": "YulIdentifier",
                          "src": "7244:2:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "7244:21:56"
                      }
                    ],
                    "functionName": {
                      "name": "and",
                      "nodeType": "YulIdentifier",
                      "src": "7221:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7221:45:56"
                  },
                  "nodeType": "YulIf",
                  "src": "7218:71:56"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "7298:20:56",
                  "value": {
                    "arguments": [
                      {
                        "name": "x",
                        "nodeType": "YulIdentifier",
                        "src": "7313:1:56"
                      },
                      {
                        "name": "y",
                        "nodeType": "YulIdentifier",
                        "src": "7316:1:56"
                      }
                    ],
                    "functionName": {
                      "name": "mul",
                      "nodeType": "YulIdentifier",
                      "src": "7309:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7309:9:56"
                  },
                  "variableNames": [
                    {
                      "name": "product",
                      "nodeType": "YulIdentifier",
                      "src": "7298:7:56"
                    }
                  ]
                }
              ]
            },
            "name": "checked_mul_t_uint256",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "x",
                "nodeType": "YulTypedName",
                "src": "7187:1:56",
                "type": ""
              },
              {
                "name": "y",
                "nodeType": "YulTypedName",
                "src": "7190:1:56",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "product",
                "nodeType": "YulTypedName",
                "src": "7196:7:56",
                "type": ""
              }
            ],
            "src": "7156:168:56"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "7361:95:56",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "7378:1:56",
                        "type": "",
                        "value": "0"
                      },
                      {
                        "arguments": [
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "7385:3:56",
                            "type": "",
                            "value": "224"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "7390:10:56",
                            "type": "",
                            "value": "0x4e487b71"
                          }
                        ],
                        "functionName": {
                          "name": "shl",
                          "nodeType": "YulIdentifier",
                          "src": "7381:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "7381:20:56"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "7371:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7371:31:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "7371:31:56"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "7418:1:56",
                        "type": "",
                        "value": "4"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "7421:4:56",
                        "type": "",
                        "value": "0x12"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "7411:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7411:15:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "7411:15:56"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "7442:1:56",
                        "type": "",
                        "value": "0"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "7445:4:56",
                        "type": "",
                        "value": "0x24"
                      }
                    ],
                    "functionName": {
                      "name": "revert",
                      "nodeType": "YulIdentifier",
                      "src": "7435:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7435:15:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "7435:15:56"
                }
              ]
            },
            "name": "panic_error_0x12",
            "nodeType": "YulFunctionDefinition",
            "src": "7329:127:56"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "7507:74:56",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "7530:22:56",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "functionName": {
                            "name": "panic_error_0x12",
                            "nodeType": "YulIdentifier",
                            "src": "7532:16:56"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "7532:18:56"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "7532:18:56"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "y",
                        "nodeType": "YulIdentifier",
                        "src": "7527:1:56"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "7520:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7520:9:56"
                  },
                  "nodeType": "YulIf",
                  "src": "7517:35:56"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "7561:14:56",
                  "value": {
                    "arguments": [
                      {
                        "name": "x",
                        "nodeType": "YulIdentifier",
                        "src": "7570:1:56"
                      },
                      {
                        "name": "y",
                        "nodeType": "YulIdentifier",
                        "src": "7573:1:56"
                      }
                    ],
                    "functionName": {
                      "name": "div",
                      "nodeType": "YulIdentifier",
                      "src": "7566:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7566:9:56"
                  },
                  "variableNames": [
                    {
                      "name": "r",
                      "nodeType": "YulIdentifier",
                      "src": "7561:1:56"
                    }
                  ]
                }
              ]
            },
            "name": "checked_div_t_uint256",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "x",
                "nodeType": "YulTypedName",
                "src": "7492:1:56",
                "type": ""
              },
              {
                "name": "y",
                "nodeType": "YulTypedName",
                "src": "7495:1:56",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "r",
                "nodeType": "YulTypedName",
                "src": "7501:1:56",
                "type": ""
              }
            ],
            "src": "7461:120:56"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "7633:148:56",
              "statements": [
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "7643:23:56",
                  "value": {
                    "arguments": [
                      {
                        "name": "x",
                        "nodeType": "YulIdentifier",
                        "src": "7658:1:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "7661:4:56",
                        "type": "",
                        "value": "0xff"
                      }
                    ],
                    "functionName": {
                      "name": "and",
                      "nodeType": "YulIdentifier",
                      "src": "7654:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7654:12:56"
                  },
                  "variables": [
                    {
                      "name": "x_1",
                      "nodeType": "YulTypedName",
                      "src": "7647:3:56",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "7675:23:56",
                  "value": {
                    "arguments": [
                      {
                        "name": "y",
                        "nodeType": "YulIdentifier",
                        "src": "7690:1:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "7693:4:56",
                        "type": "",
                        "value": "0xff"
                      }
                    ],
                    "functionName": {
                      "name": "and",
                      "nodeType": "YulIdentifier",
                      "src": "7686:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7686:12:56"
                  },
                  "variables": [
                    {
                      "name": "y_1",
                      "nodeType": "YulTypedName",
                      "src": "7679:3:56",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "7723:22:56",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "functionName": {
                            "name": "panic_error_0x11",
                            "nodeType": "YulIdentifier",
                            "src": "7725:16:56"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "7725:18:56"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "7725:18:56"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "x_1",
                        "nodeType": "YulIdentifier",
                        "src": "7713:3:56"
                      },
                      {
                        "name": "y_1",
                        "nodeType": "YulIdentifier",
                        "src": "7718:3:56"
                      }
                    ],
                    "functionName": {
                      "name": "lt",
                      "nodeType": "YulIdentifier",
                      "src": "7710:2:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7710:12:56"
                  },
                  "nodeType": "YulIf",
                  "src": "7707:38:56"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "7754:21:56",
                  "value": {
                    "arguments": [
                      {
                        "name": "x_1",
                        "nodeType": "YulIdentifier",
                        "src": "7766:3:56"
                      },
                      {
                        "name": "y_1",
                        "nodeType": "YulIdentifier",
                        "src": "7771:3:56"
                      }
                    ],
                    "functionName": {
                      "name": "sub",
                      "nodeType": "YulIdentifier",
                      "src": "7762:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7762:13:56"
                  },
                  "variableNames": [
                    {
                      "name": "diff",
                      "nodeType": "YulIdentifier",
                      "src": "7754:4:56"
                    }
                  ]
                }
              ]
            },
            "name": "checked_sub_t_uint8",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "x",
                "nodeType": "YulTypedName",
                "src": "7615:1:56",
                "type": ""
              },
              {
                "name": "y",
                "nodeType": "YulTypedName",
                "src": "7618:1:56",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "diff",
                "nodeType": "YulTypedName",
                "src": "7624:4:56",
                "type": ""
              }
            ],
            "src": "7586:195:56"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "7850:358:56",
              "statements": [
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "7860:16:56",
                  "value": {
                    "kind": "number",
                    "nodeType": "YulLiteral",
                    "src": "7875:1:56",
                    "type": "",
                    "value": "1"
                  },
                  "variables": [
                    {
                      "name": "power_1",
                      "nodeType": "YulTypedName",
                      "src": "7864:7:56",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "7885:16:56",
                  "value": {
                    "name": "power_1",
                    "nodeType": "YulIdentifier",
                    "src": "7894:7:56"
                  },
                  "variableNames": [
                    {
                      "name": "power",
                      "nodeType": "YulIdentifier",
                      "src": "7885:5:56"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "7910:13:56",
                  "value": {
                    "name": "_base",
                    "nodeType": "YulIdentifier",
                    "src": "7918:5:56"
                  },
                  "variableNames": [
                    {
                      "name": "base",
                      "nodeType": "YulIdentifier",
                      "src": "7910:4:56"
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "7974:228:56",
                    "statements": [
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "8019:22:56",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [],
                                "functionName": {
                                  "name": "panic_error_0x11",
                                  "nodeType": "YulIdentifier",
                                  "src": "8021:16:56"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8021:18:56"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "8021:18:56"
                            }
                          ]
                        },
                        "condition": {
                          "arguments": [
                            {
                              "name": "base",
                              "nodeType": "YulIdentifier",
                              "src": "7994:4:56"
                            },
                            {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "kind": "number",
                                      "nodeType": "YulLiteral",
                                      "src": "8008:1:56",
                                      "type": "",
                                      "value": "0"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "not",
                                    "nodeType": "YulIdentifier",
                                    "src": "8004:3:56"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "8004:6:56"
                                },
                                {
                                  "name": "base",
                                  "nodeType": "YulIdentifier",
                                  "src": "8012:4:56"
                                }
                              ],
                              "functionName": {
                                "name": "div",
                                "nodeType": "YulIdentifier",
                                "src": "8000:3:56"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "8000:17:56"
                            }
                          ],
                          "functionName": {
                            "name": "gt",
                            "nodeType": "YulIdentifier",
                            "src": "7991:2:56"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "7991:27:56"
                        },
                        "nodeType": "YulIf",
                        "src": "7988:53:56"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "8080:29:56",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "8082:25:56",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "power",
                                    "nodeType": "YulIdentifier",
                                    "src": "8095:5:56"
                                  },
                                  {
                                    "name": "base",
                                    "nodeType": "YulIdentifier",
                                    "src": "8102:4:56"
                                  }
                                ],
                                "functionName": {
                                  "name": "mul",
                                  "nodeType": "YulIdentifier",
                                  "src": "8091:3:56"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8091:16:56"
                              },
                              "variableNames": [
                                {
                                  "name": "power",
                                  "nodeType": "YulIdentifier",
                                  "src": "8082:5:56"
                                }
                              ]
                            }
                          ]
                        },
                        "condition": {
                          "arguments": [
                            {
                              "name": "exponent",
                              "nodeType": "YulIdentifier",
                              "src": "8061:8:56"
                            },
                            {
                              "name": "power_1",
                              "nodeType": "YulIdentifier",
                              "src": "8071:7:56"
                            }
                          ],
                          "functionName": {
                            "name": "and",
                            "nodeType": "YulIdentifier",
                            "src": "8057:3:56"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "8057:22:56"
                        },
                        "nodeType": "YulIf",
                        "src": "8054:55:56"
                      },
                      {
                        "nodeType": "YulAssignment",
                        "src": "8122:23:56",
                        "value": {
                          "arguments": [
                            {
                              "name": "base",
                              "nodeType": "YulIdentifier",
                              "src": "8134:4:56"
                            },
                            {
                              "name": "base",
                              "nodeType": "YulIdentifier",
                              "src": "8140:4:56"
                            }
                          ],
                          "functionName": {
                            "name": "mul",
                            "nodeType": "YulIdentifier",
                            "src": "8130:3:56"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "8130:15:56"
                        },
                        "variableNames": [
                          {
                            "name": "base",
                            "nodeType": "YulIdentifier",
                            "src": "8122:4:56"
                          }
                        ]
                      },
                      {
                        "nodeType": "YulAssignment",
                        "src": "8158:34:56",
                        "value": {
                          "arguments": [
                            {
                              "name": "power_1",
                              "nodeType": "YulIdentifier",
                              "src": "8174:7:56"
                            },
                            {
                              "name": "exponent",
                              "nodeType": "YulIdentifier",
                              "src": "8183:8:56"
                            }
                          ],
                          "functionName": {
                            "name": "shr",
                            "nodeType": "YulIdentifier",
                            "src": "8170:3:56"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "8170:22:56"
                        },
                        "variableNames": [
                          {
                            "name": "exponent",
                            "nodeType": "YulIdentifier",
                            "src": "8158:8:56"
                          }
                        ]
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "exponent",
                        "nodeType": "YulIdentifier",
                        "src": "7943:8:56"
                      },
                      {
                        "name": "power_1",
                        "nodeType": "YulIdentifier",
                        "src": "7953:7:56"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "7940:2:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7940:21:56"
                  },
                  "nodeType": "YulForLoop",
                  "post": {
                    "nodeType": "YulBlock",
                    "src": "7962:3:56",
                    "statements": []
                  },
                  "pre": {
                    "nodeType": "YulBlock",
                    "src": "7936:3:56",
                    "statements": []
                  },
                  "src": "7932:270:56"
                }
              ]
            },
            "name": "checked_exp_helper",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "_base",
                "nodeType": "YulTypedName",
                "src": "7814:5:56",
                "type": ""
              },
              {
                "name": "exponent",
                "nodeType": "YulTypedName",
                "src": "7821:8:56",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "power",
                "nodeType": "YulTypedName",
                "src": "7834:5:56",
                "type": ""
              },
              {
                "name": "base",
                "nodeType": "YulTypedName",
                "src": "7841:4:56",
                "type": ""
              }
            ],
            "src": "7786:422:56"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "8272:747:56",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "8310:52:56",
                    "statements": [
                      {
                        "nodeType": "YulAssignment",
                        "src": "8324:10:56",
                        "value": {
                          "kind": "number",
                          "nodeType": "YulLiteral",
                          "src": "8333:1:56",
                          "type": "",
                          "value": "1"
                        },
                        "variableNames": [
                          {
                            "name": "power",
                            "nodeType": "YulIdentifier",
                            "src": "8324:5:56"
                          }
                        ]
                      },
                      {
                        "nodeType": "YulLeave",
                        "src": "8347:5:56"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "exponent",
                        "nodeType": "YulIdentifier",
                        "src": "8292:8:56"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "8285:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8285:16:56"
                  },
                  "nodeType": "YulIf",
                  "src": "8282:80:56"
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "8395:52:56",
                    "statements": [
                      {
                        "nodeType": "YulAssignment",
                        "src": "8409:10:56",
                        "value": {
                          "kind": "number",
                          "nodeType": "YulLiteral",
                          "src": "8418:1:56",
                          "type": "",
                          "value": "0"
                        },
                        "variableNames": [
                          {
                            "name": "power",
                            "nodeType": "YulIdentifier",
                            "src": "8409:5:56"
                          }
                        ]
                      },
                      {
                        "nodeType": "YulLeave",
                        "src": "8432:5:56"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "base",
                        "nodeType": "YulIdentifier",
                        "src": "8381:4:56"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "8374:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8374:12:56"
                  },
                  "nodeType": "YulIf",
                  "src": "8371:76:56"
                },
                {
                  "cases": [
                    {
                      "body": {
                        "nodeType": "YulBlock",
                        "src": "8483:52:56",
                        "statements": [
                          {
                            "nodeType": "YulAssignment",
                            "src": "8497:10:56",
                            "value": {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "8506:1:56",
                              "type": "",
                              "value": "1"
                            },
                            "variableNames": [
                              {
                                "name": "power",
                                "nodeType": "YulIdentifier",
                                "src": "8497:5:56"
                              }
                            ]
                          },
                          {
                            "nodeType": "YulLeave",
                            "src": "8520:5:56"
                          }
                        ]
                      },
                      "nodeType": "YulCase",
                      "src": "8476:59:56",
                      "value": {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "8481:1:56",
                        "type": "",
                        "value": "1"
                      }
                    },
                    {
                      "body": {
                        "nodeType": "YulBlock",
                        "src": "8551:123:56",
                        "statements": [
                          {
                            "body": {
                              "nodeType": "YulBlock",
                              "src": "8586:22:56",
                              "statements": [
                                {
                                  "expression": {
                                    "arguments": [],
                                    "functionName": {
                                      "name": "panic_error_0x11",
                                      "nodeType": "YulIdentifier",
                                      "src": "8588:16:56"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8588:18:56"
                                  },
                                  "nodeType": "YulExpressionStatement",
                                  "src": "8588:18:56"
                                }
                              ]
                            },
                            "condition": {
                              "arguments": [
                                {
                                  "name": "exponent",
                                  "nodeType": "YulIdentifier",
                                  "src": "8571:8:56"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "8581:3:56",
                                  "type": "",
                                  "value": "255"
                                }
                              ],
                              "functionName": {
                                "name": "gt",
                                "nodeType": "YulIdentifier",
                                "src": "8568:2:56"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "8568:17:56"
                            },
                            "nodeType": "YulIf",
                            "src": "8565:43:56"
                          },
                          {
                            "nodeType": "YulAssignment",
                            "src": "8621:25:56",
                            "value": {
                              "arguments": [
                                {
                                  "name": "exponent",
                                  "nodeType": "YulIdentifier",
                                  "src": "8634:8:56"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "8644:1:56",
                                  "type": "",
                                  "value": "1"
                                }
                              ],
                              "functionName": {
                                "name": "shl",
                                "nodeType": "YulIdentifier",
                                "src": "8630:3:56"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "8630:16:56"
                            },
                            "variableNames": [
                              {
                                "name": "power",
                                "nodeType": "YulIdentifier",
                                "src": "8621:5:56"
                              }
                            ]
                          },
                          {
                            "nodeType": "YulLeave",
                            "src": "8659:5:56"
                          }
                        ]
                      },
                      "nodeType": "YulCase",
                      "src": "8544:130:56",
                      "value": {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "8549:1:56",
                        "type": "",
                        "value": "2"
                      }
                    }
                  ],
                  "expression": {
                    "name": "base",
                    "nodeType": "YulIdentifier",
                    "src": "8463:4:56"
                  },
                  "nodeType": "YulSwitch",
                  "src": "8456:218:56"
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "8772:70:56",
                    "statements": [
                      {
                        "nodeType": "YulAssignment",
                        "src": "8786:28:56",
                        "value": {
                          "arguments": [
                            {
                              "name": "base",
                              "nodeType": "YulIdentifier",
                              "src": "8799:4:56"
                            },
                            {
                              "name": "exponent",
                              "nodeType": "YulIdentifier",
                              "src": "8805:8:56"
                            }
                          ],
                          "functionName": {
                            "name": "exp",
                            "nodeType": "YulIdentifier",
                            "src": "8795:3:56"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "8795:19:56"
                        },
                        "variableNames": [
                          {
                            "name": "power",
                            "nodeType": "YulIdentifier",
                            "src": "8786:5:56"
                          }
                        ]
                      },
                      {
                        "nodeType": "YulLeave",
                        "src": "8827:5:56"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "base",
                                "nodeType": "YulIdentifier",
                                "src": "8696:4:56"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "8702:2:56",
                                "type": "",
                                "value": "11"
                              }
                            ],
                            "functionName": {
                              "name": "lt",
                              "nodeType": "YulIdentifier",
                              "src": "8693:2:56"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "8693:12:56"
                          },
                          {
                            "arguments": [
                              {
                                "name": "exponent",
                                "nodeType": "YulIdentifier",
                                "src": "8710:8:56"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "8720:2:56",
                                "type": "",
                                "value": "78"
                              }
                            ],
                            "functionName": {
                              "name": "lt",
                              "nodeType": "YulIdentifier",
                              "src": "8707:2:56"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "8707:16:56"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "8689:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "8689:35:56"
                      },
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "base",
                                "nodeType": "YulIdentifier",
                                "src": "8733:4:56"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "8739:3:56",
                                "type": "",
                                "value": "307"
                              }
                            ],
                            "functionName": {
                              "name": "lt",
                              "nodeType": "YulIdentifier",
                              "src": "8730:2:56"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "8730:13:56"
                          },
                          {
                            "arguments": [
                              {
                                "name": "exponent",
                                "nodeType": "YulIdentifier",
                                "src": "8748:8:56"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "8758:2:56",
                                "type": "",
                                "value": "32"
                              }
                            ],
                            "functionName": {
                              "name": "lt",
                              "nodeType": "YulIdentifier",
                              "src": "8745:2:56"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "8745:16:56"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "8726:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "8726:36:56"
                      }
                    ],
                    "functionName": {
                      "name": "or",
                      "nodeType": "YulIdentifier",
                      "src": "8686:2:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8686:77:56"
                  },
                  "nodeType": "YulIf",
                  "src": "8683:159:56"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "8851:57:56",
                  "value": {
                    "arguments": [
                      {
                        "name": "base",
                        "nodeType": "YulIdentifier",
                        "src": "8893:4:56"
                      },
                      {
                        "name": "exponent",
                        "nodeType": "YulIdentifier",
                        "src": "8899:8:56"
                      }
                    ],
                    "functionName": {
                      "name": "checked_exp_helper",
                      "nodeType": "YulIdentifier",
                      "src": "8874:18:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8874:34:56"
                  },
                  "variables": [
                    {
                      "name": "power_1",
                      "nodeType": "YulTypedName",
                      "src": "8855:7:56",
                      "type": ""
                    },
                    {
                      "name": "base_1",
                      "nodeType": "YulTypedName",
                      "src": "8864:6:56",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "8953:22:56",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "functionName": {
                            "name": "panic_error_0x11",
                            "nodeType": "YulIdentifier",
                            "src": "8955:16:56"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "8955:18:56"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "8955:18:56"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "power_1",
                        "nodeType": "YulIdentifier",
                        "src": "8923:7:56"
                      },
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "8940:1:56",
                                "type": "",
                                "value": "0"
                              }
                            ],
                            "functionName": {
                              "name": "not",
                              "nodeType": "YulIdentifier",
                              "src": "8936:3:56"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "8936:6:56"
                          },
                          {
                            "name": "base_1",
                            "nodeType": "YulIdentifier",
                            "src": "8944:6:56"
                          }
                        ],
                        "functionName": {
                          "name": "div",
                          "nodeType": "YulIdentifier",
                          "src": "8932:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "8932:19:56"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "8920:2:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8920:32:56"
                  },
                  "nodeType": "YulIf",
                  "src": "8917:58:56"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "8984:29:56",
                  "value": {
                    "arguments": [
                      {
                        "name": "power_1",
                        "nodeType": "YulIdentifier",
                        "src": "8997:7:56"
                      },
                      {
                        "name": "base_1",
                        "nodeType": "YulIdentifier",
                        "src": "9006:6:56"
                      }
                    ],
                    "functionName": {
                      "name": "mul",
                      "nodeType": "YulIdentifier",
                      "src": "8993:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8993:20:56"
                  },
                  "variableNames": [
                    {
                      "name": "power",
                      "nodeType": "YulIdentifier",
                      "src": "8984:5:56"
                    }
                  ]
                }
              ]
            },
            "name": "checked_exp_unsigned",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "base",
                "nodeType": "YulTypedName",
                "src": "8243:4:56",
                "type": ""
              },
              {
                "name": "exponent",
                "nodeType": "YulTypedName",
                "src": "8249:8:56",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "power",
                "nodeType": "YulTypedName",
                "src": "8262:5:56",
                "type": ""
              }
            ],
            "src": "8213:806:56"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "9094:61:56",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "9104:45:56",
                  "value": {
                    "arguments": [
                      {
                        "name": "base",
                        "nodeType": "YulIdentifier",
                        "src": "9134:4:56"
                      },
                      {
                        "name": "exponent",
                        "nodeType": "YulIdentifier",
                        "src": "9140:8:56"
                      }
                    ],
                    "functionName": {
                      "name": "checked_exp_unsigned",
                      "nodeType": "YulIdentifier",
                      "src": "9113:20:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9113:36:56"
                  },
                  "variableNames": [
                    {
                      "name": "power",
                      "nodeType": "YulIdentifier",
                      "src": "9104:5:56"
                    }
                  ]
                }
              ]
            },
            "name": "checked_exp_t_uint256_t_uint256",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "base",
                "nodeType": "YulTypedName",
                "src": "9065:4:56",
                "type": ""
              },
              {
                "name": "exponent",
                "nodeType": "YulTypedName",
                "src": "9071:8:56",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "power",
                "nodeType": "YulTypedName",
                "src": "9084:5:56",
                "type": ""
              }
            ],
            "src": "9024:131:56"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "9211:502:56",
              "statements": [
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "9221:29:56",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "9239:3:56",
                            "type": "",
                            "value": "255"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "9244:1:56",
                            "type": "",
                            "value": "1"
                          }
                        ],
                        "functionName": {
                          "name": "shl",
                          "nodeType": "YulIdentifier",
                          "src": "9235:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "9235:11:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "9248:1:56",
                        "type": "",
                        "value": "1"
                      }
                    ],
                    "functionName": {
                      "name": "sub",
                      "nodeType": "YulIdentifier",
                      "src": "9231:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9231:19:56"
                  },
                  "variables": [
                    {
                      "name": "_1",
                      "nodeType": "YulTypedName",
                      "src": "9225:2:56",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "9259:19:56",
                  "value": {
                    "arguments": [
                      {
                        "name": "y",
                        "nodeType": "YulIdentifier",
                        "src": "9273:1:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "9276:1:56",
                        "type": "",
                        "value": "0"
                      }
                    ],
                    "functionName": {
                      "name": "sgt",
                      "nodeType": "YulIdentifier",
                      "src": "9269:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9269:9:56"
                  },
                  "variables": [
                    {
                      "name": "_2",
                      "nodeType": "YulTypedName",
                      "src": "9263:2:56",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "9287:19:56",
                  "value": {
                    "arguments": [
                      {
                        "name": "x",
                        "nodeType": "YulIdentifier",
                        "src": "9301:1:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "9304:1:56",
                        "type": "",
                        "value": "0"
                      }
                    ],
                    "functionName": {
                      "name": "sgt",
                      "nodeType": "YulIdentifier",
                      "src": "9297:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9297:9:56"
                  },
                  "variables": [
                    {
                      "name": "_3",
                      "nodeType": "YulTypedName",
                      "src": "9291:2:56",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "9354:22:56",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "functionName": {
                            "name": "panic_error_0x11",
                            "nodeType": "YulIdentifier",
                            "src": "9356:16:56"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "9356:18:56"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "9356:18:56"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "_3",
                            "nodeType": "YulIdentifier",
                            "src": "9326:2:56"
                          },
                          {
                            "name": "_2",
                            "nodeType": "YulIdentifier",
                            "src": "9330:2:56"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "9322:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "9322:11:56"
                      },
                      {
                        "arguments": [
                          {
                            "name": "x",
                            "nodeType": "YulIdentifier",
                            "src": "9338:1:56"
                          },
                          {
                            "arguments": [
                              {
                                "name": "_1",
                                "nodeType": "YulIdentifier",
                                "src": "9345:2:56"
                              },
                              {
                                "name": "y",
                                "nodeType": "YulIdentifier",
                                "src": "9349:1:56"
                              }
                            ],
                            "functionName": {
                              "name": "div",
                              "nodeType": "YulIdentifier",
                              "src": "9341:3:56"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "9341:10:56"
                          }
                        ],
                        "functionName": {
                          "name": "gt",
                          "nodeType": "YulIdentifier",
                          "src": "9335:2:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "9335:17:56"
                      }
                    ],
                    "functionName": {
                      "name": "and",
                      "nodeType": "YulIdentifier",
                      "src": "9318:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9318:35:56"
                  },
                  "nodeType": "YulIf",
                  "src": "9315:61:56"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "9385:21:56",
                  "value": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "9399:3:56",
                        "type": "",
                        "value": "255"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "9404:1:56",
                        "type": "",
                        "value": "1"
                      }
                    ],
                    "functionName": {
                      "name": "shl",
                      "nodeType": "YulIdentifier",
                      "src": "9395:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9395:11:56"
                  },
                  "variables": [
                    {
                      "name": "_4",
                      "nodeType": "YulTypedName",
                      "src": "9389:2:56",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "9415:19:56",
                  "value": {
                    "arguments": [
                      {
                        "name": "y",
                        "nodeType": "YulIdentifier",
                        "src": "9429:1:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "9432:1:56",
                        "type": "",
                        "value": "0"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "9425:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9425:9:56"
                  },
                  "variables": [
                    {
                      "name": "_5",
                      "nodeType": "YulTypedName",
                      "src": "9419:2:56",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "9484:22:56",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "functionName": {
                            "name": "panic_error_0x11",
                            "nodeType": "YulIdentifier",
                            "src": "9486:16:56"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "9486:18:56"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "9486:18:56"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "_3",
                            "nodeType": "YulIdentifier",
                            "src": "9454:2:56"
                          },
                          {
                            "name": "_5",
                            "nodeType": "YulIdentifier",
                            "src": "9458:2:56"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "9450:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "9450:11:56"
                      },
                      {
                        "arguments": [
                          {
                            "name": "y",
                            "nodeType": "YulIdentifier",
                            "src": "9467:1:56"
                          },
                          {
                            "arguments": [
                              {
                                "name": "_4",
                                "nodeType": "YulIdentifier",
                                "src": "9475:2:56"
                              },
                              {
                                "name": "x",
                                "nodeType": "YulIdentifier",
                                "src": "9479:1:56"
                              }
                            ],
                            "functionName": {
                              "name": "sdiv",
                              "nodeType": "YulIdentifier",
                              "src": "9470:4:56"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "9470:11:56"
                          }
                        ],
                        "functionName": {
                          "name": "slt",
                          "nodeType": "YulIdentifier",
                          "src": "9463:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "9463:19:56"
                      }
                    ],
                    "functionName": {
                      "name": "and",
                      "nodeType": "YulIdentifier",
                      "src": "9446:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9446:37:56"
                  },
                  "nodeType": "YulIf",
                  "src": "9443:63:56"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "9515:19:56",
                  "value": {
                    "arguments": [
                      {
                        "name": "x",
                        "nodeType": "YulIdentifier",
                        "src": "9529:1:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "9532:1:56",
                        "type": "",
                        "value": "0"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "9525:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9525:9:56"
                  },
                  "variables": [
                    {
                      "name": "_6",
                      "nodeType": "YulTypedName",
                      "src": "9519:2:56",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "9584:22:56",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "functionName": {
                            "name": "panic_error_0x11",
                            "nodeType": "YulIdentifier",
                            "src": "9586:16:56"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "9586:18:56"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "9586:18:56"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "_6",
                            "nodeType": "YulIdentifier",
                            "src": "9554:2:56"
                          },
                          {
                            "name": "_2",
                            "nodeType": "YulIdentifier",
                            "src": "9558:2:56"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "9550:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "9550:11:56"
                      },
                      {
                        "arguments": [
                          {
                            "name": "x",
                            "nodeType": "YulIdentifier",
                            "src": "9567:1:56"
                          },
                          {
                            "arguments": [
                              {
                                "name": "_4",
                                "nodeType": "YulIdentifier",
                                "src": "9575:2:56"
                              },
                              {
                                "name": "y",
                                "nodeType": "YulIdentifier",
                                "src": "9579:1:56"
                              }
                            ],
                            "functionName": {
                              "name": "sdiv",
                              "nodeType": "YulIdentifier",
                              "src": "9570:4:56"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "9570:11:56"
                          }
                        ],
                        "functionName": {
                          "name": "slt",
                          "nodeType": "YulIdentifier",
                          "src": "9563:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "9563:19:56"
                      }
                    ],
                    "functionName": {
                      "name": "and",
                      "nodeType": "YulIdentifier",
                      "src": "9546:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9546:37:56"
                  },
                  "nodeType": "YulIf",
                  "src": "9543:63:56"
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "9656:22:56",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "functionName": {
                            "name": "panic_error_0x11",
                            "nodeType": "YulIdentifier",
                            "src": "9658:16:56"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "9658:18:56"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "9658:18:56"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "_6",
                            "nodeType": "YulIdentifier",
                            "src": "9626:2:56"
                          },
                          {
                            "name": "_5",
                            "nodeType": "YulIdentifier",
                            "src": "9630:2:56"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "9622:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "9622:11:56"
                      },
                      {
                        "arguments": [
                          {
                            "name": "x",
                            "nodeType": "YulIdentifier",
                            "src": "9639:1:56"
                          },
                          {
                            "arguments": [
                              {
                                "name": "_1",
                                "nodeType": "YulIdentifier",
                                "src": "9647:2:56"
                              },
                              {
                                "name": "y",
                                "nodeType": "YulIdentifier",
                                "src": "9651:1:56"
                              }
                            ],
                            "functionName": {
                              "name": "sdiv",
                              "nodeType": "YulIdentifier",
                              "src": "9642:4:56"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "9642:11:56"
                          }
                        ],
                        "functionName": {
                          "name": "slt",
                          "nodeType": "YulIdentifier",
                          "src": "9635:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "9635:19:56"
                      }
                    ],
                    "functionName": {
                      "name": "and",
                      "nodeType": "YulIdentifier",
                      "src": "9618:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9618:37:56"
                  },
                  "nodeType": "YulIf",
                  "src": "9615:63:56"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "9687:20:56",
                  "value": {
                    "arguments": [
                      {
                        "name": "x",
                        "nodeType": "YulIdentifier",
                        "src": "9702:1:56"
                      },
                      {
                        "name": "y",
                        "nodeType": "YulIdentifier",
                        "src": "9705:1:56"
                      }
                    ],
                    "functionName": {
                      "name": "mul",
                      "nodeType": "YulIdentifier",
                      "src": "9698:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9698:9:56"
                  },
                  "variableNames": [
                    {
                      "name": "product",
                      "nodeType": "YulIdentifier",
                      "src": "9687:7:56"
                    }
                  ]
                }
              ]
            },
            "name": "checked_mul_t_int256",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "x",
                "nodeType": "YulTypedName",
                "src": "9190:1:56",
                "type": ""
              },
              {
                "name": "y",
                "nodeType": "YulTypedName",
                "src": "9193:1:56",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "product",
                "nodeType": "YulTypedName",
                "src": "9199:7:56",
                "type": ""
              }
            ],
            "src": "9160:553:56"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "9763:148:56",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "9786:22:56",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "functionName": {
                            "name": "panic_error_0x12",
                            "nodeType": "YulIdentifier",
                            "src": "9788:16:56"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "9788:18:56"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "9788:18:56"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "y",
                        "nodeType": "YulIdentifier",
                        "src": "9783:1:56"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "9776:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9776:9:56"
                  },
                  "nodeType": "YulIf",
                  "src": "9773:35:56"
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "9859:22:56",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "functionName": {
                            "name": "panic_error_0x11",
                            "nodeType": "YulIdentifier",
                            "src": "9861:16:56"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "9861:18:56"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "9861:18:56"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "x",
                            "nodeType": "YulIdentifier",
                            "src": "9827:1:56"
                          },
                          {
                            "arguments": [
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "9834:3:56",
                                "type": "",
                                "value": "255"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "9839:1:56",
                                "type": "",
                                "value": "1"
                              }
                            ],
                            "functionName": {
                              "name": "shl",
                              "nodeType": "YulIdentifier",
                              "src": "9830:3:56"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "9830:11:56"
                          }
                        ],
                        "functionName": {
                          "name": "eq",
                          "nodeType": "YulIdentifier",
                          "src": "9824:2:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "9824:18:56"
                      },
                      {
                        "arguments": [
                          {
                            "name": "y",
                            "nodeType": "YulIdentifier",
                            "src": "9847:1:56"
                          },
                          {
                            "arguments": [
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "9854:1:56",
                                "type": "",
                                "value": "0"
                              }
                            ],
                            "functionName": {
                              "name": "not",
                              "nodeType": "YulIdentifier",
                              "src": "9850:3:56"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "9850:6:56"
                          }
                        ],
                        "functionName": {
                          "name": "eq",
                          "nodeType": "YulIdentifier",
                          "src": "9844:2:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "9844:13:56"
                      }
                    ],
                    "functionName": {
                      "name": "and",
                      "nodeType": "YulIdentifier",
                      "src": "9820:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9820:38:56"
                  },
                  "nodeType": "YulIf",
                  "src": "9817:64:56"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "9890:15:56",
                  "value": {
                    "arguments": [
                      {
                        "name": "x",
                        "nodeType": "YulIdentifier",
                        "src": "9900:1:56"
                      },
                      {
                        "name": "y",
                        "nodeType": "YulIdentifier",
                        "src": "9903:1:56"
                      }
                    ],
                    "functionName": {
                      "name": "sdiv",
                      "nodeType": "YulIdentifier",
                      "src": "9895:4:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9895:10:56"
                  },
                  "variableNames": [
                    {
                      "name": "r",
                      "nodeType": "YulIdentifier",
                      "src": "9890:1:56"
                    }
                  ]
                }
              ]
            },
            "name": "checked_div_t_int256",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "x",
                "nodeType": "YulTypedName",
                "src": "9748:1:56",
                "type": ""
              },
              {
                "name": "y",
                "nodeType": "YulTypedName",
                "src": "9751:1:56",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "r",
                "nodeType": "YulTypedName",
                "src": "9757:1:56",
                "type": ""
              }
            ],
            "src": "9718:193:56"
          }
        ]
      },
      "contents": "{\n    { }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := calldataload(headStart)\n    }\n    function validator_revert_address(value)\n    {\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function validator_revert_bool(value)\n    {\n        if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_addresst_boolt_address(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_bool(value_1)\n        value1 := value_1\n        let value_2 := calldataload(add(headStart, 64))\n        validator_revert_address(value_2)\n        value2 := value_2\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n    function abi_encode_tuple_t_bool_t_address__to_t_bool_t_address__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, iszero(iszero(value0)))\n        mstore(add(headStart, 32), and(value1, sub(shl(160, 1), 1)))\n    }\n    function abi_encode_tuple_t_address_payable__to_t_address_payable__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n    function abi_decode_tuple_t_uint256t_uint256t_uint256t_uint256t_uint256(headStart, dataEnd) -> value0, value1, value2, value3, value4\n    {\n        if slt(sub(dataEnd, headStart), 160) { revert(0, 0) }\n        value0 := calldataload(headStart)\n        value1 := calldataload(add(headStart, 32))\n        value2 := calldataload(add(headStart, 64))\n        value3 := calldataload(add(headStart, 96))\n        value4 := calldataload(add(headStart, 128))\n    }\n    function abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 128)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n    }\n    function abi_decode_tuple_t_addresst_uint256(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        value1 := calldataload(add(headStart, 32))\n    }\n    function abi_decode_tuple_t_address_payable(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function panic_error_0x11()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x11)\n        revert(0, 0x24)\n    }\n    function checked_add_t_uint256(x, y) -> sum\n    {\n        if gt(x, not(y)) { panic_error_0x11() }\n        sum := add(x, y)\n    }\n    function increment_t_uint256(value) -> ret\n    {\n        if eq(value, not(0)) { panic_error_0x11() }\n        ret := add(value, 1)\n    }\n    function checked_sub_t_uint256(x, y) -> diff\n    {\n        if lt(x, y) { panic_error_0x11() }\n        diff := sub(x, y)\n    }\n    function decrement_t_uint256(value) -> ret\n    {\n        if iszero(value) { panic_error_0x11() }\n        ret := add(value, not(0))\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_address_t_bool_t_address__to_t_address_t_bool_t_address__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        let _1 := sub(shl(160, 1), 1)\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), iszero(iszero(value1)))\n        mstore(add(headStart, 64), and(value2, _1))\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_encode_tuple_t_address_t_address_payable_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        let _1 := sub(shl(160, 1), 1)\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), value2)\n    }\n    function abi_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        validator_revert_bool(value)\n        value0 := value\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_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n    }\n    function abi_encode_tuple_t_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_address_payable__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 checked_mul_t_uint256(x, y) -> product\n    {\n        if and(iszero(iszero(x)), gt(y, div(not(0), x))) { panic_error_0x11() }\n        product := mul(x, y)\n    }\n    function panic_error_0x12()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x12)\n        revert(0, 0x24)\n    }\n    function checked_div_t_uint256(x, y) -> r\n    {\n        if iszero(y) { panic_error_0x12() }\n        r := div(x, y)\n    }\n    function checked_sub_t_uint8(x, y) -> diff\n    {\n        let x_1 := and(x, 0xff)\n        let y_1 := and(y, 0xff)\n        if lt(x_1, y_1) { panic_error_0x11() }\n        diff := sub(x_1, y_1)\n    }\n    function checked_exp_helper(_base, exponent) -> power, base\n    {\n        let power_1 := 1\n        power := power_1\n        base := _base\n        for { } gt(exponent, power_1) { }\n        {\n            if gt(base, div(not(0), base)) { panic_error_0x11() }\n            if and(exponent, power_1) { power := mul(power, base) }\n            base := mul(base, base)\n            exponent := shr(power_1, exponent)\n        }\n    }\n    function checked_exp_unsigned(base, exponent) -> power\n    {\n        if iszero(exponent)\n        {\n            power := 1\n            leave\n        }\n        if iszero(base)\n        {\n            power := 0\n            leave\n        }\n        switch base\n        case 1 {\n            power := 1\n            leave\n        }\n        case 2 {\n            if gt(exponent, 255) { panic_error_0x11() }\n            power := shl(exponent, 1)\n            leave\n        }\n        if or(and(lt(base, 11), lt(exponent, 78)), and(lt(base, 307), lt(exponent, 32)))\n        {\n            power := exp(base, exponent)\n            leave\n        }\n        let power_1, base_1 := checked_exp_helper(base, exponent)\n        if gt(power_1, div(not(0), base_1)) { panic_error_0x11() }\n        power := mul(power_1, base_1)\n    }\n    function checked_exp_t_uint256_t_uint256(base, exponent) -> power\n    {\n        power := checked_exp_unsigned(base, exponent)\n    }\n    function checked_mul_t_int256(x, y) -> product\n    {\n        let _1 := sub(shl(255, 1), 1)\n        let _2 := sgt(y, 0)\n        let _3 := sgt(x, 0)\n        if and(and(_3, _2), gt(x, div(_1, y))) { panic_error_0x11() }\n        let _4 := shl(255, 1)\n        let _5 := slt(y, 0)\n        if and(and(_3, _5), slt(y, sdiv(_4, x))) { panic_error_0x11() }\n        let _6 := slt(x, 0)\n        if and(and(_6, _2), slt(x, sdiv(_4, y))) { panic_error_0x11() }\n        if and(and(_6, _5), slt(x, sdiv(_1, y))) { panic_error_0x11() }\n        product := mul(x, y)\n    }\n    function checked_div_t_int256(x, y) -> r\n    {\n        if iszero(y) { panic_error_0x12() }\n        if and(eq(x, shl(255, 1)), eq(y, not(0))) { panic_error_0x11() }\n        r := sdiv(x, y)\n    }\n}",
      "id": 56,
      "language": "Yul",
      "name": "#utility.yul"
    }
  ],
  "sourceMap": "444:11910:48:-:0;;;2540:243;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;921:32:3;719:10:27;921:18:3;:32::i;:::-;1701:1:6;1806:22;;2670:12:48;:28;;-1:-1:-1;;;;;2670:28:48;;;-1:-1:-1;;;;;;2670:28:48;;;;;;;2708:15;:34;;;;;;;;;;;;;;;2752:10;:24;444:11910;;2270:187:3;2343:16;2362:6;;-1:-1:-1;;;;;2378:17:3;;;-1:-1:-1;;;;;;2378:17:3;;;;;;2410:40;;2362:6;;;;;;;2410:40;;2343:16;2410:40;2333:124;2270:187;:::o;14:131:56:-;-1:-1:-1;;;;;89:31:56;;79:42;;69:70;;135:1;132;125:12;69:70;14:131;:::o;150:454::-;246:6;254;262;315:2;303:9;294:7;290:23;286:32;283:52;;;331:1;328;321:12;283:52;363:9;357:16;382:31;407:5;382:31;:::i;:::-;482:2;467:18;;461:25;432:5;;-1:-1:-1;495:33:56;461:25;495:33;:::i;:::-;547:7;537:17;;;594:2;583:9;579:18;573:25;563:35;;150:454;;;;;:::o;:::-;444:11910:48;;;;;;",
  "deployedSourceMap": "444:11910:48:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3353:362;;;;;;;;;;;;;:::i;:::-;;;160:25:56;;;148:2;133:18;3353:362:48;;;;;;;;3775:435;;;;;;;;;;;;;:::i;9537:245::-;;;;;;;;;;-1:-1:-1;9537:245:48;;;;;:::i;:::-;;:::i;:::-;;1780:62;;;;;;;;;;-1:-1:-1;1780:62:48;;;;;:::i;:::-;;;;;;;;;;;;;;2851:113;;;;;;;;;;;;;:::i;8308:241::-;;;;;;;;;;-1:-1:-1;8308:241:48;;;;;:::i;:::-;;:::i;1639:25::-;;;;;;;;;;;;;;;;1668:101:3;;;;;;;;;;;;;:::i;8889:542:48:-;;;;;;;;;;-1:-1:-1;8889:542:48;;;;;:::i;:::-;;:::i;1036:85:3:-;;;;;;;;;;-1:-1:-1;1082:7:3;1108:6;-1:-1:-1;;;;;1108:6:3;1036:85;;;-1:-1:-1;;;;;1584:32:56;;;1566:51;;1554:2;1539:18;1036:85:3;1420:203:56;1848:85:48;;;;;;;;;;-1:-1:-1;1848:85:48;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1848:85:48;;;;;;;1821:14:56;;1814:22;1796:41;;-1:-1:-1;;;;;1873:32:56;;;1868:2;1853:18;;1846:60;1769:18;1848:85:48;1628:284:56;1515:41:48;;;;;;;;;;-1:-1:-1;1515:41:48;;;;;;1562:27;;;;;;;;;;-1:-1:-1;1562:27:48;;;;-1:-1:-1;;;;;1562:27:48;;;1595:38;;;;;;;;;;-1:-1:-1;1595:38:48;;;;-1:-1:-1;;;;;1595:38:48;;;10228:2124;;;;;;;;;;-1:-1:-1;10228:2124:48;;;;;:::i;:::-;;:::i;3095:180::-;;;;;;;;;;-1:-1:-1;3095:180:48;;;;;:::i;:::-;3196:7;3226:42;;;:27;:42;;;;;;;3095:180;4420:563;;;;;;;;;;;;;:::i;:::-;;;;2831:25:56;;;2887:2;2872:18;;2865:34;;;;2915:18;;;2908:34;2973:2;2958:18;;2951:34;2818:3;2803:19;4420:563:48;2600:391:56;5262:2544:48;;;;;;:::i;:::-;;:::i;1918:198:3:-;;;;;;;;;;-1:-1:-1;1918:198:3;;;;;:::i;:::-;;:::i;7959:215:48:-;;;;;;;;;;-1:-1:-1;7959:215:48;;;;;:::i;:::-;;:::i;3353:362::-;3407:7;;;3460:219;3531:17;918:14:28;3516:12:48;:42;3460:219;;;3627:41;;;;:27;:41;;;;;;3611:57;;;;:::i;:::-;;-1:-1:-1;3572:14:48;;;;:::i;:::-;;;;3460:219;;;-1:-1:-1;3696:12:48;3353:362;-1:-1:-1;3353:362:48:o;3775:435::-;3830:7;3867:20;3920:1;3890:27;:17;918:14:28;;827:112;3890:27:48;:31;;;;:::i;:::-;3867:54;;3849:336;3935:16;;3849:336;;4025:35;;;;:21;:35;;;;;:48;4093:15;-1:-1:-1;4004:171:48;;4148:12;3775:435;-1:-1:-1;3775:435:48:o;4004:171::-;3965:14;;;;:::i;:::-;;;;3849:336;;;;4202:1;4195:8;;3775:435;:::o;9537:245::-;1082:7:3;1108:6;-1:-1:-1;;;;;1108:6:3;719:10:27;1248:23:3;1240:68;;;;-1:-1:-1;;;1240:68:3;;;;;;;:::i;:::-;;;;;;;;;9632:15:48::1;9615:14;:32;9611:71;;;9656:26;;-1:-1:-1::0;;;9656:26:48::1;;;;;;;;;;;9611:71;9692:10;:27:::0;;;9735:40:::1;::::0;160:25:56;;;9735:40:48::1;::::0;148:2:56;133:18;9735:40:48::1;;;;;;;;9537:245:::0;:::o;2851:113::-;2904:7;2930:27;:17;918:14:28;;827:112;2930:27:48;2923:34;;2851:113;:::o;8308:241::-;1082:7:3;1108:6;-1:-1:-1;;;;;1108:6:3;719:10:27;1248:23:3;1240:68;;;;-1:-1:-1;;;1240:68:3;;;;;;;:::i;:::-;8426:16:48;-1:-1:-1;;;;;2455:22:48;::::1;2451:65;;2486:30;;-1:-1:-1::0;;;2486:30:48::1;;;;;;;;;;;2451:65;8458:12:::2;:31:::0;;-1:-1:-1;;;;;;8458:31:48::2;-1:-1:-1::0;;;;;8458:31:48;::::2;::::0;;::::2;::::0;;;8505:37:::2;::::0;1566:51:56;;;8505:37:48::2;::::0;1554:2:56;1539:18;8505:37:48::2;;;;;;;1318:1:3::1;8308:241:48::0;:::o;1668:101:3:-;1082:7;1108:6;-1:-1:-1;;;;;1108:6:3;719:10:27;1248:23:3;1240:68;;;;-1:-1:-1;;;1240:68:3;;;;;;;:::i;:::-;1732:30:::1;1759:1;1732:18;:30::i;:::-;1668:101::o:0;8889:542:48:-;1082:7:3;1108:6;-1:-1:-1;;;;;1108:6:3;719:10:27;1248:23:3;1240:68;;;;-1:-1:-1;;;1240:68:3;;;;;;;:::i;:::-;9063:18:48;-1:-1:-1;;;;;2455:22:48;::::1;2451:65;;2486:30;;-1:-1:-1::0;;;2486:30:48::1;;;;;;;;;;;2451:65;-1:-1:-1::0;;;;;9093:41:48;;::::2;;::::0;;;:26:::2;:41;::::0;;;;;;;;:85;;-1:-1:-1;;;;;;9188:93:48;9093:85;::::2;;-1:-1:-1::0;;;;;;9188:93:48;;;;;;9093:85:::2;9188:93:::0;;::::2;::::0;;::::2;;::::0;;;9297:127;;4847:34:56;;;4897:18;;;4890:50;4956:18;;4949:43;;;;9297:127:48::2;::::0;4797:2:56;4782:18;9297:127:48::2;;;;;;;1318:1:3::1;8889:542:48::0;;;:::o;10228:2124::-;1082:7:3;1108:6;-1:-1:-1;;;;;1108:6:3;719:10:27;1248:23:3;1240:68;;;;-1:-1:-1;;;1240:68:3;;;;;;;:::i;:::-;10451:27:48::1;10481:36:::0;;;:21:::1;:36;::::0;;;;:62;;10579:45:::1;::::0;::::1;::::0;10670:68:::1;::::0;::::1;::::0;10786:79:::1;::::0;;::::1;::::0;10481:62;;10579:45;;10966:24;;:60;::::1;;;-1:-1:-1::0;11006:20:48;;10966:60:::1;:106;;;;-1:-1:-1::0;11042:30:48;;10966:106:::1;:154;;;;-1:-1:-1::0;11088:32:48;;10966:154:::1;10949:211;;;11131:29;:17;1032:19:28::0;;1050:1;1032:19;;;945:123;11131:29:48::1;11308:18:::0;;;:159:::1;;-1:-1:-1::0;11343:18:48;;;::::1;::::0;:123:::1;;-1:-1:-1::0;11413:21:48::1;:40;11435:17;11451:1;11435:13:::0;:17:::1;:::i;:::-;11413:40;;;;;;;;;;;:53;;;11381:13;:85;11343:123;11291:222;;;11485:28;;-1:-1:-1::0;;;11485:28:48::1;;;;;;;;;;;11291:222;11583:14:::0;11579:51:::1;;11606:24;;-1:-1:-1::0;;;11606:24:48::1;;;;;;;;;;;11579:51;11644:24:::0;11640:71:::1;;11677:34;;-1:-1:-1::0;;;11677:34:48::1;;;;;;;;;;;11640:71;11725:26:::0;11721:87:::1;;11772:36;;-1:-1:-1::0;;;11772:36:48::1;;;;;;;;;;;11721:87;11819:36;::::0;;;:21:::1;:36;::::0;;;;;;;;:65;;;11894:45:::1;::::0;::::1;:57:::0;;;11961:68:::1;::::0;::::1;:90:::0;;;12061:70:::1;;:94:::0;;;12171:174;;2831:25:56;;;2872:18;;;2865:34;;;2915:18;;;2908:34;;;2973:2;2958:18;;2951:34;;;11819:36:48;;12171:174:::1;::::0;2818:3:56;2803:19;12171:174:48::1;;;;;;;10441:1911;;;;10228:2124:::0;;;;;:::o;4420:563::-;4514:7;4535;4556;4577;4609:27;4639:24;:22;:24::i;:::-;4694:42;;;;:21;:42;;;;;:55;;4763:51;;;;4828:61;;;;4903:63;;;;;4694:55;;4763:51;;-1:-1:-1;4828:61:48;;-1:-1:-1;4903:63:48;-1:-1:-1;4420:563:48;-1:-1:-1;;4420:563:48:o;5262:2544::-;1744:1:6;2325:7;;:19;;2317:63;;;;-1:-1:-1;;;2317:63:6;;5205:2:56;2317:63:6;;;5187:21:56;5244:2;5224:18;;;5217:30;5283:33;5263:18;;;5256:61;5334:18;;2317:63:6;5003:355:56;2317:63:6;1744:1;2455:7;:18;5398:27:48::1;5428:24;:22;:24::i;:::-;5398:54;;5476:34;5524:27:::0;5565:40:::1;5619:42:::0;5674:26:::1;:24;:26::i;:::-;5462:238;;;;;;;;5803:26;5785:15;:44;:89;;;;5864:10;;5845:15;:29;;5785:89;5768:144;;;5892:20;;-1:-1:-1::0;;;5892:20:48::1;;;;;;;;;;;5768:144;-1:-1:-1::0;;;;;5968:48:48;::::1;;::::0;;;:26:::1;:48;::::0;;;;:58;::::1;;5963:110;;6047:26;;-1:-1:-1::0;;;6047:26:48::1;;;;;;;;;;;5963:110;6173:12;::::0;-1:-1:-1;;;;;6173:12:48::1;6139:18;6224:24;6237:2;6241:6;6224:12;:24::i;:::-;6197:51;;6282:32;6263:16;:51;6259:109;;;6335:33;;-1:-1:-1::0;;;6335:33:48::1;;;;;;;;;;;6259:109;6379:21;6424:155;6474:51;6487:16;6505:19;6474:12;:51::i;:::-;6544:1;6563:2;6424:25;:155::i;:::-;6698:48;::::0;;;:27:::1;:48;::::0;;;;;6379:210;;-1:-1:-1;6645:101:48::1;::::0;:34;:101:::1;:::i;:::-;6617:13;:129;6600:189;;;6764:25;;-1:-1:-1::0;;;6764:25:48::1;;;;;;;;;;;6600:189;6800:48;::::0;;;:27:::1;:48;::::0;;;;:65;;6852:13;;6800:48;:65:::1;::::0;6852:13;;6800:65:::1;:::i;:::-;::::0;;;-1:-1:-1;;;;;;;6952:34:48;::::1;6948:618;;7018:7;7006:9;:19;7002:396;;;7052:40;;-1:-1:-1::0;;;7052:40:48::1;;;;;;;;;;;7002:396;7131:15;::::0;:33:::1;::::0;-1:-1:-1;;;;;7131:15:48;;::::1;::::0;:33;::::1;;;::::0;7156:7;;7131:15:::1;:33:::0;:15;:33;7156:7;7131:15;:33;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;7332:51:48::1;::::0;7340:10:::1;::::0;7361:21:::1;7332:51:::0;::::1;;;::::0;::::1;::::0;;;7361:21;7340:10;7332:51;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;6948:618;;;7530:15;::::0;;7492:63:::1;::::0;-1:-1:-1;;;7492:63:48;;7518:10:::1;7492:63:::0;;::::1;5611:34:56::0;;;;-1:-1:-1;;;;;7530:15:48;;::::1;5661:18:56::0;;;5654:43;5713:18;;;5706:34;;;7457:20:48;;7492:25;;::::1;::::0;::::1;::::0;5546:18:56;;7492:63:48::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;7414:152;6948:618;7619:37;::::0;-1:-1:-1;;;7619:37:48;;7630:10:::1;7619:37;::::0;::::1;6175:51:56::0;6242:18;;;6235:34;;;-1:-1:-1;;;;;7619:10:48;::::1;::::0;::::1;::::0;6148:18:56;;7619:37:48::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;7671:128:48::1;::::0;;6454:25:56;;;6510:2;6495:18;;6488:34;;;-1:-1:-1;;;;;7671:128:48;::::1;::::0;-1:-1:-1;7697:10:48::1;::::0;-1:-1:-1;7671:128:48::1;::::0;6427:18:56;7671:128:48::1;;;;;;;-1:-1:-1::0;;1701:1:6;2628:22;;-1:-1:-1;;;;;;;;5262:2544:48:o;1918:198:3:-;1082:7;1108:6;-1:-1:-1;;;;;1108:6:3;719:10:27;1248:23:3;1240:68;;;;-1:-1:-1;;;1240:68:3;;;;;;;:::i;:::-;-1:-1:-1;;;;;2006:22:3;::::1;1998:73;;;::::0;-1:-1:-1;;;1998:73:3;;6735:2:56;1998:73:3::1;::::0;::::1;6717:21:56::0;6774:2;6754:18;;;6747:30;6813:34;6793:18;;;6786:62;-1:-1:-1;;;6864:18:56;;;6857:36;6910:19;;1998:73:3::1;6533:402:56::0;1998:73:3::1;2081:28;2100:8;2081:18;:28::i;:::-;1918:198:::0;:::o;7959:215:48:-;1082:7:3;1108:6;-1:-1:-1;;;;;1108:6:3;719:10:27;1248:23:3;1240:68;;;;-1:-1:-1;;;1240:68:3;;;;;;;:::i;:::-;8071:15:48::1;:37:::0;;-1:-1:-1;;;;;;8071:37:48::1;-1:-1:-1::0;;;;;8071:37:48;::::1;::::0;;::::1;::::0;;;8124:43:::1;::::0;1566:51:56;;;8124:43:48::1;::::0;1554:2:56;1539:18;8124:43:48::1;1420:203:56::0;2270:187:3;2343:16;2362:6;;-1:-1:-1;;;;;2378:17:3;;;-1:-1:-1;;;;;;2378:17:3;;;;;;2410:40;;2362:6;;;;;;;2410:40;;2343:16;2410:40;2333:124;2270:187;:::o;3451:96:37:-;3509:7;3535:5;3539:1;3535;:5;:::i;:::-;3528:12;;3451:96;;;;;:::o;3836:::-;3894:7;3920:5;3924:1;3920;:5;:::i;1027:420:45:-;1154:6;1193:9;1176:26;;:14;:26;;;1172:246;;;1253:26;1265:14;1253:9;:26;:::i;:::-;1241:39;;1245:35;;1241:2;:39;:::i;:::-;1225:56;;:6;:56;:::i;:::-;1218:63;;;;1172:246;1319:9;1302:26;;:14;:26;;;1298:120;;;1379:26;1396:9;1379:14;:26;:::i;:::-;1367:39;;1371:35;;1367:2;:39;:::i;:::-;1351:56;;:6;:56;:::i;1298:120::-;-1:-1:-1;1434:6:45;1027:420;;;;;;:::o;196:180:56:-;255:6;308:2;296:9;287:7;283:23;279:32;276:52;;;324:1;321;314:12;276:52;-1:-1:-1;347:23:56;;196:180;-1:-1:-1;196:180:56:o;381:131::-;-1:-1:-1;;;;;456:31:56;;446:42;;436:70;;502:1;499;492:12;517:247;576:6;629:2;617:9;608:7;604:23;600:32;597:52;;;645:1;642;635:12;597:52;684:9;671:23;703:31;728:5;703:31;:::i;769:118::-;855:5;848:13;841:21;834:5;831:32;821:60;;877:1;874;867:12;892:523;966:6;974;982;1035:2;1023:9;1014:7;1010:23;1006:32;1003:52;;;1051:1;1048;1041:12;1003:52;1090:9;1077:23;1109:31;1134:5;1109:31;:::i;:::-;1159:5;-1:-1:-1;1216:2:56;1201:18;;1188:32;1229:30;1188:32;1229:30;:::i;:::-;1278:7;-1:-1:-1;1337:2:56;1322:18;;1309:32;1350:33;1309:32;1350:33;:::i;:::-;1402:7;1392:17;;;892:523;;;;;:::o;2141:454::-;2236:6;2244;2252;2260;2268;2321:3;2309:9;2300:7;2296:23;2292:33;2289:53;;;2338:1;2335;2328:12;2289:53;-1:-1:-1;;2361:23:56;;;2431:2;2416:18;;2403:32;;-1:-1:-1;2482:2:56;2467:18;;2454:32;;2533:2;2518:18;;2505:32;;-1:-1:-1;2584:3:56;2569:19;2556:33;;-1:-1:-1;2141:454:56;-1:-1:-1;2141:454:56:o;2996:315::-;3064:6;3072;3125:2;3113:9;3104:7;3100:23;3096:32;3093:52;;;3141:1;3138;3131:12;3093:52;3180:9;3167:23;3199:31;3224:5;3199:31;:::i;:::-;3249:5;3301:2;3286:18;;;;3273:32;;-1:-1:-1;;;2996:315:56:o;3576:127::-;3637:10;3632:3;3628:20;3625:1;3618:31;3668:4;3665:1;3658:15;3692:4;3689:1;3682:15;3708:128;3748:3;3779:1;3775:6;3772:1;3769:13;3766:39;;;3785:18;;:::i;:::-;-1:-1:-1;3821:9:56;;3708:128::o;3841:135::-;3880:3;-1:-1:-1;;3901:17:56;;3898:43;;;3921:18;;:::i;:::-;-1:-1:-1;3968:1:56;3957:13;;3841:135::o;3981:125::-;4021:4;4049:1;4046;4043:8;4040:34;;;4054:18;;:::i;:::-;-1:-1:-1;4091:9:56;;3981:125::o;4111:136::-;4150:3;4178:5;4168:39;;4187:18;;:::i;:::-;-1:-1:-1;;;4223:18:56;;4111:136::o;4252:356::-;4454:2;4436:21;;;4473:18;;;4466:30;4532:34;4527:2;4512:18;;4505:62;4599:2;4584:18;;4252:356::o;5751:245::-;5818:6;5871:2;5859:9;5850:7;5846:23;5842:32;5839:52;;;5887:1;5884;5877:12;5839:52;5919:9;5913:16;5938:28;5960:5;5938:28;:::i;7156:168::-;7196:7;7262:1;7258;7254:6;7250:14;7247:1;7244:21;7239:1;7232:9;7225:17;7221:45;7218:71;;;7269:18;;:::i;:::-;-1:-1:-1;7309:9:56;;7156:168::o;7329:127::-;7390:10;7385:3;7381:20;7378:1;7371:31;7421:4;7418:1;7411:15;7445:4;7442:1;7435:15;7461:120;7501:1;7527;7517:35;;7532:18;;:::i;:::-;-1:-1:-1;7566:9:56;;7461:120::o;7586:195::-;7624:4;7661;7658:1;7654:12;7693:4;7690:1;7686:12;7718:3;7713;7710:12;7707:38;;;7725:18;;:::i;:::-;7762:13;;;7586:195;-1:-1:-1;;;7586:195:56:o;7786:422::-;7875:1;7918:5;7875:1;7932:270;7953:7;7943:8;7940:21;7932:270;;;8012:4;8008:1;8004:6;8000:17;7994:4;7991:27;7988:53;;;8021:18;;:::i;:::-;8071:7;8061:8;8057:22;8054:55;;;8091:16;;;;8054:55;8170:22;;;;8130:15;;;;7932:270;;;7936:3;7786:422;;;;;:::o;8213:806::-;8262:5;8292:8;8282:80;;-1:-1:-1;8333:1:56;8347:5;;8282:80;8381:4;8371:76;;-1:-1:-1;8418:1:56;8432:5;;8371:76;8463:4;8481:1;8476:59;;;;8549:1;8544:130;;;;8456:218;;8476:59;8506:1;8497:10;;8520:5;;;8544:130;8581:3;8571:8;8568:17;8565:43;;;8588:18;;:::i;:::-;-1:-1:-1;;8644:1:56;8630:16;;8659:5;;8456:218;;8758:2;8748:8;8745:16;8739:3;8733:4;8730:13;8726:36;8720:2;8710:8;8707:16;8702:2;8696:4;8693:12;8689:35;8686:77;8683:159;;;-1:-1:-1;8795:19:56;;;8827:5;;8683:159;8874:34;8899:8;8893:4;8874:34;:::i;:::-;8944:6;8940:1;8936:6;8932:19;8923:7;8920:32;8917:58;;;8955:18;;:::i;:::-;8993:20;;8213:806;-1:-1:-1;;;8213:806:56:o;9024:131::-;9084:5;9113:36;9140:8;9134:4;9113:36;:::i;9160:553::-;9199:7;-1:-1:-1;;;;;9269:9:56;;;9297;;;9322:11;;;9341:10;;;9335:17;;9318:35;9315:61;;;9356:18;;:::i;:::-;-1:-1:-1;;;9432:1:56;9425:9;;9450:11;;;9470;;;9463:19;;9446:37;9443:63;;;9486:18;;:::i;:::-;9532:1;9529;9525:9;9515:19;;9579:1;9575:2;9570:11;9567:1;9563:19;9558:2;9554;9550:11;9546:37;9543:63;;;9586:18;;:::i;:::-;9651:1;9647:2;9642:11;9639:1;9635:19;9630:2;9626;9622:11;9618:37;9615:63;;;9658:18;;:::i;:::-;-1:-1:-1;;;9698:9:56;;;;;9160:553;-1:-1:-1;;;9160:553:56:o;9718:193::-;9757:1;9783;9773:35;;9788:18;;:::i;:::-;-1:-1:-1;;;9824:18:56;;-1:-1:-1;;9844:13:56;;9820:38;9817:64;;;9861:18;;:::i;:::-;-1:-1:-1;9895:10:56;;9718:193::o",
  "source": "// SPDX-License-Identifier: AGPL-3.0\n\npragma solidity ^0.8.11;\n\nimport \"@openzeppelin/contracts/access/Ownable.sol\";\nimport \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\nimport \"@openzeppelin/contracts/utils/Counters.sol\";\nimport \"@openzeppelin/contracts/utils/math/SafeMath.sol\";\nimport \"@openzeppelin/contracts/security/ReentrancyGuard.sol\";\nimport \"../../libraries/PriceConverter.sol\";\nimport \"../../token/interfaces/IERC20Custom.sol\";\n\ncontract MockPresale is Ownable, ReentrancyGuard {\n    using Counters for Counters.Counter;\n    using SafeMath for uint256;\n\n    struct PresaleData {\n        uint256 startingTime;\n        uint256 usdPrice;\n        uint256 minimumUSDPurchase;\n        uint256 maximumPresaleAmount;\n    }\n    struct PresalePaymentTokenData {\n        bool available;\n        address aggregatorAddress;\n    }\n\n    event TokenPresold(\n        address indexed to,\n        address indexed paymentTokenAddress,\n        uint256 amount,\n        uint256 paymentTokenamount\n    );\n    event PresaleRoundUpdated(\n        uint256 indexed presaleRound,\n        uint256 startingTime,\n        uint256 usdPrice,\n        uint256 minimumUSDPurchase,\n        uint256 maximumPresaleAmount\n    );\n    event PresaleReceiverUpdated(address receiverAddress);\n    event PresalePaymentTokenUpdated(\n        address tokenAddress,\n        bool tokenAvailability,\n        address aggregatorAddress\n    );\n    event PresaleTokenUpdated(address tokenAddress);\n    event PresaleEndingTimeUpdated(uint256 endingTime);\n\n    Counters.Counter public totalPresaleRound;\n    address public tokenAddress;\n    address payable public presaleReceiver;\n    uint256 public endingTime;\n\n    // Mapping `presaleRound` to its data details\n    mapping(uint256 => PresaleData) presaleDetailsMapping;\n    mapping(uint256 => uint256) public presaleAmountByRoundMapping;\n    mapping(address => PresalePaymentTokenData)\n        public presalePaymentTokenMapping;\n\n    error presaleRoundClosed();\n    error presaleTokenNotAvailable();\n    error presaleNativeTokenPaymentNotSufficient();\n    error presaleStartingTimeInvalid();\n    error presaleUSDPriceInvalid();\n    error presaleMimumumUSDPurchaseInvalid();\n    error presaleMaximumPresaleAmountInvalid();\n    error presaleUSDPurchaseNotSufficient();\n    error presaleAmountOverdemand();\n    error presaleNonZeroAddressInvalid();\n    error presaleEndingTimeInvalid();\n\n    modifier onlyNonZeroAddress(address _address) {\n        if (_address == address(0)) revert presaleNonZeroAddressInvalid();\n        _;\n    }\n\n    constructor(\n        address _tokenAddress,\n        address payable _presaleReceiver,\n        uint256 _endingTime\n    ) {\n        tokenAddress = _tokenAddress;\n        presaleReceiver = _presaleReceiver;\n        endingTime = _endingTime;\n    }\n\n    /**\n     * @dev Get total amount of presale round\n     */\n    function getTotalPresaleRound() public view returns (uint256) {\n        return totalPresaleRound.current();\n    }\n\n    /**\n     * @dev Get presale total amount By presale round\n     * @param _presaleRound - The presale round chosen\n     */\n    function getPresaleAmountByRound(uint256 _presaleRound)\n        public\n        view\n        returns (uint256)\n    {\n        return presaleAmountByRoundMapping[_presaleRound];\n    }\n\n    /**\n     * @dev Get total amount of presale from all rounds\n     */\n    function getTotalPresaleAmount() public view returns (uint256) {\n        uint256 totalPresale = 0;\n        for (\n            uint256 presaleRound = 0;\n            presaleRound < totalPresaleRound.current();\n            presaleRound++\n        ) {\n            totalPresale += presaleAmountByRoundMapping[presaleRound];\n        }\n\n        return totalPresale;\n    }\n\n    /**\n     * @dev Get Current Presale Round\n     */\n    function getCurrentPresaleRound() public view returns (uint256) {\n        for (\n            uint256 presaleRound = totalPresaleRound.current() - 1;\n            presaleRound > 0;\n            presaleRound--\n        ) {\n            if (\n                presaleDetailsMapping[presaleRound].startingTime <=\n                block.timestamp\n            ) {\n                return presaleRound;\n            }\n        }\n\n        return 0;\n    }\n\n    /**\n     * @dev Getting the Current Presale Details, including:\n     * @return Starting Time\n     * @return USD Price\n     * @return Minimum USD Purchase\n     * @return Maximum Presale Amount\n     */\n    function getCurrentPresaleDetails()\n        public\n        view\n        returns (\n            uint256,\n            uint256,\n            uint256,\n            uint256\n        )\n    {\n        uint256 currentPresaleRound = getCurrentPresaleRound();\n        return (\n            presaleDetailsMapping[currentPresaleRound].startingTime,\n            presaleDetailsMapping[currentPresaleRound].usdPrice,\n            presaleDetailsMapping[currentPresaleRound].minimumUSDPurchase,\n            presaleDetailsMapping[currentPresaleRound].maximumPresaleAmount\n        );\n    }\n\n    /**\n     * @dev Execute the Presale of ALPS Token in exchange of other token\n     * @param _paymentTokenAddress - Address of the token use to pay (address 0 is for native token)\n     * @param _amount - Amount denominated in the `paymentTokenAddress` being paid\n     */\n    function presaleTokens(address _paymentTokenAddress, uint256 _amount)\n        public\n        payable\n        nonReentrant\n    {\n        uint256 currentPresaleRound = getCurrentPresaleRound();\n        (\n            uint256 currentPresaleStartingTime,\n            uint256 currentPresalePrice,\n            uint256 currentPresaleMinimumUSDPurchase,\n            uint256 currentPresaleMaximumPresaleAmount\n        ) = getCurrentPresaleDetails();\n\n        // Check whether the presale round is still open\n        if (\n            block.timestamp < currentPresaleStartingTime ||\n            block.timestamp >= endingTime\n        ) revert presaleRoundClosed();\n\n        // Check whether token is valid\n        if (!presalePaymentTokenMapping[_paymentTokenAddress].available)\n            revert presaleTokenNotAvailable();\n\n        // Convert the token with Chainlink Price Feed\n        IERC20Custom token = IERC20Custom(tokenAddress);\n\n        uint256 presaleUSDAmount = SafeMath.mul(30, 10**18);\n\n        if (presaleUSDAmount < currentPresaleMinimumUSDPurchase)\n            revert presaleUSDPurchaseNotSufficient();\n\n        uint256 presaleAmount = uint256(\n            PriceConverter.scalePrice(\n                int256(SafeMath.div(presaleUSDAmount, currentPresalePrice)),\n                0,\n                18\n            )\n        );\n\n        if (\n            presaleAmount >\n            currentPresaleMaximumPresaleAmount -\n                presaleAmountByRoundMapping[currentPresaleRound]\n        ) revert presaleAmountOverdemand();\n\n        presaleAmountByRoundMapping[currentPresaleRound] += presaleAmount;\n\n        // Receive the payment token and transfer it to another address\n        if (_paymentTokenAddress == address(0)) {\n            if (msg.value < _amount) {\n                revert presaleNativeTokenPaymentNotSufficient();\n            } else {\n                presaleReceiver.transfer(_amount);\n\n                // in case you deployed the contract with more ether than required,\n                // transfer the remaining ether back to yourself\n                payable(msg.sender).transfer(address(this).balance);\n            }\n        } else {\n            IERC20 paymentToken = IERC20(_paymentTokenAddress);\n            paymentToken.transferFrom(msg.sender, presaleReceiver, _amount);\n        }\n\n        // Send ALPS token to `msg.sender`\n        token.mint(msg.sender, presaleAmount);\n        emit TokenPresold(\n            msg.sender,\n            _paymentTokenAddress,\n            presaleAmount,\n            _amount\n        );\n    }\n\n    /**\n     * @dev Set new Presale Receiver Address\n     * @param _newPresaleReceiver - Address that'll receive the presale payment token\n     */\n    function setPresaleReceiver(address payable _newPresaleReceiver)\n        public\n        onlyOwner\n    {\n        presaleReceiver = _newPresaleReceiver;\n\n        emit PresaleReceiverUpdated(_newPresaleReceiver);\n    }\n\n    /**\n     * @dev Set new Presale Token Address\n     * @param _newTokenAddress - Address of token that'll be presaled\n     */\n    function setPresaleTokenAddress(address _newTokenAddress)\n        public\n        onlyOwner\n        onlyNonZeroAddress(_newTokenAddress)\n    {\n        tokenAddress = _newTokenAddress;\n\n        emit PresaleTokenUpdated(_newTokenAddress);\n    }\n\n    /**\n     * @dev Set Presale Payment Token Info\n     * @param _tokenAddress - Token Address use to purchase Presale\n     * @param _tokenAvailability - Indication whether Token Address can be used for Presale\n     * @param _aggregatorAddress - Chainlink's Aggregator Address to determine the USD price (for `presaleTokens`)\n     */\n    function setPresalePaymentToken(\n        address _tokenAddress,\n        bool _tokenAvailability,\n        address _aggregatorAddress\n    ) public onlyOwner onlyNonZeroAddress(_aggregatorAddress) {\n        presalePaymentTokenMapping[_tokenAddress]\n            .available = _tokenAvailability;\n        presalePaymentTokenMapping[_tokenAddress]\n            .aggregatorAddress = _aggregatorAddress;\n\n        emit PresalePaymentTokenUpdated(\n            _tokenAddress,\n            _tokenAvailability,\n            _aggregatorAddress\n        );\n    }\n\n    /**\n     * @dev Set new Ending time\n     * @param _newEndingTime - New Ending Timestamp\n     */\n    function setEndingTime(uint256 _newEndingTime) public onlyOwner {\n        if (_newEndingTime < block.timestamp) revert presaleEndingTimeInvalid();\n        endingTime = _newEndingTime;\n\n        emit PresaleEndingTimeUpdated(_newEndingTime);\n    }\n\n    /**\n     * @dev Creating/Updating a presale round information\n     * @param _presaleRound - The presale round chosen\n     * @param _startingTime - The starting Presale time\n     * @param _usdPrice - The USD Price of the Token in certain Presale Round\n     * @param _minimumUSDPurchase - The minimum USD amount to purchase the token\n     * @param _maximumPresaleAmount - The maximum amount of token available for a presale round\n     */\n    function setPresaleRound(\n        uint256 _presaleRound,\n        uint256 _startingTime,\n        uint256 _usdPrice,\n        uint256 _minimumUSDPurchase,\n        uint256 _maximumPresaleAmount\n    ) public onlyOwner {\n        uint256 presaleStartingTime = presaleDetailsMapping[_presaleRound]\n            .startingTime;\n        uint256 presaleUSDPrice = presaleDetailsMapping[_presaleRound].usdPrice;\n        uint256 presaleMinimumUSDPurchase = presaleDetailsMapping[_presaleRound]\n            .minimumUSDPurchase;\n        uint256 presaleMaximumPresaleAmount = presaleDetailsMapping[\n            _presaleRound\n        ].maximumPresaleAmount;\n\n        // Increment the total round counter when new presale is created\n        if (\n            presaleStartingTime == 0 &&\n            presaleUSDPrice == 0 &&\n            presaleMinimumUSDPurchase == 0 &&\n            presaleMaximumPresaleAmount == 0\n        ) totalPresaleRound.increment();\n\n        // Starting time has to be:\n        // - larger than zero\n        // - larger than previous round starting time\n        if (\n            _startingTime == 0 ||\n            (_presaleRound != 0 &&\n                _startingTime <\n                presaleDetailsMapping[_presaleRound - 1].startingTime)\n        ) revert presaleStartingTimeInvalid();\n\n        // These values given must be larger than zero\n        if (_usdPrice == 0) revert presaleUSDPriceInvalid();\n        if (_minimumUSDPurchase == 0) revert presaleMimumumUSDPurchaseInvalid();\n        if (_maximumPresaleAmount == 0)\n            revert presaleMaximumPresaleAmountInvalid();\n\n        presaleDetailsMapping[_presaleRound].startingTime = _startingTime;\n        presaleDetailsMapping[_presaleRound].usdPrice = _usdPrice;\n        presaleDetailsMapping[_presaleRound]\n            .minimumUSDPurchase = _minimumUSDPurchase;\n        presaleDetailsMapping[_presaleRound]\n            .maximumPresaleAmount = _maximumPresaleAmount;\n\n        emit PresaleRoundUpdated(\n            _presaleRound,\n            _startingTime,\n            _usdPrice,\n            _minimumUSDPurchase,\n            _maximumPresaleAmount\n        );\n    }\n}\n",
  "sourcePath": "/Users/yosephks/Documents/GitHub/alpsfinance-smart-contracts/contracts/presale/mocks/MockPresale.sol",
  "ast": {
    "absolutePath": "project:/contracts/presale/mocks/MockPresale.sol",
    "exportedSymbols": {
      "AggregatorV3Interface": [
        45
      ],
      "Context": [
        5297
      ],
      "Counters": [
        5371
      ],
      "IERC20": [
        2884
      ],
      "IERC20Custom": [
        9652
      ],
      "MockPresale": [
        9078
      ],
      "Ownable": [
        532
      ],
      "PriceConverter": [
        7631
      ],
      "ReentrancyGuard": [
        742
      ],
      "SafeMath": [
        7057
      ]
    },
    "id": 9079,
    "license": "AGPL-3.0",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 8370,
        "literals": [
          "solidity",
          "^",
          "0.8",
          ".11"
        ],
        "nodeType": "PragmaDirective",
        "src": "38:24:48"
      },
      {
        "absolutePath": "@openzeppelin/contracts/access/Ownable.sol",
        "file": "@openzeppelin/contracts/access/Ownable.sol",
        "id": 8371,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 9079,
        "sourceUnit": 533,
        "src": "64:52:48",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@openzeppelin/contracts/token/ERC20/IERC20.sol",
        "file": "@openzeppelin/contracts/token/ERC20/IERC20.sol",
        "id": 8372,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 9079,
        "sourceUnit": 2885,
        "src": "117:56:48",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@openzeppelin/contracts/utils/Counters.sol",
        "file": "@openzeppelin/contracts/utils/Counters.sol",
        "id": 8373,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 9079,
        "sourceUnit": 5372,
        "src": "174:52:48",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@openzeppelin/contracts/utils/math/SafeMath.sol",
        "file": "@openzeppelin/contracts/utils/math/SafeMath.sol",
        "id": 8374,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 9079,
        "sourceUnit": 7058,
        "src": "227:57:48",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@openzeppelin/contracts/security/ReentrancyGuard.sol",
        "file": "@openzeppelin/contracts/security/ReentrancyGuard.sol",
        "id": 8375,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 9079,
        "sourceUnit": 743,
        "src": "285:62:48",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "project:/contracts/libraries/PriceConverter.sol",
        "file": "../../libraries/PriceConverter.sol",
        "id": 8376,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 9079,
        "sourceUnit": 7632,
        "src": "348:44:48",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "project:/contracts/token/interfaces/IERC20Custom.sol",
        "file": "../../token/interfaces/IERC20Custom.sol",
        "id": 8377,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 9079,
        "sourceUnit": 9653,
        "src": "393:49:48",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [
          {
            "baseName": {
              "id": 8378,
              "name": "Ownable",
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 532,
              "src": "468:7:48"
            },
            "id": 8379,
            "nodeType": "InheritanceSpecifier",
            "src": "468:7:48"
          },
          {
            "baseName": {
              "id": 8380,
              "name": "ReentrancyGuard",
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 742,
              "src": "477:15:48"
            },
            "id": 8381,
            "nodeType": "InheritanceSpecifier",
            "src": "477:15:48"
          }
        ],
        "canonicalName": "MockPresale",
        "contractDependencies": [],
        "contractKind": "contract",
        "fullyImplemented": true,
        "id": 9078,
        "linearizedBaseContracts": [
          9078,
          742,
          532,
          5297
        ],
        "name": "MockPresale",
        "nameLocation": "453:11:48",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "id": 8385,
            "libraryName": {
              "id": 8382,
              "name": "Counters",
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 5371,
              "src": "505:8:48"
            },
            "nodeType": "UsingForDirective",
            "src": "499:36:48",
            "typeName": {
              "id": 8384,
              "nodeType": "UserDefinedTypeName",
              "pathNode": {
                "id": 8383,
                "name": "Counters.Counter",
                "nodeType": "IdentifierPath",
                "referencedDeclaration": 5303,
                "src": "518:16:48"
              },
              "referencedDeclaration": 5303,
              "src": "518:16:48",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_Counter_$5303_storage_ptr",
                "typeString": "struct Counters.Counter"
              }
            }
          },
          {
            "id": 8388,
            "libraryName": {
              "id": 8386,
              "name": "SafeMath",
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 7057,
              "src": "546:8:48"
            },
            "nodeType": "UsingForDirective",
            "src": "540:27:48",
            "typeName": {
              "id": 8387,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "559:7:48",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            }
          },
          {
            "canonicalName": "MockPresale.PresaleData",
            "id": 8397,
            "members": [
              {
                "constant": false,
                "id": 8390,
                "mutability": "mutable",
                "name": "startingTime",
                "nameLocation": "610:12:48",
                "nodeType": "VariableDeclaration",
                "scope": 8397,
                "src": "602:20:48",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 8389,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "602:7:48",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 8392,
                "mutability": "mutable",
                "name": "usdPrice",
                "nameLocation": "640:8:48",
                "nodeType": "VariableDeclaration",
                "scope": 8397,
                "src": "632:16:48",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 8391,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "632:7:48",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 8394,
                "mutability": "mutable",
                "name": "minimumUSDPurchase",
                "nameLocation": "666:18:48",
                "nodeType": "VariableDeclaration",
                "scope": 8397,
                "src": "658:26:48",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 8393,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "658:7:48",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 8396,
                "mutability": "mutable",
                "name": "maximumPresaleAmount",
                "nameLocation": "702:20:48",
                "nodeType": "VariableDeclaration",
                "scope": 8397,
                "src": "694:28:48",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 8395,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "694:7:48",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "visibility": "internal"
              }
            ],
            "name": "PresaleData",
            "nameLocation": "580:11:48",
            "nodeType": "StructDefinition",
            "scope": 9078,
            "src": "573:156:48",
            "visibility": "public"
          },
          {
            "canonicalName": "MockPresale.PresalePaymentTokenData",
            "id": 8402,
            "members": [
              {
                "constant": false,
                "id": 8399,
                "mutability": "mutable",
                "name": "available",
                "nameLocation": "780:9:48",
                "nodeType": "VariableDeclaration",
                "scope": 8402,
                "src": "775:14:48",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_bool",
                  "typeString": "bool"
                },
                "typeName": {
                  "id": 8398,
                  "name": "bool",
                  "nodeType": "ElementaryTypeName",
                  "src": "775:4:48",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 8401,
                "mutability": "mutable",
                "name": "aggregatorAddress",
                "nameLocation": "807:17:48",
                "nodeType": "VariableDeclaration",
                "scope": 8402,
                "src": "799:25:48",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                },
                "typeName": {
                  "id": 8400,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "799:7:48",
                  "stateMutability": "nonpayable",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "visibility": "internal"
              }
            ],
            "name": "PresalePaymentTokenData",
            "nameLocation": "741:23:48",
            "nodeType": "StructDefinition",
            "scope": 9078,
            "src": "734:97:48",
            "visibility": "public"
          },
          {
            "anonymous": false,
            "id": 8412,
            "name": "TokenPresold",
            "nameLocation": "843:12:48",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 8411,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8404,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "to",
                  "nameLocation": "881:2:48",
                  "nodeType": "VariableDeclaration",
                  "scope": 8412,
                  "src": "865:18:48",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8403,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "865:7:48",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8406,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "paymentTokenAddress",
                  "nameLocation": "909:19:48",
                  "nodeType": "VariableDeclaration",
                  "scope": 8412,
                  "src": "893:35:48",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8405,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "893:7:48",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8408,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "946:6:48",
                  "nodeType": "VariableDeclaration",
                  "scope": 8412,
                  "src": "938:14:48",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8407,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "938:7:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8410,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "paymentTokenamount",
                  "nameLocation": "970:18:48",
                  "nodeType": "VariableDeclaration",
                  "scope": 8412,
                  "src": "962:26:48",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8409,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "962:7:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "855:139:48"
            },
            "src": "837:158:48"
          },
          {
            "anonymous": false,
            "id": 8424,
            "name": "PresaleRoundUpdated",
            "nameLocation": "1006:19:48",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 8423,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8414,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "presaleRound",
                  "nameLocation": "1051:12:48",
                  "nodeType": "VariableDeclaration",
                  "scope": 8424,
                  "src": "1035:28:48",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8413,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1035:7:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8416,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "startingTime",
                  "nameLocation": "1081:12:48",
                  "nodeType": "VariableDeclaration",
                  "scope": 8424,
                  "src": "1073:20:48",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8415,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1073:7:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8418,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "usdPrice",
                  "nameLocation": "1111:8:48",
                  "nodeType": "VariableDeclaration",
                  "scope": 8424,
                  "src": "1103:16:48",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8417,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1103:7:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8420,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "minimumUSDPurchase",
                  "nameLocation": "1137:18:48",
                  "nodeType": "VariableDeclaration",
                  "scope": 8424,
                  "src": "1129:26:48",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8419,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1129:7:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8422,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "maximumPresaleAmount",
                  "nameLocation": "1173:20:48",
                  "nodeType": "VariableDeclaration",
                  "scope": 8424,
                  "src": "1165:28:48",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8421,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1165:7:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1025:174:48"
            },
            "src": "1000:200:48"
          },
          {
            "anonymous": false,
            "id": 8428,
            "name": "PresaleReceiverUpdated",
            "nameLocation": "1211:22:48",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 8427,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8426,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "receiverAddress",
                  "nameLocation": "1242:15:48",
                  "nodeType": "VariableDeclaration",
                  "scope": 8428,
                  "src": "1234:23:48",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8425,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1234:7:48",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1233:25:48"
            },
            "src": "1205:54:48"
          },
          {
            "anonymous": false,
            "id": 8436,
            "name": "PresalePaymentTokenUpdated",
            "nameLocation": "1270:26:48",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 8435,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8430,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "tokenAddress",
                  "nameLocation": "1314:12:48",
                  "nodeType": "VariableDeclaration",
                  "scope": 8436,
                  "src": "1306:20:48",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8429,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1306:7:48",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8432,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "tokenAvailability",
                  "nameLocation": "1341:17:48",
                  "nodeType": "VariableDeclaration",
                  "scope": 8436,
                  "src": "1336:22:48",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 8431,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "1336:4:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8434,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "aggregatorAddress",
                  "nameLocation": "1376:17:48",
                  "nodeType": "VariableDeclaration",
                  "scope": 8436,
                  "src": "1368:25:48",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8433,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1368:7:48",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1296:103:48"
            },
            "src": "1264:136:48"
          },
          {
            "anonymous": false,
            "id": 8440,
            "name": "PresaleTokenUpdated",
            "nameLocation": "1411:19:48",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 8439,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8438,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "tokenAddress",
                  "nameLocation": "1439:12:48",
                  "nodeType": "VariableDeclaration",
                  "scope": 8440,
                  "src": "1431:20:48",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8437,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1431:7:48",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1430:22:48"
            },
            "src": "1405:48:48"
          },
          {
            "anonymous": false,
            "id": 8444,
            "name": "PresaleEndingTimeUpdated",
            "nameLocation": "1464:24:48",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 8443,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8442,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "endingTime",
                  "nameLocation": "1497:10:48",
                  "nodeType": "VariableDeclaration",
                  "scope": 8444,
                  "src": "1489:18:48",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8441,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1489:7:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1488:20:48"
            },
            "src": "1458:51:48"
          },
          {
            "constant": false,
            "functionSelector": "962de5c0",
            "id": 8447,
            "mutability": "mutable",
            "name": "totalPresaleRound",
            "nameLocation": "1539:17:48",
            "nodeType": "VariableDeclaration",
            "scope": 9078,
            "src": "1515:41:48",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_struct$_Counter_$5303_storage",
              "typeString": "struct Counters.Counter"
            },
            "typeName": {
              "id": 8446,
              "nodeType": "UserDefinedTypeName",
              "pathNode": {
                "id": 8445,
                "name": "Counters.Counter",
                "nodeType": "IdentifierPath",
                "referencedDeclaration": 5303,
                "src": "1515:16:48"
              },
              "referencedDeclaration": 5303,
              "src": "1515:16:48",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_Counter_$5303_storage_ptr",
                "typeString": "struct Counters.Counter"
              }
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "9d76ea58",
            "id": 8449,
            "mutability": "mutable",
            "name": "tokenAddress",
            "nameLocation": "1577:12:48",
            "nodeType": "VariableDeclaration",
            "scope": 9078,
            "src": "1562:27:48",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 8448,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "1562:7:48",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "c1436415",
            "id": 8451,
            "mutability": "mutable",
            "name": "presaleReceiver",
            "nameLocation": "1618:15:48",
            "nodeType": "VariableDeclaration",
            "scope": 9078,
            "src": "1595:38:48",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address_payable",
              "typeString": "address payable"
            },
            "typeName": {
              "id": 8450,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "1595:15:48",
              "stateMutability": "payable",
              "typeDescriptions": {
                "typeIdentifier": "t_address_payable",
                "typeString": "address payable"
              }
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "6c47a6c3",
            "id": 8453,
            "mutability": "mutable",
            "name": "endingTime",
            "nameLocation": "1654:10:48",
            "nodeType": "VariableDeclaration",
            "scope": 9078,
            "src": "1639:25:48",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 8452,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1639:7:48",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 8458,
            "mutability": "mutable",
            "name": "presaleDetailsMapping",
            "nameLocation": "1753:21:48",
            "nodeType": "VariableDeclaration",
            "scope": 9078,
            "src": "1721:53:48",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_PresaleData_$8397_storage_$",
              "typeString": "mapping(uint256 => struct MockPresale.PresaleData)"
            },
            "typeName": {
              "id": 8457,
              "keyType": {
                "id": 8454,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "1729:7:48",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              },
              "nodeType": "Mapping",
              "src": "1721:31:48",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_PresaleData_$8397_storage_$",
                "typeString": "mapping(uint256 => struct MockPresale.PresaleData)"
              },
              "valueType": {
                "id": 8456,
                "nodeType": "UserDefinedTypeName",
                "pathNode": {
                  "id": 8455,
                  "name": "PresaleData",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 8397,
                  "src": "1740:11:48"
                },
                "referencedDeclaration": 8397,
                "src": "1740:11:48",
                "typeDescriptions": {
                  "typeIdentifier": "t_struct$_PresaleData_$8397_storage_ptr",
                  "typeString": "struct MockPresale.PresaleData"
                }
              }
            },
            "visibility": "internal"
          },
          {
            "constant": false,
            "functionSelector": "392f911b",
            "id": 8462,
            "mutability": "mutable",
            "name": "presaleAmountByRoundMapping",
            "nameLocation": "1815:27:48",
            "nodeType": "VariableDeclaration",
            "scope": 9078,
            "src": "1780:62:48",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
              "typeString": "mapping(uint256 => uint256)"
            },
            "typeName": {
              "id": 8461,
              "keyType": {
                "id": 8459,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "1788:7:48",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              },
              "nodeType": "Mapping",
              "src": "1780:27:48",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                "typeString": "mapping(uint256 => uint256)"
              },
              "valueType": {
                "id": 8460,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "1799:7:48",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              }
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "8e7d41b7",
            "id": 8467,
            "mutability": "mutable",
            "name": "presalePaymentTokenMapping",
            "nameLocation": "1907:26:48",
            "nodeType": "VariableDeclaration",
            "scope": 9078,
            "src": "1848:85:48",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_struct$_PresalePaymentTokenData_$8402_storage_$",
              "typeString": "mapping(address => struct MockPresale.PresalePaymentTokenData)"
            },
            "typeName": {
              "id": 8466,
              "keyType": {
                "id": 8463,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "1856:7:48",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "1848:43:48",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_struct$_PresalePaymentTokenData_$8402_storage_$",
                "typeString": "mapping(address => struct MockPresale.PresalePaymentTokenData)"
              },
              "valueType": {
                "id": 8465,
                "nodeType": "UserDefinedTypeName",
                "pathNode": {
                  "id": 8464,
                  "name": "PresalePaymentTokenData",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 8402,
                  "src": "1867:23:48"
                },
                "referencedDeclaration": 8402,
                "src": "1867:23:48",
                "typeDescriptions": {
                  "typeIdentifier": "t_struct$_PresalePaymentTokenData_$8402_storage_ptr",
                  "typeString": "struct MockPresale.PresalePaymentTokenData"
                }
              }
            },
            "visibility": "public"
          },
          {
            "id": 8469,
            "name": "presaleRoundClosed",
            "nameLocation": "1946:18:48",
            "nodeType": "ErrorDefinition",
            "parameters": {
              "id": 8468,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1964:2:48"
            },
            "src": "1940:27:48"
          },
          {
            "id": 8471,
            "name": "presaleTokenNotAvailable",
            "nameLocation": "1978:24:48",
            "nodeType": "ErrorDefinition",
            "parameters": {
              "id": 8470,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2002:2:48"
            },
            "src": "1972:33:48"
          },
          {
            "id": 8473,
            "name": "presaleNativeTokenPaymentNotSufficient",
            "nameLocation": "2016:38:48",
            "nodeType": "ErrorDefinition",
            "parameters": {
              "id": 8472,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2054:2:48"
            },
            "src": "2010:47:48"
          },
          {
            "id": 8475,
            "name": "presaleStartingTimeInvalid",
            "nameLocation": "2068:26:48",
            "nodeType": "ErrorDefinition",
            "parameters": {
              "id": 8474,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2094:2:48"
            },
            "src": "2062:35:48"
          },
          {
            "id": 8477,
            "name": "presaleUSDPriceInvalid",
            "nameLocation": "2108:22:48",
            "nodeType": "ErrorDefinition",
            "parameters": {
              "id": 8476,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2130:2:48"
            },
            "src": "2102:31:48"
          },
          {
            "id": 8479,
            "name": "presaleMimumumUSDPurchaseInvalid",
            "nameLocation": "2144:32:48",
            "nodeType": "ErrorDefinition",
            "parameters": {
              "id": 8478,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2176:2:48"
            },
            "src": "2138:41:48"
          },
          {
            "id": 8481,
            "name": "presaleMaximumPresaleAmountInvalid",
            "nameLocation": "2190:34:48",
            "nodeType": "ErrorDefinition",
            "parameters": {
              "id": 8480,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2224:2:48"
            },
            "src": "2184:43:48"
          },
          {
            "id": 8483,
            "name": "presaleUSDPurchaseNotSufficient",
            "nameLocation": "2238:31:48",
            "nodeType": "ErrorDefinition",
            "parameters": {
              "id": 8482,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2269:2:48"
            },
            "src": "2232:40:48"
          },
          {
            "id": 8485,
            "name": "presaleAmountOverdemand",
            "nameLocation": "2283:23:48",
            "nodeType": "ErrorDefinition",
            "parameters": {
              "id": 8484,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2306:2:48"
            },
            "src": "2277:32:48"
          },
          {
            "id": 8487,
            "name": "presaleNonZeroAddressInvalid",
            "nameLocation": "2320:28:48",
            "nodeType": "ErrorDefinition",
            "parameters": {
              "id": 8486,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2348:2:48"
            },
            "src": "2314:37:48"
          },
          {
            "id": 8489,
            "name": "presaleEndingTimeInvalid",
            "nameLocation": "2362:24:48",
            "nodeType": "ErrorDefinition",
            "parameters": {
              "id": 8488,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2386:2:48"
            },
            "src": "2356:33:48"
          },
          {
            "body": {
              "id": 8504,
              "nodeType": "Block",
              "src": "2441:93:48",
              "statements": [
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 8498,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 8493,
                      "name": "_address",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8491,
                      "src": "2455:8:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "arguments": [
                        {
                          "hexValue": "30",
                          "id": 8496,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "2475:1:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          }
                        ],
                        "id": 8495,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "2467:7:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": {
                          "id": 8494,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2467:7:48",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 8497,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2467:10:48",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "2455:22:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 8502,
                  "nodeType": "IfStatement",
                  "src": "2451:65:48",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 8499,
                        "name": "presaleNonZeroAddressInvalid",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8487,
                        "src": "2486:28:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$__$returns$__$",
                          "typeString": "function () pure"
                        }
                      },
                      "id": 8500,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2486:30:48",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 8501,
                    "nodeType": "RevertStatement",
                    "src": "2479:37:48"
                  }
                },
                {
                  "id": 8503,
                  "nodeType": "PlaceholderStatement",
                  "src": "2526:1:48"
                }
              ]
            },
            "id": 8505,
            "name": "onlyNonZeroAddress",
            "nameLocation": "2404:18:48",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 8492,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8491,
                  "mutability": "mutable",
                  "name": "_address",
                  "nameLocation": "2431:8:48",
                  "nodeType": "VariableDeclaration",
                  "scope": 8505,
                  "src": "2423:16:48",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8490,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2423:7:48",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2422:18:48"
            },
            "src": "2395:139:48",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 8526,
              "nodeType": "Block",
              "src": "2660:123:48",
              "statements": [
                {
                  "expression": {
                    "id": 8516,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 8514,
                      "name": "tokenAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8449,
                      "src": "2670:12:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 8515,
                      "name": "_tokenAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8507,
                      "src": "2685:13:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "2670:28:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 8517,
                  "nodeType": "ExpressionStatement",
                  "src": "2670:28:48"
                },
                {
                  "expression": {
                    "id": 8520,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 8518,
                      "name": "presaleReceiver",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8451,
                      "src": "2708:15:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 8519,
                      "name": "_presaleReceiver",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8509,
                      "src": "2726:16:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "src": "2708:34:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "id": 8521,
                  "nodeType": "ExpressionStatement",
                  "src": "2708:34:48"
                },
                {
                  "expression": {
                    "id": 8524,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 8522,
                      "name": "endingTime",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8453,
                      "src": "2752:10:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 8523,
                      "name": "_endingTime",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8511,
                      "src": "2765:11:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2752:24:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 8525,
                  "nodeType": "ExpressionStatement",
                  "src": "2752:24:48"
                }
              ]
            },
            "id": 8527,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [],
            "name": "",
            "nameLocation": "-1:-1:-1",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8512,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8507,
                  "mutability": "mutable",
                  "name": "_tokenAddress",
                  "nameLocation": "2569:13:48",
                  "nodeType": "VariableDeclaration",
                  "scope": 8527,
                  "src": "2561:21:48",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8506,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2561:7:48",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8509,
                  "mutability": "mutable",
                  "name": "_presaleReceiver",
                  "nameLocation": "2608:16:48",
                  "nodeType": "VariableDeclaration",
                  "scope": 8527,
                  "src": "2592:32:48",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address_payable",
                    "typeString": "address payable"
                  },
                  "typeName": {
                    "id": 8508,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2592:15:48",
                    "stateMutability": "payable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8511,
                  "mutability": "mutable",
                  "name": "_endingTime",
                  "nameLocation": "2642:11:48",
                  "nodeType": "VariableDeclaration",
                  "scope": 8527,
                  "src": "2634:19:48",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8510,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2634:7:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2551:108:48"
            },
            "returnParameters": {
              "id": 8513,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2660:0:48"
            },
            "scope": 9078,
            "src": "2540:243:48",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 8537,
              "nodeType": "Block",
              "src": "2913:51:48",
              "statements": [
                {
                  "expression": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "id": 8533,
                        "name": "totalPresaleRound",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8447,
                        "src": "2930:17:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Counter_$5303_storage",
                          "typeString": "struct Counters.Counter storage ref"
                        }
                      },
                      "id": 8534,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "current",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 5315,
                      "src": "2930:25:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_struct$_Counter_$5303_storage_ptr_$returns$_t_uint256_$bound_to$_t_struct$_Counter_$5303_storage_ptr_$",
                        "typeString": "function (struct Counters.Counter storage pointer) view returns (uint256)"
                      }
                    },
                    "id": 8535,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2930:27:48",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 8532,
                  "id": 8536,
                  "nodeType": "Return",
                  "src": "2923:34:48"
                }
              ]
            },
            "documentation": {
              "id": 8528,
              "nodeType": "StructuredDocumentation",
              "src": "2789:57:48",
              "text": " @dev Get total amount of presale round"
            },
            "functionSelector": "398dcd26",
            "id": 8538,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getTotalPresaleRound",
            "nameLocation": "2860:20:48",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8529,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2880:2:48"
            },
            "returnParameters": {
              "id": 8532,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8531,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 8538,
                  "src": "2904:7:48",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8530,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2904:7:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2903:9:48"
            },
            "scope": 9078,
            "src": "2851:113:48",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 8550,
              "nodeType": "Block",
              "src": "3209:66:48",
              "statements": [
                {
                  "expression": {
                    "baseExpression": {
                      "id": 8546,
                      "name": "presaleAmountByRoundMapping",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8462,
                      "src": "3226:27:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                        "typeString": "mapping(uint256 => uint256)"
                      }
                    },
                    "id": 8548,
                    "indexExpression": {
                      "id": 8547,
                      "name": "_presaleRound",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8541,
                      "src": "3254:13:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "3226:42:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 8545,
                  "id": 8549,
                  "nodeType": "Return",
                  "src": "3219:49:48"
                }
              ]
            },
            "documentation": {
              "id": 8539,
              "nodeType": "StructuredDocumentation",
              "src": "2970:120:48",
              "text": " @dev Get presale total amount By presale round\n @param _presaleRound - The presale round chosen"
            },
            "functionSelector": "d958e001",
            "id": 8551,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getPresaleAmountByRound",
            "nameLocation": "3104:23:48",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8542,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8541,
                  "mutability": "mutable",
                  "name": "_presaleRound",
                  "nameLocation": "3136:13:48",
                  "nodeType": "VariableDeclaration",
                  "scope": 8551,
                  "src": "3128:21:48",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8540,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3128:7:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3127:23:48"
            },
            "returnParameters": {
              "id": 8545,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8544,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 8551,
                  "src": "3196:7:48",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8543,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3196:7:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3195:9:48"
            },
            "scope": 9078,
            "src": "3095:180:48",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 8583,
              "nodeType": "Block",
              "src": "3416:299:48",
              "statements": [
                {
                  "assignments": [
                    8558
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8558,
                      "mutability": "mutable",
                      "name": "totalPresale",
                      "nameLocation": "3434:12:48",
                      "nodeType": "VariableDeclaration",
                      "scope": 8583,
                      "src": "3426:20:48",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8557,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "3426:7:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 8560,
                  "initialValue": {
                    "hexValue": "30",
                    "id": 8559,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "3449:1:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_0_by_1",
                      "typeString": "int_const 0"
                    },
                    "value": "0"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3426:24:48"
                },
                {
                  "body": {
                    "id": 8579,
                    "nodeType": "Block",
                    "src": "3597:82:48",
                    "statements": [
                      {
                        "expression": {
                          "id": 8577,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 8573,
                            "name": "totalPresale",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8558,
                            "src": "3611:12:48",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "baseExpression": {
                              "id": 8574,
                              "name": "presaleAmountByRoundMapping",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8462,
                              "src": "3627:27:48",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                                "typeString": "mapping(uint256 => uint256)"
                              }
                            },
                            "id": 8576,
                            "indexExpression": {
                              "id": 8575,
                              "name": "presaleRound",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8562,
                              "src": "3655:12:48",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "3627:41:48",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "3611:57:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 8578,
                        "nodeType": "ExpressionStatement",
                        "src": "3611:57:48"
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 8569,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 8565,
                      "name": "presaleRound",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8562,
                      "src": "3516:12:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "expression": {
                          "id": 8566,
                          "name": "totalPresaleRound",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8447,
                          "src": "3531:17:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Counter_$5303_storage",
                            "typeString": "struct Counters.Counter storage ref"
                          }
                        },
                        "id": 8567,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "current",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 5315,
                        "src": "3531:25:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_struct$_Counter_$5303_storage_ptr_$returns$_t_uint256_$bound_to$_t_struct$_Counter_$5303_storage_ptr_$",
                          "typeString": "function (struct Counters.Counter storage pointer) view returns (uint256)"
                        }
                      },
                      "id": 8568,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "3531:27:48",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "3516:42:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 8580,
                  "initializationExpression": {
                    "assignments": [
                      8562
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 8562,
                        "mutability": "mutable",
                        "name": "presaleRound",
                        "nameLocation": "3486:12:48",
                        "nodeType": "VariableDeclaration",
                        "scope": 8580,
                        "src": "3478:20:48",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 8561,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3478:7:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "id": 8564,
                    "initialValue": {
                      "hexValue": "30",
                      "id": 8563,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3501:1:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "3478:24:48"
                  },
                  "loopExpression": {
                    "expression": {
                      "id": 8571,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "3572:14:48",
                      "subExpression": {
                        "id": 8570,
                        "name": "presaleRound",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8562,
                        "src": "3572:12:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 8572,
                    "nodeType": "ExpressionStatement",
                    "src": "3572:14:48"
                  },
                  "nodeType": "ForStatement",
                  "src": "3460:219:48"
                },
                {
                  "expression": {
                    "id": 8581,
                    "name": "totalPresale",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 8558,
                    "src": "3696:12:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 8556,
                  "id": 8582,
                  "nodeType": "Return",
                  "src": "3689:19:48"
                }
              ]
            },
            "documentation": {
              "id": 8552,
              "nodeType": "StructuredDocumentation",
              "src": "3281:67:48",
              "text": " @dev Get total amount of presale from all rounds"
            },
            "functionSelector": "0aca575a",
            "id": 8584,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getTotalPresaleAmount",
            "nameLocation": "3362:21:48",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8553,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3383:2:48"
            },
            "returnParameters": {
              "id": 8556,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8555,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 8584,
                  "src": "3407:7:48",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8554,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3407:7:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3406:9:48"
            },
            "scope": 9078,
            "src": "3353:362:48",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 8619,
              "nodeType": "Block",
              "src": "3839:371:48",
              "statements": [
                {
                  "body": {
                    "id": 8615,
                    "nodeType": "Block",
                    "src": "3990:195:48",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 8610,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "baseExpression": {
                                "id": 8604,
                                "name": "presaleDetailsMapping",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8458,
                                "src": "4025:21:48",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_PresaleData_$8397_storage_$",
                                  "typeString": "mapping(uint256 => struct MockPresale.PresaleData storage ref)"
                                }
                              },
                              "id": 8606,
                              "indexExpression": {
                                "id": 8605,
                                "name": "presaleRound",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8591,
                                "src": "4047:12:48",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "4025:35:48",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_PresaleData_$8397_storage",
                                "typeString": "struct MockPresale.PresaleData storage ref"
                              }
                            },
                            "id": 8607,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "startingTime",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 8390,
                            "src": "4025:48:48",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<=",
                          "rightExpression": {
                            "expression": {
                              "id": 8608,
                              "name": "block",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4294967292,
                              "src": "4093:5:48",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_block",
                                "typeString": "block"
                              }
                            },
                            "id": 8609,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "timestamp",
                            "nodeType": "MemberAccess",
                            "src": "4093:15:48",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "4025:83:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 8614,
                        "nodeType": "IfStatement",
                        "src": "4004:171:48",
                        "trueBody": {
                          "id": 8613,
                          "nodeType": "Block",
                          "src": "4123:52:48",
                          "statements": [
                            {
                              "expression": {
                                "id": 8611,
                                "name": "presaleRound",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8591,
                                "src": "4148:12:48",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "functionReturnParameters": 8589,
                              "id": 8612,
                              "nodeType": "Return",
                              "src": "4141:19:48"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 8600,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 8598,
                      "name": "presaleRound",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8591,
                      "src": "3935:12:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 8599,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3950:1:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "3935:16:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 8616,
                  "initializationExpression": {
                    "assignments": [
                      8591
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 8591,
                        "mutability": "mutable",
                        "name": "presaleRound",
                        "nameLocation": "3875:12:48",
                        "nodeType": "VariableDeclaration",
                        "scope": 8616,
                        "src": "3867:20:48",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 8590,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3867:7:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "id": 8597,
                    "initialValue": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 8596,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "id": 8592,
                            "name": "totalPresaleRound",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8447,
                            "src": "3890:17:48",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Counter_$5303_storage",
                              "typeString": "struct Counters.Counter storage ref"
                            }
                          },
                          "id": 8593,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "current",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 5315,
                          "src": "3890:25:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_struct$_Counter_$5303_storage_ptr_$returns$_t_uint256_$bound_to$_t_struct$_Counter_$5303_storage_ptr_$",
                            "typeString": "function (struct Counters.Counter storage pointer) view returns (uint256)"
                          }
                        },
                        "id": 8594,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3890:27:48",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "-",
                      "rightExpression": {
                        "hexValue": "31",
                        "id": 8595,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3920:1:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        },
                        "value": "1"
                      },
                      "src": "3890:31:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "3867:54:48"
                  },
                  "loopExpression": {
                    "expression": {
                      "id": 8602,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "--",
                      "prefix": false,
                      "src": "3965:14:48",
                      "subExpression": {
                        "id": 8601,
                        "name": "presaleRound",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8591,
                        "src": "3965:12:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 8603,
                    "nodeType": "ExpressionStatement",
                    "src": "3965:14:48"
                  },
                  "nodeType": "ForStatement",
                  "src": "3849:336:48"
                },
                {
                  "expression": {
                    "hexValue": "30",
                    "id": 8617,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "4202:1:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_0_by_1",
                      "typeString": "int_const 0"
                    },
                    "value": "0"
                  },
                  "functionReturnParameters": 8589,
                  "id": 8618,
                  "nodeType": "Return",
                  "src": "4195:8:48"
                }
              ]
            },
            "documentation": {
              "id": 8585,
              "nodeType": "StructuredDocumentation",
              "src": "3721:49:48",
              "text": " @dev Get Current Presale Round"
            },
            "functionSelector": "1c63f0ed",
            "id": 8620,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getCurrentPresaleRound",
            "nameLocation": "3784:22:48",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8586,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3806:2:48"
            },
            "returnParameters": {
              "id": 8589,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8588,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 8620,
                  "src": "3830:7:48",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8587,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3830:7:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3829:9:48"
            },
            "scope": 9078,
            "src": "3775:435:48",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 8655,
              "nodeType": "Block",
              "src": "4599:384:48",
              "statements": [
                {
                  "assignments": [
                    8633
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8633,
                      "mutability": "mutable",
                      "name": "currentPresaleRound",
                      "nameLocation": "4617:19:48",
                      "nodeType": "VariableDeclaration",
                      "scope": 8655,
                      "src": "4609:27:48",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8632,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "4609:7:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 8636,
                  "initialValue": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 8634,
                      "name": "getCurrentPresaleRound",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8620,
                      "src": "4639:22:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                        "typeString": "function () view returns (uint256)"
                      }
                    },
                    "id": 8635,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4639:24:48",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4609:54:48"
                },
                {
                  "expression": {
                    "components": [
                      {
                        "expression": {
                          "baseExpression": {
                            "id": 8637,
                            "name": "presaleDetailsMapping",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8458,
                            "src": "4694:21:48",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_PresaleData_$8397_storage_$",
                              "typeString": "mapping(uint256 => struct MockPresale.PresaleData storage ref)"
                            }
                          },
                          "id": 8639,
                          "indexExpression": {
                            "id": 8638,
                            "name": "currentPresaleRound",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8633,
                            "src": "4716:19:48",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "4694:42:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_PresaleData_$8397_storage",
                            "typeString": "struct MockPresale.PresaleData storage ref"
                          }
                        },
                        "id": 8640,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "startingTime",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 8390,
                        "src": "4694:55:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "expression": {
                          "baseExpression": {
                            "id": 8641,
                            "name": "presaleDetailsMapping",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8458,
                            "src": "4763:21:48",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_PresaleData_$8397_storage_$",
                              "typeString": "mapping(uint256 => struct MockPresale.PresaleData storage ref)"
                            }
                          },
                          "id": 8643,
                          "indexExpression": {
                            "id": 8642,
                            "name": "currentPresaleRound",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8633,
                            "src": "4785:19:48",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "4763:42:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_PresaleData_$8397_storage",
                            "typeString": "struct MockPresale.PresaleData storage ref"
                          }
                        },
                        "id": 8644,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "usdPrice",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 8392,
                        "src": "4763:51:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "expression": {
                          "baseExpression": {
                            "id": 8645,
                            "name": "presaleDetailsMapping",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8458,
                            "src": "4828:21:48",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_PresaleData_$8397_storage_$",
                              "typeString": "mapping(uint256 => struct MockPresale.PresaleData storage ref)"
                            }
                          },
                          "id": 8647,
                          "indexExpression": {
                            "id": 8646,
                            "name": "currentPresaleRound",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8633,
                            "src": "4850:19:48",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "4828:42:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_PresaleData_$8397_storage",
                            "typeString": "struct MockPresale.PresaleData storage ref"
                          }
                        },
                        "id": 8648,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "minimumUSDPurchase",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 8394,
                        "src": "4828:61:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "expression": {
                          "baseExpression": {
                            "id": 8649,
                            "name": "presaleDetailsMapping",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8458,
                            "src": "4903:21:48",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_PresaleData_$8397_storage_$",
                              "typeString": "mapping(uint256 => struct MockPresale.PresaleData storage ref)"
                            }
                          },
                          "id": 8651,
                          "indexExpression": {
                            "id": 8650,
                            "name": "currentPresaleRound",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8633,
                            "src": "4925:19:48",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "4903:42:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_PresaleData_$8397_storage",
                            "typeString": "struct MockPresale.PresaleData storage ref"
                          }
                        },
                        "id": 8652,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "maximumPresaleAmount",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 8396,
                        "src": "4903:63:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "id": 8653,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "4680:296:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$",
                      "typeString": "tuple(uint256,uint256,uint256,uint256)"
                    }
                  },
                  "functionReturnParameters": 8631,
                  "id": 8654,
                  "nodeType": "Return",
                  "src": "4673:303:48"
                }
              ]
            },
            "documentation": {
              "id": 8621,
              "nodeType": "StructuredDocumentation",
              "src": "4216:199:48",
              "text": " @dev Getting the Current Presale Details, including:\n @return Starting Time\n @return USD Price\n @return Minimum USD Purchase\n @return Maximum Presale Amount"
            },
            "functionSelector": "ec2b3523",
            "id": 8656,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getCurrentPresaleDetails",
            "nameLocation": "4429:24:48",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8622,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4453:2:48"
            },
            "returnParameters": {
              "id": 8631,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8624,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 8656,
                  "src": "4514:7:48",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8623,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4514:7:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8626,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 8656,
                  "src": "4535:7:48",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8625,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4535:7:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8628,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 8656,
                  "src": "4556:7:48",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8627,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4556:7:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8630,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 8656,
                  "src": "4577:7:48",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8629,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4577:7:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4500:94:48"
            },
            "scope": 9078,
            "src": "4420:563:48",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 8834,
              "nodeType": "Block",
              "src": "5388:2418:48",
              "statements": [
                {
                  "assignments": [
                    8667
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8667,
                      "mutability": "mutable",
                      "name": "currentPresaleRound",
                      "nameLocation": "5406:19:48",
                      "nodeType": "VariableDeclaration",
                      "scope": 8834,
                      "src": "5398:27:48",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8666,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "5398:7:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 8670,
                  "initialValue": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 8668,
                      "name": "getCurrentPresaleRound",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8620,
                      "src": "5428:22:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                        "typeString": "function () view returns (uint256)"
                      }
                    },
                    "id": 8669,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5428:24:48",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5398:54:48"
                },
                {
                  "assignments": [
                    8672,
                    8674,
                    8676,
                    8678
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8672,
                      "mutability": "mutable",
                      "name": "currentPresaleStartingTime",
                      "nameLocation": "5484:26:48",
                      "nodeType": "VariableDeclaration",
                      "scope": 8834,
                      "src": "5476:34:48",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8671,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "5476:7:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 8674,
                      "mutability": "mutable",
                      "name": "currentPresalePrice",
                      "nameLocation": "5532:19:48",
                      "nodeType": "VariableDeclaration",
                      "scope": 8834,
                      "src": "5524:27:48",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8673,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "5524:7:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 8676,
                      "mutability": "mutable",
                      "name": "currentPresaleMinimumUSDPurchase",
                      "nameLocation": "5573:32:48",
                      "nodeType": "VariableDeclaration",
                      "scope": 8834,
                      "src": "5565:40:48",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8675,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "5565:7:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 8678,
                      "mutability": "mutable",
                      "name": "currentPresaleMaximumPresaleAmount",
                      "nameLocation": "5627:34:48",
                      "nodeType": "VariableDeclaration",
                      "scope": 8834,
                      "src": "5619:42:48",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8677,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "5619:7:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 8681,
                  "initialValue": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 8679,
                      "name": "getCurrentPresaleDetails",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8656,
                      "src": "5674:24:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$",
                        "typeString": "function () view returns (uint256,uint256,uint256,uint256)"
                      }
                    },
                    "id": 8680,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5674:26:48",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$",
                      "typeString": "tuple(uint256,uint256,uint256,uint256)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5462:238:48"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 8690,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 8685,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "expression": {
                          "id": 8682,
                          "name": "block",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4294967292,
                          "src": "5785:5:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_block",
                            "typeString": "block"
                          }
                        },
                        "id": 8683,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "timestamp",
                        "nodeType": "MemberAccess",
                        "src": "5785:15:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "<",
                      "rightExpression": {
                        "id": 8684,
                        "name": "currentPresaleStartingTime",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8672,
                        "src": "5803:26:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "5785:44:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "||",
                    "rightExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 8689,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "expression": {
                          "id": 8686,
                          "name": "block",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4294967292,
                          "src": "5845:5:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_block",
                            "typeString": "block"
                          }
                        },
                        "id": 8687,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "timestamp",
                        "nodeType": "MemberAccess",
                        "src": "5845:15:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": ">=",
                      "rightExpression": {
                        "id": 8688,
                        "name": "endingTime",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8453,
                        "src": "5864:10:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "5845:29:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "5785:89:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 8694,
                  "nodeType": "IfStatement",
                  "src": "5768:144:48",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 8691,
                        "name": "presaleRoundClosed",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8469,
                        "src": "5892:18:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$__$returns$__$",
                          "typeString": "function () pure"
                        }
                      },
                      "id": 8692,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "5892:20:48",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 8693,
                    "nodeType": "RevertStatement",
                    "src": "5885:27:48"
                  }
                },
                {
                  "condition": {
                    "id": 8699,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "!",
                    "prefix": true,
                    "src": "5967:59:48",
                    "subExpression": {
                      "expression": {
                        "baseExpression": {
                          "id": 8695,
                          "name": "presalePaymentTokenMapping",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8467,
                          "src": "5968:26:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_struct$_PresalePaymentTokenData_$8402_storage_$",
                            "typeString": "mapping(address => struct MockPresale.PresalePaymentTokenData storage ref)"
                          }
                        },
                        "id": 8697,
                        "indexExpression": {
                          "id": 8696,
                          "name": "_paymentTokenAddress",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8659,
                          "src": "5995:20:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "5968:48:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_PresalePaymentTokenData_$8402_storage",
                          "typeString": "struct MockPresale.PresalePaymentTokenData storage ref"
                        }
                      },
                      "id": 8698,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "available",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 8399,
                      "src": "5968:58:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 8703,
                  "nodeType": "IfStatement",
                  "src": "5963:110:48",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 8700,
                        "name": "presaleTokenNotAvailable",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8471,
                        "src": "6047:24:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$__$returns$__$",
                          "typeString": "function () pure"
                        }
                      },
                      "id": 8701,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "6047:26:48",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 8702,
                    "nodeType": "RevertStatement",
                    "src": "6040:33:48"
                  }
                },
                {
                  "assignments": [
                    8706
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8706,
                      "mutability": "mutable",
                      "name": "token",
                      "nameLocation": "6152:5:48",
                      "nodeType": "VariableDeclaration",
                      "scope": 8834,
                      "src": "6139:18:48",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IERC20Custom_$9652",
                        "typeString": "contract IERC20Custom"
                      },
                      "typeName": {
                        "id": 8705,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 8704,
                          "name": "IERC20Custom",
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 9652,
                          "src": "6139:12:48"
                        },
                        "referencedDeclaration": 9652,
                        "src": "6139:12:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20Custom_$9652",
                          "typeString": "contract IERC20Custom"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 8710,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 8708,
                        "name": "tokenAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8449,
                        "src": "6173:12:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 8707,
                      "name": "IERC20Custom",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9652,
                      "src": "6160:12:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_IERC20Custom_$9652_$",
                        "typeString": "type(contract IERC20Custom)"
                      }
                    },
                    "id": 8709,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6160:26:48",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20Custom_$9652",
                      "typeString": "contract IERC20Custom"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6139:47:48"
                },
                {
                  "assignments": [
                    8712
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8712,
                      "mutability": "mutable",
                      "name": "presaleUSDAmount",
                      "nameLocation": "6205:16:48",
                      "nodeType": "VariableDeclaration",
                      "scope": 8834,
                      "src": "6197:24:48",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8711,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "6197:7:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 8720,
                  "initialValue": {
                    "arguments": [
                      {
                        "hexValue": "3330",
                        "id": 8715,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "6237:2:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_30_by_1",
                          "typeString": "int_const 30"
                        },
                        "value": "30"
                      },
                      {
                        "commonType": {
                          "typeIdentifier": "t_rational_1000000000000000000_by_1",
                          "typeString": "int_const 1000000000000000000"
                        },
                        "id": 8718,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "leftExpression": {
                          "hexValue": "3130",
                          "id": 8716,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "6241:2:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_10_by_1",
                            "typeString": "int_const 10"
                          },
                          "value": "10"
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "**",
                        "rightExpression": {
                          "hexValue": "3138",
                          "id": 8717,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "6245:2:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_18_by_1",
                            "typeString": "int_const 18"
                          },
                          "value": "18"
                        },
                        "src": "6241:6:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_1000000000000000000_by_1",
                          "typeString": "int_const 1000000000000000000"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_rational_30_by_1",
                          "typeString": "int_const 30"
                        },
                        {
                          "typeIdentifier": "t_rational_1000000000000000000_by_1",
                          "typeString": "int_const 1000000000000000000"
                        }
                      ],
                      "expression": {
                        "id": 8713,
                        "name": "SafeMath",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7057,
                        "src": "6224:8:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_SafeMath_$7057_$",
                          "typeString": "type(library SafeMath)"
                        }
                      },
                      "id": 8714,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "mul",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 6951,
                      "src": "6224:12:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 8719,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6224:24:48",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6197:51:48"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 8723,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 8721,
                      "name": "presaleUSDAmount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8712,
                      "src": "6263:16:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "id": 8722,
                      "name": "currentPresaleMinimumUSDPurchase",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8676,
                      "src": "6282:32:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "6263:51:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 8727,
                  "nodeType": "IfStatement",
                  "src": "6259:109:48",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 8724,
                        "name": "presaleUSDPurchaseNotSufficient",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8483,
                        "src": "6335:31:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$__$returns$__$",
                          "typeString": "function () pure"
                        }
                      },
                      "id": 8725,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "6335:33:48",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 8726,
                    "nodeType": "RevertStatement",
                    "src": "6328:40:48"
                  }
                },
                {
                  "assignments": [
                    8729
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8729,
                      "mutability": "mutable",
                      "name": "presaleAmount",
                      "nameLocation": "6387:13:48",
                      "nodeType": "VariableDeclaration",
                      "scope": 8834,
                      "src": "6379:21:48",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8728,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "6379:7:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 8746,
                  "initialValue": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "id": 8738,
                                    "name": "presaleUSDAmount",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8712,
                                    "src": "6487:16:48",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "id": 8739,
                                    "name": "currentPresalePrice",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8674,
                                    "src": "6505:19:48",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "id": 8736,
                                    "name": "SafeMath",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7057,
                                    "src": "6474:8:48",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_contract$_SafeMath_$7057_$",
                                      "typeString": "type(library SafeMath)"
                                    }
                                  },
                                  "id": 8737,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "div",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 6966,
                                  "src": "6474:12:48",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                    "typeString": "function (uint256,uint256) pure returns (uint256)"
                                  }
                                },
                                "id": 8740,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "6474:51:48",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 8735,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "6467:6:48",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_int256_$",
                                "typeString": "type(int256)"
                              },
                              "typeName": {
                                "id": 8734,
                                "name": "int256",
                                "nodeType": "ElementaryTypeName",
                                "src": "6467:6:48",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 8741,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "6467:59:48",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          {
                            "hexValue": "30",
                            "id": 8742,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "6544:1:48",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          {
                            "hexValue": "3138",
                            "id": 8743,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "6563:2:48",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_18_by_1",
                              "typeString": "int_const 18"
                            },
                            "value": "18"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            },
                            {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            {
                              "typeIdentifier": "t_rational_18_by_1",
                              "typeString": "int_const 18"
                            }
                          ],
                          "expression": {
                            "id": 8732,
                            "name": "PriceConverter",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7631,
                            "src": "6424:14:48",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_PriceConverter_$7631_$",
                              "typeString": "type(library PriceConverter)"
                            }
                          },
                          "id": 8733,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "scalePrice",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 7630,
                          "src": "6424:25:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_int256_$_t_uint8_$_t_uint8_$returns$_t_int256_$",
                            "typeString": "function (int256,uint8,uint8) pure returns (int256)"
                          }
                        },
                        "id": 8744,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "6424:155:48",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        }
                      ],
                      "id": 8731,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "6403:7:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_uint256_$",
                        "typeString": "type(uint256)"
                      },
                      "typeName": {
                        "id": 8730,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "6403:7:48",
                        "typeDescriptions": {}
                      }
                    },
                    "id": 8745,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6403:186:48",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6379:210:48"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 8753,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 8747,
                      "name": "presaleAmount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8729,
                      "src": "6617:13:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 8752,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 8748,
                        "name": "currentPresaleMaximumPresaleAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8678,
                        "src": "6645:34:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "-",
                      "rightExpression": {
                        "baseExpression": {
                          "id": 8749,
                          "name": "presaleAmountByRoundMapping",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8462,
                          "src": "6698:27:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                            "typeString": "mapping(uint256 => uint256)"
                          }
                        },
                        "id": 8751,
                        "indexExpression": {
                          "id": 8750,
                          "name": "currentPresaleRound",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8667,
                          "src": "6726:19:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "6698:48:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "6645:101:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "6617:129:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 8757,
                  "nodeType": "IfStatement",
                  "src": "6600:189:48",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 8754,
                        "name": "presaleAmountOverdemand",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8485,
                        "src": "6764:23:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$__$returns$__$",
                          "typeString": "function () pure"
                        }
                      },
                      "id": 8755,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "6764:25:48",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 8756,
                    "nodeType": "RevertStatement",
                    "src": "6757:32:48"
                  }
                },
                {
                  "expression": {
                    "id": 8762,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 8758,
                        "name": "presaleAmountByRoundMapping",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8462,
                        "src": "6800:27:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                          "typeString": "mapping(uint256 => uint256)"
                        }
                      },
                      "id": 8760,
                      "indexExpression": {
                        "id": 8759,
                        "name": "currentPresaleRound",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8667,
                        "src": "6828:19:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "6800:48:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "+=",
                    "rightHandSide": {
                      "id": 8761,
                      "name": "presaleAmount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8729,
                      "src": "6852:13:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "6800:65:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 8763,
                  "nodeType": "ExpressionStatement",
                  "src": "6800:65:48"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 8769,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 8764,
                      "name": "_paymentTokenAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8659,
                      "src": "6952:20:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "arguments": [
                        {
                          "hexValue": "30",
                          "id": 8767,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "6984:1:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          }
                        ],
                        "id": 8766,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "6976:7:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": {
                          "id": 8765,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "6976:7:48",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 8768,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "6976:10:48",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "6952:34:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 8816,
                    "nodeType": "Block",
                    "src": "7414:152:48",
                    "statements": [
                      {
                        "assignments": [
                          8802
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 8802,
                            "mutability": "mutable",
                            "name": "paymentToken",
                            "nameLocation": "7435:12:48",
                            "nodeType": "VariableDeclaration",
                            "scope": 8816,
                            "src": "7428:19:48",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IERC20_$2884",
                              "typeString": "contract IERC20"
                            },
                            "typeName": {
                              "id": 8801,
                              "nodeType": "UserDefinedTypeName",
                              "pathNode": {
                                "id": 8800,
                                "name": "IERC20",
                                "nodeType": "IdentifierPath",
                                "referencedDeclaration": 2884,
                                "src": "7428:6:48"
                              },
                              "referencedDeclaration": 2884,
                              "src": "7428:6:48",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20_$2884",
                                "typeString": "contract IERC20"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 8806,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 8804,
                              "name": "_paymentTokenAddress",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8659,
                              "src": "7457:20:48",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 8803,
                            "name": "IERC20",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2884,
                            "src": "7450:6:48",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_IERC20_$2884_$",
                              "typeString": "type(contract IERC20)"
                            }
                          },
                          "id": 8805,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7450:28:48",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IERC20_$2884",
                            "typeString": "contract IERC20"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "7428:50:48"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "expression": {
                                "id": 8810,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4294967281,
                                "src": "7518:3:48",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 8811,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "src": "7518:10:48",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 8812,
                              "name": "presaleReceiver",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8451,
                              "src": "7530:15:48",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "id": 8813,
                              "name": "_amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8661,
                              "src": "7547:7:48",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "id": 8807,
                              "name": "paymentToken",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8802,
                              "src": "7492:12:48",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20_$2884",
                                "typeString": "contract IERC20"
                              }
                            },
                            "id": 8809,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "transferFrom",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 2865,
                            "src": "7492:25:48",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$",
                              "typeString": "function (address,address,uint256) external returns (bool)"
                            }
                          },
                          "id": 8814,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7492:63:48",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 8815,
                        "nodeType": "ExpressionStatement",
                        "src": "7492:63:48"
                      }
                    ]
                  },
                  "id": 8817,
                  "nodeType": "IfStatement",
                  "src": "6948:618:48",
                  "trueBody": {
                    "id": 8799,
                    "nodeType": "Block",
                    "src": "6988:420:48",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 8773,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "id": 8770,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4294967281,
                              "src": "7006:3:48",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 8771,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "value",
                            "nodeType": "MemberAccess",
                            "src": "7006:9:48",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "id": 8772,
                            "name": "_amount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8661,
                            "src": "7018:7:48",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "7006:19:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "id": 8797,
                          "nodeType": "Block",
                          "src": "7113:285:48",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "id": 8781,
                                    "name": "_amount",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8661,
                                    "src": "7156:7:48",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "id": 8778,
                                    "name": "presaleReceiver",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8451,
                                    "src": "7131:15:48",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address_payable",
                                      "typeString": "address payable"
                                    }
                                  },
                                  "id": 8780,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "transfer",
                                  "nodeType": "MemberAccess",
                                  "src": "7131:24:48",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_transfer_nonpayable$_t_uint256_$returns$__$",
                                    "typeString": "function (uint256)"
                                  }
                                },
                                "id": 8782,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "7131:33:48",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 8783,
                              "nodeType": "ExpressionStatement",
                              "src": "7131:33:48"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "id": 8792,
                                          "name": "this",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 4294967268,
                                          "src": "7369:4:48",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_contract$_MockPresale_$9078",
                                            "typeString": "contract MockPresale"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_contract$_MockPresale_$9078",
                                            "typeString": "contract MockPresale"
                                          }
                                        ],
                                        "id": 8791,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "lValueRequested": false,
                                        "nodeType": "ElementaryTypeNameExpression",
                                        "src": "7361:7:48",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_type$_t_address_$",
                                          "typeString": "type(address)"
                                        },
                                        "typeName": {
                                          "id": 8790,
                                          "name": "address",
                                          "nodeType": "ElementaryTypeName",
                                          "src": "7361:7:48",
                                          "typeDescriptions": {}
                                        }
                                      },
                                      "id": 8793,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "typeConversion",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "7361:13:48",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    "id": 8794,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "balance",
                                    "nodeType": "MemberAccess",
                                    "src": "7361:21:48",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "arguments": [
                                      {
                                        "expression": {
                                          "id": 8786,
                                          "name": "msg",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 4294967281,
                                          "src": "7340:3:48",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_magic_message",
                                            "typeString": "msg"
                                          }
                                        },
                                        "id": 8787,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "sender",
                                        "nodeType": "MemberAccess",
                                        "src": "7340:10:48",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      ],
                                      "id": 8785,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "nodeType": "ElementaryTypeNameExpression",
                                      "src": "7332:8:48",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_address_payable_$",
                                        "typeString": "type(address payable)"
                                      },
                                      "typeName": {
                                        "id": 8784,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "7332:8:48",
                                        "stateMutability": "payable",
                                        "typeDescriptions": {}
                                      }
                                    },
                                    "id": 8788,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "7332:19:48",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address_payable",
                                      "typeString": "address payable"
                                    }
                                  },
                                  "id": 8789,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "transfer",
                                  "nodeType": "MemberAccess",
                                  "src": "7332:28:48",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_transfer_nonpayable$_t_uint256_$returns$__$",
                                    "typeString": "function (uint256)"
                                  }
                                },
                                "id": 8795,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "7332:51:48",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 8796,
                              "nodeType": "ExpressionStatement",
                              "src": "7332:51:48"
                            }
                          ]
                        },
                        "id": 8798,
                        "nodeType": "IfStatement",
                        "src": "7002:396:48",
                        "trueBody": {
                          "id": 8777,
                          "nodeType": "Block",
                          "src": "7027:80:48",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "id": 8774,
                                  "name": "presaleNativeTokenPaymentNotSufficient",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8473,
                                  "src": "7052:38:48",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$__$returns$__$",
                                    "typeString": "function () pure"
                                  }
                                },
                                "id": 8775,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "7052:40:48",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 8776,
                              "nodeType": "RevertStatement",
                              "src": "7045:47:48"
                            }
                          ]
                        }
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 8821,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4294967281,
                          "src": "7630:3:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 8822,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "7630:10:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 8823,
                        "name": "presaleAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8729,
                        "src": "7642:13:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 8818,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8706,
                        "src": "7619:5:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20Custom_$9652",
                          "typeString": "contract IERC20Custom"
                        }
                      },
                      "id": 8820,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "mint",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 9639,
                      "src": "7619:10:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256) external"
                      }
                    },
                    "id": 8824,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7619:37:48",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8825,
                  "nodeType": "ExpressionStatement",
                  "src": "7619:37:48"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 8827,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4294967281,
                          "src": "7697:3:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 8828,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "7697:10:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 8829,
                        "name": "_paymentTokenAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8659,
                        "src": "7721:20:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 8830,
                        "name": "presaleAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8729,
                        "src": "7755:13:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 8831,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8661,
                        "src": "7782:7:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 8826,
                      "name": "TokenPresold",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8412,
                      "src": "7671:12:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256,uint256)"
                      }
                    },
                    "id": 8832,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7671:128:48",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8833,
                  "nodeType": "EmitStatement",
                  "src": "7666:133:48"
                }
              ]
            },
            "documentation": {
              "id": 8657,
              "nodeType": "StructuredDocumentation",
              "src": "4989:268:48",
              "text": " @dev Execute the Presale of ALPS Token in exchange of other token\n @param _paymentTokenAddress - Address of the token use to pay (address 0 is for native token)\n @param _amount - Amount denominated in the `paymentTokenAddress` being paid"
            },
            "functionSelector": "efca9049",
            "id": 8835,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 8664,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 8663,
                  "name": "nonReentrant",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 741,
                  "src": "5371:12:48"
                },
                "nodeType": "ModifierInvocation",
                "src": "5371:12:48"
              }
            ],
            "name": "presaleTokens",
            "nameLocation": "5271:13:48",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8662,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8659,
                  "mutability": "mutable",
                  "name": "_paymentTokenAddress",
                  "nameLocation": "5293:20:48",
                  "nodeType": "VariableDeclaration",
                  "scope": 8835,
                  "src": "5285:28:48",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8658,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5285:7:48",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8661,
                  "mutability": "mutable",
                  "name": "_amount",
                  "nameLocation": "5323:7:48",
                  "nodeType": "VariableDeclaration",
                  "scope": 8835,
                  "src": "5315:15:48",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8660,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5315:7:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5284:47:48"
            },
            "returnParameters": {
              "id": 8665,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5388:0:48"
            },
            "scope": 9078,
            "src": "5262:2544:48",
            "stateMutability": "payable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 8851,
              "nodeType": "Block",
              "src": "8061:113:48",
              "statements": [
                {
                  "expression": {
                    "id": 8845,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 8843,
                      "name": "presaleReceiver",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8451,
                      "src": "8071:15:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 8844,
                      "name": "_newPresaleReceiver",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8838,
                      "src": "8089:19:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "src": "8071:37:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "id": 8846,
                  "nodeType": "ExpressionStatement",
                  "src": "8071:37:48"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 8848,
                        "name": "_newPresaleReceiver",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8838,
                        "src": "8147:19:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "id": 8847,
                      "name": "PresaleReceiverUpdated",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8428,
                      "src": "8124:22:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 8849,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8124:43:48",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8850,
                  "nodeType": "EmitStatement",
                  "src": "8119:48:48"
                }
              ]
            },
            "documentation": {
              "id": 8836,
              "nodeType": "StructuredDocumentation",
              "src": "7812:142:48",
              "text": " @dev Set new Presale Receiver Address\n @param _newPresaleReceiver - Address that'll receive the presale payment token"
            },
            "functionSelector": "feda925b",
            "id": 8852,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 8841,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 8840,
                  "name": "onlyOwner",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 474,
                  "src": "8047:9:48"
                },
                "nodeType": "ModifierInvocation",
                "src": "8047:9:48"
              }
            ],
            "name": "setPresaleReceiver",
            "nameLocation": "7968:18:48",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8839,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8838,
                  "mutability": "mutable",
                  "name": "_newPresaleReceiver",
                  "nameLocation": "8003:19:48",
                  "nodeType": "VariableDeclaration",
                  "scope": 8852,
                  "src": "7987:35:48",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address_payable",
                    "typeString": "address payable"
                  },
                  "typeName": {
                    "id": 8837,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7987:15:48",
                    "stateMutability": "payable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "7986:37:48"
            },
            "returnParameters": {
              "id": 8842,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8061:0:48"
            },
            "scope": 9078,
            "src": "7959:215:48",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 8871,
              "nodeType": "Block",
              "src": "8448:101:48",
              "statements": [
                {
                  "expression": {
                    "id": 8865,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 8863,
                      "name": "tokenAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8449,
                      "src": "8458:12:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 8864,
                      "name": "_newTokenAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8855,
                      "src": "8473:16:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "8458:31:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 8866,
                  "nodeType": "ExpressionStatement",
                  "src": "8458:31:48"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 8868,
                        "name": "_newTokenAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8855,
                        "src": "8525:16:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 8867,
                      "name": "PresaleTokenUpdated",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8440,
                      "src": "8505:19:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 8869,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8505:37:48",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8870,
                  "nodeType": "EmitStatement",
                  "src": "8500:42:48"
                }
              ]
            },
            "documentation": {
              "id": 8853,
              "nodeType": "StructuredDocumentation",
              "src": "8180:123:48",
              "text": " @dev Set new Presale Token Address\n @param _newTokenAddress - Address of token that'll be presaled"
            },
            "functionSelector": "3c0c134d",
            "id": 8872,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 8858,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 8857,
                  "name": "onlyOwner",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 474,
                  "src": "8389:9:48"
                },
                "nodeType": "ModifierInvocation",
                "src": "8389:9:48"
              },
              {
                "arguments": [
                  {
                    "id": 8860,
                    "name": "_newTokenAddress",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 8855,
                    "src": "8426:16:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 8861,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 8859,
                  "name": "onlyNonZeroAddress",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 8505,
                  "src": "8407:18:48"
                },
                "nodeType": "ModifierInvocation",
                "src": "8407:36:48"
              }
            ],
            "name": "setPresaleTokenAddress",
            "nameLocation": "8317:22:48",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8856,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8855,
                  "mutability": "mutable",
                  "name": "_newTokenAddress",
                  "nameLocation": "8348:16:48",
                  "nodeType": "VariableDeclaration",
                  "scope": 8872,
                  "src": "8340:24:48",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8854,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "8340:7:48",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "8339:26:48"
            },
            "returnParameters": {
              "id": 8862,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8448:0:48"
            },
            "scope": 9078,
            "src": "8308:241:48",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 8907,
              "nodeType": "Block",
              "src": "9083:348:48",
              "statements": [
                {
                  "expression": {
                    "id": 8892,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "baseExpression": {
                          "id": 8887,
                          "name": "presalePaymentTokenMapping",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8467,
                          "src": "9093:26:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_struct$_PresalePaymentTokenData_$8402_storage_$",
                            "typeString": "mapping(address => struct MockPresale.PresalePaymentTokenData storage ref)"
                          }
                        },
                        "id": 8889,
                        "indexExpression": {
                          "id": 8888,
                          "name": "_tokenAddress",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8875,
                          "src": "9120:13:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "9093:41:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_PresalePaymentTokenData_$8402_storage",
                          "typeString": "struct MockPresale.PresalePaymentTokenData storage ref"
                        }
                      },
                      "id": 8890,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "available",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 8399,
                      "src": "9093:64:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 8891,
                      "name": "_tokenAvailability",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8877,
                      "src": "9160:18:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "9093:85:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 8893,
                  "nodeType": "ExpressionStatement",
                  "src": "9093:85:48"
                },
                {
                  "expression": {
                    "id": 8899,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "baseExpression": {
                          "id": 8894,
                          "name": "presalePaymentTokenMapping",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8467,
                          "src": "9188:26:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_struct$_PresalePaymentTokenData_$8402_storage_$",
                            "typeString": "mapping(address => struct MockPresale.PresalePaymentTokenData storage ref)"
                          }
                        },
                        "id": 8896,
                        "indexExpression": {
                          "id": 8895,
                          "name": "_tokenAddress",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8875,
                          "src": "9215:13:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "9188:41:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_PresalePaymentTokenData_$8402_storage",
                          "typeString": "struct MockPresale.PresalePaymentTokenData storage ref"
                        }
                      },
                      "id": 8897,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "aggregatorAddress",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 8401,
                      "src": "9188:72:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 8898,
                      "name": "_aggregatorAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8879,
                      "src": "9263:18:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "9188:93:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 8900,
                  "nodeType": "ExpressionStatement",
                  "src": "9188:93:48"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 8902,
                        "name": "_tokenAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8875,
                        "src": "9337:13:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 8903,
                        "name": "_tokenAvailability",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8877,
                        "src": "9364:18:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "id": 8904,
                        "name": "_aggregatorAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8879,
                        "src": "9396:18:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 8901,
                      "name": "PresalePaymentTokenUpdated",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8436,
                      "src": "9297:26:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_bool_$_t_address_$returns$__$",
                        "typeString": "function (address,bool,address)"
                      }
                    },
                    "id": 8905,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9297:127:48",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8906,
                  "nodeType": "EmitStatement",
                  "src": "9292:132:48"
                }
              ]
            },
            "documentation": {
              "id": 8873,
              "nodeType": "StructuredDocumentation",
              "src": "8555:329:48",
              "text": " @dev Set Presale Payment Token Info\n @param _tokenAddress - Token Address use to purchase Presale\n @param _tokenAvailability - Indication whether Token Address can be used for Presale\n @param _aggregatorAddress - Chainlink's Aggregator Address to determine the USD price (for `presaleTokens`)"
            },
            "functionSelector": "736e38ef",
            "id": 8908,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 8882,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 8881,
                  "name": "onlyOwner",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 474,
                  "src": "9034:9:48"
                },
                "nodeType": "ModifierInvocation",
                "src": "9034:9:48"
              },
              {
                "arguments": [
                  {
                    "id": 8884,
                    "name": "_aggregatorAddress",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 8879,
                    "src": "9063:18:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 8885,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 8883,
                  "name": "onlyNonZeroAddress",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 8505,
                  "src": "9044:18:48"
                },
                "nodeType": "ModifierInvocation",
                "src": "9044:38:48"
              }
            ],
            "name": "setPresalePaymentToken",
            "nameLocation": "8898:22:48",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8880,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8875,
                  "mutability": "mutable",
                  "name": "_tokenAddress",
                  "nameLocation": "8938:13:48",
                  "nodeType": "VariableDeclaration",
                  "scope": 8908,
                  "src": "8930:21:48",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8874,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "8930:7:48",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8877,
                  "mutability": "mutable",
                  "name": "_tokenAvailability",
                  "nameLocation": "8966:18:48",
                  "nodeType": "VariableDeclaration",
                  "scope": 8908,
                  "src": "8961:23:48",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 8876,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "8961:4:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8879,
                  "mutability": "mutable",
                  "name": "_aggregatorAddress",
                  "nameLocation": "9002:18:48",
                  "nodeType": "VariableDeclaration",
                  "scope": 8908,
                  "src": "8994:26:48",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8878,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "8994:7:48",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "8920:106:48"
            },
            "returnParameters": {
              "id": 8886,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "9083:0:48"
            },
            "scope": 9078,
            "src": "8889:542:48",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 8932,
              "nodeType": "Block",
              "src": "9601:181:48",
              "statements": [
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 8919,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 8916,
                      "name": "_newEndingTime",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8911,
                      "src": "9615:14:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "expression": {
                        "id": 8917,
                        "name": "block",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4294967292,
                        "src": "9632:5:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_block",
                          "typeString": "block"
                        }
                      },
                      "id": 8918,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "timestamp",
                      "nodeType": "MemberAccess",
                      "src": "9632:15:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "9615:32:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 8923,
                  "nodeType": "IfStatement",
                  "src": "9611:71:48",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 8920,
                        "name": "presaleEndingTimeInvalid",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8489,
                        "src": "9656:24:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$__$returns$__$",
                          "typeString": "function () pure"
                        }
                      },
                      "id": 8921,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "9656:26:48",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 8922,
                    "nodeType": "RevertStatement",
                    "src": "9649:33:48"
                  }
                },
                {
                  "expression": {
                    "id": 8926,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 8924,
                      "name": "endingTime",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8453,
                      "src": "9692:10:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 8925,
                      "name": "_newEndingTime",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8911,
                      "src": "9705:14:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "9692:27:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 8927,
                  "nodeType": "ExpressionStatement",
                  "src": "9692:27:48"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 8929,
                        "name": "_newEndingTime",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8911,
                        "src": "9760:14:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 8928,
                      "name": "PresaleEndingTimeUpdated",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8444,
                      "src": "9735:24:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$returns$__$",
                        "typeString": "function (uint256)"
                      }
                    },
                    "id": 8930,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9735:40:48",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8931,
                  "nodeType": "EmitStatement",
                  "src": "9730:45:48"
                }
              ]
            },
            "documentation": {
              "id": 8909,
              "nodeType": "StructuredDocumentation",
              "src": "9437:95:48",
              "text": " @dev Set new Ending time\n @param _newEndingTime - New Ending Timestamp"
            },
            "functionSelector": "3473bf30",
            "id": 8933,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 8914,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 8913,
                  "name": "onlyOwner",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 474,
                  "src": "9591:9:48"
                },
                "nodeType": "ModifierInvocation",
                "src": "9591:9:48"
              }
            ],
            "name": "setEndingTime",
            "nameLocation": "9546:13:48",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8912,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8911,
                  "mutability": "mutable",
                  "name": "_newEndingTime",
                  "nameLocation": "9568:14:48",
                  "nodeType": "VariableDeclaration",
                  "scope": 8933,
                  "src": "9560:22:48",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8910,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9560:7:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "9559:24:48"
            },
            "returnParameters": {
              "id": 8915,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "9601:0:48"
            },
            "scope": 9078,
            "src": "9537:245:48",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 9076,
              "nodeType": "Block",
              "src": "10441:1911:48",
              "statements": [
                {
                  "assignments": [
                    8950
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8950,
                      "mutability": "mutable",
                      "name": "presaleStartingTime",
                      "nameLocation": "10459:19:48",
                      "nodeType": "VariableDeclaration",
                      "scope": 9076,
                      "src": "10451:27:48",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8949,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "10451:7:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 8955,
                  "initialValue": {
                    "expression": {
                      "baseExpression": {
                        "id": 8951,
                        "name": "presaleDetailsMapping",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8458,
                        "src": "10481:21:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_PresaleData_$8397_storage_$",
                          "typeString": "mapping(uint256 => struct MockPresale.PresaleData storage ref)"
                        }
                      },
                      "id": 8953,
                      "indexExpression": {
                        "id": 8952,
                        "name": "_presaleRound",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8936,
                        "src": "10503:13:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "10481:36:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_PresaleData_$8397_storage",
                        "typeString": "struct MockPresale.PresaleData storage ref"
                      }
                    },
                    "id": 8954,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "startingTime",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 8390,
                    "src": "10481:62:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "10451:92:48"
                },
                {
                  "assignments": [
                    8957
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8957,
                      "mutability": "mutable",
                      "name": "presaleUSDPrice",
                      "nameLocation": "10561:15:48",
                      "nodeType": "VariableDeclaration",
                      "scope": 9076,
                      "src": "10553:23:48",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8956,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "10553:7:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 8962,
                  "initialValue": {
                    "expression": {
                      "baseExpression": {
                        "id": 8958,
                        "name": "presaleDetailsMapping",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8458,
                        "src": "10579:21:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_PresaleData_$8397_storage_$",
                          "typeString": "mapping(uint256 => struct MockPresale.PresaleData storage ref)"
                        }
                      },
                      "id": 8960,
                      "indexExpression": {
                        "id": 8959,
                        "name": "_presaleRound",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8936,
                        "src": "10601:13:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "10579:36:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_PresaleData_$8397_storage",
                        "typeString": "struct MockPresale.PresaleData storage ref"
                      }
                    },
                    "id": 8961,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "usdPrice",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 8392,
                    "src": "10579:45:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "10553:71:48"
                },
                {
                  "assignments": [
                    8964
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8964,
                      "mutability": "mutable",
                      "name": "presaleMinimumUSDPurchase",
                      "nameLocation": "10642:25:48",
                      "nodeType": "VariableDeclaration",
                      "scope": 9076,
                      "src": "10634:33:48",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8963,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "10634:7:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 8969,
                  "initialValue": {
                    "expression": {
                      "baseExpression": {
                        "id": 8965,
                        "name": "presaleDetailsMapping",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8458,
                        "src": "10670:21:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_PresaleData_$8397_storage_$",
                          "typeString": "mapping(uint256 => struct MockPresale.PresaleData storage ref)"
                        }
                      },
                      "id": 8967,
                      "indexExpression": {
                        "id": 8966,
                        "name": "_presaleRound",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8936,
                        "src": "10692:13:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "10670:36:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_PresaleData_$8397_storage",
                        "typeString": "struct MockPresale.PresaleData storage ref"
                      }
                    },
                    "id": 8968,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "minimumUSDPurchase",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 8394,
                    "src": "10670:68:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "10634:104:48"
                },
                {
                  "assignments": [
                    8971
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8971,
                      "mutability": "mutable",
                      "name": "presaleMaximumPresaleAmount",
                      "nameLocation": "10756:27:48",
                      "nodeType": "VariableDeclaration",
                      "scope": 9076,
                      "src": "10748:35:48",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8970,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "10748:7:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 8976,
                  "initialValue": {
                    "expression": {
                      "baseExpression": {
                        "id": 8972,
                        "name": "presaleDetailsMapping",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8458,
                        "src": "10786:21:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_PresaleData_$8397_storage_$",
                          "typeString": "mapping(uint256 => struct MockPresale.PresaleData storage ref)"
                        }
                      },
                      "id": 8974,
                      "indexExpression": {
                        "id": 8973,
                        "name": "_presaleRound",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8936,
                        "src": "10821:13:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "10786:58:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_PresaleData_$8397_storage",
                        "typeString": "struct MockPresale.PresaleData storage ref"
                      }
                    },
                    "id": 8975,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "maximumPresaleAmount",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 8396,
                    "src": "10786:79:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "10748:117:48"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 8991,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "commonType": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "id": 8987,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 8983,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 8979,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 8977,
                            "name": "presaleStartingTime",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8950,
                            "src": "10966:19:48",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 8978,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "10989:1:48",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "10966:24:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&&",
                        "rightExpression": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 8982,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 8980,
                            "name": "presaleUSDPrice",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8957,
                            "src": "11006:15:48",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 8981,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "11025:1:48",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "11006:20:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "10966:60:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "&&",
                      "rightExpression": {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 8986,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 8984,
                          "name": "presaleMinimumUSDPurchase",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8964,
                          "src": "11042:25:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "hexValue": "30",
                          "id": 8985,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "11071:1:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "11042:30:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "src": "10966:106:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 8990,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 8988,
                        "name": "presaleMaximumPresaleAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8971,
                        "src": "11088:27:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "hexValue": "30",
                        "id": 8989,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "11119:1:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "src": "11088:32:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "10966:154:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 8997,
                  "nodeType": "IfStatement",
                  "src": "10949:211:48",
                  "trueBody": {
                    "expression": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "expression": {
                          "id": 8992,
                          "name": "totalPresaleRound",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8447,
                          "src": "11131:17:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Counter_$5303_storage",
                            "typeString": "struct Counters.Counter storage ref"
                          }
                        },
                        "id": 8994,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "increment",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 5329,
                        "src": "11131:27:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Counter_$5303_storage_ptr_$returns$__$bound_to$_t_struct$_Counter_$5303_storage_ptr_$",
                          "typeString": "function (struct Counters.Counter storage pointer)"
                        }
                      },
                      "id": 8995,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "11131:29:48",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 8996,
                    "nodeType": "ExpressionStatement",
                    "src": "11131:29:48"
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 9014,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 9000,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 8998,
                        "name": "_startingTime",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8938,
                        "src": "11308:13:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "hexValue": "30",
                        "id": 8999,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "11325:1:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "src": "11308:18:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "||",
                    "rightExpression": {
                      "components": [
                        {
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 9012,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 9003,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 9001,
                              "name": "_presaleRound",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8936,
                              "src": "11343:13:48",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "!=",
                            "rightExpression": {
                              "hexValue": "30",
                              "id": 9002,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "11360:1:48",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            "src": "11343:18:48",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "&&",
                          "rightExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 9011,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 9004,
                              "name": "_startingTime",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8938,
                              "src": "11381:13:48",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "<",
                            "rightExpression": {
                              "expression": {
                                "baseExpression": {
                                  "id": 9005,
                                  "name": "presaleDetailsMapping",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8458,
                                  "src": "11413:21:48",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_PresaleData_$8397_storage_$",
                                    "typeString": "mapping(uint256 => struct MockPresale.PresaleData storage ref)"
                                  }
                                },
                                "id": 9009,
                                "indexExpression": {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 9008,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "id": 9006,
                                    "name": "_presaleRound",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8936,
                                    "src": "11435:13:48",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "-",
                                  "rightExpression": {
                                    "hexValue": "31",
                                    "id": 9007,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "11451:1:48",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_1_by_1",
                                      "typeString": "int_const 1"
                                    },
                                    "value": "1"
                                  },
                                  "src": "11435:17:48",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "11413:40:48",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_PresaleData_$8397_storage",
                                  "typeString": "struct MockPresale.PresaleData storage ref"
                                }
                              },
                              "id": 9010,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "startingTime",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 8390,
                              "src": "11413:53:48",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "11381:85:48",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "11343:123:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        }
                      ],
                      "id": 9013,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "11342:125:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "11308:159:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 9018,
                  "nodeType": "IfStatement",
                  "src": "11291:222:48",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 9015,
                        "name": "presaleStartingTimeInvalid",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8475,
                        "src": "11485:26:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$__$returns$__$",
                          "typeString": "function () pure"
                        }
                      },
                      "id": 9016,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "11485:28:48",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 9017,
                    "nodeType": "RevertStatement",
                    "src": "11478:35:48"
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 9021,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 9019,
                      "name": "_usdPrice",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8940,
                      "src": "11583:9:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 9020,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "11596:1:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "11583:14:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 9025,
                  "nodeType": "IfStatement",
                  "src": "11579:51:48",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 9022,
                        "name": "presaleUSDPriceInvalid",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8477,
                        "src": "11606:22:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$__$returns$__$",
                          "typeString": "function () pure"
                        }
                      },
                      "id": 9023,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "11606:24:48",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 9024,
                    "nodeType": "RevertStatement",
                    "src": "11599:31:48"
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 9028,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 9026,
                      "name": "_minimumUSDPurchase",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8942,
                      "src": "11644:19:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 9027,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "11667:1:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "11644:24:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 9032,
                  "nodeType": "IfStatement",
                  "src": "11640:71:48",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 9029,
                        "name": "presaleMimumumUSDPurchaseInvalid",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8479,
                        "src": "11677:32:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$__$returns$__$",
                          "typeString": "function () pure"
                        }
                      },
                      "id": 9030,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "11677:34:48",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 9031,
                    "nodeType": "RevertStatement",
                    "src": "11670:41:48"
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 9035,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 9033,
                      "name": "_maximumPresaleAmount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8944,
                      "src": "11725:21:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 9034,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "11750:1:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "11725:26:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 9039,
                  "nodeType": "IfStatement",
                  "src": "11721:87:48",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 9036,
                        "name": "presaleMaximumPresaleAmountInvalid",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8481,
                        "src": "11772:34:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$__$returns$__$",
                          "typeString": "function () pure"
                        }
                      },
                      "id": 9037,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "11772:36:48",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 9038,
                    "nodeType": "RevertStatement",
                    "src": "11765:43:48"
                  }
                },
                {
                  "expression": {
                    "id": 9045,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "baseExpression": {
                          "id": 9040,
                          "name": "presaleDetailsMapping",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8458,
                          "src": "11819:21:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_PresaleData_$8397_storage_$",
                            "typeString": "mapping(uint256 => struct MockPresale.PresaleData storage ref)"
                          }
                        },
                        "id": 9042,
                        "indexExpression": {
                          "id": 9041,
                          "name": "_presaleRound",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8936,
                          "src": "11841:13:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "11819:36:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_PresaleData_$8397_storage",
                          "typeString": "struct MockPresale.PresaleData storage ref"
                        }
                      },
                      "id": 9043,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "startingTime",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 8390,
                      "src": "11819:49:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 9044,
                      "name": "_startingTime",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8938,
                      "src": "11871:13:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "11819:65:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 9046,
                  "nodeType": "ExpressionStatement",
                  "src": "11819:65:48"
                },
                {
                  "expression": {
                    "id": 9052,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "baseExpression": {
                          "id": 9047,
                          "name": "presaleDetailsMapping",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8458,
                          "src": "11894:21:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_PresaleData_$8397_storage_$",
                            "typeString": "mapping(uint256 => struct MockPresale.PresaleData storage ref)"
                          }
                        },
                        "id": 9049,
                        "indexExpression": {
                          "id": 9048,
                          "name": "_presaleRound",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8936,
                          "src": "11916:13:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "11894:36:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_PresaleData_$8397_storage",
                          "typeString": "struct MockPresale.PresaleData storage ref"
                        }
                      },
                      "id": 9050,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "usdPrice",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 8392,
                      "src": "11894:45:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 9051,
                      "name": "_usdPrice",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8940,
                      "src": "11942:9:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "11894:57:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 9053,
                  "nodeType": "ExpressionStatement",
                  "src": "11894:57:48"
                },
                {
                  "expression": {
                    "id": 9059,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "baseExpression": {
                          "id": 9054,
                          "name": "presaleDetailsMapping",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8458,
                          "src": "11961:21:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_PresaleData_$8397_storage_$",
                            "typeString": "mapping(uint256 => struct MockPresale.PresaleData storage ref)"
                          }
                        },
                        "id": 9056,
                        "indexExpression": {
                          "id": 9055,
                          "name": "_presaleRound",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8936,
                          "src": "11983:13:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "11961:36:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_PresaleData_$8397_storage",
                          "typeString": "struct MockPresale.PresaleData storage ref"
                        }
                      },
                      "id": 9057,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "minimumUSDPurchase",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 8394,
                      "src": "11961:68:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 9058,
                      "name": "_minimumUSDPurchase",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8942,
                      "src": "12032:19:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "11961:90:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 9060,
                  "nodeType": "ExpressionStatement",
                  "src": "11961:90:48"
                },
                {
                  "expression": {
                    "id": 9066,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "baseExpression": {
                          "id": 9061,
                          "name": "presaleDetailsMapping",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8458,
                          "src": "12061:21:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_PresaleData_$8397_storage_$",
                            "typeString": "mapping(uint256 => struct MockPresale.PresaleData storage ref)"
                          }
                        },
                        "id": 9063,
                        "indexExpression": {
                          "id": 9062,
                          "name": "_presaleRound",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8936,
                          "src": "12083:13:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "12061:36:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_PresaleData_$8397_storage",
                          "typeString": "struct MockPresale.PresaleData storage ref"
                        }
                      },
                      "id": 9064,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "maximumPresaleAmount",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 8396,
                      "src": "12061:70:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 9065,
                      "name": "_maximumPresaleAmount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8944,
                      "src": "12134:21:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "12061:94:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 9067,
                  "nodeType": "ExpressionStatement",
                  "src": "12061:94:48"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 9069,
                        "name": "_presaleRound",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8936,
                        "src": "12204:13:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 9070,
                        "name": "_startingTime",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8938,
                        "src": "12231:13:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 9071,
                        "name": "_usdPrice",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8940,
                        "src": "12258:9:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 9072,
                        "name": "_minimumUSDPurchase",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8942,
                        "src": "12281:19:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 9073,
                        "name": "_maximumPresaleAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8944,
                        "src": "12314:21:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 9068,
                      "name": "PresaleRoundUpdated",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8424,
                      "src": "12171:19:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (uint256,uint256,uint256,uint256,uint256)"
                      }
                    },
                    "id": 9074,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12171:174:48",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9075,
                  "nodeType": "EmitStatement",
                  "src": "12166:179:48"
                }
              ]
            },
            "documentation": {
              "id": 8934,
              "nodeType": "StructuredDocumentation",
              "src": "9788:435:48",
              "text": " @dev Creating/Updating a presale round information\n @param _presaleRound - The presale round chosen\n @param _startingTime - The starting Presale time\n @param _usdPrice - The USD Price of the Token in certain Presale Round\n @param _minimumUSDPurchase - The minimum USD amount to purchase the token\n @param _maximumPresaleAmount - The maximum amount of token available for a presale round"
            },
            "functionSelector": "c829d1db",
            "id": 9077,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 8947,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 8946,
                  "name": "onlyOwner",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 474,
                  "src": "10431:9:48"
                },
                "nodeType": "ModifierInvocation",
                "src": "10431:9:48"
              }
            ],
            "name": "setPresaleRound",
            "nameLocation": "10237:15:48",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8945,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8936,
                  "mutability": "mutable",
                  "name": "_presaleRound",
                  "nameLocation": "10270:13:48",
                  "nodeType": "VariableDeclaration",
                  "scope": 9077,
                  "src": "10262:21:48",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8935,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "10262:7:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8938,
                  "mutability": "mutable",
                  "name": "_startingTime",
                  "nameLocation": "10301:13:48",
                  "nodeType": "VariableDeclaration",
                  "scope": 9077,
                  "src": "10293:21:48",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8937,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "10293:7:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8940,
                  "mutability": "mutable",
                  "name": "_usdPrice",
                  "nameLocation": "10332:9:48",
                  "nodeType": "VariableDeclaration",
                  "scope": 9077,
                  "src": "10324:17:48",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8939,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "10324:7:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8942,
                  "mutability": "mutable",
                  "name": "_minimumUSDPurchase",
                  "nameLocation": "10359:19:48",
                  "nodeType": "VariableDeclaration",
                  "scope": 9077,
                  "src": "10351:27:48",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8941,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "10351:7:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8944,
                  "mutability": "mutable",
                  "name": "_maximumPresaleAmount",
                  "nameLocation": "10396:21:48",
                  "nodeType": "VariableDeclaration",
                  "scope": 9077,
                  "src": "10388:29:48",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8943,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "10388:7:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "10252:171:48"
            },
            "returnParameters": {
              "id": 8948,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "10441:0:48"
            },
            "scope": 9078,
            "src": "10228:2124:48",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          }
        ],
        "scope": 9079,
        "src": "444:11910:48",
        "usedErrors": [
          8469,
          8471,
          8473,
          8475,
          8477,
          8479,
          8481,
          8483,
          8485,
          8487,
          8489
        ]
      }
    ],
    "src": "38:12317:48"
  },
  "legacyAST": {
    "absolutePath": "project:/contracts/presale/mocks/MockPresale.sol",
    "exportedSymbols": {
      "AggregatorV3Interface": [
        45
      ],
      "Context": [
        5297
      ],
      "Counters": [
        5371
      ],
      "IERC20": [
        2884
      ],
      "IERC20Custom": [
        9652
      ],
      "MockPresale": [
        9078
      ],
      "Ownable": [
        532
      ],
      "PriceConverter": [
        7631
      ],
      "ReentrancyGuard": [
        742
      ],
      "SafeMath": [
        7057
      ]
    },
    "id": 9079,
    "license": "AGPL-3.0",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 8370,
        "literals": [
          "solidity",
          "^",
          "0.8",
          ".11"
        ],
        "nodeType": "PragmaDirective",
        "src": "38:24:48"
      },
      {
        "absolutePath": "@openzeppelin/contracts/access/Ownable.sol",
        "file": "@openzeppelin/contracts/access/Ownable.sol",
        "id": 8371,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 9079,
        "sourceUnit": 533,
        "src": "64:52:48",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@openzeppelin/contracts/token/ERC20/IERC20.sol",
        "file": "@openzeppelin/contracts/token/ERC20/IERC20.sol",
        "id": 8372,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 9079,
        "sourceUnit": 2885,
        "src": "117:56:48",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@openzeppelin/contracts/utils/Counters.sol",
        "file": "@openzeppelin/contracts/utils/Counters.sol",
        "id": 8373,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 9079,
        "sourceUnit": 5372,
        "src": "174:52:48",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@openzeppelin/contracts/utils/math/SafeMath.sol",
        "file": "@openzeppelin/contracts/utils/math/SafeMath.sol",
        "id": 8374,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 9079,
        "sourceUnit": 7058,
        "src": "227:57:48",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@openzeppelin/contracts/security/ReentrancyGuard.sol",
        "file": "@openzeppelin/contracts/security/ReentrancyGuard.sol",
        "id": 8375,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 9079,
        "sourceUnit": 743,
        "src": "285:62:48",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "project:/contracts/libraries/PriceConverter.sol",
        "file": "../../libraries/PriceConverter.sol",
        "id": 8376,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 9079,
        "sourceUnit": 7632,
        "src": "348:44:48",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "project:/contracts/token/interfaces/IERC20Custom.sol",
        "file": "../../token/interfaces/IERC20Custom.sol",
        "id": 8377,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 9079,
        "sourceUnit": 9653,
        "src": "393:49:48",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [
          {
            "baseName": {
              "id": 8378,
              "name": "Ownable",
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 532,
              "src": "468:7:48"
            },
            "id": 8379,
            "nodeType": "InheritanceSpecifier",
            "src": "468:7:48"
          },
          {
            "baseName": {
              "id": 8380,
              "name": "ReentrancyGuard",
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 742,
              "src": "477:15:48"
            },
            "id": 8381,
            "nodeType": "InheritanceSpecifier",
            "src": "477:15:48"
          }
        ],
        "canonicalName": "MockPresale",
        "contractDependencies": [],
        "contractKind": "contract",
        "fullyImplemented": true,
        "id": 9078,
        "linearizedBaseContracts": [
          9078,
          742,
          532,
          5297
        ],
        "name": "MockPresale",
        "nameLocation": "453:11:48",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "id": 8385,
            "libraryName": {
              "id": 8382,
              "name": "Counters",
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 5371,
              "src": "505:8:48"
            },
            "nodeType": "UsingForDirective",
            "src": "499:36:48",
            "typeName": {
              "id": 8384,
              "nodeType": "UserDefinedTypeName",
              "pathNode": {
                "id": 8383,
                "name": "Counters.Counter",
                "nodeType": "IdentifierPath",
                "referencedDeclaration": 5303,
                "src": "518:16:48"
              },
              "referencedDeclaration": 5303,
              "src": "518:16:48",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_Counter_$5303_storage_ptr",
                "typeString": "struct Counters.Counter"
              }
            }
          },
          {
            "id": 8388,
            "libraryName": {
              "id": 8386,
              "name": "SafeMath",
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 7057,
              "src": "546:8:48"
            },
            "nodeType": "UsingForDirective",
            "src": "540:27:48",
            "typeName": {
              "id": 8387,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "559:7:48",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            }
          },
          {
            "canonicalName": "MockPresale.PresaleData",
            "id": 8397,
            "members": [
              {
                "constant": false,
                "id": 8390,
                "mutability": "mutable",
                "name": "startingTime",
                "nameLocation": "610:12:48",
                "nodeType": "VariableDeclaration",
                "scope": 8397,
                "src": "602:20:48",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 8389,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "602:7:48",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 8392,
                "mutability": "mutable",
                "name": "usdPrice",
                "nameLocation": "640:8:48",
                "nodeType": "VariableDeclaration",
                "scope": 8397,
                "src": "632:16:48",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 8391,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "632:7:48",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 8394,
                "mutability": "mutable",
                "name": "minimumUSDPurchase",
                "nameLocation": "666:18:48",
                "nodeType": "VariableDeclaration",
                "scope": 8397,
                "src": "658:26:48",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 8393,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "658:7:48",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 8396,
                "mutability": "mutable",
                "name": "maximumPresaleAmount",
                "nameLocation": "702:20:48",
                "nodeType": "VariableDeclaration",
                "scope": 8397,
                "src": "694:28:48",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 8395,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "694:7:48",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "visibility": "internal"
              }
            ],
            "name": "PresaleData",
            "nameLocation": "580:11:48",
            "nodeType": "StructDefinition",
            "scope": 9078,
            "src": "573:156:48",
            "visibility": "public"
          },
          {
            "canonicalName": "MockPresale.PresalePaymentTokenData",
            "id": 8402,
            "members": [
              {
                "constant": false,
                "id": 8399,
                "mutability": "mutable",
                "name": "available",
                "nameLocation": "780:9:48",
                "nodeType": "VariableDeclaration",
                "scope": 8402,
                "src": "775:14:48",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_bool",
                  "typeString": "bool"
                },
                "typeName": {
                  "id": 8398,
                  "name": "bool",
                  "nodeType": "ElementaryTypeName",
                  "src": "775:4:48",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 8401,
                "mutability": "mutable",
                "name": "aggregatorAddress",
                "nameLocation": "807:17:48",
                "nodeType": "VariableDeclaration",
                "scope": 8402,
                "src": "799:25:48",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                },
                "typeName": {
                  "id": 8400,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "799:7:48",
                  "stateMutability": "nonpayable",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "visibility": "internal"
              }
            ],
            "name": "PresalePaymentTokenData",
            "nameLocation": "741:23:48",
            "nodeType": "StructDefinition",
            "scope": 9078,
            "src": "734:97:48",
            "visibility": "public"
          },
          {
            "anonymous": false,
            "id": 8412,
            "name": "TokenPresold",
            "nameLocation": "843:12:48",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 8411,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8404,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "to",
                  "nameLocation": "881:2:48",
                  "nodeType": "VariableDeclaration",
                  "scope": 8412,
                  "src": "865:18:48",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8403,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "865:7:48",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8406,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "paymentTokenAddress",
                  "nameLocation": "909:19:48",
                  "nodeType": "VariableDeclaration",
                  "scope": 8412,
                  "src": "893:35:48",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8405,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "893:7:48",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8408,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "946:6:48",
                  "nodeType": "VariableDeclaration",
                  "scope": 8412,
                  "src": "938:14:48",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8407,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "938:7:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8410,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "paymentTokenamount",
                  "nameLocation": "970:18:48",
                  "nodeType": "VariableDeclaration",
                  "scope": 8412,
                  "src": "962:26:48",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8409,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "962:7:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "855:139:48"
            },
            "src": "837:158:48"
          },
          {
            "anonymous": false,
            "id": 8424,
            "name": "PresaleRoundUpdated",
            "nameLocation": "1006:19:48",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 8423,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8414,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "presaleRound",
                  "nameLocation": "1051:12:48",
                  "nodeType": "VariableDeclaration",
                  "scope": 8424,
                  "src": "1035:28:48",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8413,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1035:7:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8416,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "startingTime",
                  "nameLocation": "1081:12:48",
                  "nodeType": "VariableDeclaration",
                  "scope": 8424,
                  "src": "1073:20:48",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8415,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1073:7:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8418,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "usdPrice",
                  "nameLocation": "1111:8:48",
                  "nodeType": "VariableDeclaration",
                  "scope": 8424,
                  "src": "1103:16:48",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8417,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1103:7:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8420,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "minimumUSDPurchase",
                  "nameLocation": "1137:18:48",
                  "nodeType": "VariableDeclaration",
                  "scope": 8424,
                  "src": "1129:26:48",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8419,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1129:7:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8422,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "maximumPresaleAmount",
                  "nameLocation": "1173:20:48",
                  "nodeType": "VariableDeclaration",
                  "scope": 8424,
                  "src": "1165:28:48",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8421,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1165:7:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1025:174:48"
            },
            "src": "1000:200:48"
          },
          {
            "anonymous": false,
            "id": 8428,
            "name": "PresaleReceiverUpdated",
            "nameLocation": "1211:22:48",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 8427,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8426,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "receiverAddress",
                  "nameLocation": "1242:15:48",
                  "nodeType": "VariableDeclaration",
                  "scope": 8428,
                  "src": "1234:23:48",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8425,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1234:7:48",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1233:25:48"
            },
            "src": "1205:54:48"
          },
          {
            "anonymous": false,
            "id": 8436,
            "name": "PresalePaymentTokenUpdated",
            "nameLocation": "1270:26:48",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 8435,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8430,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "tokenAddress",
                  "nameLocation": "1314:12:48",
                  "nodeType": "VariableDeclaration",
                  "scope": 8436,
                  "src": "1306:20:48",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8429,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1306:7:48",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8432,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "tokenAvailability",
                  "nameLocation": "1341:17:48",
                  "nodeType": "VariableDeclaration",
                  "scope": 8436,
                  "src": "1336:22:48",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 8431,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "1336:4:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8434,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "aggregatorAddress",
                  "nameLocation": "1376:17:48",
                  "nodeType": "VariableDeclaration",
                  "scope": 8436,
                  "src": "1368:25:48",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8433,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1368:7:48",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1296:103:48"
            },
            "src": "1264:136:48"
          },
          {
            "anonymous": false,
            "id": 8440,
            "name": "PresaleTokenUpdated",
            "nameLocation": "1411:19:48",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 8439,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8438,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "tokenAddress",
                  "nameLocation": "1439:12:48",
                  "nodeType": "VariableDeclaration",
                  "scope": 8440,
                  "src": "1431:20:48",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8437,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1431:7:48",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1430:22:48"
            },
            "src": "1405:48:48"
          },
          {
            "anonymous": false,
            "id": 8444,
            "name": "PresaleEndingTimeUpdated",
            "nameLocation": "1464:24:48",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 8443,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8442,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "endingTime",
                  "nameLocation": "1497:10:48",
                  "nodeType": "VariableDeclaration",
                  "scope": 8444,
                  "src": "1489:18:48",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8441,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1489:7:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1488:20:48"
            },
            "src": "1458:51:48"
          },
          {
            "constant": false,
            "functionSelector": "962de5c0",
            "id": 8447,
            "mutability": "mutable",
            "name": "totalPresaleRound",
            "nameLocation": "1539:17:48",
            "nodeType": "VariableDeclaration",
            "scope": 9078,
            "src": "1515:41:48",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_struct$_Counter_$5303_storage",
              "typeString": "struct Counters.Counter"
            },
            "typeName": {
              "id": 8446,
              "nodeType": "UserDefinedTypeName",
              "pathNode": {
                "id": 8445,
                "name": "Counters.Counter",
                "nodeType": "IdentifierPath",
                "referencedDeclaration": 5303,
                "src": "1515:16:48"
              },
              "referencedDeclaration": 5303,
              "src": "1515:16:48",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_Counter_$5303_storage_ptr",
                "typeString": "struct Counters.Counter"
              }
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "9d76ea58",
            "id": 8449,
            "mutability": "mutable",
            "name": "tokenAddress",
            "nameLocation": "1577:12:48",
            "nodeType": "VariableDeclaration",
            "scope": 9078,
            "src": "1562:27:48",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 8448,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "1562:7:48",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "c1436415",
            "id": 8451,
            "mutability": "mutable",
            "name": "presaleReceiver",
            "nameLocation": "1618:15:48",
            "nodeType": "VariableDeclaration",
            "scope": 9078,
            "src": "1595:38:48",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address_payable",
              "typeString": "address payable"
            },
            "typeName": {
              "id": 8450,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "1595:15:48",
              "stateMutability": "payable",
              "typeDescriptions": {
                "typeIdentifier": "t_address_payable",
                "typeString": "address payable"
              }
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "6c47a6c3",
            "id": 8453,
            "mutability": "mutable",
            "name": "endingTime",
            "nameLocation": "1654:10:48",
            "nodeType": "VariableDeclaration",
            "scope": 9078,
            "src": "1639:25:48",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 8452,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1639:7:48",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 8458,
            "mutability": "mutable",
            "name": "presaleDetailsMapping",
            "nameLocation": "1753:21:48",
            "nodeType": "VariableDeclaration",
            "scope": 9078,
            "src": "1721:53:48",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_PresaleData_$8397_storage_$",
              "typeString": "mapping(uint256 => struct MockPresale.PresaleData)"
            },
            "typeName": {
              "id": 8457,
              "keyType": {
                "id": 8454,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "1729:7:48",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              },
              "nodeType": "Mapping",
              "src": "1721:31:48",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_PresaleData_$8397_storage_$",
                "typeString": "mapping(uint256 => struct MockPresale.PresaleData)"
              },
              "valueType": {
                "id": 8456,
                "nodeType": "UserDefinedTypeName",
                "pathNode": {
                  "id": 8455,
                  "name": "PresaleData",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 8397,
                  "src": "1740:11:48"
                },
                "referencedDeclaration": 8397,
                "src": "1740:11:48",
                "typeDescriptions": {
                  "typeIdentifier": "t_struct$_PresaleData_$8397_storage_ptr",
                  "typeString": "struct MockPresale.PresaleData"
                }
              }
            },
            "visibility": "internal"
          },
          {
            "constant": false,
            "functionSelector": "392f911b",
            "id": 8462,
            "mutability": "mutable",
            "name": "presaleAmountByRoundMapping",
            "nameLocation": "1815:27:48",
            "nodeType": "VariableDeclaration",
            "scope": 9078,
            "src": "1780:62:48",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
              "typeString": "mapping(uint256 => uint256)"
            },
            "typeName": {
              "id": 8461,
              "keyType": {
                "id": 8459,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "1788:7:48",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              },
              "nodeType": "Mapping",
              "src": "1780:27:48",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                "typeString": "mapping(uint256 => uint256)"
              },
              "valueType": {
                "id": 8460,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "1799:7:48",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              }
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "8e7d41b7",
            "id": 8467,
            "mutability": "mutable",
            "name": "presalePaymentTokenMapping",
            "nameLocation": "1907:26:48",
            "nodeType": "VariableDeclaration",
            "scope": 9078,
            "src": "1848:85:48",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_struct$_PresalePaymentTokenData_$8402_storage_$",
              "typeString": "mapping(address => struct MockPresale.PresalePaymentTokenData)"
            },
            "typeName": {
              "id": 8466,
              "keyType": {
                "id": 8463,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "1856:7:48",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "1848:43:48",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_struct$_PresalePaymentTokenData_$8402_storage_$",
                "typeString": "mapping(address => struct MockPresale.PresalePaymentTokenData)"
              },
              "valueType": {
                "id": 8465,
                "nodeType": "UserDefinedTypeName",
                "pathNode": {
                  "id": 8464,
                  "name": "PresalePaymentTokenData",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 8402,
                  "src": "1867:23:48"
                },
                "referencedDeclaration": 8402,
                "src": "1867:23:48",
                "typeDescriptions": {
                  "typeIdentifier": "t_struct$_PresalePaymentTokenData_$8402_storage_ptr",
                  "typeString": "struct MockPresale.PresalePaymentTokenData"
                }
              }
            },
            "visibility": "public"
          },
          {
            "id": 8469,
            "name": "presaleRoundClosed",
            "nameLocation": "1946:18:48",
            "nodeType": "ErrorDefinition",
            "parameters": {
              "id": 8468,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1964:2:48"
            },
            "src": "1940:27:48"
          },
          {
            "id": 8471,
            "name": "presaleTokenNotAvailable",
            "nameLocation": "1978:24:48",
            "nodeType": "ErrorDefinition",
            "parameters": {
              "id": 8470,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2002:2:48"
            },
            "src": "1972:33:48"
          },
          {
            "id": 8473,
            "name": "presaleNativeTokenPaymentNotSufficient",
            "nameLocation": "2016:38:48",
            "nodeType": "ErrorDefinition",
            "parameters": {
              "id": 8472,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2054:2:48"
            },
            "src": "2010:47:48"
          },
          {
            "id": 8475,
            "name": "presaleStartingTimeInvalid",
            "nameLocation": "2068:26:48",
            "nodeType": "ErrorDefinition",
            "parameters": {
              "id": 8474,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2094:2:48"
            },
            "src": "2062:35:48"
          },
          {
            "id": 8477,
            "name": "presaleUSDPriceInvalid",
            "nameLocation": "2108:22:48",
            "nodeType": "ErrorDefinition",
            "parameters": {
              "id": 8476,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2130:2:48"
            },
            "src": "2102:31:48"
          },
          {
            "id": 8479,
            "name": "presaleMimumumUSDPurchaseInvalid",
            "nameLocation": "2144:32:48",
            "nodeType": "ErrorDefinition",
            "parameters": {
              "id": 8478,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2176:2:48"
            },
            "src": "2138:41:48"
          },
          {
            "id": 8481,
            "name": "presaleMaximumPresaleAmountInvalid",
            "nameLocation": "2190:34:48",
            "nodeType": "ErrorDefinition",
            "parameters": {
              "id": 8480,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2224:2:48"
            },
            "src": "2184:43:48"
          },
          {
            "id": 8483,
            "name": "presaleUSDPurchaseNotSufficient",
            "nameLocation": "2238:31:48",
            "nodeType": "ErrorDefinition",
            "parameters": {
              "id": 8482,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2269:2:48"
            },
            "src": "2232:40:48"
          },
          {
            "id": 8485,
            "name": "presaleAmountOverdemand",
            "nameLocation": "2283:23:48",
            "nodeType": "ErrorDefinition",
            "parameters": {
              "id": 8484,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2306:2:48"
            },
            "src": "2277:32:48"
          },
          {
            "id": 8487,
            "name": "presaleNonZeroAddressInvalid",
            "nameLocation": "2320:28:48",
            "nodeType": "ErrorDefinition",
            "parameters": {
              "id": 8486,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2348:2:48"
            },
            "src": "2314:37:48"
          },
          {
            "id": 8489,
            "name": "presaleEndingTimeInvalid",
            "nameLocation": "2362:24:48",
            "nodeType": "ErrorDefinition",
            "parameters": {
              "id": 8488,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2386:2:48"
            },
            "src": "2356:33:48"
          },
          {
            "body": {
              "id": 8504,
              "nodeType": "Block",
              "src": "2441:93:48",
              "statements": [
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 8498,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 8493,
                      "name": "_address",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8491,
                      "src": "2455:8:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "arguments": [
                        {
                          "hexValue": "30",
                          "id": 8496,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "2475:1:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          }
                        ],
                        "id": 8495,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "2467:7:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": {
                          "id": 8494,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2467:7:48",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 8497,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2467:10:48",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "2455:22:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 8502,
                  "nodeType": "IfStatement",
                  "src": "2451:65:48",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 8499,
                        "name": "presaleNonZeroAddressInvalid",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8487,
                        "src": "2486:28:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$__$returns$__$",
                          "typeString": "function () pure"
                        }
                      },
                      "id": 8500,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2486:30:48",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 8501,
                    "nodeType": "RevertStatement",
                    "src": "2479:37:48"
                  }
                },
                {
                  "id": 8503,
                  "nodeType": "PlaceholderStatement",
                  "src": "2526:1:48"
                }
              ]
            },
            "id": 8505,
            "name": "onlyNonZeroAddress",
            "nameLocation": "2404:18:48",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 8492,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8491,
                  "mutability": "mutable",
                  "name": "_address",
                  "nameLocation": "2431:8:48",
                  "nodeType": "VariableDeclaration",
                  "scope": 8505,
                  "src": "2423:16:48",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8490,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2423:7:48",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2422:18:48"
            },
            "src": "2395:139:48",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 8526,
              "nodeType": "Block",
              "src": "2660:123:48",
              "statements": [
                {
                  "expression": {
                    "id": 8516,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 8514,
                      "name": "tokenAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8449,
                      "src": "2670:12:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 8515,
                      "name": "_tokenAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8507,
                      "src": "2685:13:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "2670:28:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 8517,
                  "nodeType": "ExpressionStatement",
                  "src": "2670:28:48"
                },
                {
                  "expression": {
                    "id": 8520,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 8518,
                      "name": "presaleReceiver",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8451,
                      "src": "2708:15:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 8519,
                      "name": "_presaleReceiver",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8509,
                      "src": "2726:16:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "src": "2708:34:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "id": 8521,
                  "nodeType": "ExpressionStatement",
                  "src": "2708:34:48"
                },
                {
                  "expression": {
                    "id": 8524,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 8522,
                      "name": "endingTime",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8453,
                      "src": "2752:10:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 8523,
                      "name": "_endingTime",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8511,
                      "src": "2765:11:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2752:24:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 8525,
                  "nodeType": "ExpressionStatement",
                  "src": "2752:24:48"
                }
              ]
            },
            "id": 8527,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [],
            "name": "",
            "nameLocation": "-1:-1:-1",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8512,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8507,
                  "mutability": "mutable",
                  "name": "_tokenAddress",
                  "nameLocation": "2569:13:48",
                  "nodeType": "VariableDeclaration",
                  "scope": 8527,
                  "src": "2561:21:48",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8506,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2561:7:48",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8509,
                  "mutability": "mutable",
                  "name": "_presaleReceiver",
                  "nameLocation": "2608:16:48",
                  "nodeType": "VariableDeclaration",
                  "scope": 8527,
                  "src": "2592:32:48",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address_payable",
                    "typeString": "address payable"
                  },
                  "typeName": {
                    "id": 8508,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2592:15:48",
                    "stateMutability": "payable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8511,
                  "mutability": "mutable",
                  "name": "_endingTime",
                  "nameLocation": "2642:11:48",
                  "nodeType": "VariableDeclaration",
                  "scope": 8527,
                  "src": "2634:19:48",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8510,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2634:7:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2551:108:48"
            },
            "returnParameters": {
              "id": 8513,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2660:0:48"
            },
            "scope": 9078,
            "src": "2540:243:48",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 8537,
              "nodeType": "Block",
              "src": "2913:51:48",
              "statements": [
                {
                  "expression": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "id": 8533,
                        "name": "totalPresaleRound",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8447,
                        "src": "2930:17:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Counter_$5303_storage",
                          "typeString": "struct Counters.Counter storage ref"
                        }
                      },
                      "id": 8534,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "current",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 5315,
                      "src": "2930:25:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_struct$_Counter_$5303_storage_ptr_$returns$_t_uint256_$bound_to$_t_struct$_Counter_$5303_storage_ptr_$",
                        "typeString": "function (struct Counters.Counter storage pointer) view returns (uint256)"
                      }
                    },
                    "id": 8535,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2930:27:48",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 8532,
                  "id": 8536,
                  "nodeType": "Return",
                  "src": "2923:34:48"
                }
              ]
            },
            "documentation": {
              "id": 8528,
              "nodeType": "StructuredDocumentation",
              "src": "2789:57:48",
              "text": " @dev Get total amount of presale round"
            },
            "functionSelector": "398dcd26",
            "id": 8538,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getTotalPresaleRound",
            "nameLocation": "2860:20:48",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8529,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2880:2:48"
            },
            "returnParameters": {
              "id": 8532,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8531,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 8538,
                  "src": "2904:7:48",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8530,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2904:7:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2903:9:48"
            },
            "scope": 9078,
            "src": "2851:113:48",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 8550,
              "nodeType": "Block",
              "src": "3209:66:48",
              "statements": [
                {
                  "expression": {
                    "baseExpression": {
                      "id": 8546,
                      "name": "presaleAmountByRoundMapping",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8462,
                      "src": "3226:27:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                        "typeString": "mapping(uint256 => uint256)"
                      }
                    },
                    "id": 8548,
                    "indexExpression": {
                      "id": 8547,
                      "name": "_presaleRound",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8541,
                      "src": "3254:13:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "3226:42:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 8545,
                  "id": 8549,
                  "nodeType": "Return",
                  "src": "3219:49:48"
                }
              ]
            },
            "documentation": {
              "id": 8539,
              "nodeType": "StructuredDocumentation",
              "src": "2970:120:48",
              "text": " @dev Get presale total amount By presale round\n @param _presaleRound - The presale round chosen"
            },
            "functionSelector": "d958e001",
            "id": 8551,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getPresaleAmountByRound",
            "nameLocation": "3104:23:48",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8542,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8541,
                  "mutability": "mutable",
                  "name": "_presaleRound",
                  "nameLocation": "3136:13:48",
                  "nodeType": "VariableDeclaration",
                  "scope": 8551,
                  "src": "3128:21:48",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8540,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3128:7:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3127:23:48"
            },
            "returnParameters": {
              "id": 8545,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8544,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 8551,
                  "src": "3196:7:48",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8543,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3196:7:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3195:9:48"
            },
            "scope": 9078,
            "src": "3095:180:48",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 8583,
              "nodeType": "Block",
              "src": "3416:299:48",
              "statements": [
                {
                  "assignments": [
                    8558
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8558,
                      "mutability": "mutable",
                      "name": "totalPresale",
                      "nameLocation": "3434:12:48",
                      "nodeType": "VariableDeclaration",
                      "scope": 8583,
                      "src": "3426:20:48",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8557,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "3426:7:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 8560,
                  "initialValue": {
                    "hexValue": "30",
                    "id": 8559,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "3449:1:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_0_by_1",
                      "typeString": "int_const 0"
                    },
                    "value": "0"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3426:24:48"
                },
                {
                  "body": {
                    "id": 8579,
                    "nodeType": "Block",
                    "src": "3597:82:48",
                    "statements": [
                      {
                        "expression": {
                          "id": 8577,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 8573,
                            "name": "totalPresale",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8558,
                            "src": "3611:12:48",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "baseExpression": {
                              "id": 8574,
                              "name": "presaleAmountByRoundMapping",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8462,
                              "src": "3627:27:48",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                                "typeString": "mapping(uint256 => uint256)"
                              }
                            },
                            "id": 8576,
                            "indexExpression": {
                              "id": 8575,
                              "name": "presaleRound",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8562,
                              "src": "3655:12:48",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "3627:41:48",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "3611:57:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 8578,
                        "nodeType": "ExpressionStatement",
                        "src": "3611:57:48"
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 8569,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 8565,
                      "name": "presaleRound",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8562,
                      "src": "3516:12:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "expression": {
                          "id": 8566,
                          "name": "totalPresaleRound",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8447,
                          "src": "3531:17:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Counter_$5303_storage",
                            "typeString": "struct Counters.Counter storage ref"
                          }
                        },
                        "id": 8567,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "current",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 5315,
                        "src": "3531:25:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_struct$_Counter_$5303_storage_ptr_$returns$_t_uint256_$bound_to$_t_struct$_Counter_$5303_storage_ptr_$",
                          "typeString": "function (struct Counters.Counter storage pointer) view returns (uint256)"
                        }
                      },
                      "id": 8568,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "3531:27:48",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "3516:42:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 8580,
                  "initializationExpression": {
                    "assignments": [
                      8562
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 8562,
                        "mutability": "mutable",
                        "name": "presaleRound",
                        "nameLocation": "3486:12:48",
                        "nodeType": "VariableDeclaration",
                        "scope": 8580,
                        "src": "3478:20:48",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 8561,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3478:7:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "id": 8564,
                    "initialValue": {
                      "hexValue": "30",
                      "id": 8563,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3501:1:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "3478:24:48"
                  },
                  "loopExpression": {
                    "expression": {
                      "id": 8571,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "3572:14:48",
                      "subExpression": {
                        "id": 8570,
                        "name": "presaleRound",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8562,
                        "src": "3572:12:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 8572,
                    "nodeType": "ExpressionStatement",
                    "src": "3572:14:48"
                  },
                  "nodeType": "ForStatement",
                  "src": "3460:219:48"
                },
                {
                  "expression": {
                    "id": 8581,
                    "name": "totalPresale",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 8558,
                    "src": "3696:12:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 8556,
                  "id": 8582,
                  "nodeType": "Return",
                  "src": "3689:19:48"
                }
              ]
            },
            "documentation": {
              "id": 8552,
              "nodeType": "StructuredDocumentation",
              "src": "3281:67:48",
              "text": " @dev Get total amount of presale from all rounds"
            },
            "functionSelector": "0aca575a",
            "id": 8584,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getTotalPresaleAmount",
            "nameLocation": "3362:21:48",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8553,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3383:2:48"
            },
            "returnParameters": {
              "id": 8556,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8555,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 8584,
                  "src": "3407:7:48",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8554,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3407:7:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3406:9:48"
            },
            "scope": 9078,
            "src": "3353:362:48",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 8619,
              "nodeType": "Block",
              "src": "3839:371:48",
              "statements": [
                {
                  "body": {
                    "id": 8615,
                    "nodeType": "Block",
                    "src": "3990:195:48",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 8610,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "baseExpression": {
                                "id": 8604,
                                "name": "presaleDetailsMapping",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8458,
                                "src": "4025:21:48",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_PresaleData_$8397_storage_$",
                                  "typeString": "mapping(uint256 => struct MockPresale.PresaleData storage ref)"
                                }
                              },
                              "id": 8606,
                              "indexExpression": {
                                "id": 8605,
                                "name": "presaleRound",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8591,
                                "src": "4047:12:48",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "4025:35:48",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_PresaleData_$8397_storage",
                                "typeString": "struct MockPresale.PresaleData storage ref"
                              }
                            },
                            "id": 8607,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "startingTime",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 8390,
                            "src": "4025:48:48",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<=",
                          "rightExpression": {
                            "expression": {
                              "id": 8608,
                              "name": "block",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4294967292,
                              "src": "4093:5:48",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_block",
                                "typeString": "block"
                              }
                            },
                            "id": 8609,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "timestamp",
                            "nodeType": "MemberAccess",
                            "src": "4093:15:48",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "4025:83:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 8614,
                        "nodeType": "IfStatement",
                        "src": "4004:171:48",
                        "trueBody": {
                          "id": 8613,
                          "nodeType": "Block",
                          "src": "4123:52:48",
                          "statements": [
                            {
                              "expression": {
                                "id": 8611,
                                "name": "presaleRound",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8591,
                                "src": "4148:12:48",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "functionReturnParameters": 8589,
                              "id": 8612,
                              "nodeType": "Return",
                              "src": "4141:19:48"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 8600,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 8598,
                      "name": "presaleRound",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8591,
                      "src": "3935:12:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 8599,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3950:1:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "3935:16:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 8616,
                  "initializationExpression": {
                    "assignments": [
                      8591
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 8591,
                        "mutability": "mutable",
                        "name": "presaleRound",
                        "nameLocation": "3875:12:48",
                        "nodeType": "VariableDeclaration",
                        "scope": 8616,
                        "src": "3867:20:48",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 8590,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3867:7:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "id": 8597,
                    "initialValue": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 8596,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "id": 8592,
                            "name": "totalPresaleRound",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8447,
                            "src": "3890:17:48",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Counter_$5303_storage",
                              "typeString": "struct Counters.Counter storage ref"
                            }
                          },
                          "id": 8593,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "current",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 5315,
                          "src": "3890:25:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_struct$_Counter_$5303_storage_ptr_$returns$_t_uint256_$bound_to$_t_struct$_Counter_$5303_storage_ptr_$",
                            "typeString": "function (struct Counters.Counter storage pointer) view returns (uint256)"
                          }
                        },
                        "id": 8594,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3890:27:48",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "-",
                      "rightExpression": {
                        "hexValue": "31",
                        "id": 8595,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3920:1:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        },
                        "value": "1"
                      },
                      "src": "3890:31:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "3867:54:48"
                  },
                  "loopExpression": {
                    "expression": {
                      "id": 8602,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "--",
                      "prefix": false,
                      "src": "3965:14:48",
                      "subExpression": {
                        "id": 8601,
                        "name": "presaleRound",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8591,
                        "src": "3965:12:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 8603,
                    "nodeType": "ExpressionStatement",
                    "src": "3965:14:48"
                  },
                  "nodeType": "ForStatement",
                  "src": "3849:336:48"
                },
                {
                  "expression": {
                    "hexValue": "30",
                    "id": 8617,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "4202:1:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_0_by_1",
                      "typeString": "int_const 0"
                    },
                    "value": "0"
                  },
                  "functionReturnParameters": 8589,
                  "id": 8618,
                  "nodeType": "Return",
                  "src": "4195:8:48"
                }
              ]
            },
            "documentation": {
              "id": 8585,
              "nodeType": "StructuredDocumentation",
              "src": "3721:49:48",
              "text": " @dev Get Current Presale Round"
            },
            "functionSelector": "1c63f0ed",
            "id": 8620,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getCurrentPresaleRound",
            "nameLocation": "3784:22:48",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8586,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3806:2:48"
            },
            "returnParameters": {
              "id": 8589,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8588,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 8620,
                  "src": "3830:7:48",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8587,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3830:7:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3829:9:48"
            },
            "scope": 9078,
            "src": "3775:435:48",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 8655,
              "nodeType": "Block",
              "src": "4599:384:48",
              "statements": [
                {
                  "assignments": [
                    8633
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8633,
                      "mutability": "mutable",
                      "name": "currentPresaleRound",
                      "nameLocation": "4617:19:48",
                      "nodeType": "VariableDeclaration",
                      "scope": 8655,
                      "src": "4609:27:48",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8632,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "4609:7:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 8636,
                  "initialValue": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 8634,
                      "name": "getCurrentPresaleRound",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8620,
                      "src": "4639:22:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                        "typeString": "function () view returns (uint256)"
                      }
                    },
                    "id": 8635,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4639:24:48",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4609:54:48"
                },
                {
                  "expression": {
                    "components": [
                      {
                        "expression": {
                          "baseExpression": {
                            "id": 8637,
                            "name": "presaleDetailsMapping",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8458,
                            "src": "4694:21:48",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_PresaleData_$8397_storage_$",
                              "typeString": "mapping(uint256 => struct MockPresale.PresaleData storage ref)"
                            }
                          },
                          "id": 8639,
                          "indexExpression": {
                            "id": 8638,
                            "name": "currentPresaleRound",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8633,
                            "src": "4716:19:48",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "4694:42:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_PresaleData_$8397_storage",
                            "typeString": "struct MockPresale.PresaleData storage ref"
                          }
                        },
                        "id": 8640,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "startingTime",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 8390,
                        "src": "4694:55:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "expression": {
                          "baseExpression": {
                            "id": 8641,
                            "name": "presaleDetailsMapping",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8458,
                            "src": "4763:21:48",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_PresaleData_$8397_storage_$",
                              "typeString": "mapping(uint256 => struct MockPresale.PresaleData storage ref)"
                            }
                          },
                          "id": 8643,
                          "indexExpression": {
                            "id": 8642,
                            "name": "currentPresaleRound",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8633,
                            "src": "4785:19:48",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "4763:42:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_PresaleData_$8397_storage",
                            "typeString": "struct MockPresale.PresaleData storage ref"
                          }
                        },
                        "id": 8644,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "usdPrice",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 8392,
                        "src": "4763:51:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "expression": {
                          "baseExpression": {
                            "id": 8645,
                            "name": "presaleDetailsMapping",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8458,
                            "src": "4828:21:48",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_PresaleData_$8397_storage_$",
                              "typeString": "mapping(uint256 => struct MockPresale.PresaleData storage ref)"
                            }
                          },
                          "id": 8647,
                          "indexExpression": {
                            "id": 8646,
                            "name": "currentPresaleRound",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8633,
                            "src": "4850:19:48",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "4828:42:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_PresaleData_$8397_storage",
                            "typeString": "struct MockPresale.PresaleData storage ref"
                          }
                        },
                        "id": 8648,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "minimumUSDPurchase",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 8394,
                        "src": "4828:61:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "expression": {
                          "baseExpression": {
                            "id": 8649,
                            "name": "presaleDetailsMapping",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8458,
                            "src": "4903:21:48",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_PresaleData_$8397_storage_$",
                              "typeString": "mapping(uint256 => struct MockPresale.PresaleData storage ref)"
                            }
                          },
                          "id": 8651,
                          "indexExpression": {
                            "id": 8650,
                            "name": "currentPresaleRound",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8633,
                            "src": "4925:19:48",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "4903:42:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_PresaleData_$8397_storage",
                            "typeString": "struct MockPresale.PresaleData storage ref"
                          }
                        },
                        "id": 8652,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "maximumPresaleAmount",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 8396,
                        "src": "4903:63:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "id": 8653,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "4680:296:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$",
                      "typeString": "tuple(uint256,uint256,uint256,uint256)"
                    }
                  },
                  "functionReturnParameters": 8631,
                  "id": 8654,
                  "nodeType": "Return",
                  "src": "4673:303:48"
                }
              ]
            },
            "documentation": {
              "id": 8621,
              "nodeType": "StructuredDocumentation",
              "src": "4216:199:48",
              "text": " @dev Getting the Current Presale Details, including:\n @return Starting Time\n @return USD Price\n @return Minimum USD Purchase\n @return Maximum Presale Amount"
            },
            "functionSelector": "ec2b3523",
            "id": 8656,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getCurrentPresaleDetails",
            "nameLocation": "4429:24:48",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8622,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4453:2:48"
            },
            "returnParameters": {
              "id": 8631,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8624,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 8656,
                  "src": "4514:7:48",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8623,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4514:7:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8626,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 8656,
                  "src": "4535:7:48",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8625,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4535:7:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8628,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 8656,
                  "src": "4556:7:48",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8627,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4556:7:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8630,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 8656,
                  "src": "4577:7:48",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8629,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4577:7:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4500:94:48"
            },
            "scope": 9078,
            "src": "4420:563:48",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 8834,
              "nodeType": "Block",
              "src": "5388:2418:48",
              "statements": [
                {
                  "assignments": [
                    8667
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8667,
                      "mutability": "mutable",
                      "name": "currentPresaleRound",
                      "nameLocation": "5406:19:48",
                      "nodeType": "VariableDeclaration",
                      "scope": 8834,
                      "src": "5398:27:48",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8666,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "5398:7:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 8670,
                  "initialValue": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 8668,
                      "name": "getCurrentPresaleRound",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8620,
                      "src": "5428:22:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                        "typeString": "function () view returns (uint256)"
                      }
                    },
                    "id": 8669,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5428:24:48",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5398:54:48"
                },
                {
                  "assignments": [
                    8672,
                    8674,
                    8676,
                    8678
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8672,
                      "mutability": "mutable",
                      "name": "currentPresaleStartingTime",
                      "nameLocation": "5484:26:48",
                      "nodeType": "VariableDeclaration",
                      "scope": 8834,
                      "src": "5476:34:48",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8671,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "5476:7:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 8674,
                      "mutability": "mutable",
                      "name": "currentPresalePrice",
                      "nameLocation": "5532:19:48",
                      "nodeType": "VariableDeclaration",
                      "scope": 8834,
                      "src": "5524:27:48",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8673,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "5524:7:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 8676,
                      "mutability": "mutable",
                      "name": "currentPresaleMinimumUSDPurchase",
                      "nameLocation": "5573:32:48",
                      "nodeType": "VariableDeclaration",
                      "scope": 8834,
                      "src": "5565:40:48",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8675,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "5565:7:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 8678,
                      "mutability": "mutable",
                      "name": "currentPresaleMaximumPresaleAmount",
                      "nameLocation": "5627:34:48",
                      "nodeType": "VariableDeclaration",
                      "scope": 8834,
                      "src": "5619:42:48",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8677,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "5619:7:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 8681,
                  "initialValue": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 8679,
                      "name": "getCurrentPresaleDetails",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8656,
                      "src": "5674:24:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$",
                        "typeString": "function () view returns (uint256,uint256,uint256,uint256)"
                      }
                    },
                    "id": 8680,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5674:26:48",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$",
                      "typeString": "tuple(uint256,uint256,uint256,uint256)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5462:238:48"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 8690,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 8685,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "expression": {
                          "id": 8682,
                          "name": "block",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4294967292,
                          "src": "5785:5:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_block",
                            "typeString": "block"
                          }
                        },
                        "id": 8683,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "timestamp",
                        "nodeType": "MemberAccess",
                        "src": "5785:15:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "<",
                      "rightExpression": {
                        "id": 8684,
                        "name": "currentPresaleStartingTime",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8672,
                        "src": "5803:26:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "5785:44:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "||",
                    "rightExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 8689,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "expression": {
                          "id": 8686,
                          "name": "block",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4294967292,
                          "src": "5845:5:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_block",
                            "typeString": "block"
                          }
                        },
                        "id": 8687,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "timestamp",
                        "nodeType": "MemberAccess",
                        "src": "5845:15:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": ">=",
                      "rightExpression": {
                        "id": 8688,
                        "name": "endingTime",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8453,
                        "src": "5864:10:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "5845:29:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "5785:89:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 8694,
                  "nodeType": "IfStatement",
                  "src": "5768:144:48",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 8691,
                        "name": "presaleRoundClosed",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8469,
                        "src": "5892:18:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$__$returns$__$",
                          "typeString": "function () pure"
                        }
                      },
                      "id": 8692,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "5892:20:48",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 8693,
                    "nodeType": "RevertStatement",
                    "src": "5885:27:48"
                  }
                },
                {
                  "condition": {
                    "id": 8699,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "!",
                    "prefix": true,
                    "src": "5967:59:48",
                    "subExpression": {
                      "expression": {
                        "baseExpression": {
                          "id": 8695,
                          "name": "presalePaymentTokenMapping",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8467,
                          "src": "5968:26:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_struct$_PresalePaymentTokenData_$8402_storage_$",
                            "typeString": "mapping(address => struct MockPresale.PresalePaymentTokenData storage ref)"
                          }
                        },
                        "id": 8697,
                        "indexExpression": {
                          "id": 8696,
                          "name": "_paymentTokenAddress",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8659,
                          "src": "5995:20:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "5968:48:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_PresalePaymentTokenData_$8402_storage",
                          "typeString": "struct MockPresale.PresalePaymentTokenData storage ref"
                        }
                      },
                      "id": 8698,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "available",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 8399,
                      "src": "5968:58:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 8703,
                  "nodeType": "IfStatement",
                  "src": "5963:110:48",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 8700,
                        "name": "presaleTokenNotAvailable",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8471,
                        "src": "6047:24:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$__$returns$__$",
                          "typeString": "function () pure"
                        }
                      },
                      "id": 8701,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "6047:26:48",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 8702,
                    "nodeType": "RevertStatement",
                    "src": "6040:33:48"
                  }
                },
                {
                  "assignments": [
                    8706
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8706,
                      "mutability": "mutable",
                      "name": "token",
                      "nameLocation": "6152:5:48",
                      "nodeType": "VariableDeclaration",
                      "scope": 8834,
                      "src": "6139:18:48",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IERC20Custom_$9652",
                        "typeString": "contract IERC20Custom"
                      },
                      "typeName": {
                        "id": 8705,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 8704,
                          "name": "IERC20Custom",
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 9652,
                          "src": "6139:12:48"
                        },
                        "referencedDeclaration": 9652,
                        "src": "6139:12:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20Custom_$9652",
                          "typeString": "contract IERC20Custom"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 8710,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 8708,
                        "name": "tokenAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8449,
                        "src": "6173:12:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 8707,
                      "name": "IERC20Custom",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9652,
                      "src": "6160:12:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_IERC20Custom_$9652_$",
                        "typeString": "type(contract IERC20Custom)"
                      }
                    },
                    "id": 8709,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6160:26:48",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20Custom_$9652",
                      "typeString": "contract IERC20Custom"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6139:47:48"
                },
                {
                  "assignments": [
                    8712
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8712,
                      "mutability": "mutable",
                      "name": "presaleUSDAmount",
                      "nameLocation": "6205:16:48",
                      "nodeType": "VariableDeclaration",
                      "scope": 8834,
                      "src": "6197:24:48",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8711,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "6197:7:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 8720,
                  "initialValue": {
                    "arguments": [
                      {
                        "hexValue": "3330",
                        "id": 8715,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "6237:2:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_30_by_1",
                          "typeString": "int_const 30"
                        },
                        "value": "30"
                      },
                      {
                        "commonType": {
                          "typeIdentifier": "t_rational_1000000000000000000_by_1",
                          "typeString": "int_const 1000000000000000000"
                        },
                        "id": 8718,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "leftExpression": {
                          "hexValue": "3130",
                          "id": 8716,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "6241:2:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_10_by_1",
                            "typeString": "int_const 10"
                          },
                          "value": "10"
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "**",
                        "rightExpression": {
                          "hexValue": "3138",
                          "id": 8717,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "6245:2:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_18_by_1",
                            "typeString": "int_const 18"
                          },
                          "value": "18"
                        },
                        "src": "6241:6:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_1000000000000000000_by_1",
                          "typeString": "int_const 1000000000000000000"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_rational_30_by_1",
                          "typeString": "int_const 30"
                        },
                        {
                          "typeIdentifier": "t_rational_1000000000000000000_by_1",
                          "typeString": "int_const 1000000000000000000"
                        }
                      ],
                      "expression": {
                        "id": 8713,
                        "name": "SafeMath",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7057,
                        "src": "6224:8:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_SafeMath_$7057_$",
                          "typeString": "type(library SafeMath)"
                        }
                      },
                      "id": 8714,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "mul",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 6951,
                      "src": "6224:12:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 8719,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6224:24:48",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6197:51:48"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 8723,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 8721,
                      "name": "presaleUSDAmount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8712,
                      "src": "6263:16:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "id": 8722,
                      "name": "currentPresaleMinimumUSDPurchase",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8676,
                      "src": "6282:32:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "6263:51:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 8727,
                  "nodeType": "IfStatement",
                  "src": "6259:109:48",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 8724,
                        "name": "presaleUSDPurchaseNotSufficient",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8483,
                        "src": "6335:31:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$__$returns$__$",
                          "typeString": "function () pure"
                        }
                      },
                      "id": 8725,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "6335:33:48",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 8726,
                    "nodeType": "RevertStatement",
                    "src": "6328:40:48"
                  }
                },
                {
                  "assignments": [
                    8729
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8729,
                      "mutability": "mutable",
                      "name": "presaleAmount",
                      "nameLocation": "6387:13:48",
                      "nodeType": "VariableDeclaration",
                      "scope": 8834,
                      "src": "6379:21:48",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8728,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "6379:7:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 8746,
                  "initialValue": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "id": 8738,
                                    "name": "presaleUSDAmount",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8712,
                                    "src": "6487:16:48",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "id": 8739,
                                    "name": "currentPresalePrice",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8674,
                                    "src": "6505:19:48",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "id": 8736,
                                    "name": "SafeMath",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7057,
                                    "src": "6474:8:48",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_contract$_SafeMath_$7057_$",
                                      "typeString": "type(library SafeMath)"
                                    }
                                  },
                                  "id": 8737,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "div",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 6966,
                                  "src": "6474:12:48",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                    "typeString": "function (uint256,uint256) pure returns (uint256)"
                                  }
                                },
                                "id": 8740,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "6474:51:48",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 8735,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "6467:6:48",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_int256_$",
                                "typeString": "type(int256)"
                              },
                              "typeName": {
                                "id": 8734,
                                "name": "int256",
                                "nodeType": "ElementaryTypeName",
                                "src": "6467:6:48",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 8741,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "6467:59:48",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          {
                            "hexValue": "30",
                            "id": 8742,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "6544:1:48",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          {
                            "hexValue": "3138",
                            "id": 8743,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "6563:2:48",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_18_by_1",
                              "typeString": "int_const 18"
                            },
                            "value": "18"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            },
                            {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            {
                              "typeIdentifier": "t_rational_18_by_1",
                              "typeString": "int_const 18"
                            }
                          ],
                          "expression": {
                            "id": 8732,
                            "name": "PriceConverter",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7631,
                            "src": "6424:14:48",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_PriceConverter_$7631_$",
                              "typeString": "type(library PriceConverter)"
                            }
                          },
                          "id": 8733,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "scalePrice",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 7630,
                          "src": "6424:25:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_int256_$_t_uint8_$_t_uint8_$returns$_t_int256_$",
                            "typeString": "function (int256,uint8,uint8) pure returns (int256)"
                          }
                        },
                        "id": 8744,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "6424:155:48",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        }
                      ],
                      "id": 8731,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "6403:7:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_uint256_$",
                        "typeString": "type(uint256)"
                      },
                      "typeName": {
                        "id": 8730,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "6403:7:48",
                        "typeDescriptions": {}
                      }
                    },
                    "id": 8745,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6403:186:48",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6379:210:48"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 8753,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 8747,
                      "name": "presaleAmount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8729,
                      "src": "6617:13:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 8752,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 8748,
                        "name": "currentPresaleMaximumPresaleAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8678,
                        "src": "6645:34:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "-",
                      "rightExpression": {
                        "baseExpression": {
                          "id": 8749,
                          "name": "presaleAmountByRoundMapping",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8462,
                          "src": "6698:27:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                            "typeString": "mapping(uint256 => uint256)"
                          }
                        },
                        "id": 8751,
                        "indexExpression": {
                          "id": 8750,
                          "name": "currentPresaleRound",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8667,
                          "src": "6726:19:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "6698:48:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "6645:101:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "6617:129:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 8757,
                  "nodeType": "IfStatement",
                  "src": "6600:189:48",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 8754,
                        "name": "presaleAmountOverdemand",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8485,
                        "src": "6764:23:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$__$returns$__$",
                          "typeString": "function () pure"
                        }
                      },
                      "id": 8755,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "6764:25:48",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 8756,
                    "nodeType": "RevertStatement",
                    "src": "6757:32:48"
                  }
                },
                {
                  "expression": {
                    "id": 8762,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 8758,
                        "name": "presaleAmountByRoundMapping",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8462,
                        "src": "6800:27:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                          "typeString": "mapping(uint256 => uint256)"
                        }
                      },
                      "id": 8760,
                      "indexExpression": {
                        "id": 8759,
                        "name": "currentPresaleRound",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8667,
                        "src": "6828:19:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "6800:48:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "+=",
                    "rightHandSide": {
                      "id": 8761,
                      "name": "presaleAmount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8729,
                      "src": "6852:13:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "6800:65:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 8763,
                  "nodeType": "ExpressionStatement",
                  "src": "6800:65:48"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 8769,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 8764,
                      "name": "_paymentTokenAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8659,
                      "src": "6952:20:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "arguments": [
                        {
                          "hexValue": "30",
                          "id": 8767,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "6984:1:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          }
                        ],
                        "id": 8766,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "6976:7:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": {
                          "id": 8765,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "6976:7:48",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 8768,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "6976:10:48",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "6952:34:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 8816,
                    "nodeType": "Block",
                    "src": "7414:152:48",
                    "statements": [
                      {
                        "assignments": [
                          8802
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 8802,
                            "mutability": "mutable",
                            "name": "paymentToken",
                            "nameLocation": "7435:12:48",
                            "nodeType": "VariableDeclaration",
                            "scope": 8816,
                            "src": "7428:19:48",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IERC20_$2884",
                              "typeString": "contract IERC20"
                            },
                            "typeName": {
                              "id": 8801,
                              "nodeType": "UserDefinedTypeName",
                              "pathNode": {
                                "id": 8800,
                                "name": "IERC20",
                                "nodeType": "IdentifierPath",
                                "referencedDeclaration": 2884,
                                "src": "7428:6:48"
                              },
                              "referencedDeclaration": 2884,
                              "src": "7428:6:48",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20_$2884",
                                "typeString": "contract IERC20"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 8806,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 8804,
                              "name": "_paymentTokenAddress",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8659,
                              "src": "7457:20:48",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 8803,
                            "name": "IERC20",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2884,
                            "src": "7450:6:48",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_IERC20_$2884_$",
                              "typeString": "type(contract IERC20)"
                            }
                          },
                          "id": 8805,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7450:28:48",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IERC20_$2884",
                            "typeString": "contract IERC20"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "7428:50:48"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "expression": {
                                "id": 8810,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4294967281,
                                "src": "7518:3:48",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 8811,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "src": "7518:10:48",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 8812,
                              "name": "presaleReceiver",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8451,
                              "src": "7530:15:48",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "id": 8813,
                              "name": "_amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8661,
                              "src": "7547:7:48",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "id": 8807,
                              "name": "paymentToken",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8802,
                              "src": "7492:12:48",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20_$2884",
                                "typeString": "contract IERC20"
                              }
                            },
                            "id": 8809,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "transferFrom",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 2865,
                            "src": "7492:25:48",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$",
                              "typeString": "function (address,address,uint256) external returns (bool)"
                            }
                          },
                          "id": 8814,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7492:63:48",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 8815,
                        "nodeType": "ExpressionStatement",
                        "src": "7492:63:48"
                      }
                    ]
                  },
                  "id": 8817,
                  "nodeType": "IfStatement",
                  "src": "6948:618:48",
                  "trueBody": {
                    "id": 8799,
                    "nodeType": "Block",
                    "src": "6988:420:48",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 8773,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "id": 8770,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4294967281,
                              "src": "7006:3:48",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 8771,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "value",
                            "nodeType": "MemberAccess",
                            "src": "7006:9:48",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "id": 8772,
                            "name": "_amount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8661,
                            "src": "7018:7:48",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "7006:19:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "id": 8797,
                          "nodeType": "Block",
                          "src": "7113:285:48",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "id": 8781,
                                    "name": "_amount",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8661,
                                    "src": "7156:7:48",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "id": 8778,
                                    "name": "presaleReceiver",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8451,
                                    "src": "7131:15:48",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address_payable",
                                      "typeString": "address payable"
                                    }
                                  },
                                  "id": 8780,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "transfer",
                                  "nodeType": "MemberAccess",
                                  "src": "7131:24:48",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_transfer_nonpayable$_t_uint256_$returns$__$",
                                    "typeString": "function (uint256)"
                                  }
                                },
                                "id": 8782,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "7131:33:48",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 8783,
                              "nodeType": "ExpressionStatement",
                              "src": "7131:33:48"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "id": 8792,
                                          "name": "this",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 4294967268,
                                          "src": "7369:4:48",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_contract$_MockPresale_$9078",
                                            "typeString": "contract MockPresale"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_contract$_MockPresale_$9078",
                                            "typeString": "contract MockPresale"
                                          }
                                        ],
                                        "id": 8791,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "lValueRequested": false,
                                        "nodeType": "ElementaryTypeNameExpression",
                                        "src": "7361:7:48",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_type$_t_address_$",
                                          "typeString": "type(address)"
                                        },
                                        "typeName": {
                                          "id": 8790,
                                          "name": "address",
                                          "nodeType": "ElementaryTypeName",
                                          "src": "7361:7:48",
                                          "typeDescriptions": {}
                                        }
                                      },
                                      "id": 8793,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "typeConversion",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "7361:13:48",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    "id": 8794,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "balance",
                                    "nodeType": "MemberAccess",
                                    "src": "7361:21:48",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "arguments": [
                                      {
                                        "expression": {
                                          "id": 8786,
                                          "name": "msg",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 4294967281,
                                          "src": "7340:3:48",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_magic_message",
                                            "typeString": "msg"
                                          }
                                        },
                                        "id": 8787,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "sender",
                                        "nodeType": "MemberAccess",
                                        "src": "7340:10:48",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      ],
                                      "id": 8785,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "nodeType": "ElementaryTypeNameExpression",
                                      "src": "7332:8:48",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_address_payable_$",
                                        "typeString": "type(address payable)"
                                      },
                                      "typeName": {
                                        "id": 8784,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "7332:8:48",
                                        "stateMutability": "payable",
                                        "typeDescriptions": {}
                                      }
                                    },
                                    "id": 8788,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "7332:19:48",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address_payable",
                                      "typeString": "address payable"
                                    }
                                  },
                                  "id": 8789,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "transfer",
                                  "nodeType": "MemberAccess",
                                  "src": "7332:28:48",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_transfer_nonpayable$_t_uint256_$returns$__$",
                                    "typeString": "function (uint256)"
                                  }
                                },
                                "id": 8795,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "7332:51:48",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 8796,
                              "nodeType": "ExpressionStatement",
                              "src": "7332:51:48"
                            }
                          ]
                        },
                        "id": 8798,
                        "nodeType": "IfStatement",
                        "src": "7002:396:48",
                        "trueBody": {
                          "id": 8777,
                          "nodeType": "Block",
                          "src": "7027:80:48",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "id": 8774,
                                  "name": "presaleNativeTokenPaymentNotSufficient",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8473,
                                  "src": "7052:38:48",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$__$returns$__$",
                                    "typeString": "function () pure"
                                  }
                                },
                                "id": 8775,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "7052:40:48",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 8776,
                              "nodeType": "RevertStatement",
                              "src": "7045:47:48"
                            }
                          ]
                        }
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 8821,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4294967281,
                          "src": "7630:3:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 8822,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "7630:10:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 8823,
                        "name": "presaleAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8729,
                        "src": "7642:13:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 8818,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8706,
                        "src": "7619:5:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20Custom_$9652",
                          "typeString": "contract IERC20Custom"
                        }
                      },
                      "id": 8820,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "mint",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 9639,
                      "src": "7619:10:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256) external"
                      }
                    },
                    "id": 8824,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7619:37:48",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8825,
                  "nodeType": "ExpressionStatement",
                  "src": "7619:37:48"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 8827,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4294967281,
                          "src": "7697:3:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 8828,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "7697:10:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 8829,
                        "name": "_paymentTokenAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8659,
                        "src": "7721:20:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 8830,
                        "name": "presaleAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8729,
                        "src": "7755:13:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 8831,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8661,
                        "src": "7782:7:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 8826,
                      "name": "TokenPresold",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8412,
                      "src": "7671:12:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256,uint256)"
                      }
                    },
                    "id": 8832,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7671:128:48",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8833,
                  "nodeType": "EmitStatement",
                  "src": "7666:133:48"
                }
              ]
            },
            "documentation": {
              "id": 8657,
              "nodeType": "StructuredDocumentation",
              "src": "4989:268:48",
              "text": " @dev Execute the Presale of ALPS Token in exchange of other token\n @param _paymentTokenAddress - Address of the token use to pay (address 0 is for native token)\n @param _amount - Amount denominated in the `paymentTokenAddress` being paid"
            },
            "functionSelector": "efca9049",
            "id": 8835,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 8664,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 8663,
                  "name": "nonReentrant",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 741,
                  "src": "5371:12:48"
                },
                "nodeType": "ModifierInvocation",
                "src": "5371:12:48"
              }
            ],
            "name": "presaleTokens",
            "nameLocation": "5271:13:48",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8662,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8659,
                  "mutability": "mutable",
                  "name": "_paymentTokenAddress",
                  "nameLocation": "5293:20:48",
                  "nodeType": "VariableDeclaration",
                  "scope": 8835,
                  "src": "5285:28:48",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8658,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5285:7:48",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8661,
                  "mutability": "mutable",
                  "name": "_amount",
                  "nameLocation": "5323:7:48",
                  "nodeType": "VariableDeclaration",
                  "scope": 8835,
                  "src": "5315:15:48",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8660,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5315:7:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5284:47:48"
            },
            "returnParameters": {
              "id": 8665,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5388:0:48"
            },
            "scope": 9078,
            "src": "5262:2544:48",
            "stateMutability": "payable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 8851,
              "nodeType": "Block",
              "src": "8061:113:48",
              "statements": [
                {
                  "expression": {
                    "id": 8845,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 8843,
                      "name": "presaleReceiver",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8451,
                      "src": "8071:15:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 8844,
                      "name": "_newPresaleReceiver",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8838,
                      "src": "8089:19:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "src": "8071:37:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "id": 8846,
                  "nodeType": "ExpressionStatement",
                  "src": "8071:37:48"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 8848,
                        "name": "_newPresaleReceiver",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8838,
                        "src": "8147:19:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "id": 8847,
                      "name": "PresaleReceiverUpdated",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8428,
                      "src": "8124:22:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 8849,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8124:43:48",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8850,
                  "nodeType": "EmitStatement",
                  "src": "8119:48:48"
                }
              ]
            },
            "documentation": {
              "id": 8836,
              "nodeType": "StructuredDocumentation",
              "src": "7812:142:48",
              "text": " @dev Set new Presale Receiver Address\n @param _newPresaleReceiver - Address that'll receive the presale payment token"
            },
            "functionSelector": "feda925b",
            "id": 8852,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 8841,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 8840,
                  "name": "onlyOwner",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 474,
                  "src": "8047:9:48"
                },
                "nodeType": "ModifierInvocation",
                "src": "8047:9:48"
              }
            ],
            "name": "setPresaleReceiver",
            "nameLocation": "7968:18:48",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8839,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8838,
                  "mutability": "mutable",
                  "name": "_newPresaleReceiver",
                  "nameLocation": "8003:19:48",
                  "nodeType": "VariableDeclaration",
                  "scope": 8852,
                  "src": "7987:35:48",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address_payable",
                    "typeString": "address payable"
                  },
                  "typeName": {
                    "id": 8837,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7987:15:48",
                    "stateMutability": "payable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "7986:37:48"
            },
            "returnParameters": {
              "id": 8842,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8061:0:48"
            },
            "scope": 9078,
            "src": "7959:215:48",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 8871,
              "nodeType": "Block",
              "src": "8448:101:48",
              "statements": [
                {
                  "expression": {
                    "id": 8865,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 8863,
                      "name": "tokenAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8449,
                      "src": "8458:12:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 8864,
                      "name": "_newTokenAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8855,
                      "src": "8473:16:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "8458:31:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 8866,
                  "nodeType": "ExpressionStatement",
                  "src": "8458:31:48"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 8868,
                        "name": "_newTokenAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8855,
                        "src": "8525:16:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 8867,
                      "name": "PresaleTokenUpdated",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8440,
                      "src": "8505:19:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 8869,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8505:37:48",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8870,
                  "nodeType": "EmitStatement",
                  "src": "8500:42:48"
                }
              ]
            },
            "documentation": {
              "id": 8853,
              "nodeType": "StructuredDocumentation",
              "src": "8180:123:48",
              "text": " @dev Set new Presale Token Address\n @param _newTokenAddress - Address of token that'll be presaled"
            },
            "functionSelector": "3c0c134d",
            "id": 8872,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 8858,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 8857,
                  "name": "onlyOwner",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 474,
                  "src": "8389:9:48"
                },
                "nodeType": "ModifierInvocation",
                "src": "8389:9:48"
              },
              {
                "arguments": [
                  {
                    "id": 8860,
                    "name": "_newTokenAddress",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 8855,
                    "src": "8426:16:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 8861,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 8859,
                  "name": "onlyNonZeroAddress",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 8505,
                  "src": "8407:18:48"
                },
                "nodeType": "ModifierInvocation",
                "src": "8407:36:48"
              }
            ],
            "name": "setPresaleTokenAddress",
            "nameLocation": "8317:22:48",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8856,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8855,
                  "mutability": "mutable",
                  "name": "_newTokenAddress",
                  "nameLocation": "8348:16:48",
                  "nodeType": "VariableDeclaration",
                  "scope": 8872,
                  "src": "8340:24:48",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8854,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "8340:7:48",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "8339:26:48"
            },
            "returnParameters": {
              "id": 8862,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8448:0:48"
            },
            "scope": 9078,
            "src": "8308:241:48",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 8907,
              "nodeType": "Block",
              "src": "9083:348:48",
              "statements": [
                {
                  "expression": {
                    "id": 8892,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "baseExpression": {
                          "id": 8887,
                          "name": "presalePaymentTokenMapping",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8467,
                          "src": "9093:26:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_struct$_PresalePaymentTokenData_$8402_storage_$",
                            "typeString": "mapping(address => struct MockPresale.PresalePaymentTokenData storage ref)"
                          }
                        },
                        "id": 8889,
                        "indexExpression": {
                          "id": 8888,
                          "name": "_tokenAddress",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8875,
                          "src": "9120:13:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "9093:41:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_PresalePaymentTokenData_$8402_storage",
                          "typeString": "struct MockPresale.PresalePaymentTokenData storage ref"
                        }
                      },
                      "id": 8890,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "available",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 8399,
                      "src": "9093:64:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 8891,
                      "name": "_tokenAvailability",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8877,
                      "src": "9160:18:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "9093:85:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 8893,
                  "nodeType": "ExpressionStatement",
                  "src": "9093:85:48"
                },
                {
                  "expression": {
                    "id": 8899,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "baseExpression": {
                          "id": 8894,
                          "name": "presalePaymentTokenMapping",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8467,
                          "src": "9188:26:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_struct$_PresalePaymentTokenData_$8402_storage_$",
                            "typeString": "mapping(address => struct MockPresale.PresalePaymentTokenData storage ref)"
                          }
                        },
                        "id": 8896,
                        "indexExpression": {
                          "id": 8895,
                          "name": "_tokenAddress",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8875,
                          "src": "9215:13:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "9188:41:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_PresalePaymentTokenData_$8402_storage",
                          "typeString": "struct MockPresale.PresalePaymentTokenData storage ref"
                        }
                      },
                      "id": 8897,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "aggregatorAddress",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 8401,
                      "src": "9188:72:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 8898,
                      "name": "_aggregatorAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8879,
                      "src": "9263:18:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "9188:93:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 8900,
                  "nodeType": "ExpressionStatement",
                  "src": "9188:93:48"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 8902,
                        "name": "_tokenAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8875,
                        "src": "9337:13:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 8903,
                        "name": "_tokenAvailability",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8877,
                        "src": "9364:18:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "id": 8904,
                        "name": "_aggregatorAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8879,
                        "src": "9396:18:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 8901,
                      "name": "PresalePaymentTokenUpdated",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8436,
                      "src": "9297:26:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_bool_$_t_address_$returns$__$",
                        "typeString": "function (address,bool,address)"
                      }
                    },
                    "id": 8905,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9297:127:48",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8906,
                  "nodeType": "EmitStatement",
                  "src": "9292:132:48"
                }
              ]
            },
            "documentation": {
              "id": 8873,
              "nodeType": "StructuredDocumentation",
              "src": "8555:329:48",
              "text": " @dev Set Presale Payment Token Info\n @param _tokenAddress - Token Address use to purchase Presale\n @param _tokenAvailability - Indication whether Token Address can be used for Presale\n @param _aggregatorAddress - Chainlink's Aggregator Address to determine the USD price (for `presaleTokens`)"
            },
            "functionSelector": "736e38ef",
            "id": 8908,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 8882,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 8881,
                  "name": "onlyOwner",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 474,
                  "src": "9034:9:48"
                },
                "nodeType": "ModifierInvocation",
                "src": "9034:9:48"
              },
              {
                "arguments": [
                  {
                    "id": 8884,
                    "name": "_aggregatorAddress",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 8879,
                    "src": "9063:18:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 8885,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 8883,
                  "name": "onlyNonZeroAddress",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 8505,
                  "src": "9044:18:48"
                },
                "nodeType": "ModifierInvocation",
                "src": "9044:38:48"
              }
            ],
            "name": "setPresalePaymentToken",
            "nameLocation": "8898:22:48",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8880,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8875,
                  "mutability": "mutable",
                  "name": "_tokenAddress",
                  "nameLocation": "8938:13:48",
                  "nodeType": "VariableDeclaration",
                  "scope": 8908,
                  "src": "8930:21:48",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8874,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "8930:7:48",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8877,
                  "mutability": "mutable",
                  "name": "_tokenAvailability",
                  "nameLocation": "8966:18:48",
                  "nodeType": "VariableDeclaration",
                  "scope": 8908,
                  "src": "8961:23:48",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 8876,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "8961:4:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8879,
                  "mutability": "mutable",
                  "name": "_aggregatorAddress",
                  "nameLocation": "9002:18:48",
                  "nodeType": "VariableDeclaration",
                  "scope": 8908,
                  "src": "8994:26:48",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8878,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "8994:7:48",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "8920:106:48"
            },
            "returnParameters": {
              "id": 8886,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "9083:0:48"
            },
            "scope": 9078,
            "src": "8889:542:48",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 8932,
              "nodeType": "Block",
              "src": "9601:181:48",
              "statements": [
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 8919,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 8916,
                      "name": "_newEndingTime",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8911,
                      "src": "9615:14:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "expression": {
                        "id": 8917,
                        "name": "block",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4294967292,
                        "src": "9632:5:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_block",
                          "typeString": "block"
                        }
                      },
                      "id": 8918,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "timestamp",
                      "nodeType": "MemberAccess",
                      "src": "9632:15:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "9615:32:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 8923,
                  "nodeType": "IfStatement",
                  "src": "9611:71:48",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 8920,
                        "name": "presaleEndingTimeInvalid",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8489,
                        "src": "9656:24:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$__$returns$__$",
                          "typeString": "function () pure"
                        }
                      },
                      "id": 8921,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "9656:26:48",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 8922,
                    "nodeType": "RevertStatement",
                    "src": "9649:33:48"
                  }
                },
                {
                  "expression": {
                    "id": 8926,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 8924,
                      "name": "endingTime",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8453,
                      "src": "9692:10:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 8925,
                      "name": "_newEndingTime",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8911,
                      "src": "9705:14:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "9692:27:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 8927,
                  "nodeType": "ExpressionStatement",
                  "src": "9692:27:48"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 8929,
                        "name": "_newEndingTime",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8911,
                        "src": "9760:14:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 8928,
                      "name": "PresaleEndingTimeUpdated",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8444,
                      "src": "9735:24:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$returns$__$",
                        "typeString": "function (uint256)"
                      }
                    },
                    "id": 8930,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9735:40:48",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8931,
                  "nodeType": "EmitStatement",
                  "src": "9730:45:48"
                }
              ]
            },
            "documentation": {
              "id": 8909,
              "nodeType": "StructuredDocumentation",
              "src": "9437:95:48",
              "text": " @dev Set new Ending time\n @param _newEndingTime - New Ending Timestamp"
            },
            "functionSelector": "3473bf30",
            "id": 8933,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 8914,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 8913,
                  "name": "onlyOwner",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 474,
                  "src": "9591:9:48"
                },
                "nodeType": "ModifierInvocation",
                "src": "9591:9:48"
              }
            ],
            "name": "setEndingTime",
            "nameLocation": "9546:13:48",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8912,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8911,
                  "mutability": "mutable",
                  "name": "_newEndingTime",
                  "nameLocation": "9568:14:48",
                  "nodeType": "VariableDeclaration",
                  "scope": 8933,
                  "src": "9560:22:48",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8910,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9560:7:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "9559:24:48"
            },
            "returnParameters": {
              "id": 8915,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "9601:0:48"
            },
            "scope": 9078,
            "src": "9537:245:48",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 9076,
              "nodeType": "Block",
              "src": "10441:1911:48",
              "statements": [
                {
                  "assignments": [
                    8950
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8950,
                      "mutability": "mutable",
                      "name": "presaleStartingTime",
                      "nameLocation": "10459:19:48",
                      "nodeType": "VariableDeclaration",
                      "scope": 9076,
                      "src": "10451:27:48",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8949,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "10451:7:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 8955,
                  "initialValue": {
                    "expression": {
                      "baseExpression": {
                        "id": 8951,
                        "name": "presaleDetailsMapping",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8458,
                        "src": "10481:21:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_PresaleData_$8397_storage_$",
                          "typeString": "mapping(uint256 => struct MockPresale.PresaleData storage ref)"
                        }
                      },
                      "id": 8953,
                      "indexExpression": {
                        "id": 8952,
                        "name": "_presaleRound",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8936,
                        "src": "10503:13:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "10481:36:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_PresaleData_$8397_storage",
                        "typeString": "struct MockPresale.PresaleData storage ref"
                      }
                    },
                    "id": 8954,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "startingTime",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 8390,
                    "src": "10481:62:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "10451:92:48"
                },
                {
                  "assignments": [
                    8957
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8957,
                      "mutability": "mutable",
                      "name": "presaleUSDPrice",
                      "nameLocation": "10561:15:48",
                      "nodeType": "VariableDeclaration",
                      "scope": 9076,
                      "src": "10553:23:48",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8956,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "10553:7:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 8962,
                  "initialValue": {
                    "expression": {
                      "baseExpression": {
                        "id": 8958,
                        "name": "presaleDetailsMapping",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8458,
                        "src": "10579:21:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_PresaleData_$8397_storage_$",
                          "typeString": "mapping(uint256 => struct MockPresale.PresaleData storage ref)"
                        }
                      },
                      "id": 8960,
                      "indexExpression": {
                        "id": 8959,
                        "name": "_presaleRound",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8936,
                        "src": "10601:13:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "10579:36:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_PresaleData_$8397_storage",
                        "typeString": "struct MockPresale.PresaleData storage ref"
                      }
                    },
                    "id": 8961,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "usdPrice",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 8392,
                    "src": "10579:45:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "10553:71:48"
                },
                {
                  "assignments": [
                    8964
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8964,
                      "mutability": "mutable",
                      "name": "presaleMinimumUSDPurchase",
                      "nameLocation": "10642:25:48",
                      "nodeType": "VariableDeclaration",
                      "scope": 9076,
                      "src": "10634:33:48",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8963,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "10634:7:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 8969,
                  "initialValue": {
                    "expression": {
                      "baseExpression": {
                        "id": 8965,
                        "name": "presaleDetailsMapping",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8458,
                        "src": "10670:21:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_PresaleData_$8397_storage_$",
                          "typeString": "mapping(uint256 => struct MockPresale.PresaleData storage ref)"
                        }
                      },
                      "id": 8967,
                      "indexExpression": {
                        "id": 8966,
                        "name": "_presaleRound",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8936,
                        "src": "10692:13:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "10670:36:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_PresaleData_$8397_storage",
                        "typeString": "struct MockPresale.PresaleData storage ref"
                      }
                    },
                    "id": 8968,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "minimumUSDPurchase",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 8394,
                    "src": "10670:68:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "10634:104:48"
                },
                {
                  "assignments": [
                    8971
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8971,
                      "mutability": "mutable",
                      "name": "presaleMaximumPresaleAmount",
                      "nameLocation": "10756:27:48",
                      "nodeType": "VariableDeclaration",
                      "scope": 9076,
                      "src": "10748:35:48",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8970,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "10748:7:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 8976,
                  "initialValue": {
                    "expression": {
                      "baseExpression": {
                        "id": 8972,
                        "name": "presaleDetailsMapping",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8458,
                        "src": "10786:21:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_PresaleData_$8397_storage_$",
                          "typeString": "mapping(uint256 => struct MockPresale.PresaleData storage ref)"
                        }
                      },
                      "id": 8974,
                      "indexExpression": {
                        "id": 8973,
                        "name": "_presaleRound",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8936,
                        "src": "10821:13:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "10786:58:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_PresaleData_$8397_storage",
                        "typeString": "struct MockPresale.PresaleData storage ref"
                      }
                    },
                    "id": 8975,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "maximumPresaleAmount",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 8396,
                    "src": "10786:79:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "10748:117:48"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 8991,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "commonType": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "id": 8987,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 8983,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 8979,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 8977,
                            "name": "presaleStartingTime",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8950,
                            "src": "10966:19:48",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 8978,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "10989:1:48",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "10966:24:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&&",
                        "rightExpression": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 8982,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 8980,
                            "name": "presaleUSDPrice",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8957,
                            "src": "11006:15:48",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 8981,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "11025:1:48",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "11006:20:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "10966:60:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "&&",
                      "rightExpression": {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 8986,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 8984,
                          "name": "presaleMinimumUSDPurchase",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8964,
                          "src": "11042:25:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "hexValue": "30",
                          "id": 8985,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "11071:1:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "11042:30:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "src": "10966:106:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 8990,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 8988,
                        "name": "presaleMaximumPresaleAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8971,
                        "src": "11088:27:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "hexValue": "30",
                        "id": 8989,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "11119:1:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "src": "11088:32:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "10966:154:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 8997,
                  "nodeType": "IfStatement",
                  "src": "10949:211:48",
                  "trueBody": {
                    "expression": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "expression": {
                          "id": 8992,
                          "name": "totalPresaleRound",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8447,
                          "src": "11131:17:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Counter_$5303_storage",
                            "typeString": "struct Counters.Counter storage ref"
                          }
                        },
                        "id": 8994,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "increment",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 5329,
                        "src": "11131:27:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Counter_$5303_storage_ptr_$returns$__$bound_to$_t_struct$_Counter_$5303_storage_ptr_$",
                          "typeString": "function (struct Counters.Counter storage pointer)"
                        }
                      },
                      "id": 8995,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "11131:29:48",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 8996,
                    "nodeType": "ExpressionStatement",
                    "src": "11131:29:48"
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 9014,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 9000,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 8998,
                        "name": "_startingTime",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8938,
                        "src": "11308:13:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "hexValue": "30",
                        "id": 8999,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "11325:1:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "src": "11308:18:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "||",
                    "rightExpression": {
                      "components": [
                        {
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 9012,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 9003,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 9001,
                              "name": "_presaleRound",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8936,
                              "src": "11343:13:48",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "!=",
                            "rightExpression": {
                              "hexValue": "30",
                              "id": 9002,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "11360:1:48",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            "src": "11343:18:48",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "&&",
                          "rightExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 9011,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 9004,
                              "name": "_startingTime",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8938,
                              "src": "11381:13:48",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "<",
                            "rightExpression": {
                              "expression": {
                                "baseExpression": {
                                  "id": 9005,
                                  "name": "presaleDetailsMapping",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8458,
                                  "src": "11413:21:48",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_PresaleData_$8397_storage_$",
                                    "typeString": "mapping(uint256 => struct MockPresale.PresaleData storage ref)"
                                  }
                                },
                                "id": 9009,
                                "indexExpression": {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 9008,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "id": 9006,
                                    "name": "_presaleRound",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8936,
                                    "src": "11435:13:48",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "-",
                                  "rightExpression": {
                                    "hexValue": "31",
                                    "id": 9007,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "11451:1:48",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_1_by_1",
                                      "typeString": "int_const 1"
                                    },
                                    "value": "1"
                                  },
                                  "src": "11435:17:48",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "11413:40:48",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_PresaleData_$8397_storage",
                                  "typeString": "struct MockPresale.PresaleData storage ref"
                                }
                              },
                              "id": 9010,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "startingTime",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 8390,
                              "src": "11413:53:48",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "11381:85:48",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "11343:123:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        }
                      ],
                      "id": 9013,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "11342:125:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "11308:159:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 9018,
                  "nodeType": "IfStatement",
                  "src": "11291:222:48",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 9015,
                        "name": "presaleStartingTimeInvalid",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8475,
                        "src": "11485:26:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$__$returns$__$",
                          "typeString": "function () pure"
                        }
                      },
                      "id": 9016,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "11485:28:48",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 9017,
                    "nodeType": "RevertStatement",
                    "src": "11478:35:48"
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 9021,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 9019,
                      "name": "_usdPrice",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8940,
                      "src": "11583:9:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 9020,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "11596:1:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "11583:14:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 9025,
                  "nodeType": "IfStatement",
                  "src": "11579:51:48",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 9022,
                        "name": "presaleUSDPriceInvalid",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8477,
                        "src": "11606:22:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$__$returns$__$",
                          "typeString": "function () pure"
                        }
                      },
                      "id": 9023,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "11606:24:48",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 9024,
                    "nodeType": "RevertStatement",
                    "src": "11599:31:48"
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 9028,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 9026,
                      "name": "_minimumUSDPurchase",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8942,
                      "src": "11644:19:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 9027,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "11667:1:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "11644:24:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 9032,
                  "nodeType": "IfStatement",
                  "src": "11640:71:48",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 9029,
                        "name": "presaleMimumumUSDPurchaseInvalid",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8479,
                        "src": "11677:32:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$__$returns$__$",
                          "typeString": "function () pure"
                        }
                      },
                      "id": 9030,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "11677:34:48",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 9031,
                    "nodeType": "RevertStatement",
                    "src": "11670:41:48"
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 9035,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 9033,
                      "name": "_maximumPresaleAmount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8944,
                      "src": "11725:21:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 9034,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "11750:1:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "11725:26:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 9039,
                  "nodeType": "IfStatement",
                  "src": "11721:87:48",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 9036,
                        "name": "presaleMaximumPresaleAmountInvalid",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8481,
                        "src": "11772:34:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$__$returns$__$",
                          "typeString": "function () pure"
                        }
                      },
                      "id": 9037,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "11772:36:48",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 9038,
                    "nodeType": "RevertStatement",
                    "src": "11765:43:48"
                  }
                },
                {
                  "expression": {
                    "id": 9045,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "baseExpression": {
                          "id": 9040,
                          "name": "presaleDetailsMapping",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8458,
                          "src": "11819:21:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_PresaleData_$8397_storage_$",
                            "typeString": "mapping(uint256 => struct MockPresale.PresaleData storage ref)"
                          }
                        },
                        "id": 9042,
                        "indexExpression": {
                          "id": 9041,
                          "name": "_presaleRound",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8936,
                          "src": "11841:13:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "11819:36:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_PresaleData_$8397_storage",
                          "typeString": "struct MockPresale.PresaleData storage ref"
                        }
                      },
                      "id": 9043,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "startingTime",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 8390,
                      "src": "11819:49:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 9044,
                      "name": "_startingTime",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8938,
                      "src": "11871:13:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "11819:65:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 9046,
                  "nodeType": "ExpressionStatement",
                  "src": "11819:65:48"
                },
                {
                  "expression": {
                    "id": 9052,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "baseExpression": {
                          "id": 9047,
                          "name": "presaleDetailsMapping",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8458,
                          "src": "11894:21:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_PresaleData_$8397_storage_$",
                            "typeString": "mapping(uint256 => struct MockPresale.PresaleData storage ref)"
                          }
                        },
                        "id": 9049,
                        "indexExpression": {
                          "id": 9048,
                          "name": "_presaleRound",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8936,
                          "src": "11916:13:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "11894:36:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_PresaleData_$8397_storage",
                          "typeString": "struct MockPresale.PresaleData storage ref"
                        }
                      },
                      "id": 9050,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "usdPrice",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 8392,
                      "src": "11894:45:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 9051,
                      "name": "_usdPrice",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8940,
                      "src": "11942:9:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "11894:57:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 9053,
                  "nodeType": "ExpressionStatement",
                  "src": "11894:57:48"
                },
                {
                  "expression": {
                    "id": 9059,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "baseExpression": {
                          "id": 9054,
                          "name": "presaleDetailsMapping",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8458,
                          "src": "11961:21:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_PresaleData_$8397_storage_$",
                            "typeString": "mapping(uint256 => struct MockPresale.PresaleData storage ref)"
                          }
                        },
                        "id": 9056,
                        "indexExpression": {
                          "id": 9055,
                          "name": "_presaleRound",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8936,
                          "src": "11983:13:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "11961:36:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_PresaleData_$8397_storage",
                          "typeString": "struct MockPresale.PresaleData storage ref"
                        }
                      },
                      "id": 9057,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "minimumUSDPurchase",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 8394,
                      "src": "11961:68:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 9058,
                      "name": "_minimumUSDPurchase",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8942,
                      "src": "12032:19:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "11961:90:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 9060,
                  "nodeType": "ExpressionStatement",
                  "src": "11961:90:48"
                },
                {
                  "expression": {
                    "id": 9066,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "baseExpression": {
                          "id": 9061,
                          "name": "presaleDetailsMapping",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8458,
                          "src": "12061:21:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_PresaleData_$8397_storage_$",
                            "typeString": "mapping(uint256 => struct MockPresale.PresaleData storage ref)"
                          }
                        },
                        "id": 9063,
                        "indexExpression": {
                          "id": 9062,
                          "name": "_presaleRound",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8936,
                          "src": "12083:13:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "12061:36:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_PresaleData_$8397_storage",
                          "typeString": "struct MockPresale.PresaleData storage ref"
                        }
                      },
                      "id": 9064,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "maximumPresaleAmount",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 8396,
                      "src": "12061:70:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 9065,
                      "name": "_maximumPresaleAmount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8944,
                      "src": "12134:21:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "12061:94:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 9067,
                  "nodeType": "ExpressionStatement",
                  "src": "12061:94:48"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 9069,
                        "name": "_presaleRound",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8936,
                        "src": "12204:13:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 9070,
                        "name": "_startingTime",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8938,
                        "src": "12231:13:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 9071,
                        "name": "_usdPrice",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8940,
                        "src": "12258:9:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 9072,
                        "name": "_minimumUSDPurchase",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8942,
                        "src": "12281:19:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 9073,
                        "name": "_maximumPresaleAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8944,
                        "src": "12314:21:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 9068,
                      "name": "PresaleRoundUpdated",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8424,
                      "src": "12171:19:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (uint256,uint256,uint256,uint256,uint256)"
                      }
                    },
                    "id": 9074,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12171:174:48",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9075,
                  "nodeType": "EmitStatement",
                  "src": "12166:179:48"
                }
              ]
            },
            "documentation": {
              "id": 8934,
              "nodeType": "StructuredDocumentation",
              "src": "9788:435:48",
              "text": " @dev Creating/Updating a presale round information\n @param _presaleRound - The presale round chosen\n @param _startingTime - The starting Presale time\n @param _usdPrice - The USD Price of the Token in certain Presale Round\n @param _minimumUSDPurchase - The minimum USD amount to purchase the token\n @param _maximumPresaleAmount - The maximum amount of token available for a presale round"
            },
            "functionSelector": "c829d1db",
            "id": 9077,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 8947,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 8946,
                  "name": "onlyOwner",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 474,
                  "src": "10431:9:48"
                },
                "nodeType": "ModifierInvocation",
                "src": "10431:9:48"
              }
            ],
            "name": "setPresaleRound",
            "nameLocation": "10237:15:48",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8945,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8936,
                  "mutability": "mutable",
                  "name": "_presaleRound",
                  "nameLocation": "10270:13:48",
                  "nodeType": "VariableDeclaration",
                  "scope": 9077,
                  "src": "10262:21:48",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8935,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "10262:7:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8938,
                  "mutability": "mutable",
                  "name": "_startingTime",
                  "nameLocation": "10301:13:48",
                  "nodeType": "VariableDeclaration",
                  "scope": 9077,
                  "src": "10293:21:48",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8937,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "10293:7:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8940,
                  "mutability": "mutable",
                  "name": "_usdPrice",
                  "nameLocation": "10332:9:48",
                  "nodeType": "VariableDeclaration",
                  "scope": 9077,
                  "src": "10324:17:48",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8939,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "10324:7:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8942,
                  "mutability": "mutable",
                  "name": "_minimumUSDPurchase",
                  "nameLocation": "10359:19:48",
                  "nodeType": "VariableDeclaration",
                  "scope": 9077,
                  "src": "10351:27:48",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8941,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "10351:7:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8944,
                  "mutability": "mutable",
                  "name": "_maximumPresaleAmount",
                  "nameLocation": "10396:21:48",
                  "nodeType": "VariableDeclaration",
                  "scope": 9077,
                  "src": "10388:29:48",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8943,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "10388:7:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "10252:171:48"
            },
            "returnParameters": {
              "id": 8948,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "10441:0:48"
            },
            "scope": 9078,
            "src": "10228:2124:48",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          }
        ],
        "scope": 9079,
        "src": "444:11910:48",
        "usedErrors": [
          8469,
          8471,
          8473,
          8475,
          8477,
          8479,
          8481,
          8483,
          8485,
          8487,
          8489
        ]
      }
    ],
    "src": "38:12317:48"
  },
  "compiler": {
    "name": "solc",
    "version": "0.8.11+commit.d7f03943.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.4.4",
  "updatedAt": "2022-03-06T23:47:11.107Z",
  "devdoc": {
    "kind": "dev",
    "methods": {
      "getCurrentPresaleDetails()": {
        "details": "Getting the Current Presale Details, including:",
        "returns": {
          "_0": "Starting Time",
          "_1": "USD Price",
          "_2": "Minimum USD Purchase",
          "_3": "Maximum Presale Amount"
        }
      },
      "getCurrentPresaleRound()": {
        "details": "Get Current Presale Round"
      },
      "getPresaleAmountByRound(uint256)": {
        "details": "Get presale total amount By presale round",
        "params": {
          "_presaleRound": "- The presale round chosen"
        }
      },
      "getTotalPresaleAmount()": {
        "details": "Get total amount of presale from all rounds"
      },
      "getTotalPresaleRound()": {
        "details": "Get total amount of presale round"
      },
      "owner()": {
        "details": "Returns the address of the current owner."
      },
      "presaleTokens(address,uint256)": {
        "details": "Execute the Presale of ALPS Token in exchange of other token",
        "params": {
          "_amount": "- Amount denominated in the `paymentTokenAddress` being paid",
          "_paymentTokenAddress": "- Address of the token use to pay (address 0 is for native token)"
        }
      },
      "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."
      },
      "setEndingTime(uint256)": {
        "details": "Set new Ending time",
        "params": {
          "_newEndingTime": "- New Ending Timestamp"
        }
      },
      "setPresalePaymentToken(address,bool,address)": {
        "details": "Set Presale Payment Token Info",
        "params": {
          "_aggregatorAddress": "- Chainlink's Aggregator Address to determine the USD price (for `presaleTokens`)",
          "_tokenAddress": "- Token Address use to purchase Presale",
          "_tokenAvailability": "- Indication whether Token Address can be used for Presale"
        }
      },
      "setPresaleReceiver(address)": {
        "details": "Set new Presale Receiver Address",
        "params": {
          "_newPresaleReceiver": "- Address that'll receive the presale payment token"
        }
      },
      "setPresaleRound(uint256,uint256,uint256,uint256,uint256)": {
        "details": "Creating/Updating a presale round information",
        "params": {
          "_maximumPresaleAmount": "- The maximum amount of token available for a presale round",
          "_minimumUSDPurchase": "- The minimum USD amount to purchase the token",
          "_presaleRound": "- The presale round chosen",
          "_startingTime": "- The starting Presale time",
          "_usdPrice": "- The USD Price of the Token in certain Presale Round"
        }
      },
      "setPresaleTokenAddress(address)": {
        "details": "Set new Presale Token Address",
        "params": {
          "_newTokenAddress": "- Address of token that'll be presaled"
        }
      },
      "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
  }
}