UNPKG

@maplelabs/core-artifacts

Version:

Consist artifacts of the maple protocol

4,838 lines 201 kB
{
  "id": "ec0275db48462a9e20dc1ec153f75be9",
  "_format": "hh-sol-build-info-1",
  "solcVersion": "0.6.11",
  "solcLongVersion": "0.6.11+commit.5ef660b1",
  "input": {
    "language": "Solidity",
    "sources": {
      "contracts/core/mpl-rewards/v1/interfaces/IMplRewards.sol": {
        "content": "// SPDX-License-Identifier: AGPL-3.0-or-later // hevm: flattened sources of contracts/core/mpl-rewards/v1/interfaces/IMplRewards.sol\npragma solidity =0.6.11 >=0.6.0 <0.8.0;\n\n////// contracts/core/custodial-ownership-token/v1/interfaces/IERC2258.sol\n/* pragma solidity 0.6.11; */\n\n/// @title ERC2258 implements the basic level functionality for a token capable of custodial ownership.\ninterface IERC2258 {\n\n    /**\n        @dev   Emits an event indicating a transfer was performed by a Custodian.\n        @param custodian  The Custodian performing the transfer.\n        @param from       The account from which balance is being decremented.\n        @param to         The account receiving the token.\n        @param amount     The amount transferred.\n     */\n    event CustodyTransfer(address custodian, address from, address to, uint256 amount);\n\n    /**\n        @dev   Emits an event indicating that the amount held by `custodian` on behalf of `account` has changed.\n        @param account      The account to which the token belongs.\n        @param custodian    The Custodian being entrusted.\n        @param oldAllowance The old amount the account has entrusted with `custodian`.\n        @param newAllowance The new amount the account has entrusted with `custodian`.\n     */\n    event CustodyAllowanceChanged(address account, address custodian, uint256 oldAllowance, uint256 newAllowance);\n\n    /**\n        @param  account   The account to which some token belongs.\n        @param  custodian The Custodian being entrusted.\n        @return The individual custody limit `account` has entrusted with `custodian`.\n     */\n    function custodyAllowance(address account, address custodian) external view returns (uint256);\n    \n    /**\n        @param  account The account to which some token belongs.\n        @return The total custody limit `account` has entrusted with all custodians.\n     */\n    function totalCustodyAllowance(address account) external view returns (uint256);\n\n    /**\n        @dev   Increase the custody limit of a custodian on behalf of the caller.\n        @param custodian The Custodian being entrusted with `amount` additional token.\n        @param amount    The amount of additional token being entrusted with `custodian`.\n     */\n    function increaseCustodyAllowance(address custodian, uint256 amount) external;\n\n    /**\n        @dev   Allows a Custodian to exercise their right to transfer custodied tokens.\n        @param from       The account from which balance is being decremented.\n        @param to         The account receiving the token.\n        @param amount     The amount transferred.\n     */\n    function transferByCustodian(address from, address to, uint256 amount) external;\n\n}\n\n////// lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol\n/* pragma solidity >=0.6.0 <0.8.0; */\n\n/**\n * @dev Interface of the ERC20 standard as defined in the EIP.\n */\ninterface IERC20 {\n    /**\n     * @dev Returns the amount of tokens in existence.\n     */\n    function totalSupply() external view returns (uint256);\n\n    /**\n     * @dev Returns the amount of tokens owned by `account`.\n     */\n    function balanceOf(address account) external view returns (uint256);\n\n    /**\n     * @dev Moves `amount` tokens from the caller's account to `recipient`.\n     *\n     * Returns a boolean value indicating whether the operation succeeded.\n     *\n     * Emits a {Transfer} event.\n     */\n    function transfer(address recipient, uint256 amount) external returns (bool);\n\n    /**\n     * @dev Returns the remaining number of tokens that `spender` will be\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\n     * zero by default.\n     *\n     * This value changes when {approve} or {transferFrom} are called.\n     */\n    function allowance(address owner, address spender) external view returns (uint256);\n\n    /**\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\n     *\n     * Returns a boolean value indicating whether the operation succeeded.\n     *\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\n     * that someone may use both the old and the new allowance by unfortunate\n     * transaction ordering. One possible solution to mitigate this race\n     * condition is to first reduce the spender's allowance to 0 and set the\n     * desired value afterwards:\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\n     *\n     * Emits an {Approval} event.\n     */\n    function approve(address spender, uint256 amount) external returns (bool);\n\n    /**\n     * @dev Moves `amount` tokens from `sender` to `recipient` using the\n     * allowance mechanism. `amount` is then deducted from the caller's\n     * allowance.\n     *\n     * Returns a boolean value indicating whether the operation succeeded.\n     *\n     * Emits a {Transfer} event.\n     */\n    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);\n\n    /**\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\n     * another (`to`).\n     *\n     * Note that `value` may be zero.\n     */\n    event Transfer(address indexed from, address indexed to, uint256 value);\n\n    /**\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\n     * a call to {approve}. `value` is the new allowance.\n     */\n    event Approval(address indexed owner, address indexed spender, uint256 value);\n}\n\n////// contracts/core/mpl-rewards/v1/interfaces/IMplRewards.sol\n/* pragma solidity 0.6.11; */\n\n/* import { IERC20 } from \"../../../../../lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol\"; */\n\n/* import { IERC2258 } from \"../../../custodial-ownership-token/v1/interfaces/IERC2258.sol\"; */\n\n/// @title MplRewards Synthetix farming contract fork for liquidity mining.\ninterface IMplRewards {\n\n    /**\n        @dev   Emits an event indicating that a reward was added.\n        @param reward The amount of the added reward.\n     */\n    event RewardAdded(uint256 reward);\n\n    /**\n        @dev   Emits an event indicating that an account has staked.\n        @param account The address of the account.\n        @param amount  The amount staked.\n     */\n    event Staked(address indexed account, uint256 amount);\n\n    /**\n        @dev   Emits an event indicating that reward was withdrawn.\n        @param account The address of the account.\n        @param amount  The amount withdrawn.\n     */\n    event Withdrawn(address indexed account, uint256 amount);\n\n    /**\n        @dev   Emits an event indicating that some reward was paid to an account.\n        @param account The address of the account rewarded.\n        @param reward  The amount rewarded to `account`.\n     */\n    event RewardPaid(address indexed account, uint256 reward);\n\n    /**\n        @dev   Emits an event indicating that the duration of the ward period has updated.\n        @param newDuration The new duration of the rewards.\n     */\n    event RewardsDurationUpdated(uint256 newDuration);\n\n    /**\n        @dev   Emits an event indicating that some token was recovered.\n        @param token  The address of the token recovered.\n        @param amount The amount recovered.\n     */\n    event Recovered(address token, uint256 amount);\n\n    /**\n        @dev   Emits an event indicating that pause state has changed.\n        @param isPaused Whether the contract is paused.\n     */\n    event PauseChanged(bool isPaused);\n\n    /**\n        @dev The rewards token.\n     */\n    function rewardsToken() external view returns (IERC20);\n\n    /**\n        @dev The staking token.\n     */\n    function stakingToken() external view returns (IERC2258);\n\n    /**\n        @dev The period finish.\n     */\n    function periodFinish() external view returns (uint256);\n\n    /**\n        @dev The rewards rate.\n     */\n    function rewardRate() external view returns (uint256);\n\n    /**\n        @dev The rewards duration.\n     */\n    function rewardsDuration() external view returns (uint256);\n\n    /**\n        @dev The last update time.\n     */\n    function lastUpdateTime() external view returns (uint256);\n\n    /**\n        @dev The reward per token stored.\n     */\n    function rewardPerTokenStored() external view returns (uint256);\n\n    /**\n        @dev The last pause time.\n     */\n    function lastPauseTime() external view returns (uint256);\n\n    /**\n        @dev Whether the contract is paused.\n     */\n    function paused() external view returns (bool);\n\n    /**\n        @param account The address of an account.\n        @return The reward per token paid for `account`.\n     */\n    function userRewardPerTokenPaid(address account) external view returns (uint256);\n\n    /**\n        @param account The address of an account.\n        @return The rewards `account`.\n     */\n    function rewards(address account) external view returns (uint256);\n\n    /**\n        @return The total supply.\n     */\n    function totalSupply() external view returns (uint256);\n\n    /**\n        @param account The address of an account.\n        @return The balance of `account`.\n     */\n    function balanceOf(address account) external view returns (uint256);\n\n    /**\n        @return The last time rewards were applicable.\n     */\n    function lastTimeRewardApplicable() external view returns (uint256);\n\n    /**\n        @return The reward per token.\n     */\n    function rewardPerToken() external view returns (uint256);\n\n    /**\n        @param account The address of an account.\n        @return The rewards earned of `account`.\n     */\n    function earned(address account) external view returns (uint256);\n\n    /**\n        @return The reward for a duration.\n     */\n    function getRewardForDuration() external view returns (uint256);\n\n    /**\n        @dev   It emits a `Staked` event.\n        @param amount An amount to stake.\n     */\n    function stake(uint256 amount) external;\n\n    /**\n        @dev   It emits a `Withdrawn` event.\n        @param amount An amount to withdraw.\n     */\n    function withdraw(uint256 amount) external;\n\n    /**\n        @dev It emits a `RewardPaid` event if any rewards are received.\n     */\n    function getReward() external;\n\n    /**\n        @dev Withdraw the entire balance and get the reward.\n     */\n    function exit() external;\n\n    /**\n        @dev Only the contract Owner may call this. \n        @dev It emits a `RewardAdded` event. \n        @param reward A reward amount.\n     */\n    function notifyRewardAmount(uint256 reward) external;\n\n    /**\n        @dev End rewards emission earlier. Only the contract Owner may call this.\n        @param timestamp A unix timestamp to finish rewards.\n     */\n    function updatePeriodFinish(uint256 timestamp) external;\n\n    /**\n        @dev Added to support recovering tokens unintentionally sent to this contract. \n        @dev Only the contract Owner may call this. \n        @dev It emits a `Recovered` event. \n        @param tokenAddress The address of a token to recover.\n        @param tokenAmount  The amount to recover.\n     */\n    function recoverERC20(address tokenAddress, uint256 tokenAmount) external;\n\n    /**\n        @dev   Only the contract Owner may call this. \n        @dev   It emits a `RewardsDurationUpdated` event. \n        @param _rewardsDuration The new duration for rewards.\n     */\n    function setRewardsDuration(uint256 _rewardsDuration) external;\n\n    /**\n        @dev Change the paused state of the contract. Only the contract Owner may call this. \n        @dev It emits a `PauseChanged` event. \n        @param _paused Whether to pause the contract.\n     */\n    function setPaused(bool _paused) external;\n\n}\n"
      }
    },
    "settings": {
      "optimizer": {
        "enabled": true,
        "runs": 200
      },
      "outputSelection": {
        "*": {
          "*": [
            "abi",
            "evm.bytecode",
            "evm.deployedBytecode",
            "evm.methodIdentifiers"
          ],
          "": [
            "ast"
          ]
        }
      }
    }
  },
  "output": {
    "contracts": {
      "contracts/core/mpl-rewards/v1/interfaces/IMplRewards.sol": {
        "IERC20": {
          "abi": [
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "value",
                  "type": "uint256"
                }
              ],
              "name": "Approval",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "value",
                  "type": "uint256"
                }
              ],
              "name": "Transfer",
              "type": "event"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                }
              ],
              "name": "allowance",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "approve",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "account",
                  "type": "address"
                }
              ],
              "name": "balanceOf",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "totalSupply",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "transfer",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "sender",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "transferFrom",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            }
          ],
          "evm": {
            "bytecode": {
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {
              "allowance(address,address)": "dd62ed3e",
              "approve(address,uint256)": "095ea7b3",
              "balanceOf(address)": "70a08231",
              "totalSupply()": "18160ddd",
              "transfer(address,uint256)": "a9059cbb",
              "transferFrom(address,address,uint256)": "23b872dd"
            }
          }
        },
        "IERC2258": {
          "abi": [
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "account",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "custodian",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "oldAllowance",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "newAllowance",
                  "type": "uint256"
                }
              ],
              "name": "CustodyAllowanceChanged",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "custodian",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "CustodyTransfer",
              "type": "event"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "account",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "custodian",
                  "type": "address"
                }
              ],
              "name": "custodyAllowance",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "custodian",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "increaseCustodyAllowance",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "account",
                  "type": "address"
                }
              ],
              "name": "totalCustodyAllowance",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "transferByCustodian",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            }
          ],
          "evm": {
            "bytecode": {
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {
              "custodyAllowance(address,address)": "c965b548",
              "increaseCustodyAllowance(address,uint256)": "27f91856",
              "totalCustodyAllowance(address)": "af6d5571",
              "transferByCustodian(address,address,uint256)": "2ac04ac8"
            }
          }
        },
        "IMplRewards": {
          "abi": [
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "bool",
                  "name": "isPaused",
                  "type": "bool"
                }
              ],
              "name": "PauseChanged",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "token",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "Recovered",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "reward",
                  "type": "uint256"
                }
              ],
              "name": "RewardAdded",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "account",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "reward",
                  "type": "uint256"
                }
              ],
              "name": "RewardPaid",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "newDuration",
                  "type": "uint256"
                }
              ],
              "name": "RewardsDurationUpdated",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "account",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "Staked",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "account",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "Withdrawn",
              "type": "event"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "account",
                  "type": "address"
                }
              ],
              "name": "balanceOf",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "account",
                  "type": "address"
                }
              ],
              "name": "earned",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "exit",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "getReward",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "getRewardForDuration",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "lastPauseTime",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "lastTimeRewardApplicable",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "lastUpdateTime",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "reward",
                  "type": "uint256"
                }
              ],
              "name": "notifyRewardAmount",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "paused",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "periodFinish",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "tokenAddress",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "tokenAmount",
                  "type": "uint256"
                }
              ],
              "name": "recoverERC20",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "rewardPerToken",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "rewardPerTokenStored",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "rewardRate",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "account",
                  "type": "address"
                }
              ],
              "name": "rewards",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "rewardsDuration",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "rewardsToken",
              "outputs": [
                {
                  "internalType": "contract IERC20",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "bool",
                  "name": "_paused",
                  "type": "bool"
                }
              ],
              "name": "setPaused",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_rewardsDuration",
                  "type": "uint256"
                }
              ],
              "name": "setRewardsDuration",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "stake",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "stakingToken",
              "outputs": [
                {
                  "internalType": "contract IERC2258",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "totalSupply",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "timestamp",
                  "type": "uint256"
                }
              ],
              "name": "updatePeriodFinish",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "account",
                  "type": "address"
                }
              ],
              "name": "userRewardPerTokenPaid",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "withdraw",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            }
          ],
          "evm": {
            "bytecode": {
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {
              "balanceOf(address)": "70a08231",
              "earned(address)": "008cc262",
              "exit()": "e9fad8ee",
              "getReward()": "3d18b912",
              "getRewardForDuration()": "1c1f78eb",
              "lastPauseTime()": "91b4ded9",
              "lastTimeRewardApplicable()": "80faa57d",
              "lastUpdateTime()": "c8f33c91",
              "notifyRewardAmount(uint256)": "3c6b16ab",
              "paused()": "5c975abb",
              "periodFinish()": "ebe2b12b",
              "recoverERC20(address,uint256)": "8980f11f",
              "rewardPerToken()": "cd3daf9d",
              "rewardPerTokenStored()": "df136d65",
              "rewardRate()": "7b0a47ee",
              "rewards(address)": "0700037d",
              "rewardsDuration()": "386a9525",
              "rewardsToken()": "d1af0c7d",
              "setPaused(bool)": "16c38b3c",
              "setRewardsDuration(uint256)": "cc1a378f",
              "stake(uint256)": "a694fc3a",
              "stakingToken()": "72f702f3",
              "totalSupply()": "18160ddd",
              "updatePeriodFinish(uint256)": "556f6e6b",
              "userRewardPerTokenPaid(address)": "8b876347",
              "withdraw(uint256)": "2e1a7d4d"
            }
          }
        }
      }
    },
    "sources": {
      "contracts/core/mpl-rewards/v1/interfaces/IMplRewards.sol": {
        "ast": {
          "absolutePath": "contracts/core/mpl-rewards/v1/interfaces/IMplRewards.sol",
          "exportedSymbols": {
            "IERC20": [
              137
            ],
            "IERC2258": [
              61
            ],
            "IMplRewards": [
              344
            ]
          },
          "id": 345,
          "license": "AGPL-3.0-or-later",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 1,
              "literals": [
                "solidity",
                "=",
                "0.6",
                ".11",
                ">=",
                "0.6",
                ".0",
                "<",
                "0.8",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "133:39:0"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "interface",
              "documentation": {
                "id": 2,
                "nodeType": "StructuredDocumentation",
                "src": "280:104:0",
                "text": "@title ERC2258 implements the basic level functionality for a token capable of custodial ownership."
              },
              "fullyImplemented": false,
              "id": 61,
              "linearizedBaseContracts": [
                61
              ],
              "name": "IERC2258",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 3,
                    "nodeType": "StructuredDocumentation",
                    "src": "410:346:0",
                    "text": "@dev   Emits an event indicating a transfer was performed by a Custodian.\n@param custodian  The Custodian performing the transfer.\n@param from       The account from which balance is being decremented.\n@param to         The account receiving the token.\n@param amount     The amount transferred."
                  },
                  "id": 13,
                  "name": "CustodyTransfer",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 12,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "custodian",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 13,
                        "src": "783:17:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "783:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 7,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "from",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 13,
                        "src": "802:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 6,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "802:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 9,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "to",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 13,
                        "src": "816:10:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 8,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "816:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 11,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 13,
                        "src": "828:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 10,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "828:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "782:61:0"
                  },
                  "src": "761:83:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 14,
                    "nodeType": "StructuredDocumentation",
                    "src": "850:425:0",
                    "text": "@dev   Emits an event indicating that the amount held by `custodian` on behalf of `account` has changed.\n@param account      The account to which the token belongs.\n@param custodian    The Custodian being entrusted.\n@param oldAllowance The old amount the account has entrusted with `custodian`.\n@param newAllowance The new amount the account has entrusted with `custodian`."
                  },
                  "id": 24,
                  "name": "CustodyAllowanceChanged",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 23,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 16,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "account",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 24,
                        "src": "1310:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 15,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1310:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 18,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "custodian",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 24,
                        "src": "1327:17:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 17,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1327:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 20,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "oldAllowance",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 24,
                        "src": "1346:20:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 19,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1346:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 22,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "newAllowance",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 24,
                        "src": "1368:20:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 21,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1368:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "1309:80:0"
                  },
                  "src": "1280:110:0"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 25,
                    "nodeType": "StructuredDocumentation",
                    "src": "1396:222:0",
                    "text": "@param  account   The account to which some token belongs.\n@param  custodian The Custodian being entrusted.\n@return The individual custody limit `account` has entrusted with `custodian`."
                  },
                  "functionSelector": "c965b548",
                  "id": 34,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "custodyAllowance",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 30,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 27,
                        "mutability": "mutable",
                        "name": "account",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 34,
                        "src": "1649:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 26,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1649:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 29,
                        "mutability": "mutable",
                        "name": "custodian",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 34,
                        "src": "1666:17:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 28,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1666:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "1648:36:0"
                  },
                  "returnParameters": {
                    "id": 33,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 32,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 34,
                        "src": "1708:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 31,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1708:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "1707:9:0"
                  },
                  "scope": 61,
                  "src": "1623:94:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 35,
                    "nodeType": "StructuredDocumentation",
                    "src": "1727:161:0",
                    "text": "@param  account The account to which some token belongs.\n@return The total custody limit `account` has entrusted with all custodians."
                  },
                  "functionSelector": "af6d5571",
                  "id": 42,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "totalCustodyAllowance",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 38,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 37,
                        "mutability": "mutable",
                        "name": "account",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 42,
                        "src": "1924:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 36,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1924:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "1923:17:0"
                  },
                  "returnParameters": {
                    "id": 41,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 40,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 42,
                        "src": "1964:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 39,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1964:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "1963:9:0"
                  },
                  "scope": 61,
                  "src": "1893:80:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 43,
                    "nodeType": "StructuredDocumentation",
                    "src": "1979:270:0",
                    "text": "@dev   Increase the custody limit of a custodian on behalf of the caller.\n@param custodian The Custodian being entrusted with `amount` additional token.\n@param amount    The amount of additional token being entrusted with `custodian`."
                  },
                  "functionSelector": "27f91856",
                  "id": 50,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "increaseCustodyAllowance",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 48,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 45,
                        "mutability": "mutable",
                        "name": "custodian",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 50,
                        "src": "2288:17:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 44,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2288:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 47,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 50,
                        "src": "2307:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 46,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2307:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "2287:35:0"
                  },
                  "returnParameters": {
                    "id": 49,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2331:0:0"
                  },
                  "scope": 61,
                  "src": "2254:78:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 51,
                    "nodeType": "StructuredDocumentation",
                    "src": "2338:287:0",
                    "text": "@dev   Allows a Custodian to exercise their right to transfer custodied tokens.\n@param from       The account from which balance is being decremented.\n@param to         The account receiving the token.\n@param amount     The amount transferred."
                  },
                  "functionSelector": "2ac04ac8",
                  "id": 60,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "transferByCustodian",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 58,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 53,
                        "mutability": "mutable",
                        "name": "from",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 60,
                        "src": "2659:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 52,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2659:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 55,
                        "mutability": "mutable",
                        "name": "to",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 60,
                        "src": "2673:10:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 54,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2673:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 57,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 60,
                        "src": "2685:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 56,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2685:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "2658:42:0"
                  },
                  "returnParameters": {
                    "id": 59,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2709:0:0"
                  },
                  "scope": 61,
                  "src": "2630:80:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 345,
              "src": "384:2329:0"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "interface",
              "documentation": {
                "id": 62,
                "nodeType": "StructuredDocumentation",
                "src": "2821:70:0",
                "text": " @dev Interface of the ERC20 standard as defined in the EIP."
              },
              "fullyImplemented": false,
              "id": 137,
              "linearizedBaseContracts": [
                137
              ],
              "name": "IERC20",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "body": null,
                  "documentation": {
                    "id": 63,
                    "nodeType": "StructuredDocumentation",
                    "src": "2915:66:0",
                    "text": " @dev Returns the amount of tokens in existence."
                  },
                  "functionSelector": "18160ddd",
                  "id": 68,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "totalSupply",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 64,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "3006:2:0"
                  },
                  "returnParameters": {
                    "id": 67,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 66,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 68,
                        "src": "3032:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 65,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3032:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "3031:9:0"
                  },
                  "scope": 137,
                  "src": "2986:55:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 69,
                    "nodeType": "StructuredDocumentation",
                    "src": "3047:72:0",
                    "text": " @dev Returns the amount of tokens owned by `account`."
                  },
                  "functionSelector": "70a08231",
                  "id": 76,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "balanceOf",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 72,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 71,
                        "mutability": "mutable",
                        "name": "account",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 76,
                        "src": "3143:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 70,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3143:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "3142:17:0"
                  },
                  "returnParameters": {
                    "id": 75,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 74,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 76,
                        "src": "3183:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 73,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3183:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "3182:9:0"
                  },
                  "scope": 137,
                  "src": "3124:68:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 77,
                    "nodeType": "StructuredDocumentation",
                    "src": "3198:209:0",
                    "text": " @dev Moves `amount` tokens from the caller's account to `recipient`.\n Returns a boolean value indicating whether the operation succeeded.\n Emits a {Transfer} event."
                  },
                  "functionSelector": "a9059cbb",
                  "id": 86,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "transfer",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 82,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 79,
                        "mutability": "mutable",
                        "name": "recipient",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 86,
                        "src": "3430:17:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 78,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3430:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 81,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 86,
                        "src": "3449:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 80,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3449:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "3429:35:0"
                  },
                  "returnParameters": {
                    "id": 85,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 84,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 86,
                        "src": "3483:4:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 83,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "3483:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "3482:6:0"
                  },
                  "scope": 137,
                  "src": "3412:77:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 87,
                    "nodeType": "StructuredDocumentation",
                    "src": "3495:264:0",
                    "text": " @dev Returns the remaining number of tokens that `spender` will be\n allowed to spend on behalf of `owner` through {transferFrom}. This is\n zero by default.\n This value changes when {approve} or {transferFrom} are called."
                  },
                  "functionSelector": "dd62ed3e",
                  "id": 96,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "allowance",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 92,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 89,
                        "mutability": "mutable",
                        "name": "owner",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 96,
                        "src": "3783:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 88,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3783:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 91,
                        "mutability": "mutable",
                        "name": "spender",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 96,
                        "src": "3798:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 90,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3798:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "3782:32:0"
                  },
                  "returnParameters": {
                    "id": 95,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 94,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 96,
                        "src": "3838:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 93,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3838:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "3837:9:0"
                  },
                  "scope": 137,
                  "src": "3764:83:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 97,
                    "nodeType": "StructuredDocumentation",
                    "src": "3853:642:0",
                    "text": " @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\n Returns a boolean value indicating whether the operation succeeded.\n IMPORTANT: Beware that changing an allowance with this method brings the risk\n that someone may use both the old and the new allowance by unfortunate\n transaction ordering. One possible solution to mitigate this race\n condition is to first reduce the spender's allowance to 0 and set the\n desired value afterwards:\n https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\n Emits an {Approval} event."
                  },
                  "functionSelector": "095ea7b3",
                  "id": 106,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "approve",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 102,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 99,
                        "mutability": "mutable",
                        "name": "spender",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 106,
                        "src": "4517:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 98,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "4517:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 101,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 106,
                        "src": "4534:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 100,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4534:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "4516:33:0"
                  },
                  "returnParameters": {
                    "id": 105,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 104,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 106,
                        "src": "4568:4:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 103,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "4568:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "4567:6:0"
                  },
                  "scope": 137,
                  "src": "4500:74:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 107,
                    "nodeType": "StructuredDocumentation",
                    "src": "4580:296:0",
                    "text": " @dev Moves `amount` tokens from `sender` to `recipient` using the\n allowance mechanism. `amount` is then deducted from the caller's\n allowance.\n Returns a boolean value indicating whether the operation succeeded.\n Emits a {Transfer} event."
                  },
                  "functionSelector": "23b872dd",
                  "id": 118,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "transferFrom",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 114,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 109,
                        "mutability": "mutable",
                        "name": "sender",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 118,
                        "src": "4903:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 108,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "4903:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 111,
                        "mutability": "mutable",
                        "name": "recipient",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 118,
                        "src": "4919:17:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 110,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "4919:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 113,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 118,
                        "src": "4938:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 112,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4938:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "4902:51:0"
                  },
                  "returnParameters": {
                    "id": 117,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 116,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 118,
                        "src": "4972:4:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 115,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "4972:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "4971:6:0"
                  },
                  "scope": 137,
                  "src": "4881:97:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 119,
                    "nodeType": "StructuredDocumentation",
                    "src": "4984:158:0",
                    "text": " @dev Emitted when `value` tokens are moved from one account (`from`) to\n another (`to`).\n Note that `value` may be zero."
                  },
                  "id": 127,
                  "name": "Transfer",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 126,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 121,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "from",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 127,
                        "src": "5162:20:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 120,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "5162:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 123,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "to",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 127,
                        "src": "5184:18:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 122,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "5184:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 125,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "value",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 127,
                        "src": "5204:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 124,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "5204:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "5161:57:0"
                  },
                  "src": "5147:72:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 128,
                    "nodeType": "StructuredDocumentation",
                    "src": "5225:148:0",
                    "text": " @dev Emitted when the allowance of a `spender` for an `owner` is set by\n a call to {approve}. `value` is the new allowance."
                  },
                  "id": 136,
                  "name": "Approval",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 135,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 130,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "owner",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 136,
                        "src": "5393:21:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 129,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "5393:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 132,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "spender",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 136,
                        "src": "5416:23:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 131,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "5416:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 134,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "value",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 136,
                        "src": "5441:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 133,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "5441:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "5392:63:0"
                  },
                  "src": "5378:78:0"
                }
              ],
              "scope": 345,
              "src": "2892:2566:0"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "interface",
              "documentation": {
                "id": 138,
                "nodeType": "StructuredDocumentation",
                "src": "5760:76:0",
                "text": "@title MplRewards Synthetix farming contract fork for liquidity mining."
              },
              "fullyImplemented": false,
              "id": 344,
              "linearizedBaseContracts": [
                344
              ],
              "name": "IMplRewards",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 139,
                    "nodeType": "StructuredDocumentation",
                    "src": "5865:131:0",
                    "text": "@dev   Emits an event indicating that a reward was added.\n@param reward The amount of the added reward."
                  },
                  "id": 143,
                  "name": "RewardAdded",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 142,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 141,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "reward",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 143,
                        "src": "6019:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 140,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "6019:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "6018:16:0"
                  },
                  "src": "6001:34:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 144,
                    "nodeType": "StructuredDocumentation",
                    "src": "6041:173:0",
                    "text": "@dev   Emits an event indicating that an account has staked.\n@param account The address of the account.\n@param amount  The amount staked."
                  },
                  "id": 150,
                  "name": "Staked",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 149,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 146,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "account",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 150,
                        "src": "6232:23:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 145,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "6232:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 148,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 150,
                        "src": "6257:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 147,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "6257:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "6231:41:0"
                  },
                  "src": "6219:54:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 151,
                    "nodeType": "StructuredDocumentation",
                    "src": "6279:175:0",
                    "text": "@dev   Emits an event indicating that reward was withdrawn.\n@param account The address of the account.\n@param amount  The amount withdrawn."
                  },
                  "id": 157,
                  "name": "Withdrawn",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 156,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 153,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "account",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 157,
                        "src": "6475:23:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 152,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "6475:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 155,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 157,
                        "src": "6500:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 154,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "6500:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "6474:41:0"
                  },
                  "src": "6459:57:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 158,
                    "nodeType": "StructuredDocumentation",
                    "src": "6522:210:0",
                    "text": "@dev   Emits an event indicating that some reward was paid to an account.\n@param account The address of the account rewarded.\n@param reward  The amount rewarded to `account`."
                  },
                  "id": 164,
                  "name": "RewardPaid",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 163,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 160,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "account",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 164,
                        "src": "6754:23:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 159,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "6754:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 162,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "reward",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 164,
                        "src": "6779:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 161,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "6779:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "6753:41:0"
                  },
                  "src": "6737:58:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 165,
                    "nodeType": "StructuredDocumentation",
                    "src": "6801:162:0",
                    "text": "@dev   Emits an event indicating that the duration of the ward period has updated.\n@param newDuration The new duration of the rewards."
                  },
                  "id": 169,
                  "name": "RewardsDurationUpdated",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 168,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 167,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "newDuration",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 169,
                        "src": "6997:19:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 166,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "6997:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "6996:21:0"
                  },
                  "src": "6968:50:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 170,
                    "nodeType": "StructuredDocumentation",
                    "src": "7024:185:0",
                    "text": "@dev   Emits an event indicating that some token was recovered.\n@param token  The address of the token recovered.\n@param amount The amount recovered."
                  },
                  "id": 176,
                  "name": "Recovered",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 175,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 172,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "token",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 176,
                        "src": "7230:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 171,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "7230:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 174,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 176,
                        "src": "7245:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 173,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "7245:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "7229:31:0"
                  },
                  "src": "7214:47:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 177,
                    "nodeType": "StructuredDocumentation",
                    "src": "7267:138:0",
                    "text": "@dev   Emits an event indicating that pause state has changed.\n@param isPaused Whether the contract is paused."
                  },
                  "id": 181,
                  "name": "PauseChanged",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 180,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 179,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "isPaused",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 181,
                        "src": "7429:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 178,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "7429:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "7428:15:0"
                  },
                  "src": "7410:34:0"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 182,
                    "nodeType": "StructuredDocumentation",
                    "src": "7450:43:0",
                    "text": "@dev The rewards token."
                  },
                  "functionSelector": "d1af0c7d",
                  "id": 187,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "rewardsToken",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 183,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "7519:2:0"
                  },
                  "returnParameters": {
                    "id": 186,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 185,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 187,
                        "src": "7545:6:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20_$137",
                          "typeString": "contract IERC20"
                        },
                        "typeName": {
                          "contractScope": null,
                          "id": 184,
                          "name": "IERC20",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 137,
                          "src": "7545:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IERC20_$137",
                            "typeString": "contract IERC20"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "7544:8:0"
                  },
                  "scope": 344,
                  "src": "7498:55:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 188,
                    "nodeType": "StructuredDocumentation",
                    "src": "7559:43:0",
                    "text": "@dev The staking token."
                  },
                  "functionSelector": "72f702f3",
                  "id": 193,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "stakingToken",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 189,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "7628:2:0"
                  },
                  "returnParameters": {
                    "id": 192,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 191,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 193,
                        "src": "7654:8:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC2258_$61",
                          "typeString": "contract IERC2258"
                        },
                        "typeName": {
                          "contractScope": null,
                          "id": 190,
                          "name": "IERC2258",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 61,
                          "src": "7654:8:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IERC2258_$61",
                            "typeString": "contract IERC2258"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "7653:10:0"
                  },
                  "scope": 344,
                  "src": "7607:57:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 194,
                    "nodeType": "StructuredDocumentation",
                    "src": "7670:43:0",
                    "text": "@dev The period finish."
                  },
                  "functionSelector": "ebe2b12b",
                  "id": 199,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "periodFinish",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 195,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "7739:2:0"
                  },
                  "returnParameters": {
                    "id": 198,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 197,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 199,
                        "src": "7765:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 196,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "7765:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "7764:9:0"
                  },
                  "scope": 344,
                  "src": "7718:56:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 200,
                    "nodeType": "StructuredDocumentation",
                    "src": "7780:42:0",
                    "text": "@dev The rewards rate."
                  },
                  "functionSelector": "7b0a47ee",
                  "id": 205,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "rewardRate",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 201,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "7846:2:0"
                  },
                  "returnParameters": {
                    "id": 204,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 203,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 205,
                        "src": "7872:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 202,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "7872:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "7871:9:0"
                  },
                  "scope": 344,
                  "src": "7827:54:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 206,
                    "nodeType": "StructuredDocumentation",
                    "src": "7887:46:0",
                    "text": "@dev The rewards duration."
                  },
                  "functionSelector": "386a9525",
                  "id": 211,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "rewardsDuration",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 207,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "7962:2:0"
                  },
                  "returnParameters": {
                    "id": 210,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 209,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 211,
                        "src": "7988:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 208,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "7988:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "7987:9:0"
                  },
                  "scope": 344,
                  "src": "7938:59:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 212,
                    "nodeType": "StructuredDocumentation",
                    "src": "8003:46:0",
                    "text": "@dev The last update time."
                  },
                  "functionSelector": "c8f33c91",
                  "id": 217,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "lastUpdateTime",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 213,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "8077:2:0"
                  },
                  "returnParameters": {
                    "id": 216,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 215,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 217,
                        "src": "8103:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 214,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "8103:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "8102:9:0"
                  },
                  "scope": 344,
                  "src": "8054:58:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 218,
                    "nodeType": "StructuredDocumentation",
                    "src": "8118:53:0",
                    "text": "@dev The reward per token stored."
                  },
                  "functionSelector": "df136d65",
                  "id": 223,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "rewardPerTokenStored",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 219,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "8205:2:0"
                  },
                  "returnParameters": {
                    "id": 222,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 221,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 223,
                        "src": "8231:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 220,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "8231:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "8230:9:0"
                  },
                  "scope": 344,
                  "src": "8176:64:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 224,
                    "nodeType": "StructuredDocumentation",
                    "src": "8246:45:0",
                    "text": "@dev The last pause time."
                  },
                  "functionSelector": "91b4ded9",
                  "id": 229,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "lastPauseTime",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 225,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "8318:2:0"
                  },
                  "returnParameters": {
                    "id": 228,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 227,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 229,
                        "src": "8344:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 226,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "8344:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "8343:9:0"
                  },
                  "scope": 344,
                  "src": "8296:57:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 230,
                    "nodeType": "StructuredDocumentation",
                    "src": "8359:56:0",
                    "text": "@dev Whether the contract is paused."
                  },
                  "functionSelector": "5c975abb",
                  "id": 235,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "paused",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 231,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "8435:2:0"
                  },
                  "returnParameters": {
                    "id": 234,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 233,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 235,
                        "src": "8461:4:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 232,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "8461:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "8460:6:0"
                  },
                  "scope": 344,
                  "src": "8420:47:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 236,
                    "nodeType": "StructuredDocumentation",
                    "src": "8473:118:0",
                    "text": "@param account The address of an account.\n@return The reward per token paid for `account`."
                  },
                  "functionSelector": "8b876347",
                  "id": 243,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "userRewardPerTokenPaid",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 239,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 238,
                        "mutability": "mutable",
                        "name": "account",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 243,
                        "src": "8628:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 237,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "8628:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "8627:17:0"
                  },
                  "returnParameters": {
                    "id": 242,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 241,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 243,
                        "src": "8668:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 240,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "8668:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "8667:9:0"
                  },
                  "scope": 344,
                  "src": "8596:81:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 244,
                    "nodeType": "StructuredDocumentation",
                    "src": "8683:100:0",
                    "text": "@param account The address of an account.\n@return The rewards `account`."
                  },
                  "functionSelector": "0700037d",
                  "id": 251,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "rewards",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 247,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 246,
                        "mutability": "mutable",
                        "name": "account",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 251,
                        "src": "8805:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 245,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "8805:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "8804:17:0"
                  },
                  "returnParameters": {
                    "id": 250,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 249,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 251,
                        "src": "8845:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 248,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "8845:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "8844:9:0"
                  },
                  "scope": 344,
                  "src": "8788:66:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 252,
                    "nodeType": "StructuredDocumentation",
                    "src": "8860:45:0",
                    "text": "@return The total supply."
                  },
                  "functionSelector": "18160ddd",
                  "id": 257,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "totalSupply",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 253,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "8930:2:0"
                  },
                  "returnParameters": {
                    "id": 256,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 255,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 257,
                        "src": "8956:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 254,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "8956:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "8955:9:0"
                  },
                  "scope": 344,
                  "src": "8910:55:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 258,
                    "nodeType": "StructuredDocumentation",
                    "src": "8971:103:0",
                    "text": "@param account The address of an account.\n@return The balance of `account`."
                  },
                  "functionSelector": "70a08231",
                  "id": 265,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "balanceOf",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 261,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 260,
                        "mutability": "mutable",
                        "name": "account",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 265,
                        "src": "9098:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 259,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "9098:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "9097:17:0"
                  },
                  "returnParameters": {
                    "id": 264,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 263,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 265,
                        "src": "9138:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 262,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "9138:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "9137:9:0"
                  },
                  "scope": 344,
                  "src": "9079:68:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 266,
                    "nodeType": "StructuredDocumentation",
                    "src": "9153:66:0",
                    "text": "@return The last time rewards were applicable."
                  },
                  "functionSelector": "80faa57d",
                  "id": 271,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "lastTimeRewardApplicable",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 267,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "9257:2:0"
                  },
                  "returnParameters": {
                    "id": 270,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 269,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 271,
                        "src": "9283:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 268,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "9283:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "9282:9:0"
                  },
                  "scope": 344,
                  "src": "9224:68:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 272,
                    "nodeType": "StructuredDocumentation",
                    "src": "9298:49:0",
                    "text": "@return The reward per token."
                  },
                  "functionSelector": "cd3daf9d",
                  "id": 277,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "rewardPerToken",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 273,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "9375:2:0"
                  },
                  "returnParameters": {
                    "id": 276,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 275,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 277,
                        "src": "9401:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 274,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "9401:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "9400:9:0"
                  },
                  "scope": 344,
                  "src": "9352:58:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 278,
                    "nodeType": "StructuredDocumentation",
                    "src": "9416:110:0",
                    "text": "@param account The address of an account.\n@return The rewards earned of `account`."
                  },
                  "functionSelector": "008cc262",
                  "id": 285,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "earned",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 281,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 280,
                        "mutability": "mutable",
                        "name": "account",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 285,
                        "src": "9547:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 279,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "9547:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "9546:17:0"
                  },
                  "returnParameters": {
                    "id": 284,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 283,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 285,
                        "src": "9587:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 282,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "9587:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "9586:9:0"
                  },
                  "scope": 344,
                  "src": "9531:65:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 286,
                    "nodeType": "StructuredDocumentation",
                    "src": "9602:54:0",
                    "text": "@return The reward for a duration."
                  },
                  "functionSelector": "1c1f78eb",
                  "id": 291,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getRewardForDuration",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 287,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "9690:2:0"
                  },
                  "returnParameters": {
                    "id": 290,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 289,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 291,
                        "src": "9716:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 288,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "9716:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "9715:9:0"
                  },
                  "scope": 344,
                  "src": "9661:64:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 292,
                    "nodeType": "StructuredDocumentation",
                    "src": "9731:95:0",
                    "text": "@dev   It emits a `Staked` event.\n@param amount An amount to stake."
                  },
                  "functionSelector": "a694fc3a",
                  "id": 297,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "stake",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 295,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 294,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 297,
                        "src": "9846:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 293,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "9846:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "9845:16:0"
                  },
                  "returnParameters": {
                    "id": 296,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "9870:0:0"
                  },
                  "scope": 344,
                  "src": "9831:40:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 298,
                    "nodeType": "StructuredDocumentation",
                    "src": "9877:101:0",
                    "text": "@dev   It emits a `Withdrawn` event.\n@param amount An amount to withdraw."
                  },
                  "functionSelector": "2e1a7d4d",
                  "id": 303,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "withdraw",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 301,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 300,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 303,
                        "src": "10001:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 299,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "10001:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "10000:16:0"
                  },
                  "returnParameters": {
                    "id": 302,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "10025:0:0"
                  },
                  "scope": 344,
                  "src": "9983:43:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 304,
                    "nodeType": "StructuredDocumentation",
                    "src": "10032:83:0",
                    "text": "@dev It emits a `RewardPaid` event if any rewards are received."
                  },
                  "functionSelector": "3d18b912",
                  "id": 307,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getReward",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 305,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "10138:2:0"
                  },
                  "returnParameters": {
                    "id": 306,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "10149:0:0"
                  },
                  "scope": 344,
                  "src": "10120:30:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 308,
                    "nodeType": "StructuredDocumentation",
                    "src": "10156:72:0",
                    "text": "@dev Withdraw the entire balance and get the reward."
                  },
                  "functionSelector": "e9fad8ee",
                  "id": 311,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "exit",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 309,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "10246:2:0"
                  },
                  "returnParameters": {
                    "id": 310,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "10257:0:0"
                  },
                  "scope": 344,
                  "src": "10233:25:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 312,
                    "nodeType": "StructuredDocumentation",
                    "src": "10264:149:0",
                    "text": "@dev Only the contract Owner may call this. \n@dev It emits a `RewardAdded` event. \n@param reward A reward amount."
                  },
                  "functionSelector": "3c6b16ab",
                  "id": 317,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "notifyRewardAmount",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 315,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 314,
                        "mutability": "mutable",
                        "name": "reward",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 317,
                        "src": "10446:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 313,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "10446:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "10445:16:0"
                  },
                  "returnParameters": {
                    "id": 316,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "10470:0:0"
                  },
                  "scope": 344,
                  "src": "10418:53:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 318,
                    "nodeType": "StructuredDocumentation",
                    "src": "10477:154:0",
                    "text": "@dev End rewards emission earlier. Only the contract Owner may call this.\n@param timestamp A unix timestamp to finish rewards."
                  },
                  "functionSelector": "556f6e6b",
                  "id": 323,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "updatePeriodFinish",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 321,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 320,
                        "mutability": "mutable",
                        "name": "timestamp",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 323,
                        "src": "10664:17:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 319,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "10664:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "10663:19:0"
                  },
                  "returnParameters": {
                    "id": 322,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "10691:0:0"
                  },
                  "scope": 344,
                  "src": "10636:56:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 324,
                    "nodeType": "StructuredDocumentation",
                    "src": "10698:310:0",
                    "text": "@dev Added to support recovering tokens unintentionally sent to this contract. \n@dev Only the contract Owner may call this. \n@dev It emits a `Recovered` event. \n@param tokenAddress The address of a token to recover.\n@param tokenAmount  The amount to recover."
                  },
                  "functionSelector": "8980f11f",
                  "id": 331,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "recoverERC20",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 329,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 326,
                        "mutability": "mutable",
                        "name": "tokenAddress",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 331,
                        "src": "11035:20:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 325,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "11035:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 328,
                        "mutability": "mutable",
                        "name": "tokenAmount",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 331,
                        "src": "11057:19:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 327,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "11057:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "11034:43:0"
                  },
                  "returnParameters": {
                    "id": 330,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "11086:0:0"
                  },
                  "scope": 344,
                  "src": "11013:74:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 332,
                    "nodeType": "StructuredDocumentation",
                    "src": "11093:187:0",
                    "text": "@dev   Only the contract Owner may call this. \n@dev   It emits a `RewardsDurationUpdated` event. \n@param _rewardsDuration The new duration for rewards."
                  },
                  "functionSelector": "cc1a378f",
                  "id": 337,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setRewardsDuration",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 335,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 334,
                        "mutability": "mutable",
                        "name": "_rewardsDuration",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 337,
                        "src": "11313:24:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 333,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "11313:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "11312:26:0"
                  },
                  "returnParameters": {
                    "id": 336,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "11347:0:0"
                  },
                  "scope": 344,
                  "src": "11285:63:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 338,
                    "nodeType": "StructuredDocumentation",
                    "src": "11354:206:0",
                    "text": "@dev Change the paused state of the contract. Only the contract Owner may call this. \n@dev It emits a `PauseChanged` event. \n@param _paused Whether to pause the contract."
                  },
                  "functionSelector": "16c38b3c",
                  "id": 343,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setPaused",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 341,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 340,
                        "mutability": "mutable",
                        "name": "_paused",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 343,
                        "src": "11584:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 339,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "11584:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "11583:14:0"
                  },
                  "returnParameters": {
                    "id": 342,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "11606:0:0"
                  },
                  "scope": 344,
                  "src": "11565:42:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 345,
              "src": "5836:5774:0"
            }
          ],
          "src": "133:11478:0"
        },
        "id": 0
      }
    }
  }
}