{
  "contractName": "ApproveAndCallFallBack",
  "abi": [
    {
      "constant": false,
      "inputs": [
        {
          "name": "from",
          "type": "address"
        },
        {
          "name": "_amount",
          "type": "uint256"
        },
        {
          "name": "_token",
          "type": "address"
        },
        {
          "name": "_data",
          "type": "bytes"
        }
      ],
      "name": "receiveApproval",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "metadata": "",
  "bytecode": "0x",
  "deployedBytecode": "0x",
  "sourceMap": "",
  "deployedSourceMap": "",
  "source": "pragma solidity ^0.4.24;\n\n/*\n    Copyright 2016, Jordi Baylina\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n */\n\n/// @title MiniMeToken Contract\n/// @author Jordi Baylina\n/// @dev This token contract's goal is to make it easy for anyone to clone this\n///  token using the token distribution at a given block, this will allow DAO's\n///  and DApps to upgrade their features in a decentralized manner without\n///  affecting the original token\n/// @dev It is ERC20 compliant, but still needs to under go further testing.\n\nimport \"./ITokenController.sol\";\n\ncontract Controlled {\n    /// @notice The address of the controller is the only address that can call\n    ///  a function with this modifier\n    modifier onlyController {\n        require(msg.sender == controller);\n        _;\n    }\n\n    address public controller;\n\n    function Controlled()  public { controller = msg.sender;}\n\n    /// @notice Changes the controller of the contract\n    /// @param _newController The new controller of the contract\n    function changeController(address _newController) onlyController  public {\n        controller = _newController;\n    }\n}\n\ncontract ApproveAndCallFallBack {\n    function receiveApproval(\n        address from,\n        uint256 _amount,\n        address _token,\n        bytes _data\n    ) public;\n}\n\n/// @dev The actual token contract, the default controller is the msg.sender\n///  that deploys the contract, so usually this token will be deployed by a\n///  token controller contract, which Giveth will call a \"Campaign\"\ncontract MiniMeToken is Controlled {\n\n    string public name;                //The Token's name: e.g. DigixDAO Tokens\n    uint8 public decimals;             //Number of decimals of the smallest unit\n    string public symbol;              //An identifier: e.g. REP\n    string public version = \"MMT_0.1\"; //An arbitrary versioning scheme\n\n\n    /// @dev `Checkpoint` is the structure that attaches a block number to a\n    ///  given value, the block number attached is the one that last changed the\n    ///  value\n    struct Checkpoint {\n\n        // `fromBlock` is the block number that the value was generated from\n        uint128 fromBlock;\n\n        // `value` is the amount of tokens at a specific block number\n        uint128 value;\n    }\n\n    // `parentToken` is the Token address that was cloned to produce this token;\n    //  it will be 0x0 for a token that was not cloned\n    MiniMeToken public parentToken;\n\n    // `parentSnapShotBlock` is the block number from the Parent Token that was\n    //  used to determine the initial distribution of the Clone Token\n    uint public parentSnapShotBlock;\n\n    // `creationBlock` is the block number that the Clone Token was created\n    uint public creationBlock;\n\n    // `balances` is the map that tracks the balance of each address, in this\n    //  contract when the balance changes the block number that the change\n    //  occurred is also included in the map\n    mapping (address => Checkpoint[]) balances;\n\n    // `allowed` tracks any extra transfer rights as in all ERC20 tokens\n    mapping (address => mapping (address => uint256)) allowed;\n\n    // Tracks the history of the `totalSupply` of the token\n    Checkpoint[] totalSupplyHistory;\n\n    // Flag that determines if the token is transferable or not.\n    bool public transfersEnabled;\n\n    // The factory used to create new clone tokens\n    MiniMeTokenFactory public tokenFactory;\n\n////////////////\n// Constructor\n////////////////\n\n    /// @notice Constructor to create a MiniMeToken\n    /// @param _tokenFactory The address of the MiniMeTokenFactory contract that\n    ///  will create the Clone token contracts, the token factory needs to be\n    ///  deployed first\n    /// @param _parentToken Address of the parent token, set to 0x0 if it is a\n    ///  new token\n    /// @param _parentSnapShotBlock Block of the parent token that will\n    ///  determine the initial distribution of the clone token, set to 0 if it\n    ///  is a new token\n    /// @param _tokenName Name of the new token\n    /// @param _decimalUnits Number of decimals of the new token\n    /// @param _tokenSymbol Token Symbol for the new token\n    /// @param _transfersEnabled If true, tokens will be able to be transferred\n    function MiniMeToken(\n        MiniMeTokenFactory _tokenFactory,\n        MiniMeToken _parentToken,\n        uint _parentSnapShotBlock,\n        string _tokenName,\n        uint8 _decimalUnits,\n        string _tokenSymbol,\n        bool _transfersEnabled\n    )  public\n    {\n        tokenFactory = _tokenFactory;\n        name = _tokenName;                                 // Set the name\n        decimals = _decimalUnits;                          // Set the decimals\n        symbol = _tokenSymbol;                             // Set the symbol\n        parentToken = _parentToken;\n        parentSnapShotBlock = _parentSnapShotBlock;\n        transfersEnabled = _transfersEnabled;\n        creationBlock = block.number;\n    }\n\n\n///////////////////\n// ERC20 Methods\n///////////////////\n\n    /// @notice Send `_amount` tokens to `_to` from `msg.sender`\n    /// @param _to The address of the recipient\n    /// @param _amount The amount of tokens to be transferred\n    /// @return Whether the transfer was successful or not\n    function transfer(address _to, uint256 _amount) public returns (bool success) {\n        require(transfersEnabled);\n        return doTransfer(msg.sender, _to, _amount);\n    }\n\n    /// @notice Send `_amount` tokens to `_to` from `_from` on the condition it\n    ///  is approved by `_from`\n    /// @param _from The address holding the tokens being transferred\n    /// @param _to The address of the recipient\n    /// @param _amount The amount of tokens to be transferred\n    /// @return True if the transfer was successful\n    function transferFrom(address _from, address _to, uint256 _amount) public returns (bool success) {\n\n        // The controller of this contract can move tokens around at will,\n        //  this is important to recognize! Confirm that you trust the\n        //  controller of this contract, which in most situations should be\n        //  another open source smart contract or 0x0\n        if (msg.sender != controller) {\n            require(transfersEnabled);\n\n            // The standard ERC 20 transferFrom functionality\n            if (allowed[_from][msg.sender] < _amount)\n                return false;\n            allowed[_from][msg.sender] -= _amount;\n        }\n        return doTransfer(_from, _to, _amount);\n    }\n\n    /// @dev This is the actual transfer function in the token contract, it can\n    ///  only be called by other functions in this contract.\n    /// @param _from The address holding the tokens being transferred\n    /// @param _to The address of the recipient\n    /// @param _amount The amount of tokens to be transferred\n    /// @return True if the transfer was successful\n    function doTransfer(address _from, address _to, uint _amount) internal returns(bool) {\n        if (_amount == 0) {\n            return true;\n        }\n        require(parentSnapShotBlock < block.number);\n        // Do not allow transfer to 0x0 or the token contract itself\n        require((_to != 0) && (_to != address(this)));\n        // If the amount being transfered is more than the balance of the\n        //  account the transfer returns false\n        var previousBalanceFrom = balanceOfAt(_from, block.number);\n        if (previousBalanceFrom < _amount) {\n            return false;\n        }\n        // Alerts the token controller of the transfer\n        if (isContract(controller)) {\n            // Adding the ` == true` makes the linter shut up so...\n            require(ITokenController(controller).onTransfer(_from, _to, _amount) == true);\n        }\n        // First update the balance array with the new value for the address\n        //  sending the tokens\n        updateValueAtNow(balances[_from], previousBalanceFrom - _amount);\n        // Then update the balance array with the new value for the address\n        //  receiving the tokens\n        var previousBalanceTo = balanceOfAt(_to, block.number);\n        require(previousBalanceTo + _amount >= previousBalanceTo); // Check for overflow\n        updateValueAtNow(balances[_to], previousBalanceTo + _amount);\n        // An event to make the transfer easy to find on the blockchain\n        Transfer(_from, _to, _amount);\n        return true;\n    }\n\n    /// @param _owner The address that's balance is being requested\n    /// @return The balance of `_owner` at the current block\n    function balanceOf(address _owner) public constant returns (uint256 balance) {\n        return balanceOfAt(_owner, block.number);\n    }\n\n    /// @notice `msg.sender` approves `_spender` to spend `_amount` tokens on\n    ///  its behalf. This is a modified version of the ERC20 approve function\n    ///  to be a little bit safer\n    /// @param _spender The address of the account able to transfer the tokens\n    /// @param _amount The amount of tokens to be approved for transfer\n    /// @return True if the approval was successful\n    function approve(address _spender, uint256 _amount) public returns (bool success) {\n        require(transfersEnabled);\n\n        // To change the approve amount you first have to reduce the addresses`\n        //  allowance to zero by calling `approve(_spender,0)` if it is not\n        //  already 0 to mitigate the race condition described here:\n        //  https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\n        require((_amount == 0) || (allowed[msg.sender][_spender] == 0));\n\n        // Alerts the token controller of the approve function call\n        if (isContract(controller)) {\n            // Adding the ` == true` makes the linter shut up so...\n            require(ITokenController(controller).onApprove(msg.sender, _spender, _amount) == true);\n        }\n\n        allowed[msg.sender][_spender] = _amount;\n        Approval(msg.sender, _spender, _amount);\n        return true;\n    }\n\n    /// @dev This function makes it easy to read the `allowed[]` map\n    /// @param _owner The address of the account that owns the token\n    /// @param _spender The address of the account able to transfer the tokens\n    /// @return Amount of remaining tokens of _owner that _spender is allowed\n    ///  to spend\n    function allowance(address _owner, address _spender) public constant returns (uint256 remaining) {\n        return allowed[_owner][_spender];\n    }\n\n    /// @notice `msg.sender` approves `_spender` to send `_amount` tokens on\n    ///  its behalf, and then a function is triggered in the contract that is\n    ///  being approved, `_spender`. This allows users to use their tokens to\n    ///  interact with contracts in one function call instead of two\n    /// @param _spender The address of the contract able to transfer the tokens\n    /// @param _amount The amount of tokens to be approved for transfer\n    /// @return True if the function call was successful\n    function approveAndCall(ApproveAndCallFallBack _spender, uint256 _amount, bytes _extraData) public returns (bool success) {\n        require(approve(_spender, _amount));\n\n        _spender.receiveApproval(\n            msg.sender,\n            _amount,\n            this,\n            _extraData\n        );\n\n        return true;\n    }\n\n    /// @dev This function makes it easy to get the total number of tokens\n    /// @return The total number of tokens\n    function totalSupply() public constant returns (uint) {\n        return totalSupplyAt(block.number);\n    }\n\n\n////////////////\n// Query balance and totalSupply in History\n////////////////\n\n    /// @dev Queries the balance of `_owner` at a specific `_blockNumber`\n    /// @param _owner The address from which the balance will be retrieved\n    /// @param _blockNumber The block number when the balance is queried\n    /// @return The balance at `_blockNumber`\n    function balanceOfAt(address _owner, uint _blockNumber) public constant returns (uint) {\n\n        // These next few lines are used when the balance of the token is\n        //  requested before a check point was ever created for this token, it\n        //  requires that the `parentToken.balanceOfAt` be queried at the\n        //  genesis block for that token as this contains initial balance of\n        //  this token\n        if ((balances[_owner].length == 0) || (balances[_owner][0].fromBlock > _blockNumber)) {\n            if (address(parentToken) != 0) {\n                return parentToken.balanceOfAt(_owner, min(_blockNumber, parentSnapShotBlock));\n            } else {\n                // Has no parent\n                return 0;\n            }\n\n        // This will return the expected balance during normal situations\n        } else {\n            return getValueAt(balances[_owner], _blockNumber);\n        }\n    }\n\n    /// @notice Total amount of tokens at a specific `_blockNumber`.\n    /// @param _blockNumber The block number when the totalSupply is queried\n    /// @return The total amount of tokens at `_blockNumber`\n    function totalSupplyAt(uint _blockNumber) public constant returns(uint) {\n\n        // These next few lines are used when the totalSupply of the token is\n        //  requested before a check point was ever created for this token, it\n        //  requires that the `parentToken.totalSupplyAt` be queried at the\n        //  genesis block for this token as that contains totalSupply of this\n        //  token at this block number.\n        if ((totalSupplyHistory.length == 0) || (totalSupplyHistory[0].fromBlock > _blockNumber)) {\n            if (address(parentToken) != 0) {\n                return parentToken.totalSupplyAt(min(_blockNumber, parentSnapShotBlock));\n            } else {\n                return 0;\n            }\n\n        // This will return the expected totalSupply during normal situations\n        } else {\n            return getValueAt(totalSupplyHistory, _blockNumber);\n        }\n    }\n\n////////////////\n// Clone Token Method\n////////////////\n\n    /// @notice Creates a new clone token with the initial distribution being\n    ///  this token at `_snapshotBlock`\n    /// @param _cloneTokenName Name of the clone token\n    /// @param _cloneDecimalUnits Number of decimals of the smallest unit\n    /// @param _cloneTokenSymbol Symbol of the clone token\n    /// @param _snapshotBlock Block when the distribution of the parent token is\n    ///  copied to set the initial distribution of the new clone token;\n    ///  if the block is zero than the actual block, the current block is used\n    /// @param _transfersEnabled True if transfers are allowed in the clone\n    /// @return The address of the new MiniMeToken Contract\n    function createCloneToken(\n        string _cloneTokenName,\n        uint8 _cloneDecimalUnits,\n        string _cloneTokenSymbol,\n        uint _snapshotBlock,\n        bool _transfersEnabled\n    ) public returns(MiniMeToken)\n    {\n        uint256 snapshot = _snapshotBlock == 0 ? block.number - 1 : _snapshotBlock;\n\n        MiniMeToken cloneToken = tokenFactory.createCloneToken(\n            this,\n            snapshot,\n            _cloneTokenName,\n            _cloneDecimalUnits,\n            _cloneTokenSymbol,\n            _transfersEnabled\n        );\n\n        cloneToken.changeController(msg.sender);\n\n        // An event to make the token easy to find on the blockchain\n        NewCloneToken(address(cloneToken), snapshot);\n        return cloneToken;\n    }\n\n////////////////\n// Generate and destroy tokens\n////////////////\n\n    /// @notice Generates `_amount` tokens that are assigned to `_owner`\n    /// @param _owner The address that will be assigned the new tokens\n    /// @param _amount The quantity of tokens generated\n    /// @return True if the tokens are generated correctly\n    function generateTokens(address _owner, uint _amount) onlyController public returns (bool) {\n        uint curTotalSupply = totalSupply();\n        require(curTotalSupply + _amount >= curTotalSupply); // Check for overflow\n        uint previousBalanceTo = balanceOf(_owner);\n        require(previousBalanceTo + _amount >= previousBalanceTo); // Check for overflow\n        updateValueAtNow(totalSupplyHistory, curTotalSupply + _amount);\n        updateValueAtNow(balances[_owner], previousBalanceTo + _amount);\n        Transfer(0, _owner, _amount);\n        return true;\n    }\n\n\n    /// @notice Burns `_amount` tokens from `_owner`\n    /// @param _owner The address that will lose the tokens\n    /// @param _amount The quantity of tokens to burn\n    /// @return True if the tokens are burned correctly\n    function destroyTokens(address _owner, uint _amount) onlyController public returns (bool) {\n        uint curTotalSupply = totalSupply();\n        require(curTotalSupply >= _amount);\n        uint previousBalanceFrom = balanceOf(_owner);\n        require(previousBalanceFrom >= _amount);\n        updateValueAtNow(totalSupplyHistory, curTotalSupply - _amount);\n        updateValueAtNow(balances[_owner], previousBalanceFrom - _amount);\n        Transfer(_owner, 0, _amount);\n        return true;\n    }\n\n////////////////\n// Enable tokens transfers\n////////////////\n\n\n    /// @notice Enables token holders to transfer their tokens freely if true\n    /// @param _transfersEnabled True if transfers are allowed in the clone\n    function enableTransfers(bool _transfersEnabled) onlyController public {\n        transfersEnabled = _transfersEnabled;\n    }\n\n////////////////\n// Internal helper functions to query and set a value in a snapshot array\n////////////////\n\n    /// @dev `getValueAt` retrieves the number of tokens at a given block number\n    /// @param checkpoints The history of values being queried\n    /// @param _block The block number to retrieve the value at\n    /// @return The number of tokens being queried\n    function getValueAt(Checkpoint[] storage checkpoints, uint _block) constant internal returns (uint) {\n        if (checkpoints.length == 0)\n            return 0;\n\n        // Shortcut for the actual value\n        if (_block >= checkpoints[checkpoints.length-1].fromBlock)\n            return checkpoints[checkpoints.length-1].value;\n        if (_block < checkpoints[0].fromBlock)\n            return 0;\n\n        // Binary search of the value in the array\n        uint min = 0;\n        uint max = checkpoints.length-1;\n        while (max > min) {\n            uint mid = (max + min + 1) / 2;\n            if (checkpoints[mid].fromBlock<=_block) {\n                min = mid;\n            } else {\n                max = mid-1;\n            }\n        }\n        return checkpoints[min].value;\n    }\n\n    /// @dev `updateValueAtNow` used to update the `balances` map and the\n    ///  `totalSupplyHistory`\n    /// @param checkpoints The history of data being updated\n    /// @param _value The new number of tokens\n    function updateValueAtNow(Checkpoint[] storage checkpoints, uint _value) internal {\n        if ((checkpoints.length == 0) || (checkpoints[checkpoints.length - 1].fromBlock < block.number)) {\n            Checkpoint storage newCheckPoint = checkpoints[checkpoints.length++];\n            newCheckPoint.fromBlock = uint128(block.number);\n            newCheckPoint.value = uint128(_value);\n        } else {\n            Checkpoint storage oldCheckPoint = checkpoints[checkpoints.length - 1];\n            oldCheckPoint.value = uint128(_value);\n        }\n    }\n\n    /// @dev Internal function to determine if an address is a contract\n    /// @param _addr The address being queried\n    /// @return True if `_addr` is a contract\n    function isContract(address _addr) constant internal returns(bool) {\n        uint size;\n        if (_addr == 0)\n            return false;\n\n        assembly {\n            size := extcodesize(_addr)\n        }\n\n        return size>0;\n    }\n\n    /// @dev Helper function to return a min betwen the two uints\n    function min(uint a, uint b) pure internal returns (uint) {\n        return a < b ? a : b;\n    }\n\n    /// @notice The fallback function: If the contract's controller has not been\n    ///  set to 0, then the `proxyPayment` method is called which relays the\n    ///  ether and creates tokens as described in the token controller contract\n    function () external payable {\n        require(isContract(controller));\n        // Adding the ` == true` makes the linter shut up so...\n        require(ITokenController(controller).proxyPayment.value(msg.value)(msg.sender) == true);\n    }\n\n//////////\n// Safety Methods\n//////////\n\n    /// @notice This method can be used by the controller to extract mistakenly\n    ///  sent tokens to this contract.\n    /// @param _token The address of the token contract that you want to recover\n    ///  set to 0 in case you want to extract ether.\n    function claimTokens(address _token) onlyController public {\n        if (_token == 0x0) {\n            controller.transfer(this.balance);\n            return;\n        }\n\n        MiniMeToken token = MiniMeToken(_token);\n        uint balance = token.balanceOf(this);\n        token.transfer(controller, balance);\n        ClaimedTokens(_token, controller, balance);\n    }\n\n////////////////\n// Events\n////////////////\n    event ClaimedTokens(address indexed _token, address indexed _controller, uint _amount);\n    event Transfer(address indexed _from, address indexed _to, uint256 _amount);\n    event NewCloneToken(address indexed _cloneToken, uint _snapshotBlock);\n    event Approval(\n        address indexed _owner,\n        address indexed _spender,\n        uint256 _amount\n        );\n\n}\n\n\n////////////////\n// MiniMeTokenFactory\n////////////////\n\n/// @dev This contract is used to generate clone contracts from a contract.\n///  In solidity this is the way to create a contract from a contract of the\n///  same class\ncontract MiniMeTokenFactory {\n\n    /// @notice Update the DApp by creating a new token with new functionalities\n    ///  the msg.sender becomes the controller of this clone token\n    /// @param _parentToken Address of the token being cloned\n    /// @param _snapshotBlock Block of the parent token that will\n    ///  determine the initial distribution of the clone token\n    /// @param _tokenName Name of the new token\n    /// @param _decimalUnits Number of decimals of the new token\n    /// @param _tokenSymbol Token Symbol for the new token\n    /// @param _transfersEnabled If true, tokens will be able to be transferred\n    /// @return The address of the new token contract\n    function createCloneToken(\n        MiniMeToken _parentToken,\n        uint _snapshotBlock,\n        string _tokenName,\n        uint8 _decimalUnits,\n        string _tokenSymbol,\n        bool _transfersEnabled\n    ) public returns (MiniMeToken)\n    {\n        MiniMeToken newToken = new MiniMeToken(\n            this,\n            _parentToken,\n            _snapshotBlock,\n            _tokenName,\n            _decimalUnits,\n            _tokenSymbol,\n            _transfersEnabled\n        );\n\n        newToken.changeController(msg.sender);\n        return newToken;\n    }\n}",
  "sourcePath": "@aragon/apps-shared-minime/contracts/MiniMeToken.sol",
  "ast": {
    "absolutePath": "@aragon/apps-shared-minime/contracts/MiniMeToken.sol",
    "exportedSymbols": {
      "ApproveAndCallFallBack": [
        1446
      ],
      "Controlled": [
        1434
      ],
      "MiniMeToken": [
        2462
      ],
      "MiniMeTokenFactory": [
        2503
      ]
    },
    "id": 2504,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 1398,
        "literals": [
          "solidity",
          "^",
          "0.4",
          ".24"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:24:9"
      },
      {
        "absolutePath": "@aragon/apps-shared-minime/contracts/ITokenController.sol",
        "file": "./ITokenController.sol",
        "id": 1399,
        "nodeType": "ImportDirective",
        "scope": 2504,
        "sourceUnit": 1397,
        "src": "1123:32:9",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 1434,
        "linearizedBaseContracts": [
          1434
        ],
        "name": "Controlled",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "body": {
              "id": 1409,
              "nodeType": "Block",
              "src": "1326:61:9",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 1405,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 1402,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10404,
                            "src": "1344:3:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 1403,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "1344:10:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 1404,
                          "name": "controller",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1412,
                          "src": "1358:10:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "1344:24:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 1401,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        10407,
                        10408
                      ],
                      "referencedDeclaration": 10407,
                      "src": "1336:7:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 1406,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1336:33:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1407,
                  "nodeType": "ExpressionStatement",
                  "src": "1336:33:9"
                },
                {
                  "id": 1408,
                  "nodeType": "PlaceholderStatement",
                  "src": "1379:1:9"
                }
              ]
            },
            "documentation": "@notice The address of the controller is the only address that can call\n  a function with this modifier",
            "id": 1410,
            "name": "onlyController",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 1400,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1326:0:9"
            },
            "src": "1302:85:9",
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 1412,
            "name": "controller",
            "nodeType": "VariableDeclaration",
            "scope": 1434,
            "src": "1393:25:9",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 1411,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "1393:7:9",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1420,
              "nodeType": "Block",
              "src": "1455:27:9",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1418,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 1415,
                      "name": "controller",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1412,
                      "src": "1457:10:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1416,
                        "name": "msg",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10404,
                        "src": "1470:3:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_message",
                          "typeString": "msg"
                        }
                      },
                      "id": 1417,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sender",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "1470:10:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "1457:23:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 1419,
                  "nodeType": "ExpressionStatement",
                  "src": "1457:23:9"
                }
              ]
            },
            "documentation": null,
            "id": 1421,
            "implemented": true,
            "isConstructor": true,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "Controlled",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1413,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1444:2:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 1414,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1455:0:9"
            },
            "scope": 1434,
            "src": "1425:57:9",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1432,
              "nodeType": "Block",
              "src": "1681:44:9",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1430,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 1428,
                      "name": "controller",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1412,
                      "src": "1691:10:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 1429,
                      "name": "_newController",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1423,
                      "src": "1704:14:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "1691:27:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 1431,
                  "nodeType": "ExpressionStatement",
                  "src": "1691:27:9"
                }
              ]
            },
            "documentation": "@notice Changes the controller of the contract\n @param _newController The new controller of the contract",
            "id": 1433,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": null,
                "id": 1426,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 1425,
                  "name": "onlyController",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1410,
                  "src": "1658:14:9",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "1658:14:9"
              }
            ],
            "name": "changeController",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1424,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1423,
                  "name": "_newController",
                  "nodeType": "VariableDeclaration",
                  "scope": 1433,
                  "src": "1634:22:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1422,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1634:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1633:24:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 1427,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1681:0:9"
            },
            "scope": 1434,
            "src": "1608:117:9",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          }
        ],
        "scope": 2504,
        "src": "1157:570:9"
      },
      {
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": false,
        "id": 1446,
        "linearizedBaseContracts": [
          1446
        ],
        "name": "ApproveAndCallFallBack",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "body": null,
            "documentation": null,
            "id": 1445,
            "implemented": false,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "receiveApproval",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1443,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1436,
                  "name": "from",
                  "nodeType": "VariableDeclaration",
                  "scope": 1445,
                  "src": "1801:12:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1435,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1801:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1438,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 1445,
                  "src": "1823:15:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1437,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1823:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1440,
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "scope": 1445,
                  "src": "1848:14:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1439,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1848:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1442,
                  "name": "_data",
                  "nodeType": "VariableDeclaration",
                  "scope": 1445,
                  "src": "1872:11:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1441,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "1872:5:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1791:98:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 1444,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1896:0:9"
            },
            "scope": 1446,
            "src": "1767:130:9",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          }
        ],
        "scope": 2504,
        "src": "1729:170:9"
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 1447,
              "name": "Controlled",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 1434,
              "src": "2146:10:9",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Controlled_$1434",
                "typeString": "contract Controlled"
              }
            },
            "id": 1448,
            "nodeType": "InheritanceSpecifier",
            "src": "2146:10:9"
          }
        ],
        "contractDependencies": [
          1434
        ],
        "contractKind": "contract",
        "documentation": "@dev The actual token contract, the default controller is the msg.sender\n  that deploys the contract, so usually this token will be deployed by a\n  token controller contract, which Giveth will call a \"Campaign\"",
        "fullyImplemented": true,
        "id": 2462,
        "linearizedBaseContracts": [
          2462,
          1434
        ],
        "name": "MiniMeToken",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "constant": false,
            "id": 1450,
            "name": "name",
            "nodeType": "VariableDeclaration",
            "scope": 2462,
            "src": "2164:18:9",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_storage",
              "typeString": "string"
            },
            "typeName": {
              "id": 1449,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "2164:6:9",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 1452,
            "name": "decimals",
            "nodeType": "VariableDeclaration",
            "scope": 2462,
            "src": "2244:21:9",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint8",
              "typeString": "uint8"
            },
            "typeName": {
              "id": 1451,
              "name": "uint8",
              "nodeType": "ElementaryTypeName",
              "src": "2244:5:9",
              "typeDescriptions": {
                "typeIdentifier": "t_uint8",
                "typeString": "uint8"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 1454,
            "name": "symbol",
            "nodeType": "VariableDeclaration",
            "scope": 2462,
            "src": "2325:20:9",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_storage",
              "typeString": "string"
            },
            "typeName": {
              "id": 1453,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "2325:6:9",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 1457,
            "name": "version",
            "nodeType": "VariableDeclaration",
            "scope": 2462,
            "src": "2390:33:9",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_storage",
              "typeString": "string"
            },
            "typeName": {
              "id": 1455,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "2390:6:9",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "4d4d545f302e31",
              "id": 1456,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "2414:9:9",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_40fc38fa6d6143d33df7a9e2b8cbab7741b8990dbd52142e39a51c72d1e7c977",
                "typeString": "literal_string \"MMT_0.1\""
              },
              "value": "MMT_0.1"
            },
            "visibility": "public"
          },
          {
            "canonicalName": "MiniMeToken.Checkpoint",
            "id": 1462,
            "members": [
              {
                "constant": false,
                "id": 1459,
                "name": "fromBlock",
                "nodeType": "VariableDeclaration",
                "scope": 1462,
                "src": "2743:17:9",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint128",
                  "typeString": "uint128"
                },
                "typeName": {
                  "id": 1458,
                  "name": "uint128",
                  "nodeType": "ElementaryTypeName",
                  "src": "2743:7:9",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint128",
                    "typeString": "uint128"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 1461,
                "name": "value",
                "nodeType": "VariableDeclaration",
                "scope": 1462,
                "src": "2841:13:9",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint128",
                  "typeString": "uint128"
                },
                "typeName": {
                  "id": 1460,
                  "name": "uint128",
                  "nodeType": "ElementaryTypeName",
                  "src": "2841:7:9",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint128",
                    "typeString": "uint128"
                  }
                },
                "value": null,
                "visibility": "internal"
              }
            ],
            "name": "Checkpoint",
            "nodeType": "StructDefinition",
            "scope": 2462,
            "src": "2637:224:9",
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 1464,
            "name": "parentToken",
            "nodeType": "VariableDeclaration",
            "scope": 2462,
            "src": "3003:30:9",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_MiniMeToken_$2462",
              "typeString": "contract MiniMeToken"
            },
            "typeName": {
              "contractScope": null,
              "id": 1463,
              "name": "MiniMeToken",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 2462,
              "src": "3003:11:9",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_MiniMeToken_$2462",
                "typeString": "contract MiniMeToken"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 1466,
            "name": "parentSnapShotBlock",
            "nodeType": "VariableDeclaration",
            "scope": 2462,
            "src": "3190:31:9",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 1465,
              "name": "uint",
              "nodeType": "ElementaryTypeName",
              "src": "3190:4:9",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 1468,
            "name": "creationBlock",
            "nodeType": "VariableDeclaration",
            "scope": 2462,
            "src": "3304:25:9",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 1467,
              "name": "uint",
              "nodeType": "ElementaryTypeName",
              "src": "3304:4:9",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 1473,
            "name": "balances",
            "nodeType": "VariableDeclaration",
            "scope": 2462,
            "src": "3534:42:9",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_struct$_Checkpoint_$1462_storage_$dyn_storage_$",
              "typeString": "mapping(address => struct MiniMeToken.Checkpoint[])"
            },
            "typeName": {
              "id": 1472,
              "keyType": {
                "id": 1469,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "3543:7:9",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "3534:33:9",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_struct$_Checkpoint_$1462_storage_$dyn_storage_$",
                "typeString": "mapping(address => struct MiniMeToken.Checkpoint[])"
              },
              "valueType": {
                "baseType": {
                  "contractScope": null,
                  "id": 1470,
                  "name": "Checkpoint",
                  "nodeType": "UserDefinedTypeName",
                  "referencedDeclaration": 1462,
                  "src": "3554:10:9",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Checkpoint_$1462_storage_ptr",
                    "typeString": "struct MiniMeToken.Checkpoint"
                  }
                },
                "id": 1471,
                "length": null,
                "nodeType": "ArrayTypeName",
                "src": "3554:12:9",
                "typeDescriptions": {
                  "typeIdentifier": "t_array$_t_struct$_Checkpoint_$1462_storage_$dyn_storage_ptr",
                  "typeString": "struct MiniMeToken.Checkpoint[]"
                }
              }
            },
            "value": null,
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 1479,
            "name": "allowed",
            "nodeType": "VariableDeclaration",
            "scope": 2462,
            "src": "3656:57:9",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
              "typeString": "mapping(address => mapping(address => uint256))"
            },
            "typeName": {
              "id": 1478,
              "keyType": {
                "id": 1474,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "3665:7:9",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "3656:49:9",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                "typeString": "mapping(address => mapping(address => uint256))"
              },
              "valueType": {
                "id": 1477,
                "keyType": {
                  "id": 1475,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "3685:7:9",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "nodeType": "Mapping",
                "src": "3676:28:9",
                "typeDescriptions": {
                  "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                  "typeString": "mapping(address => uint256)"
                },
                "valueType": {
                  "id": 1476,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "3696:7:9",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                }
              }
            },
            "value": null,
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 1482,
            "name": "totalSupplyHistory",
            "nodeType": "VariableDeclaration",
            "scope": 2462,
            "src": "3780:31:9",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_array$_t_struct$_Checkpoint_$1462_storage_$dyn_storage",
              "typeString": "struct MiniMeToken.Checkpoint[]"
            },
            "typeName": {
              "baseType": {
                "contractScope": null,
                "id": 1480,
                "name": "Checkpoint",
                "nodeType": "UserDefinedTypeName",
                "referencedDeclaration": 1462,
                "src": "3780:10:9",
                "typeDescriptions": {
                  "typeIdentifier": "t_struct$_Checkpoint_$1462_storage_ptr",
                  "typeString": "struct MiniMeToken.Checkpoint"
                }
              },
              "id": 1481,
              "length": null,
              "nodeType": "ArrayTypeName",
              "src": "3780:12:9",
              "typeDescriptions": {
                "typeIdentifier": "t_array$_t_struct$_Checkpoint_$1462_storage_$dyn_storage_ptr",
                "typeString": "struct MiniMeToken.Checkpoint[]"
              }
            },
            "value": null,
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 1484,
            "name": "transfersEnabled",
            "nodeType": "VariableDeclaration",
            "scope": 2462,
            "src": "3883:28:9",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bool",
              "typeString": "bool"
            },
            "typeName": {
              "id": 1483,
              "name": "bool",
              "nodeType": "ElementaryTypeName",
              "src": "3883:4:9",
              "typeDescriptions": {
                "typeIdentifier": "t_bool",
                "typeString": "bool"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 1486,
            "name": "tokenFactory",
            "nodeType": "VariableDeclaration",
            "scope": 2462,
            "src": "3969:38:9",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_MiniMeTokenFactory_$2503",
              "typeString": "contract MiniMeTokenFactory"
            },
            "typeName": {
              "contractScope": null,
              "id": 1485,
              "name": "MiniMeTokenFactory",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 2503,
              "src": "3969:18:9",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_MiniMeTokenFactory_$2503",
                "typeString": "contract MiniMeTokenFactory"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1536,
              "nodeType": "Block",
              "src": "5091:448:9",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1505,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 1503,
                      "name": "tokenFactory",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1486,
                      "src": "5101:12:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_MiniMeTokenFactory_$2503",
                        "typeString": "contract MiniMeTokenFactory"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 1504,
                      "name": "_tokenFactory",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1488,
                      "src": "5116:13:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_MiniMeTokenFactory_$2503",
                        "typeString": "contract MiniMeTokenFactory"
                      }
                    },
                    "src": "5101:28:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_MiniMeTokenFactory_$2503",
                      "typeString": "contract MiniMeTokenFactory"
                    }
                  },
                  "id": 1506,
                  "nodeType": "ExpressionStatement",
                  "src": "5101:28:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1509,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 1507,
                      "name": "name",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1450,
                      "src": "5139:4:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_storage",
                        "typeString": "string storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 1508,
                      "name": "_tokenName",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1494,
                      "src": "5146:10:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string memory"
                      }
                    },
                    "src": "5139:17:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage",
                      "typeString": "string storage ref"
                    }
                  },
                  "id": 1510,
                  "nodeType": "ExpressionStatement",
                  "src": "5139:17:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1513,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 1511,
                      "name": "decimals",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1452,
                      "src": "5214:8:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 1512,
                      "name": "_decimalUnits",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1496,
                      "src": "5225:13:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "src": "5214:24:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "id": 1514,
                  "nodeType": "ExpressionStatement",
                  "src": "5214:24:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1517,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 1515,
                      "name": "symbol",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1454,
                      "src": "5293:6:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_storage",
                        "typeString": "string storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 1516,
                      "name": "_tokenSymbol",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1498,
                      "src": "5302:12:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string memory"
                      }
                    },
                    "src": "5293:21:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage",
                      "typeString": "string storage ref"
                    }
                  },
                  "id": 1518,
                  "nodeType": "ExpressionStatement",
                  "src": "5293:21:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1521,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 1519,
                      "name": "parentToken",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1464,
                      "src": "5370:11:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_MiniMeToken_$2462",
                        "typeString": "contract MiniMeToken"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 1520,
                      "name": "_parentToken",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1490,
                      "src": "5384:12:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_MiniMeToken_$2462",
                        "typeString": "contract MiniMeToken"
                      }
                    },
                    "src": "5370:26:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_MiniMeToken_$2462",
                      "typeString": "contract MiniMeToken"
                    }
                  },
                  "id": 1522,
                  "nodeType": "ExpressionStatement",
                  "src": "5370:26:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1525,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 1523,
                      "name": "parentSnapShotBlock",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1466,
                      "src": "5406:19:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 1524,
                      "name": "_parentSnapShotBlock",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1492,
                      "src": "5428:20:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "5406:42:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 1526,
                  "nodeType": "ExpressionStatement",
                  "src": "5406:42:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1529,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 1527,
                      "name": "transfersEnabled",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1484,
                      "src": "5458:16:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 1528,
                      "name": "_transfersEnabled",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1500,
                      "src": "5477:17:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "5458:36:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 1530,
                  "nodeType": "ExpressionStatement",
                  "src": "5458:36:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1534,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 1531,
                      "name": "creationBlock",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1468,
                      "src": "5504:13:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1532,
                        "name": "block",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10394,
                        "src": "5520:5:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_block",
                          "typeString": "block"
                        }
                      },
                      "id": 1533,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "number",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "5520:12:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "5504:28:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 1535,
                  "nodeType": "ExpressionStatement",
                  "src": "5504:28:9"
                }
              ]
            },
            "documentation": "/////////////\n @notice Constructor to create a MiniMeToken\n @param _tokenFactory The address of the MiniMeTokenFactory contract that\n  will create the Clone token contracts, the token factory needs to be\n  deployed first\n @param _parentToken Address of the parent token, set to 0x0 if it is a\n  new token\n @param _parentSnapShotBlock Block of the parent token that will\n  determine the initial distribution of the clone token, set to 0 if it\n  is a new token\n @param _tokenName Name of the new token\n @param _decimalUnits Number of decimals of the new token\n @param _tokenSymbol Token Symbol for the new token\n @param _transfersEnabled If true, tokens will be able to be transferred",
            "id": 1537,
            "implemented": true,
            "isConstructor": true,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "MiniMeToken",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1501,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1488,
                  "name": "_tokenFactory",
                  "nodeType": "VariableDeclaration",
                  "scope": 1537,
                  "src": "4854:32:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_MiniMeTokenFactory_$2503",
                    "typeString": "contract MiniMeTokenFactory"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 1487,
                    "name": "MiniMeTokenFactory",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 2503,
                    "src": "4854:18:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_MiniMeTokenFactory_$2503",
                      "typeString": "contract MiniMeTokenFactory"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1490,
                  "name": "_parentToken",
                  "nodeType": "VariableDeclaration",
                  "scope": 1537,
                  "src": "4896:24:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_MiniMeToken_$2462",
                    "typeString": "contract MiniMeToken"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 1489,
                    "name": "MiniMeToken",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 2462,
                    "src": "4896:11:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_MiniMeToken_$2462",
                      "typeString": "contract MiniMeToken"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1492,
                  "name": "_parentSnapShotBlock",
                  "nodeType": "VariableDeclaration",
                  "scope": 1537,
                  "src": "4930:25:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1491,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "4930:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1494,
                  "name": "_tokenName",
                  "nodeType": "VariableDeclaration",
                  "scope": 1537,
                  "src": "4965:17:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 1493,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "4965:6:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1496,
                  "name": "_decimalUnits",
                  "nodeType": "VariableDeclaration",
                  "scope": 1537,
                  "src": "4992:19:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 1495,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "4992:5:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1498,
                  "name": "_tokenSymbol",
                  "nodeType": "VariableDeclaration",
                  "scope": 1537,
                  "src": "5021:19:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 1497,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "5021:6:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1500,
                  "name": "_transfersEnabled",
                  "nodeType": "VariableDeclaration",
                  "scope": 1537,
                  "src": "5050:22:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 1499,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "5050:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4844:234:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 1502,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5091:0:9"
            },
            "scope": 2462,
            "src": "4824:715:9",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1557,
              "nodeType": "Block",
              "src": "5916:95:9",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1547,
                        "name": "transfersEnabled",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1484,
                        "src": "5934:16:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 1546,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        10407,
                        10408
                      ],
                      "referencedDeclaration": 10407,
                      "src": "5926:7:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 1548,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5926:25:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1549,
                  "nodeType": "ExpressionStatement",
                  "src": "5926:25:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 1551,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 10404,
                          "src": "5979:3:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 1552,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "5979:10:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1553,
                        "name": "_to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1539,
                        "src": "5991:3:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1554,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1541,
                        "src": "5996:7:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 1550,
                      "name": "doTransfer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1719,
                      "src": "5968:10:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$",
                        "typeString": "function (address,address,uint256) returns (bool)"
                      }
                    },
                    "id": 1555,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5968:36:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 1545,
                  "id": 1556,
                  "nodeType": "Return",
                  "src": "5961:43:9"
                }
              ]
            },
            "documentation": "////////////////\n @notice Send `_amount` tokens to `_to` from `msg.sender`\n @param _to The address of the recipient\n @param _amount The amount of tokens to be transferred\n @return Whether the transfer was successful or not",
            "id": 1558,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "transfer",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1542,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1539,
                  "name": "_to",
                  "nodeType": "VariableDeclaration",
                  "scope": 1558,
                  "src": "5856:11:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1538,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5856:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1541,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 1558,
                  "src": "5869:15:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1540,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5869:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5855:30:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 1545,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1544,
                  "name": "success",
                  "nodeType": "VariableDeclaration",
                  "scope": 1558,
                  "src": "5902:12:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 1543,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "5902:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5901:14:9"
            },
            "scope": 2462,
            "src": "5838:173:9",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1605,
              "nodeType": "Block",
              "src": "6458:619:9",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 1572,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1569,
                        "name": "msg",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10404,
                        "src": "6749:3:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_message",
                          "typeString": "msg"
                        }
                      },
                      "id": 1570,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sender",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "6749:10:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 1571,
                      "name": "controller",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1412,
                      "src": "6763:10:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "6749:24:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 1598,
                  "nodeType": "IfStatement",
                  "src": "6745:278:9",
                  "trueBody": {
                    "id": 1597,
                    "nodeType": "Block",
                    "src": "6775:248:9",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 1574,
                              "name": "transfersEnabled",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1484,
                              "src": "6797:16:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 1573,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              10407,
                              10408
                            ],
                            "referencedDeclaration": 10407,
                            "src": "6789:7:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                              "typeString": "function (bool) pure"
                            }
                          },
                          "id": 1575,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6789:25:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1576,
                        "nodeType": "ExpressionStatement",
                        "src": "6789:25:9"
                      },
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 1584,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 1577,
                                "name": "allowed",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1479,
                                "src": "6895:7:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                  "typeString": "mapping(address => mapping(address => uint256))"
                                }
                              },
                              "id": 1579,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 1578,
                                "name": "_from",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1560,
                                "src": "6903:5:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "6895:14:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 1582,
                            "indexExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 1580,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 10404,
                                "src": "6910:3:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 1581,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "6910:10:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "6895:26:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 1583,
                            "name": "_amount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1564,
                            "src": "6924:7:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "6895:36:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 1587,
                        "nodeType": "IfStatement",
                        "src": "6891:70:9",
                        "trueBody": {
                          "expression": {
                            "argumentTypes": null,
                            "hexValue": "66616c7365",
                            "id": 1585,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "bool",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "6956:5:9",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "value": "false"
                          },
                          "functionReturnParameters": 1568,
                          "id": 1586,
                          "nodeType": "Return",
                          "src": "6949:12:9"
                        }
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1595,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 1588,
                                "name": "allowed",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1479,
                                "src": "6975:7:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                  "typeString": "mapping(address => mapping(address => uint256))"
                                }
                              },
                              "id": 1592,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 1589,
                                "name": "_from",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1560,
                                "src": "6983:5:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "6975:14:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 1593,
                            "indexExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 1590,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 10404,
                                "src": "6990:3:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 1591,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "6990:10:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "6975:26:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "-=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 1594,
                            "name": "_amount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1564,
                            "src": "7005:7:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "6975:37:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1596,
                        "nodeType": "ExpressionStatement",
                        "src": "6975:37:9"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1600,
                        "name": "_from",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1560,
                        "src": "7050:5:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1601,
                        "name": "_to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1562,
                        "src": "7057:3:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1602,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1564,
                        "src": "7062:7:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 1599,
                      "name": "doTransfer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1719,
                      "src": "7039:10:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$",
                        "typeString": "function (address,address,uint256) returns (bool)"
                      }
                    },
                    "id": 1603,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7039:31:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 1568,
                  "id": 1604,
                  "nodeType": "Return",
                  "src": "7032:38:9"
                }
              ]
            },
            "documentation": "@notice Send `_amount` tokens to `_to` from `_from` on the condition it\n  is approved by `_from`\n @param _from The address holding the tokens being transferred\n @param _to The address of the recipient\n @param _amount The amount of tokens to be transferred\n @return True if the transfer was successful",
            "id": 1606,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "transferFrom",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1565,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1560,
                  "name": "_from",
                  "nodeType": "VariableDeclaration",
                  "scope": 1606,
                  "src": "6383:13:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1559,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6383:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1562,
                  "name": "_to",
                  "nodeType": "VariableDeclaration",
                  "scope": 1606,
                  "src": "6398:11:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1561,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6398:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1564,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 1606,
                  "src": "6411:15:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1563,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6411:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6382:45:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 1568,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1567,
                  "name": "success",
                  "nodeType": "VariableDeclaration",
                  "scope": 1606,
                  "src": "6444:12:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 1566,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "6444:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6443:14:9"
            },
            "scope": 2462,
            "src": "6361:716:9",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1718,
              "nodeType": "Block",
              "src": "7541:1425:9",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1619,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 1617,
                      "name": "_amount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1612,
                      "src": "7555:7:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 1618,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "7566:1:9",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "7555:12:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 1623,
                  "nodeType": "IfStatement",
                  "src": "7551:54:9",
                  "trueBody": {
                    "id": 1622,
                    "nodeType": "Block",
                    "src": "7569:36:9",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "74727565",
                          "id": 1620,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "7590:4:9",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "true"
                        },
                        "functionReturnParameters": 1616,
                        "id": 1621,
                        "nodeType": "Return",
                        "src": "7583:11:9"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 1628,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 1625,
                          "name": "parentSnapShotBlock",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1466,
                          "src": "7622:19:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 1626,
                            "name": "block",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10394,
                            "src": "7644:5:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_block",
                              "typeString": "block"
                            }
                          },
                          "id": 1627,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "number",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "7644:12:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "7622:34:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 1624,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        10407,
                        10408
                      ],
                      "referencedDeclaration": 10407,
                      "src": "7614:7:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 1629,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7614:43:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1630,
                  "nodeType": "ExpressionStatement",
                  "src": "7614:43:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 1642,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "id": 1634,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 1632,
                                "name": "_to",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1610,
                                "src": "7745:3:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "!=",
                              "rightExpression": {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 1633,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "7752:1:9",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "src": "7745:8:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "id": 1635,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "7744:10:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&&",
                        "rightExpression": {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "id": 1640,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 1636,
                                "name": "_to",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1610,
                                "src": "7759:3:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "!=",
                              "rightExpression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 1638,
                                    "name": "this",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 10543,
                                    "src": "7774:4:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_MiniMeToken_$2462",
                                      "typeString": "contract MiniMeToken"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_contract$_MiniMeToken_$2462",
                                      "typeString": "contract MiniMeToken"
                                    }
                                  ],
                                  "id": 1637,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "7766:7:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_address_$",
                                    "typeString": "type(address)"
                                  },
                                  "typeName": "address"
                                },
                                "id": 1639,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "7766:13:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "src": "7759:20:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "id": 1641,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "7758:22:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "7744:36:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 1631,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        10407,
                        10408
                      ],
                      "referencedDeclaration": 10407,
                      "src": "7736:7:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 1643,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7736:45:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1644,
                  "nodeType": "ExpressionStatement",
                  "src": "7736:45:9"
                },
                {
                  "assignments": [
                    1645
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1645,
                      "name": "previousBalanceFrom",
                      "nodeType": "VariableDeclaration",
                      "scope": 1719,
                      "src": "7912:23:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": null,
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1651,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1647,
                        "name": "_from",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1608,
                        "src": "7950:5:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 1648,
                          "name": "block",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 10394,
                          "src": "7957:5:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_block",
                            "typeString": "block"
                          }
                        },
                        "id": 1649,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "number",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "7957:12:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 1646,
                      "name": "balanceOfAt",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1915,
                      "src": "7938:11:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_address_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (address,uint256) view returns (uint256)"
                      }
                    },
                    "id": 1650,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7938:32:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7912:58:9"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1654,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 1652,
                      "name": "previousBalanceFrom",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1645,
                      "src": "7984:19:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 1653,
                      "name": "_amount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1612,
                      "src": "8006:7:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "7984:29:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 1658,
                  "nodeType": "IfStatement",
                  "src": "7980:72:9",
                  "trueBody": {
                    "id": 1657,
                    "nodeType": "Block",
                    "src": "8015:37:9",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "66616c7365",
                          "id": 1655,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "8036:5:9",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "false"
                        },
                        "functionReturnParameters": 1616,
                        "id": 1656,
                        "nodeType": "Return",
                        "src": "8029:12:9"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1660,
                        "name": "controller",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1412,
                        "src": "8131:10:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 1659,
                      "name": "isContract",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2341,
                      "src": "8120:10:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                        "typeString": "function (address) view returns (bool)"
                      }
                    },
                    "id": 1661,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8120:22:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 1676,
                  "nodeType": "IfStatement",
                  "src": "8116:198:9",
                  "trueBody": {
                    "id": 1675,
                    "nodeType": "Block",
                    "src": "8144:170:9",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "id": 1672,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 1667,
                                    "name": "_from",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1608,
                                    "src": "8274:5:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 1668,
                                    "name": "_to",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1610,
                                    "src": "8281:3:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 1669,
                                    "name": "_amount",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1612,
                                    "src": "8286:7:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "id": 1664,
                                        "name": "controller",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1412,
                                        "src": "8251:10:9",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      ],
                                      "id": 1663,
                                      "name": "ITokenController",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1396,
                                      "src": "8234:16:9",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_contract$_ITokenController_$1396_$",
                                        "typeString": "type(contract ITokenController)"
                                      }
                                    },
                                    "id": 1665,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "8234:28:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_ITokenController_$1396",
                                      "typeString": "contract ITokenController"
                                    }
                                  },
                                  "id": 1666,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "onTransfer",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 1384,
                                  "src": "8234:39:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$",
                                    "typeString": "function (address,address,uint256) external returns (bool)"
                                  }
                                },
                                "id": 1670,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "8234:60:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "argumentTypes": null,
                                "hexValue": "74727565",
                                "id": 1671,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "bool",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "8298:4:9",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                "value": "true"
                              },
                              "src": "8234:68:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 1662,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              10407,
                              10408
                            ],
                            "referencedDeclaration": 10407,
                            "src": "8226:7:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                              "typeString": "function (bool) pure"
                            }
                          },
                          "id": 1673,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8226:77:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1674,
                        "nodeType": "ExpressionStatement",
                        "src": "8226:77:9"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 1678,
                          "name": "balances",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1473,
                          "src": "8448:8:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_struct$_Checkpoint_$1462_storage_$dyn_storage_$",
                            "typeString": "mapping(address => struct MiniMeToken.Checkpoint storage ref[] storage ref)"
                          }
                        },
                        "id": 1680,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 1679,
                          "name": "_from",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1608,
                          "src": "8457:5:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "8448:15:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_Checkpoint_$1462_storage_$dyn_storage",
                          "typeString": "struct MiniMeToken.Checkpoint storage ref[] storage ref"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 1683,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 1681,
                          "name": "previousBalanceFrom",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1645,
                          "src": "8465:19:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "-",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 1682,
                          "name": "_amount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1612,
                          "src": "8487:7:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "8465:29:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_array$_t_struct$_Checkpoint_$1462_storage_$dyn_storage",
                          "typeString": "struct MiniMeToken.Checkpoint storage ref[] storage ref"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 1677,
                      "name": "updateValueAtNow",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2319,
                      "src": "8431:16:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_array$_t_struct$_Checkpoint_$1462_storage_$dyn_storage_ptr_$_t_uint256_$returns$__$",
                        "typeString": "function (struct MiniMeToken.Checkpoint storage ref[] storage pointer,uint256)"
                      }
                    },
                    "id": 1684,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8431:64:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1685,
                  "nodeType": "ExpressionStatement",
                  "src": "8431:64:9"
                },
                {
                  "assignments": [
                    1686
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1686,
                      "name": "previousBalanceTo",
                      "nodeType": "VariableDeclaration",
                      "scope": 1719,
                      "src": "8614:21:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": null,
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1692,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1688,
                        "name": "_to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1610,
                        "src": "8650:3:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 1689,
                          "name": "block",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 10394,
                          "src": "8655:5:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_block",
                            "typeString": "block"
                          }
                        },
                        "id": 1690,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "number",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "8655:12:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 1687,
                      "name": "balanceOfAt",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1915,
                      "src": "8638:11:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_address_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (address,uint256) view returns (uint256)"
                      }
                    },
                    "id": 1691,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8638:30:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "8614:54:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 1698,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 1696,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 1694,
                            "name": "previousBalanceTo",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1686,
                            "src": "8686:17:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "+",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 1695,
                            "name": "_amount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1612,
                            "src": "8706:7:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "8686:27:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 1697,
                          "name": "previousBalanceTo",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1686,
                          "src": "8717:17:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "8686:48:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 1693,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        10407,
                        10408
                      ],
                      "referencedDeclaration": 10407,
                      "src": "8678:7:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 1699,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8678:57:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1700,
                  "nodeType": "ExpressionStatement",
                  "src": "8678:57:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 1702,
                          "name": "balances",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1473,
                          "src": "8784:8:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_struct$_Checkpoint_$1462_storage_$dyn_storage_$",
                            "typeString": "mapping(address => struct MiniMeToken.Checkpoint storage ref[] storage ref)"
                          }
                        },
                        "id": 1704,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 1703,
                          "name": "_to",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1610,
                          "src": "8793:3:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "8784:13:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_Checkpoint_$1462_storage_$dyn_storage",
                          "typeString": "struct MiniMeToken.Checkpoint storage ref[] storage ref"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 1707,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 1705,
                          "name": "previousBalanceTo",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1686,
                          "src": "8799:17:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "+",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 1706,
                          "name": "_amount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1612,
                          "src": "8819:7:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "8799:27:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_array$_t_struct$_Checkpoint_$1462_storage_$dyn_storage",
                          "typeString": "struct MiniMeToken.Checkpoint storage ref[] storage ref"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 1701,
                      "name": "updateValueAtNow",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2319,
                      "src": "8767:16:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_array$_t_struct$_Checkpoint_$1462_storage_$dyn_storage_ptr_$_t_uint256_$returns$__$",
                        "typeString": "function (struct MiniMeToken.Checkpoint storage ref[] storage pointer,uint256)"
                      }
                    },
                    "id": 1708,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8767:60:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1709,
                  "nodeType": "ExpressionStatement",
                  "src": "8767:60:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1711,
                        "name": "_from",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1608,
                        "src": "8918:5:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1712,
                        "name": "_to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1610,
                        "src": "8925:3:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1713,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1612,
                        "src": "8930:7:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 1710,
                      "name": "Transfer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2447,
                      "src": "8909:8:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 1714,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8909:29:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1715,
                  "nodeType": "ExpressionStatement",
                  "src": "8909:29:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 1716,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "8955:4:9",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 1616,
                  "id": 1717,
                  "nodeType": "Return",
                  "src": "8948:11:9"
                }
              ]
            },
            "documentation": "@dev This is the actual transfer function in the token contract, it can\n  only be called by other functions in this contract.\n @param _from The address holding the tokens being transferred\n @param _to The address of the recipient\n @param _amount The amount of tokens to be transferred\n @return True if the transfer was successful",
            "id": 1719,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "doTransfer",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1613,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1608,
                  "name": "_from",
                  "nodeType": "VariableDeclaration",
                  "scope": 1719,
                  "src": "7476:13:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1607,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7476:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1610,
                  "name": "_to",
                  "nodeType": "VariableDeclaration",
                  "scope": 1719,
                  "src": "7491:11:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1609,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7491:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1612,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 1719,
                  "src": "7504:12:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1611,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "7504:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7475:42:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 1616,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1615,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1719,
                  "src": "7535:4:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 1614,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "7535:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7534:6:9"
            },
            "scope": 2462,
            "src": "7456:1510:9",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1732,
              "nodeType": "Block",
              "src": "9178:57:9",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1727,
                        "name": "_owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1721,
                        "src": "9207:6:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 1728,
                          "name": "block",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 10394,
                          "src": "9215:5:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_block",
                            "typeString": "block"
                          }
                        },
                        "id": 1729,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "number",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "9215:12:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 1726,
                      "name": "balanceOfAt",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1915,
                      "src": "9195:11:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_address_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (address,uint256) view returns (uint256)"
                      }
                    },
                    "id": 1730,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9195:33:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 1725,
                  "id": 1731,
                  "nodeType": "Return",
                  "src": "9188:40:9"
                }
              ]
            },
            "documentation": "@param _owner The address that's balance is being requested\n @return The balance of `_owner` at the current block",
            "id": 1733,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "balanceOf",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1722,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1721,
                  "name": "_owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 1733,
                  "src": "9120:14:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1720,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "9120:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9119:16:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 1725,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1724,
                  "name": "balance",
                  "nodeType": "VariableDeclaration",
                  "scope": 1733,
                  "src": "9161:15:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1723,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9161:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9160:17:9"
            },
            "scope": 2462,
            "src": "9101:134:9",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1800,
              "nodeType": "Block",
              "src": "9716:824:9",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1743,
                        "name": "transfersEnabled",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1484,
                        "src": "9734:16:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 1742,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        10407,
                        10408
                      ],
                      "referencedDeclaration": 10407,
                      "src": "9726:7:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 1744,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9726:25:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1745,
                  "nodeType": "ExpressionStatement",
                  "src": "9726:25:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 1760,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 1749,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 1747,
                                "name": "_amount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1737,
                                "src": "10074:7:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 1748,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "10085:1:9",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "src": "10074:12:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "id": 1750,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "10073:14:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "||",
                        "rightExpression": {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 1758,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "id": 1751,
                                    "name": "allowed",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1479,
                                    "src": "10092:7:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                      "typeString": "mapping(address => mapping(address => uint256))"
                                    }
                                  },
                                  "id": 1754,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 1752,
                                      "name": "msg",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 10404,
                                      "src": "10100:3:9",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_magic_message",
                                        "typeString": "msg"
                                      }
                                    },
                                    "id": 1753,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "sender",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": null,
                                    "src": "10100:10:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "10092:19:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                    "typeString": "mapping(address => uint256)"
                                  }
                                },
                                "id": 1756,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "id": 1755,
                                  "name": "_spender",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1735,
                                  "src": "10112:8:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "10092:29:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 1757,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "10125:1:9",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "src": "10092:34:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "id": 1759,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "10091:36:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "10073:54:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 1746,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        10407,
                        10408
                      ],
                      "referencedDeclaration": 10407,
                      "src": "10065:7:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 1761,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10065:63:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1762,
                  "nodeType": "ExpressionStatement",
                  "src": "10065:63:9"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1764,
                        "name": "controller",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1412,
                        "src": "10222:10:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 1763,
                      "name": "isContract",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2341,
                      "src": "10211:10:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                        "typeString": "function (address) view returns (bool)"
                      }
                    },
                    "id": 1765,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10211:22:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 1781,
                  "nodeType": "IfStatement",
                  "src": "10207:207:9",
                  "trueBody": {
                    "id": 1780,
                    "nodeType": "Block",
                    "src": "10235:179:9",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "id": 1777,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 1771,
                                      "name": "msg",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 10404,
                                      "src": "10364:3:9",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_magic_message",
                                        "typeString": "msg"
                                      }
                                    },
                                    "id": 1772,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "sender",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": null,
                                    "src": "10364:10:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 1773,
                                    "name": "_spender",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1735,
                                    "src": "10376:8:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 1774,
                                    "name": "_amount",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1737,
                                    "src": "10386:7:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "id": 1768,
                                        "name": "controller",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1412,
                                        "src": "10342:10:9",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      ],
                                      "id": 1767,
                                      "name": "ITokenController",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1396,
                                      "src": "10325:16:9",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_contract$_ITokenController_$1396_$",
                                        "typeString": "type(contract ITokenController)"
                                      }
                                    },
                                    "id": 1769,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "10325:28:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_ITokenController_$1396",
                                      "typeString": "contract ITokenController"
                                    }
                                  },
                                  "id": 1770,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "onApprove",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 1395,
                                  "src": "10325:38:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$",
                                    "typeString": "function (address,address,uint256) external returns (bool)"
                                  }
                                },
                                "id": 1775,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "10325:69:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "argumentTypes": null,
                                "hexValue": "74727565",
                                "id": 1776,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "bool",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "10398:4:9",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                "value": "true"
                              },
                              "src": "10325:77:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 1766,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              10407,
                              10408
                            ],
                            "referencedDeclaration": 10407,
                            "src": "10317:7:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                              "typeString": "function (bool) pure"
                            }
                          },
                          "id": 1778,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "10317:86:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1779,
                        "nodeType": "ExpressionStatement",
                        "src": "10317:86:9"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1789,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 1782,
                          "name": "allowed",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1479,
                          "src": "10424:7:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                            "typeString": "mapping(address => mapping(address => uint256))"
                          }
                        },
                        "id": 1786,
                        "indexExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 1783,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10404,
                            "src": "10432:3:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 1784,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "10432:10:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "10424:19:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 1787,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 1785,
                        "name": "_spender",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1735,
                        "src": "10444:8:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "10424:29:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 1788,
                      "name": "_amount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1737,
                      "src": "10456:7:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "10424:39:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 1790,
                  "nodeType": "ExpressionStatement",
                  "src": "10424:39:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 1792,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 10404,
                          "src": "10482:3:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 1793,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "10482:10:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1794,
                        "name": "_spender",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1735,
                        "src": "10494:8:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1795,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1737,
                        "src": "10504:7:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 1791,
                      "name": "Approval",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2461,
                      "src": "10473:8:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 1796,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10473:39:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1797,
                  "nodeType": "ExpressionStatement",
                  "src": "10473:39:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 1798,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "10529:4:9",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 1741,
                  "id": 1799,
                  "nodeType": "Return",
                  "src": "10522:11:9"
                }
              ]
            },
            "documentation": "@notice `msg.sender` approves `_spender` to spend `_amount` tokens on\n  its behalf. This is a modified version of the ERC20 approve function\n  to be a little bit safer\n @param _spender The address of the account able to transfer the tokens\n @param _amount The amount of tokens to be approved for transfer\n @return True if the approval was successful",
            "id": 1801,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "approve",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1738,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1735,
                  "name": "_spender",
                  "nodeType": "VariableDeclaration",
                  "scope": 1801,
                  "src": "9651:16:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1734,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "9651:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1737,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 1801,
                  "src": "9669:15:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1736,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9669:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9650:35:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 1741,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1740,
                  "name": "success",
                  "nodeType": "VariableDeclaration",
                  "scope": 1801,
                  "src": "9702:12:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 1739,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "9702:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9701:14:9"
            },
            "scope": 2462,
            "src": "9634:906:9",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1816,
              "nodeType": "Block",
              "src": "10956:49:9",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 1810,
                        "name": "allowed",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1479,
                        "src": "10973:7:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                          "typeString": "mapping(address => mapping(address => uint256))"
                        }
                      },
                      "id": 1812,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 1811,
                        "name": "_owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1803,
                        "src": "10981:6:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "10973:15:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                        "typeString": "mapping(address => uint256)"
                      }
                    },
                    "id": 1814,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 1813,
                      "name": "_spender",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1805,
                      "src": "10989:8:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "10973:25:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 1809,
                  "id": 1815,
                  "nodeType": "Return",
                  "src": "10966:32:9"
                }
              ]
            },
            "documentation": "@dev This function makes it easy to read the `allowed[]` map\n @param _owner The address of the account that owns the token\n @param _spender The address of the account able to transfer the tokens\n @return Amount of remaining tokens of _owner that _spender is allowed\n  to spend",
            "id": 1817,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "allowance",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1806,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1803,
                  "name": "_owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 1817,
                  "src": "10878:14:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1802,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "10878:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1805,
                  "name": "_spender",
                  "nodeType": "VariableDeclaration",
                  "scope": 1817,
                  "src": "10894:16:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1804,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "10894:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10877:34:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 1809,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1808,
                  "name": "remaining",
                  "nodeType": "VariableDeclaration",
                  "scope": 1817,
                  "src": "10937:17:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1807,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "10937:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10936:19:9"
            },
            "scope": 2462,
            "src": "10859:146:9",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1847,
              "nodeType": "Block",
              "src": "11644:206:9",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 1830,
                            "name": "_spender",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1819,
                            "src": "11670:8:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ApproveAndCallFallBack_$1446",
                              "typeString": "contract ApproveAndCallFallBack"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 1831,
                            "name": "_amount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1821,
                            "src": "11680:7:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_ApproveAndCallFallBack_$1446",
                              "typeString": "contract ApproveAndCallFallBack"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 1829,
                          "name": "approve",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1801,
                          "src": "11662:7:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                            "typeString": "function (address,uint256) returns (bool)"
                          }
                        },
                        "id": 1832,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "11662:26:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 1828,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        10407,
                        10408
                      ],
                      "referencedDeclaration": 10407,
                      "src": "11654:7:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 1833,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11654:35:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1834,
                  "nodeType": "ExpressionStatement",
                  "src": "11654:35:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 1838,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 10404,
                          "src": "11738:3:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 1839,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "11738:10:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1840,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1821,
                        "src": "11762:7:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1841,
                        "name": "this",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10543,
                        "src": "11783:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_MiniMeToken_$2462",
                          "typeString": "contract MiniMeToken"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1842,
                        "name": "_extraData",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1823,
                        "src": "11801:10:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_contract$_MiniMeToken_$2462",
                          "typeString": "contract MiniMeToken"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 1835,
                        "name": "_spender",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1819,
                        "src": "11700:8:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ApproveAndCallFallBack_$1446",
                          "typeString": "contract ApproveAndCallFallBack"
                        }
                      },
                      "id": 1837,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "receiveApproval",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1445,
                      "src": "11700:24:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$_t_address_$_t_bytes_memory_ptr_$returns$__$",
                        "typeString": "function (address,uint256,address,bytes memory) external"
                      }
                    },
                    "id": 1843,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11700:121:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1844,
                  "nodeType": "ExpressionStatement",
                  "src": "11700:121:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 1845,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "11839:4:9",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 1827,
                  "id": 1846,
                  "nodeType": "Return",
                  "src": "11832:11:9"
                }
              ]
            },
            "documentation": "@notice `msg.sender` approves `_spender` to send `_amount` tokens on\n  its behalf, and then a function is triggered in the contract that is\n  being approved, `_spender`. This allows users to use their tokens to\n  interact with contracts in one function call instead of two\n @param _spender The address of the contract able to transfer the tokens\n @param _amount The amount of tokens to be approved for transfer\n @return True if the function call was successful",
            "id": 1848,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "approveAndCall",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1824,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1819,
                  "name": "_spender",
                  "nodeType": "VariableDeclaration",
                  "scope": 1848,
                  "src": "11546:31:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ApproveAndCallFallBack_$1446",
                    "typeString": "contract ApproveAndCallFallBack"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 1818,
                    "name": "ApproveAndCallFallBack",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1446,
                    "src": "11546:22:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ApproveAndCallFallBack_$1446",
                      "typeString": "contract ApproveAndCallFallBack"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1821,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 1848,
                  "src": "11579:15:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1820,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "11579:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1823,
                  "name": "_extraData",
                  "nodeType": "VariableDeclaration",
                  "scope": 1848,
                  "src": "11596:16:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1822,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "11596:5:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11545:68:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 1827,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1826,
                  "name": "success",
                  "nodeType": "VariableDeclaration",
                  "scope": 1848,
                  "src": "11630:12:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 1825,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "11630:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11629:14:9"
            },
            "scope": 2462,
            "src": "11522:328:9",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1858,
              "nodeType": "Block",
              "src": "12028:51:9",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 1854,
                          "name": "block",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 10394,
                          "src": "12059:5:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_block",
                            "typeString": "block"
                          }
                        },
                        "id": 1855,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "number",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "12059:12:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 1853,
                      "name": "totalSupplyAt",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1962,
                      "src": "12045:13:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256) view returns (uint256)"
                      }
                    },
                    "id": 1856,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12045:27:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 1852,
                  "id": 1857,
                  "nodeType": "Return",
                  "src": "12038:34:9"
                }
              ]
            },
            "documentation": "@dev This function makes it easy to get the total number of tokens\n @return The total number of tokens",
            "id": 1859,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "totalSupply",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1849,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "11994:2:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 1852,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1851,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1859,
                  "src": "12022:4:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1850,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "12022:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12021:6:9"
            },
            "scope": 2462,
            "src": "11974:105:9",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1914,
              "nodeType": "Block",
              "src": "12520:831:9",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 1884,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 1873,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 1868,
                                "name": "balances",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1473,
                                "src": "12863:8:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_struct$_Checkpoint_$1462_storage_$dyn_storage_$",
                                  "typeString": "mapping(address => struct MiniMeToken.Checkpoint storage ref[] storage ref)"
                                }
                              },
                              "id": 1870,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 1869,
                                "name": "_owner",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1861,
                                "src": "12872:6:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "12863:16:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_struct$_Checkpoint_$1462_storage_$dyn_storage",
                                "typeString": "struct MiniMeToken.Checkpoint storage ref[] storage ref"
                              }
                            },
                            "id": 1871,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "12863:23:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 1872,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "12890:1:9",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "12863:28:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        }
                      ],
                      "id": 1874,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "12862:30:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "||",
                    "rightExpression": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 1882,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "id": 1875,
                                  "name": "balances",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1473,
                                  "src": "12897:8:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_struct$_Checkpoint_$1462_storage_$dyn_storage_$",
                                    "typeString": "mapping(address => struct MiniMeToken.Checkpoint storage ref[] storage ref)"
                                  }
                                },
                                "id": 1877,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "id": 1876,
                                  "name": "_owner",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1861,
                                  "src": "12906:6:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "12897:16:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_struct$_Checkpoint_$1462_storage_$dyn_storage",
                                  "typeString": "struct MiniMeToken.Checkpoint storage ref[] storage ref"
                                }
                              },
                              "id": 1879,
                              "indexExpression": {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 1878,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "12914:1:9",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "12897:19:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Checkpoint_$1462_storage",
                                "typeString": "struct MiniMeToken.Checkpoint storage ref"
                              }
                            },
                            "id": 1880,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "fromBlock",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1459,
                            "src": "12897:29:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint128",
                              "typeString": "uint128"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 1881,
                            "name": "_blockNumber",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1863,
                            "src": "12929:12:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "12897:44:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        }
                      ],
                      "id": 1883,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "12896:46:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "12862:80:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 1912,
                    "nodeType": "Block",
                    "src": "13271:74:9",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 1906,
                                "name": "balances",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1473,
                                "src": "13303:8:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_struct$_Checkpoint_$1462_storage_$dyn_storage_$",
                                  "typeString": "mapping(address => struct MiniMeToken.Checkpoint storage ref[] storage ref)"
                                }
                              },
                              "id": 1908,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 1907,
                                "name": "_owner",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1861,
                                "src": "13312:6:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "13303:16:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_struct$_Checkpoint_$1462_storage_$dyn_storage",
                                "typeString": "struct MiniMeToken.Checkpoint storage ref[] storage ref"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 1909,
                              "name": "_blockNumber",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1863,
                              "src": "13321:12:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_array$_t_struct$_Checkpoint_$1462_storage_$dyn_storage",
                                "typeString": "struct MiniMeToken.Checkpoint storage ref[] storage ref"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 1905,
                            "name": "getValueAt",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2248,
                            "src": "13292:10:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_array$_t_struct$_Checkpoint_$1462_storage_$dyn_storage_ptr_$_t_uint256_$returns$_t_uint256_$",
                              "typeString": "function (struct MiniMeToken.Checkpoint storage ref[] storage pointer,uint256) view returns (uint256)"
                            }
                          },
                          "id": 1910,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "13292:42:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 1867,
                        "id": 1911,
                        "nodeType": "Return",
                        "src": "13285:49:9"
                      }
                    ]
                  },
                  "id": 1913,
                  "nodeType": "IfStatement",
                  "src": "12858:487:9",
                  "trueBody": {
                    "id": 1904,
                    "nodeType": "Block",
                    "src": "12944:321:9",
                    "statements": [
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 1889,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 1886,
                                "name": "parentToken",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1464,
                                "src": "12970:11:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_MiniMeToken_$2462",
                                  "typeString": "contract MiniMeToken"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_MiniMeToken_$2462",
                                  "typeString": "contract MiniMeToken"
                                }
                              ],
                              "id": 1885,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "12962:7:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": "address"
                            },
                            "id": 1887,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "12962:20:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 1888,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "12986:1:9",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "12962:25:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "id": 1902,
                          "nodeType": "Block",
                          "src": "13106:74:9",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 1900,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "13164:1:9",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "functionReturnParameters": 1867,
                              "id": 1901,
                              "nodeType": "Return",
                              "src": "13157:8:9"
                            }
                          ]
                        },
                        "id": 1903,
                        "nodeType": "IfStatement",
                        "src": "12958:222:9",
                        "trueBody": {
                          "id": 1899,
                          "nodeType": "Block",
                          "src": "12989:111:9",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 1892,
                                    "name": "_owner",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1861,
                                    "src": "13038:6:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "id": 1894,
                                        "name": "_blockNumber",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1863,
                                        "src": "13050:12:9",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      {
                                        "argumentTypes": null,
                                        "id": 1895,
                                        "name": "parentSnapShotBlock",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1466,
                                        "src": "13064:19:9",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      ],
                                      "id": 1893,
                                      "name": "min",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2358,
                                      "src": "13046:3:9",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                                      }
                                    },
                                    "id": 1896,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "13046:38:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 1890,
                                    "name": "parentToken",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1464,
                                    "src": "13014:11:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_MiniMeToken_$2462",
                                      "typeString": "contract MiniMeToken"
                                    }
                                  },
                                  "id": 1891,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "balanceOfAt",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 1915,
                                  "src": "13014:23:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_external_view$_t_address_$_t_uint256_$returns$_t_uint256_$",
                                    "typeString": "function (address,uint256) view external returns (uint256)"
                                  }
                                },
                                "id": 1897,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "13014:71:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "functionReturnParameters": 1867,
                              "id": 1898,
                              "nodeType": "Return",
                              "src": "13007:78:9"
                            }
                          ]
                        }
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": "/////////////\n @dev Queries the balance of `_owner` at a specific `_blockNumber`\n @param _owner The address from which the balance will be retrieved\n @param _blockNumber The block number when the balance is queried\n @return The balance at `_blockNumber`",
            "id": 1915,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "balanceOfAt",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1864,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1861,
                  "name": "_owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 1915,
                  "src": "12454:14:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1860,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "12454:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1863,
                  "name": "_blockNumber",
                  "nodeType": "VariableDeclaration",
                  "scope": 1915,
                  "src": "12470:17:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1862,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "12470:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12453:35:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 1867,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1866,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1915,
                  "src": "12514:4:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1865,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "12514:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12513:6:9"
            },
            "scope": 2462,
            "src": "12433:918:9",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1961,
              "nodeType": "Block",
              "src": "13636:826:9",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 1934,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 1925,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 1922,
                              "name": "totalSupplyHistory",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1482,
                              "src": "14003:18:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_struct$_Checkpoint_$1462_storage_$dyn_storage",
                                "typeString": "struct MiniMeToken.Checkpoint storage ref[] storage ref"
                              }
                            },
                            "id": 1923,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "14003:25:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 1924,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "14032:1:9",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "14003:30:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        }
                      ],
                      "id": 1926,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "14002:32:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "||",
                    "rightExpression": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 1932,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 1927,
                                "name": "totalSupplyHistory",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1482,
                                "src": "14039:18:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_struct$_Checkpoint_$1462_storage_$dyn_storage",
                                  "typeString": "struct MiniMeToken.Checkpoint storage ref[] storage ref"
                                }
                              },
                              "id": 1929,
                              "indexExpression": {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 1928,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "14058:1:9",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "14039:21:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Checkpoint_$1462_storage",
                                "typeString": "struct MiniMeToken.Checkpoint storage ref"
                              }
                            },
                            "id": 1930,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "fromBlock",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1459,
                            "src": "14039:31:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint128",
                              "typeString": "uint128"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 1931,
                            "name": "_blockNumber",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1917,
                            "src": "14073:12:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "14039:46:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        }
                      ],
                      "id": 1933,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "14038:48:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "14002:84:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 1959,
                    "nodeType": "Block",
                    "src": "14380:76:9",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 1955,
                              "name": "totalSupplyHistory",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1482,
                              "src": "14412:18:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_struct$_Checkpoint_$1462_storage_$dyn_storage",
                                "typeString": "struct MiniMeToken.Checkpoint storage ref[] storage ref"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 1956,
                              "name": "_blockNumber",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1917,
                              "src": "14432:12:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_array$_t_struct$_Checkpoint_$1462_storage_$dyn_storage",
                                "typeString": "struct MiniMeToken.Checkpoint storage ref[] storage ref"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 1954,
                            "name": "getValueAt",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2248,
                            "src": "14401:10:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_array$_t_struct$_Checkpoint_$1462_storage_$dyn_storage_ptr_$_t_uint256_$returns$_t_uint256_$",
                              "typeString": "function (struct MiniMeToken.Checkpoint storage ref[] storage pointer,uint256) view returns (uint256)"
                            }
                          },
                          "id": 1957,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "14401:44:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 1921,
                        "id": 1958,
                        "nodeType": "Return",
                        "src": "14394:51:9"
                      }
                    ]
                  },
                  "id": 1960,
                  "nodeType": "IfStatement",
                  "src": "13998:458:9",
                  "trueBody": {
                    "id": 1953,
                    "nodeType": "Block",
                    "src": "14088:286:9",
                    "statements": [
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 1939,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 1936,
                                "name": "parentToken",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1464,
                                "src": "14114:11:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_MiniMeToken_$2462",
                                  "typeString": "contract MiniMeToken"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_MiniMeToken_$2462",
                                  "typeString": "contract MiniMeToken"
                                }
                              ],
                              "id": 1935,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "14106:7:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": "address"
                            },
                            "id": 1937,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "14106:20:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 1938,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "14130:1:9",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "14106:25:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "id": 1951,
                          "nodeType": "Block",
                          "src": "14244:41:9",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 1949,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "14269:1:9",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "functionReturnParameters": 1921,
                              "id": 1950,
                              "nodeType": "Return",
                              "src": "14262:8:9"
                            }
                          ]
                        },
                        "id": 1952,
                        "nodeType": "IfStatement",
                        "src": "14102:183:9",
                        "trueBody": {
                          "id": 1948,
                          "nodeType": "Block",
                          "src": "14133:105:9",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "id": 1943,
                                        "name": "_blockNumber",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1917,
                                        "src": "14188:12:9",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      {
                                        "argumentTypes": null,
                                        "id": 1944,
                                        "name": "parentSnapShotBlock",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1466,
                                        "src": "14202:19:9",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      ],
                                      "id": 1942,
                                      "name": "min",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2358,
                                      "src": "14184:3:9",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                                      }
                                    },
                                    "id": 1945,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "14184:38:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 1940,
                                    "name": "parentToken",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1464,
                                    "src": "14158:11:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_MiniMeToken_$2462",
                                      "typeString": "contract MiniMeToken"
                                    }
                                  },
                                  "id": 1941,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "totalSupplyAt",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 1962,
                                  "src": "14158:25:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_external_view$_t_uint256_$returns$_t_uint256_$",
                                    "typeString": "function (uint256) view external returns (uint256)"
                                  }
                                },
                                "id": 1946,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "14158:65:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "functionReturnParameters": 1921,
                              "id": 1947,
                              "nodeType": "Return",
                              "src": "14151:72:9"
                            }
                          ]
                        }
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": "@notice Total amount of tokens at a specific `_blockNumber`.\n @param _blockNumber The block number when the totalSupply is queried\n @return The total amount of tokens at `_blockNumber`",
            "id": 1962,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "totalSupplyAt",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1918,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1917,
                  "name": "_blockNumber",
                  "nodeType": "VariableDeclaration",
                  "scope": 1962,
                  "src": "13587:17:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1916,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "13587:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "13586:19:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 1921,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1920,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1962,
                  "src": "13630:4:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1919,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "13630:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "13629:6:9"
            },
            "scope": 2462,
            "src": "13564:898:9",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 2017,
              "nodeType": "Block",
              "src": "15424:530:9",
              "statements": [
                {
                  "assignments": [
                    1978
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1978,
                      "name": "snapshot",
                      "nodeType": "VariableDeclaration",
                      "scope": 2018,
                      "src": "15434:16:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1977,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "15434:7:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1988,
                  "initialValue": {
                    "argumentTypes": null,
                    "condition": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 1981,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 1979,
                        "name": "_snapshotBlock",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1970,
                        "src": "15453:14:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 1980,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "15471:1:9",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "src": "15453:19:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "falseExpression": {
                      "argumentTypes": null,
                      "id": 1986,
                      "name": "_snapshotBlock",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1970,
                      "src": "15494:14:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 1987,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "Conditional",
                    "src": "15453:55:9",
                    "trueExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 1985,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 1982,
                          "name": "block",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 10394,
                          "src": "15475:5:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_block",
                            "typeString": "block"
                          }
                        },
                        "id": 1983,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "number",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "15475:12:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "-",
                      "rightExpression": {
                        "argumentTypes": null,
                        "hexValue": "31",
                        "id": 1984,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "15490:1:9",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        },
                        "value": "1"
                      },
                      "src": "15475:16:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "15434:74:9"
                },
                {
                  "assignments": [
                    1990
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1990,
                      "name": "cloneToken",
                      "nodeType": "VariableDeclaration",
                      "scope": 2018,
                      "src": "15519:22:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_MiniMeToken_$2462",
                        "typeString": "contract MiniMeToken"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 1989,
                        "name": "MiniMeToken",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 2462,
                        "src": "15519:11:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_MiniMeToken_$2462",
                          "typeString": "contract MiniMeToken"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2000,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1993,
                        "name": "this",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10543,
                        "src": "15587:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_MiniMeToken_$2462",
                          "typeString": "contract MiniMeToken"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1994,
                        "name": "snapshot",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1978,
                        "src": "15605:8:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1995,
                        "name": "_cloneTokenName",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1964,
                        "src": "15627:15:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1996,
                        "name": "_cloneDecimalUnits",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1966,
                        "src": "15656:18:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1997,
                        "name": "_cloneTokenSymbol",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1968,
                        "src": "15688:17:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1998,
                        "name": "_transfersEnabled",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1972,
                        "src": "15719:17:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_MiniMeToken_$2462",
                          "typeString": "contract MiniMeToken"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        },
                        {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        },
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 1991,
                        "name": "tokenFactory",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1486,
                        "src": "15544:12:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_MiniMeTokenFactory_$2503",
                          "typeString": "contract MiniMeTokenFactory"
                        }
                      },
                      "id": 1992,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "createCloneToken",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2502,
                      "src": "15544:29:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_contract$_MiniMeToken_$2462_$_t_uint256_$_t_string_memory_ptr_$_t_uint8_$_t_string_memory_ptr_$_t_bool_$returns$_t_contract$_MiniMeToken_$2462_$",
                        "typeString": "function (contract MiniMeToken,uint256,string memory,uint8,string memory,bool) external returns (contract MiniMeToken)"
                      }
                    },
                    "id": 1999,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15544:202:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_MiniMeToken_$2462",
                      "typeString": "contract MiniMeToken"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "15519:227:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2004,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 10404,
                          "src": "15785:3:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 2005,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "15785:10:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 2001,
                        "name": "cloneToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1990,
                        "src": "15757:10:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_MiniMeToken_$2462",
                          "typeString": "contract MiniMeToken"
                        }
                      },
                      "id": 2003,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "changeController",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1433,
                      "src": "15757:27:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address) external"
                      }
                    },
                    "id": 2006,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15757:39:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2007,
                  "nodeType": "ExpressionStatement",
                  "src": "15757:39:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 2010,
                            "name": "cloneToken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1990,
                            "src": "15898:10:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_MiniMeToken_$2462",
                              "typeString": "contract MiniMeToken"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_MiniMeToken_$2462",
                              "typeString": "contract MiniMeToken"
                            }
                          ],
                          "id": 2009,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "15890:7:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 2011,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "15890:19:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2012,
                        "name": "snapshot",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1978,
                        "src": "15911:8:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 2008,
                      "name": "NewCloneToken",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2453,
                      "src": "15876:13:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256)"
                      }
                    },
                    "id": 2013,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15876:44:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2014,
                  "nodeType": "ExpressionStatement",
                  "src": "15876:44:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2015,
                    "name": "cloneToken",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1990,
                    "src": "15937:10:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_MiniMeToken_$2462",
                      "typeString": "contract MiniMeToken"
                    }
                  },
                  "functionReturnParameters": 1976,
                  "id": 2016,
                  "nodeType": "Return",
                  "src": "15930:17:9"
                }
              ]
            },
            "documentation": "/////////////\n @notice Creates a new clone token with the initial distribution being\n  this token at `_snapshotBlock`\n @param _cloneTokenName Name of the clone token\n @param _cloneDecimalUnits Number of decimals of the smallest unit\n @param _cloneTokenSymbol Symbol of the clone token\n @param _snapshotBlock Block when the distribution of the parent token is\n  copied to set the initial distribution of the new clone token;\n  if the block is zero than the actual block, the current block is used\n @param _transfersEnabled True if transfers are allowed in the clone\n @return The address of the new MiniMeToken Contract",
            "id": 2018,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "createCloneToken",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1973,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1964,
                  "name": "_cloneTokenName",
                  "nodeType": "VariableDeclaration",
                  "scope": 2018,
                  "src": "15234:22:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 1963,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "15234:6:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1966,
                  "name": "_cloneDecimalUnits",
                  "nodeType": "VariableDeclaration",
                  "scope": 2018,
                  "src": "15266:24:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 1965,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "15266:5:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1968,
                  "name": "_cloneTokenSymbol",
                  "nodeType": "VariableDeclaration",
                  "scope": 2018,
                  "src": "15300:24:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 1967,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "15300:6:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1970,
                  "name": "_snapshotBlock",
                  "nodeType": "VariableDeclaration",
                  "scope": 2018,
                  "src": "15334:19:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1969,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "15334:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1972,
                  "name": "_transfersEnabled",
                  "nodeType": "VariableDeclaration",
                  "scope": 2018,
                  "src": "15363:22:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 1971,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "15363:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "15224:167:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 1976,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1975,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2018,
                  "src": "15407:11:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_MiniMeToken_$2462",
                    "typeString": "contract MiniMeToken"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 1974,
                    "name": "MiniMeToken",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 2462,
                    "src": "15407:11:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_MiniMeToken_$2462",
                      "typeString": "contract MiniMeToken"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "15406:13:9"
            },
            "scope": 2462,
            "src": "15199:755:9",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 2080,
              "nodeType": "Block",
              "src": "16376:480:9",
              "statements": [
                {
                  "assignments": [
                    2030
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2030,
                      "name": "curTotalSupply",
                      "nodeType": "VariableDeclaration",
                      "scope": 2081,
                      "src": "16386:19:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2029,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "16386:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2033,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 2031,
                      "name": "totalSupply",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1859,
                      "src": "16408:11:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                        "typeString": "function () view returns (uint256)"
                      }
                    },
                    "id": 2032,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "16408:13:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "16386:35:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 2039,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 2037,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 2035,
                            "name": "curTotalSupply",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2030,
                            "src": "16439:14:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "+",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 2036,
                            "name": "_amount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2022,
                            "src": "16456:7:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "16439:24:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 2038,
                          "name": "curTotalSupply",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2030,
                          "src": "16467:14:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "16439:42:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 2034,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        10407,
                        10408
                      ],
                      "referencedDeclaration": 10407,
                      "src": "16431:7:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 2040,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "16431:51:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2041,
                  "nodeType": "ExpressionStatement",
                  "src": "16431:51:9"
                },
                {
                  "assignments": [
                    2043
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2043,
                      "name": "previousBalanceTo",
                      "nodeType": "VariableDeclaration",
                      "scope": 2081,
                      "src": "16514:22:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2042,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "16514:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2047,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2045,
                        "name": "_owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2020,
                        "src": "16549:6:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 2044,
                      "name": "balanceOf",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1733,
                      "src": "16539:9:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$",
                        "typeString": "function (address) view returns (uint256)"
                      }
                    },
                    "id": 2046,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "16539:17:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "16514:42:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 2053,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 2051,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 2049,
                            "name": "previousBalanceTo",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2043,
                            "src": "16574:17:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "+",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 2050,
                            "name": "_amount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2022,
                            "src": "16594:7:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "16574:27:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 2052,
                          "name": "previousBalanceTo",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2043,
                          "src": "16605:17:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "16574:48:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 2048,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        10407,
                        10408
                      ],
                      "referencedDeclaration": 10407,
                      "src": "16566:7:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 2054,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "16566:57:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2055,
                  "nodeType": "ExpressionStatement",
                  "src": "16566:57:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2057,
                        "name": "totalSupplyHistory",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1482,
                        "src": "16672:18:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_Checkpoint_$1462_storage_$dyn_storage",
                          "typeString": "struct MiniMeToken.Checkpoint storage ref[] storage ref"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 2060,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 2058,
                          "name": "curTotalSupply",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2030,
                          "src": "16692:14:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "+",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 2059,
                          "name": "_amount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2022,
                          "src": "16709:7:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "16692:24:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_array$_t_struct$_Checkpoint_$1462_storage_$dyn_storage",
                          "typeString": "struct MiniMeToken.Checkpoint storage ref[] storage ref"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 2056,
                      "name": "updateValueAtNow",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2319,
                      "src": "16655:16:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_array$_t_struct$_Checkpoint_$1462_storage_$dyn_storage_ptr_$_t_uint256_$returns$__$",
                        "typeString": "function (struct MiniMeToken.Checkpoint storage ref[] storage pointer,uint256)"
                      }
                    },
                    "id": 2061,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "16655:62:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2062,
                  "nodeType": "ExpressionStatement",
                  "src": "16655:62:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 2064,
                          "name": "balances",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1473,
                          "src": "16744:8:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_struct$_Checkpoint_$1462_storage_$dyn_storage_$",
                            "typeString": "mapping(address => struct MiniMeToken.Checkpoint storage ref[] storage ref)"
                          }
                        },
                        "id": 2066,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 2065,
                          "name": "_owner",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2020,
                          "src": "16753:6:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "16744:16:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_Checkpoint_$1462_storage_$dyn_storage",
                          "typeString": "struct MiniMeToken.Checkpoint storage ref[] storage ref"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 2069,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 2067,
                          "name": "previousBalanceTo",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2043,
                          "src": "16762:17:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "+",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 2068,
                          "name": "_amount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2022,
                          "src": "16782:7:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "16762:27:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_array$_t_struct$_Checkpoint_$1462_storage_$dyn_storage",
                          "typeString": "struct MiniMeToken.Checkpoint storage ref[] storage ref"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 2063,
                      "name": "updateValueAtNow",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2319,
                      "src": "16727:16:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_array$_t_struct$_Checkpoint_$1462_storage_$dyn_storage_ptr_$_t_uint256_$returns$__$",
                        "typeString": "function (struct MiniMeToken.Checkpoint storage ref[] storage pointer,uint256)"
                      }
                    },
                    "id": 2070,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "16727:63:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2071,
                  "nodeType": "ExpressionStatement",
                  "src": "16727:63:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 2073,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "16809:1:9",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      {
                        "argumentTypes": null,
                        "id": 2074,
                        "name": "_owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2020,
                        "src": "16812:6:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2075,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2022,
                        "src": "16820:7:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 2072,
                      "name": "Transfer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2447,
                      "src": "16800:8:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 2076,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "16800:28:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2077,
                  "nodeType": "ExpressionStatement",
                  "src": "16800:28:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 2078,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "16845:4:9",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 2028,
                  "id": 2079,
                  "nodeType": "Return",
                  "src": "16838:11:9"
                }
              ]
            },
            "documentation": "/////////////\n @notice Generates `_amount` tokens that are assigned to `_owner`\n @param _owner The address that will be assigned the new tokens\n @param _amount The quantity of tokens generated\n @return True if the tokens are generated correctly",
            "id": 2081,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": null,
                "id": 2025,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 2024,
                  "name": "onlyController",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1410,
                  "src": "16339:14:9",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "16339:14:9"
              }
            ],
            "name": "generateTokens",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2023,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2020,
                  "name": "_owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 2081,
                  "src": "16309:14:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2019,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "16309:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2022,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 2081,
                  "src": "16325:12:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2021,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "16325:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "16308:30:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 2028,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2027,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2081,
                  "src": "16370:4:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 2026,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "16370:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "16369:6:9"
            },
            "scope": 2462,
            "src": "16285:571:9",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 2139,
              "nodeType": "Block",
              "src": "17176:405:9",
              "statements": [
                {
                  "assignments": [
                    2093
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2093,
                      "name": "curTotalSupply",
                      "nodeType": "VariableDeclaration",
                      "scope": 2140,
                      "src": "17186:19:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2092,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "17186:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2096,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 2094,
                      "name": "totalSupply",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1859,
                      "src": "17208:11:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                        "typeString": "function () view returns (uint256)"
                      }
                    },
                    "id": 2095,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17208:13:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "17186:35:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 2100,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 2098,
                          "name": "curTotalSupply",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2093,
                          "src": "17239:14:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 2099,
                          "name": "_amount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2085,
                          "src": "17257:7:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "17239:25:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 2097,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        10407,
                        10408
                      ],
                      "referencedDeclaration": 10407,
                      "src": "17231:7:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 2101,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17231:34:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2102,
                  "nodeType": "ExpressionStatement",
                  "src": "17231:34:9"
                },
                {
                  "assignments": [
                    2104
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2104,
                      "name": "previousBalanceFrom",
                      "nodeType": "VariableDeclaration",
                      "scope": 2140,
                      "src": "17275:24:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2103,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "17275:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2108,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2106,
                        "name": "_owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2083,
                        "src": "17312:6:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 2105,
                      "name": "balanceOf",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1733,
                      "src": "17302:9:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$",
                        "typeString": "function (address) view returns (uint256)"
                      }
                    },
                    "id": 2107,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17302:17:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "17275:44:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 2112,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 2110,
                          "name": "previousBalanceFrom",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2104,
                          "src": "17337:19:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 2111,
                          "name": "_amount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2085,
                          "src": "17360:7:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "17337:30:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 2109,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        10407,
                        10408
                      ],
                      "referencedDeclaration": 10407,
                      "src": "17329:7:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 2113,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17329:39:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2114,
                  "nodeType": "ExpressionStatement",
                  "src": "17329:39:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2116,
                        "name": "totalSupplyHistory",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1482,
                        "src": "17395:18:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_Checkpoint_$1462_storage_$dyn_storage",
                          "typeString": "struct MiniMeToken.Checkpoint storage ref[] storage ref"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 2119,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 2117,
                          "name": "curTotalSupply",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2093,
                          "src": "17415:14:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "-",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 2118,
                          "name": "_amount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2085,
                          "src": "17432:7:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "17415:24:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_array$_t_struct$_Checkpoint_$1462_storage_$dyn_storage",
                          "typeString": "struct MiniMeToken.Checkpoint storage ref[] storage ref"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 2115,
                      "name": "updateValueAtNow",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2319,
                      "src": "17378:16:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_array$_t_struct$_Checkpoint_$1462_storage_$dyn_storage_ptr_$_t_uint256_$returns$__$",
                        "typeString": "function (struct MiniMeToken.Checkpoint storage ref[] storage pointer,uint256)"
                      }
                    },
                    "id": 2120,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17378:62:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2121,
                  "nodeType": "ExpressionStatement",
                  "src": "17378:62:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 2123,
                          "name": "balances",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1473,
                          "src": "17467:8:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_struct$_Checkpoint_$1462_storage_$dyn_storage_$",
                            "typeString": "mapping(address => struct MiniMeToken.Checkpoint storage ref[] storage ref)"
                          }
                        },
                        "id": 2125,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 2124,
                          "name": "_owner",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2083,
                          "src": "17476:6:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "17467:16:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_Checkpoint_$1462_storage_$dyn_storage",
                          "typeString": "struct MiniMeToken.Checkpoint storage ref[] storage ref"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 2128,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 2126,
                          "name": "previousBalanceFrom",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2104,
                          "src": "17485:19:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "-",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 2127,
                          "name": "_amount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2085,
                          "src": "17507:7:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "17485:29:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_array$_t_struct$_Checkpoint_$1462_storage_$dyn_storage",
                          "typeString": "struct MiniMeToken.Checkpoint storage ref[] storage ref"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 2122,
                      "name": "updateValueAtNow",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2319,
                      "src": "17450:16:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_array$_t_struct$_Checkpoint_$1462_storage_$dyn_storage_ptr_$_t_uint256_$returns$__$",
                        "typeString": "function (struct MiniMeToken.Checkpoint storage ref[] storage pointer,uint256)"
                      }
                    },
                    "id": 2129,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17450:65:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2130,
                  "nodeType": "ExpressionStatement",
                  "src": "17450:65:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2132,
                        "name": "_owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2083,
                        "src": "17534:6:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 2133,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "17542:1:9",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      {
                        "argumentTypes": null,
                        "id": 2134,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2085,
                        "src": "17545:7:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 2131,
                      "name": "Transfer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2447,
                      "src": "17525:8:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 2135,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17525:28:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2136,
                  "nodeType": "ExpressionStatement",
                  "src": "17525:28:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 2137,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "17570:4:9",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 2091,
                  "id": 2138,
                  "nodeType": "Return",
                  "src": "17563:11:9"
                }
              ]
            },
            "documentation": "@notice Burns `_amount` tokens from `_owner`\n @param _owner The address that will lose the tokens\n @param _amount The quantity of tokens to burn\n @return True if the tokens are burned correctly",
            "id": 2140,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": null,
                "id": 2088,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 2087,
                  "name": "onlyController",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1410,
                  "src": "17139:14:9",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "17139:14:9"
              }
            ],
            "name": "destroyTokens",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2086,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2083,
                  "name": "_owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 2140,
                  "src": "17109:14:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2082,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "17109:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2085,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 2140,
                  "src": "17125:12:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2084,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "17125:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "17108:30:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 2091,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2090,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2140,
                  "src": "17170:4:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 2089,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "17170:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "17169:6:9"
            },
            "scope": 2462,
            "src": "17086:495:9",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 2151,
              "nodeType": "Block",
              "src": "17875:53:9",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2149,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 2147,
                      "name": "transfersEnabled",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1484,
                      "src": "17885:16:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 2148,
                      "name": "_transfersEnabled",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2142,
                      "src": "17904:17:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "17885:36:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 2150,
                  "nodeType": "ExpressionStatement",
                  "src": "17885:36:9"
                }
              ]
            },
            "documentation": "/////////////\n @notice Enables token holders to transfer their tokens freely if true\n @param _transfersEnabled True if transfers are allowed in the clone",
            "id": 2152,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": null,
                "id": 2145,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 2144,
                  "name": "onlyController",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1410,
                  "src": "17853:14:9",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "17853:14:9"
              }
            ],
            "name": "enableTransfers",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2143,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2142,
                  "name": "_transfersEnabled",
                  "nodeType": "VariableDeclaration",
                  "scope": 2152,
                  "src": "17829:22:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 2141,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "17829:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "17828:24:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 2146,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "17875:0:9"
            },
            "scope": 2462,
            "src": "17804:124:9",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 2247,
              "nodeType": "Block",
              "src": "18402:685:9",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2165,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2162,
                        "name": "checkpoints",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2155,
                        "src": "18416:11:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_Checkpoint_$1462_storage_$dyn_storage_ptr",
                          "typeString": "struct MiniMeToken.Checkpoint storage ref[] storage pointer"
                        }
                      },
                      "id": 2163,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "18416:18:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 2164,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "18438:1:9",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "18416:23:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 2168,
                  "nodeType": "IfStatement",
                  "src": "18412:49:9",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 2166,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "18460:1:9",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "functionReturnParameters": 2161,
                    "id": 2167,
                    "nodeType": "Return",
                    "src": "18453:8:9"
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2177,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 2169,
                      "name": "_block",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2157,
                      "src": "18517:6:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 2170,
                          "name": "checkpoints",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2155,
                          "src": "18527:11:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_struct$_Checkpoint_$1462_storage_$dyn_storage_ptr",
                            "typeString": "struct MiniMeToken.Checkpoint storage ref[] storage pointer"
                          }
                        },
                        "id": 2175,
                        "indexExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 2174,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 2171,
                              "name": "checkpoints",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2155,
                              "src": "18539:11:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_struct$_Checkpoint_$1462_storage_$dyn_storage_ptr",
                                "typeString": "struct MiniMeToken.Checkpoint storage ref[] storage pointer"
                              }
                            },
                            "id": 2172,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "18539:18:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "-",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "31",
                            "id": 2173,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "18558:1:9",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            },
                            "value": "1"
                          },
                          "src": "18539:20:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "18527:33:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Checkpoint_$1462_storage",
                          "typeString": "struct MiniMeToken.Checkpoint storage ref"
                        }
                      },
                      "id": 2176,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "fromBlock",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1459,
                      "src": "18527:43:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint128",
                        "typeString": "uint128"
                      }
                    },
                    "src": "18517:53:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 2186,
                  "nodeType": "IfStatement",
                  "src": "18513:117:9",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 2178,
                          "name": "checkpoints",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2155,
                          "src": "18591:11:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_struct$_Checkpoint_$1462_storage_$dyn_storage_ptr",
                            "typeString": "struct MiniMeToken.Checkpoint storage ref[] storage pointer"
                          }
                        },
                        "id": 2183,
                        "indexExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 2182,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 2179,
                              "name": "checkpoints",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2155,
                              "src": "18603:11:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_struct$_Checkpoint_$1462_storage_$dyn_storage_ptr",
                                "typeString": "struct MiniMeToken.Checkpoint storage ref[] storage pointer"
                              }
                            },
                            "id": 2180,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "18603:18:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "-",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "31",
                            "id": 2181,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "18622:1:9",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            },
                            "value": "1"
                          },
                          "src": "18603:20:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "18591:33:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Checkpoint_$1462_storage",
                          "typeString": "struct MiniMeToken.Checkpoint storage ref"
                        }
                      },
                      "id": 2184,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "value",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1461,
                      "src": "18591:39:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint128",
                        "typeString": "uint128"
                      }
                    },
                    "functionReturnParameters": 2161,
                    "id": 2185,
                    "nodeType": "Return",
                    "src": "18584:46:9"
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2192,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 2187,
                      "name": "_block",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2157,
                      "src": "18644:6:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 2188,
                          "name": "checkpoints",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2155,
                          "src": "18653:11:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_struct$_Checkpoint_$1462_storage_$dyn_storage_ptr",
                            "typeString": "struct MiniMeToken.Checkpoint storage ref[] storage pointer"
                          }
                        },
                        "id": 2190,
                        "indexExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 2189,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "18665:1:9",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "18653:14:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Checkpoint_$1462_storage",
                          "typeString": "struct MiniMeToken.Checkpoint storage ref"
                        }
                      },
                      "id": 2191,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "fromBlock",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1459,
                      "src": "18653:24:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint128",
                        "typeString": "uint128"
                      }
                    },
                    "src": "18644:33:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 2195,
                  "nodeType": "IfStatement",
                  "src": "18640:59:9",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 2193,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "18698:1:9",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "functionReturnParameters": 2161,
                    "id": 2194,
                    "nodeType": "Return",
                    "src": "18691:8:9"
                  }
                },
                {
                  "assignments": [
                    2197
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2197,
                      "name": "min",
                      "nodeType": "VariableDeclaration",
                      "scope": 2248,
                      "src": "18761:8:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2196,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "18761:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2199,
                  "initialValue": {
                    "argumentTypes": null,
                    "hexValue": "30",
                    "id": 2198,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "18772:1:9",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_0_by_1",
                      "typeString": "int_const 0"
                    },
                    "value": "0"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "18761:12:9"
                },
                {
                  "assignments": [
                    2201
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2201,
                      "name": "max",
                      "nodeType": "VariableDeclaration",
                      "scope": 2248,
                      "src": "18783:8:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2200,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "18783:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2206,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2205,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2202,
                        "name": "checkpoints",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2155,
                        "src": "18794:11:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_Checkpoint_$1462_storage_$dyn_storage_ptr",
                          "typeString": "struct MiniMeToken.Checkpoint storage ref[] storage pointer"
                        }
                      },
                      "id": 2203,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "18794:18:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "-",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "31",
                      "id": 2204,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "18813:1:9",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "src": "18794:20:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "18783:31:9"
                },
                {
                  "body": {
                    "id": 2240,
                    "nodeType": "Block",
                    "src": "18842:200:9",
                    "statements": [
                      {
                        "assignments": [
                          2211
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 2211,
                            "name": "mid",
                            "nodeType": "VariableDeclaration",
                            "scope": 2248,
                            "src": "18856:8:9",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 2210,
                              "name": "uint",
                              "nodeType": "ElementaryTypeName",
                              "src": "18856:4:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 2220,
                        "initialValue": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 2219,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "components": [
                              {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 2216,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 2214,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "id": 2212,
                                    "name": "max",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2201,
                                    "src": "18868:3:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "+",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "id": 2213,
                                    "name": "min",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2197,
                                    "src": "18874:3:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "18868:9:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "+",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "hexValue": "31",
                                  "id": 2215,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "18880:1:9",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_1_by_1",
                                    "typeString": "int_const 1"
                                  },
                                  "value": "1"
                                },
                                "src": "18868:13:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "id": 2217,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "TupleExpression",
                            "src": "18867:15:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "/",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "32",
                            "id": 2218,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "18885:1:9",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_2_by_1",
                              "typeString": "int_const 2"
                            },
                            "value": "2"
                          },
                          "src": "18867:19:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "18856:30:9"
                      },
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 2226,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 2221,
                                "name": "checkpoints",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2155,
                                "src": "18904:11:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_struct$_Checkpoint_$1462_storage_$dyn_storage_ptr",
                                  "typeString": "struct MiniMeToken.Checkpoint storage ref[] storage pointer"
                                }
                              },
                              "id": 2223,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 2222,
                                "name": "mid",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2211,
                                "src": "18916:3:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "18904:16:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Checkpoint_$1462_storage",
                                "typeString": "struct MiniMeToken.Checkpoint storage ref"
                              }
                            },
                            "id": 2224,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "fromBlock",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1459,
                            "src": "18904:26:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint128",
                              "typeString": "uint128"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 2225,
                            "name": "_block",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2157,
                            "src": "18932:6:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "18904:34:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "id": 2238,
                          "nodeType": "Block",
                          "src": "18988:44:9",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 2236,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 2232,
                                  "name": "max",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2201,
                                  "src": "19006:3:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 2235,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "id": 2233,
                                    "name": "mid",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2211,
                                    "src": "19012:3:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "-",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "hexValue": "31",
                                    "id": 2234,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "19016:1:9",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_1_by_1",
                                      "typeString": "int_const 1"
                                    },
                                    "value": "1"
                                  },
                                  "src": "19012:5:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "19006:11:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 2237,
                              "nodeType": "ExpressionStatement",
                              "src": "19006:11:9"
                            }
                          ]
                        },
                        "id": 2239,
                        "nodeType": "IfStatement",
                        "src": "18900:132:9",
                        "trueBody": {
                          "id": 2231,
                          "nodeType": "Block",
                          "src": "18940:42:9",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 2229,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 2227,
                                  "name": "min",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2197,
                                  "src": "18958:3:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "id": 2228,
                                  "name": "mid",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2211,
                                  "src": "18964:3:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "18958:9:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 2230,
                              "nodeType": "ExpressionStatement",
                              "src": "18958:9:9"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2209,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 2207,
                      "name": "max",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2201,
                      "src": "18831:3:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 2208,
                      "name": "min",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2197,
                      "src": "18837:3:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "18831:9:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 2241,
                  "nodeType": "WhileStatement",
                  "src": "18824:218:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 2242,
                        "name": "checkpoints",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2155,
                        "src": "19058:11:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_Checkpoint_$1462_storage_$dyn_storage_ptr",
                          "typeString": "struct MiniMeToken.Checkpoint storage ref[] storage pointer"
                        }
                      },
                      "id": 2244,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 2243,
                        "name": "min",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2197,
                        "src": "19070:3:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "19058:16:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Checkpoint_$1462_storage",
                        "typeString": "struct MiniMeToken.Checkpoint storage ref"
                      }
                    },
                    "id": 2245,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "value",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 1461,
                    "src": "19058:22:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint128",
                      "typeString": "uint128"
                    }
                  },
                  "functionReturnParameters": 2161,
                  "id": 2246,
                  "nodeType": "Return",
                  "src": "19051:29:9"
                }
              ]
            },
            "documentation": "/////////////\n @dev `getValueAt` retrieves the number of tokens at a given block number\n @param checkpoints The history of values being queried\n @param _block The block number to retrieve the value at\n @return The number of tokens being queried",
            "id": 2248,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getValueAt",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2158,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2155,
                  "name": "checkpoints",
                  "nodeType": "VariableDeclaration",
                  "scope": 2248,
                  "src": "18322:32:9",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_struct$_Checkpoint_$1462_storage_$dyn_storage_ptr",
                    "typeString": "struct MiniMeToken.Checkpoint[]"
                  },
                  "typeName": {
                    "baseType": {
                      "contractScope": null,
                      "id": 2153,
                      "name": "Checkpoint",
                      "nodeType": "UserDefinedTypeName",
                      "referencedDeclaration": 1462,
                      "src": "18322:10:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Checkpoint_$1462_storage_ptr",
                        "typeString": "struct MiniMeToken.Checkpoint"
                      }
                    },
                    "id": 2154,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "18322:12:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_struct$_Checkpoint_$1462_storage_$dyn_storage_ptr",
                      "typeString": "struct MiniMeToken.Checkpoint[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2157,
                  "name": "_block",
                  "nodeType": "VariableDeclaration",
                  "scope": 2248,
                  "src": "18356:11:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2156,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "18356:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "18321:47:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 2161,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2160,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2248,
                  "src": "18396:4:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2159,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "18396:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "18395:6:9"
            },
            "scope": 2462,
            "src": "18302:785:9",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2318,
              "nodeType": "Block",
              "src": "19387:470:9",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 2272,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 2259,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 2256,
                              "name": "checkpoints",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2251,
                              "src": "19402:11:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_struct$_Checkpoint_$1462_storage_$dyn_storage_ptr",
                                "typeString": "struct MiniMeToken.Checkpoint storage ref[] storage pointer"
                              }
                            },
                            "id": 2257,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "19402:18:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 2258,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "19424:1:9",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "19402:23:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        }
                      ],
                      "id": 2260,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "19401:25:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "||",
                    "rightExpression": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 2270,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 2261,
                                "name": "checkpoints",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2251,
                                "src": "19431:11:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_struct$_Checkpoint_$1462_storage_$dyn_storage_ptr",
                                  "typeString": "struct MiniMeToken.Checkpoint storage ref[] storage pointer"
                                }
                              },
                              "id": 2266,
                              "indexExpression": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 2265,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 2262,
                                    "name": "checkpoints",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2251,
                                    "src": "19443:11:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_struct$_Checkpoint_$1462_storage_$dyn_storage_ptr",
                                      "typeString": "struct MiniMeToken.Checkpoint storage ref[] storage pointer"
                                    }
                                  },
                                  "id": 2263,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "length",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": null,
                                  "src": "19443:18:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "-",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "hexValue": "31",
                                  "id": 2264,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "19464:1:9",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_1_by_1",
                                    "typeString": "int_const 1"
                                  },
                                  "value": "1"
                                },
                                "src": "19443:22:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "19431:35:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Checkpoint_$1462_storage",
                                "typeString": "struct MiniMeToken.Checkpoint storage ref"
                              }
                            },
                            "id": 2267,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "fromBlock",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1459,
                            "src": "19431:45:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint128",
                              "typeString": "uint128"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 2268,
                              "name": "block",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 10394,
                              "src": "19479:5:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_block",
                                "typeString": "block"
                              }
                            },
                            "id": 2269,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "number",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "19479:12:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "19431:60:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        }
                      ],
                      "id": 2271,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "19430:62:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "19401:91:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 2316,
                    "nodeType": "Block",
                    "src": "19705:146:9",
                    "statements": [
                      {
                        "assignments": [
                          2300
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 2300,
                            "name": "oldCheckPoint",
                            "nodeType": "VariableDeclaration",
                            "scope": 2319,
                            "src": "19719:32:9",
                            "stateVariable": false,
                            "storageLocation": "storage",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Checkpoint_$1462_storage_ptr",
                              "typeString": "struct MiniMeToken.Checkpoint"
                            },
                            "typeName": {
                              "contractScope": null,
                              "id": 2299,
                              "name": "Checkpoint",
                              "nodeType": "UserDefinedTypeName",
                              "referencedDeclaration": 1462,
                              "src": "19719:10:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Checkpoint_$1462_storage_ptr",
                                "typeString": "struct MiniMeToken.Checkpoint"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 2307,
                        "initialValue": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 2301,
                            "name": "checkpoints",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2251,
                            "src": "19754:11:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_struct$_Checkpoint_$1462_storage_$dyn_storage_ptr",
                              "typeString": "struct MiniMeToken.Checkpoint storage ref[] storage pointer"
                            }
                          },
                          "id": 2306,
                          "indexExpression": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 2305,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2302,
                                "name": "checkpoints",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2251,
                                "src": "19766:11:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_struct$_Checkpoint_$1462_storage_$dyn_storage_ptr",
                                  "typeString": "struct MiniMeToken.Checkpoint storage ref[] storage pointer"
                                }
                              },
                              "id": 2303,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "length",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "19766:18:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "-",
                            "rightExpression": {
                              "argumentTypes": null,
                              "hexValue": "31",
                              "id": 2304,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "19787:1:9",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              },
                              "value": "1"
                            },
                            "src": "19766:22:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "19754:35:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Checkpoint_$1462_storage",
                            "typeString": "struct MiniMeToken.Checkpoint storage ref"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "19719:70:9"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 2314,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 2308,
                              "name": "oldCheckPoint",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2300,
                              "src": "19803:13:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Checkpoint_$1462_storage_ptr",
                                "typeString": "struct MiniMeToken.Checkpoint storage pointer"
                              }
                            },
                            "id": 2310,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "value",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1461,
                            "src": "19803:19:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint128",
                              "typeString": "uint128"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 2312,
                                "name": "_value",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2253,
                                "src": "19833:6:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 2311,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "19825:7:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_uint128_$",
                                "typeString": "type(uint128)"
                              },
                              "typeName": "uint128"
                            },
                            "id": 2313,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "19825:15:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint128",
                              "typeString": "uint128"
                            }
                          },
                          "src": "19803:37:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        "id": 2315,
                        "nodeType": "ExpressionStatement",
                        "src": "19803:37:9"
                      }
                    ]
                  },
                  "id": 2317,
                  "nodeType": "IfStatement",
                  "src": "19397:454:9",
                  "trueBody": {
                    "id": 2298,
                    "nodeType": "Block",
                    "src": "19494:205:9",
                    "statements": [
                      {
                        "assignments": [
                          2274
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 2274,
                            "name": "newCheckPoint",
                            "nodeType": "VariableDeclaration",
                            "scope": 2319,
                            "src": "19508:32:9",
                            "stateVariable": false,
                            "storageLocation": "storage",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Checkpoint_$1462_storage_ptr",
                              "typeString": "struct MiniMeToken.Checkpoint"
                            },
                            "typeName": {
                              "contractScope": null,
                              "id": 2273,
                              "name": "Checkpoint",
                              "nodeType": "UserDefinedTypeName",
                              "referencedDeclaration": 1462,
                              "src": "19508:10:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Checkpoint_$1462_storage_ptr",
                                "typeString": "struct MiniMeToken.Checkpoint"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 2280,
                        "initialValue": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 2275,
                            "name": "checkpoints",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2251,
                            "src": "19543:11:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_struct$_Checkpoint_$1462_storage_$dyn_storage_ptr",
                              "typeString": "struct MiniMeToken.Checkpoint storage ref[] storage pointer"
                            }
                          },
                          "id": 2279,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 2278,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "UnaryOperation",
                            "operator": "++",
                            "prefix": false,
                            "src": "19555:20:9",
                            "subExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2276,
                                "name": "checkpoints",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2251,
                                "src": "19555:11:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_struct$_Checkpoint_$1462_storage_$dyn_storage_ptr",
                                  "typeString": "struct MiniMeToken.Checkpoint storage ref[] storage pointer"
                                }
                              },
                              "id": 2277,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": true,
                              "memberName": "length",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "19555:18:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "19543:33:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Checkpoint_$1462_storage",
                            "typeString": "struct MiniMeToken.Checkpoint storage ref"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "19508:68:9"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 2288,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 2281,
                              "name": "newCheckPoint",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2274,
                              "src": "19590:13:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Checkpoint_$1462_storage_ptr",
                                "typeString": "struct MiniMeToken.Checkpoint storage pointer"
                              }
                            },
                            "id": 2283,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "fromBlock",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1459,
                            "src": "19590:23:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint128",
                              "typeString": "uint128"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 2285,
                                  "name": "block",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 10394,
                                  "src": "19624:5:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_block",
                                    "typeString": "block"
                                  }
                                },
                                "id": 2286,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "number",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "19624:12:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 2284,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "19616:7:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_uint128_$",
                                "typeString": "type(uint128)"
                              },
                              "typeName": "uint128"
                            },
                            "id": 2287,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "19616:21:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint128",
                              "typeString": "uint128"
                            }
                          },
                          "src": "19590:47:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        "id": 2289,
                        "nodeType": "ExpressionStatement",
                        "src": "19590:47:9"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 2296,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 2290,
                              "name": "newCheckPoint",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2274,
                              "src": "19651:13:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Checkpoint_$1462_storage_ptr",
                                "typeString": "struct MiniMeToken.Checkpoint storage pointer"
                              }
                            },
                            "id": 2292,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "value",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1461,
                            "src": "19651:19:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint128",
                              "typeString": "uint128"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 2294,
                                "name": "_value",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2253,
                                "src": "19681:6:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 2293,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "19673:7:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_uint128_$",
                                "typeString": "type(uint128)"
                              },
                              "typeName": "uint128"
                            },
                            "id": 2295,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "19673:15:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint128",
                              "typeString": "uint128"
                            }
                          },
                          "src": "19651:37:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        "id": 2297,
                        "nodeType": "ExpressionStatement",
                        "src": "19651:37:9"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": "@dev `updateValueAtNow` used to update the `balances` map and the\n  `totalSupplyHistory`\n @param checkpoints The history of data being updated\n @param _value The new number of tokens",
            "id": 2319,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "updateValueAtNow",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2254,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2251,
                  "name": "checkpoints",
                  "nodeType": "VariableDeclaration",
                  "scope": 2319,
                  "src": "19331:32:9",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_struct$_Checkpoint_$1462_storage_$dyn_storage_ptr",
                    "typeString": "struct MiniMeToken.Checkpoint[]"
                  },
                  "typeName": {
                    "baseType": {
                      "contractScope": null,
                      "id": 2249,
                      "name": "Checkpoint",
                      "nodeType": "UserDefinedTypeName",
                      "referencedDeclaration": 1462,
                      "src": "19331:10:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Checkpoint_$1462_storage_ptr",
                        "typeString": "struct MiniMeToken.Checkpoint"
                      }
                    },
                    "id": 2250,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "19331:12:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_struct$_Checkpoint_$1462_storage_$dyn_storage_ptr",
                      "typeString": "struct MiniMeToken.Checkpoint[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2253,
                  "name": "_value",
                  "nodeType": "VariableDeclaration",
                  "scope": 2319,
                  "src": "19365:11:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2252,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "19365:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "19330:47:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 2255,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "19387:0:9"
            },
            "scope": 2462,
            "src": "19305:552:9",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2340,
              "nodeType": "Block",
              "src": "20095:169:9",
              "statements": [
                {
                  "assignments": [],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2327,
                      "name": "size",
                      "nodeType": "VariableDeclaration",
                      "scope": 2341,
                      "src": "20105:9:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2326,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "20105:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2328,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "20105:9:9"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 2331,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 2329,
                      "name": "_addr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2321,
                      "src": "20128:5:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 2330,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "20137:1:9",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "20128:10:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 2334,
                  "nodeType": "IfStatement",
                  "src": "20124:40:9",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "hexValue": "66616c7365",
                      "id": 2332,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "20159:5:9",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "false"
                    },
                    "functionReturnParameters": 2325,
                    "id": 2333,
                    "nodeType": "Return",
                    "src": "20152:12:9"
                  }
                },
                {
                  "externalReferences": [
                    {
                      "size": {
                        "declaration": 2327,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "20198:4:9",
                        "valueSize": 1
                      }
                    },
                    {
                      "_addr": {
                        "declaration": 2321,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "20218:5:9",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 2335,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    size := extcodesize(_addr)\n}",
                  "src": "20175:75:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2338,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 2336,
                      "name": "size",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2327,
                      "src": "20251:4:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 2337,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "20256:1:9",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "20251:6:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 2325,
                  "id": 2339,
                  "nodeType": "Return",
                  "src": "20244:13:9"
                }
              ]
            },
            "documentation": "@dev Internal function to determine if an address is a contract\n @param _addr The address being queried\n @return True if `_addr` is a contract",
            "id": 2341,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "isContract",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2322,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2321,
                  "name": "_addr",
                  "nodeType": "VariableDeclaration",
                  "scope": 2341,
                  "src": "20048:13:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2320,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "20048:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "20047:15:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 2325,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2324,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2341,
                  "src": "20089:4:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 2323,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "20089:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "20088:6:9"
            },
            "scope": 2462,
            "src": "20028:236:9",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2357,
              "nodeType": "Block",
              "src": "20394:37:9",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "condition": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 2352,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 2350,
                        "name": "a",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2343,
                        "src": "20411:1:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "<",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 2351,
                        "name": "b",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2345,
                        "src": "20415:1:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "20411:5:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "falseExpression": {
                      "argumentTypes": null,
                      "id": 2354,
                      "name": "b",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2345,
                      "src": "20423:1:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 2355,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "Conditional",
                    "src": "20411:13:9",
                    "trueExpression": {
                      "argumentTypes": null,
                      "id": 2353,
                      "name": "a",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2343,
                      "src": "20419:1:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 2349,
                  "id": 2356,
                  "nodeType": "Return",
                  "src": "20404:20:9"
                }
              ]
            },
            "documentation": "@dev Helper function to return a min betwen the two uints",
            "id": 2358,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "min",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2346,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2343,
                  "name": "a",
                  "nodeType": "VariableDeclaration",
                  "scope": 2358,
                  "src": "20349:6:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2342,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "20349:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2345,
                  "name": "b",
                  "nodeType": "VariableDeclaration",
                  "scope": 2358,
                  "src": "20357:6:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2344,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "20357:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "20348:16:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 2349,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2348,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2358,
                  "src": "20388:4:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2347,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "20388:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "20387:6:9"
            },
            "scope": 2462,
            "src": "20336:95:9",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2383,
              "nodeType": "Block",
              "src": "20704:209:9",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 2363,
                            "name": "controller",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1412,
                            "src": "20733:10:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 2362,
                          "name": "isContract",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2341,
                          "src": "20722:10:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                            "typeString": "function (address) view returns (bool)"
                          }
                        },
                        "id": 2364,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "20722:22:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 2361,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        10407,
                        10408
                      ],
                      "referencedDeclaration": 10407,
                      "src": "20714:7:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 2365,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "20714:31:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2366,
                  "nodeType": "ExpressionStatement",
                  "src": "20714:31:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 2380,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2376,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 10404,
                                "src": "20886:3:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 2377,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "20886:10:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 2373,
                                  "name": "msg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 10404,
                                  "src": "20875:3:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_message",
                                    "typeString": "msg"
                                  }
                                },
                                "id": 2374,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "value",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "20875:9:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 2369,
                                      "name": "controller",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1412,
                                      "src": "20844:10:9",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    ],
                                    "id": 2368,
                                    "name": "ITokenController",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1396,
                                    "src": "20827:16:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_contract$_ITokenController_$1396_$",
                                      "typeString": "type(contract ITokenController)"
                                    }
                                  },
                                  "id": 2370,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "20827:28:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_ITokenController_$1396",
                                    "typeString": "contract ITokenController"
                                  }
                                },
                                "id": 2371,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "proxyPayment",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 1373,
                                "src": "20827:41:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_external_payable$_t_address_$returns$_t_bool_$",
                                  "typeString": "function (address) payable external returns (bool)"
                                }
                              },
                              "id": 2372,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "value",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "20827:47:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_setvalue_nonpayable$_t_uint256_$returns$_t_function_external_payable$_t_address_$returns$_t_bool_$value_$",
                                "typeString": "function (uint256) returns (function (address) payable external returns (bool))"
                              }
                            },
                            "id": 2375,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "20827:58:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_payable$_t_address_$returns$_t_bool_$value",
                              "typeString": "function (address) payable external returns (bool)"
                            }
                          },
                          "id": 2378,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "20827:70:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "74727565",
                          "id": 2379,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "20901:4:9",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "true"
                        },
                        "src": "20827:78:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 2367,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        10407,
                        10408
                      ],
                      "referencedDeclaration": 10407,
                      "src": "20819:7:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 2381,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "20819:87:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2382,
                  "nodeType": "ExpressionStatement",
                  "src": "20819:87:9"
                }
              ]
            },
            "documentation": "@notice The fallback function: If the contract's controller has not been\n  set to 0, then the `proxyPayment` method is called which relays the\n  ether and creates tokens as described in the token controller contract",
            "id": 2384,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2359,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "20684:2:9"
            },
            "payable": true,
            "returnParameters": {
              "id": 2360,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "20704:0:9"
            },
            "scope": 2462,
            "src": "20675:238:9",
            "stateMutability": "payable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 2430,
              "nodeType": "Block",
              "src": "21272:306:9",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 2393,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 2391,
                      "name": "_token",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2386,
                      "src": "21286:6:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "307830",
                      "id": 2392,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "21296:3:9",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0x0"
                    },
                    "src": "21286:13:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 2403,
                  "nodeType": "IfStatement",
                  "src": "21282:97:9",
                  "trueBody": {
                    "id": 2402,
                    "nodeType": "Block",
                    "src": "21301:78:9",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2397,
                                "name": "this",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 10543,
                                "src": "21335:4:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_MiniMeToken_$2462",
                                  "typeString": "contract MiniMeToken"
                                }
                              },
                              "id": 2398,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "balance",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "21335:12:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 2394,
                              "name": "controller",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1412,
                              "src": "21315:10:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "id": 2396,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "transfer",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "21315:19:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_transfer_nonpayable$_t_uint256_$returns$__$",
                              "typeString": "function (uint256)"
                            }
                          },
                          "id": 2399,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "21315:33:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 2400,
                        "nodeType": "ExpressionStatement",
                        "src": "21315:33:9"
                      },
                      {
                        "expression": null,
                        "functionReturnParameters": 2390,
                        "id": 2401,
                        "nodeType": "Return",
                        "src": "21362:7:9"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    2405
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2405,
                      "name": "token",
                      "nodeType": "VariableDeclaration",
                      "scope": 2431,
                      "src": "21389:17:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_MiniMeToken_$2462",
                        "typeString": "contract MiniMeToken"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 2404,
                        "name": "MiniMeToken",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 2462,
                        "src": "21389:11:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_MiniMeToken_$2462",
                          "typeString": "contract MiniMeToken"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2409,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2407,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2386,
                        "src": "21421:6:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 2406,
                      "name": "MiniMeToken",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2462,
                      "src": "21409:11:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_MiniMeToken_$2462_$",
                        "typeString": "type(contract MiniMeToken)"
                      }
                    },
                    "id": 2408,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "21409:19:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_MiniMeToken_$2462",
                      "typeString": "contract MiniMeToken"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "21389:39:9"
                },
                {
                  "assignments": [
                    2411
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2411,
                      "name": "balance",
                      "nodeType": "VariableDeclaration",
                      "scope": 2431,
                      "src": "21438:12:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2410,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "21438:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2416,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2414,
                        "name": "this",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10543,
                        "src": "21469:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_MiniMeToken_$2462",
                          "typeString": "contract MiniMeToken"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_MiniMeToken_$2462",
                          "typeString": "contract MiniMeToken"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 2412,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2405,
                        "src": "21453:5:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_MiniMeToken_$2462",
                          "typeString": "contract MiniMeToken"
                        }
                      },
                      "id": 2413,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "balanceOf",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1733,
                      "src": "21453:15:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                        "typeString": "function (address) view external returns (uint256)"
                      }
                    },
                    "id": 2415,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "21453:21:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "21438:36:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2420,
                        "name": "controller",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1412,
                        "src": "21499:10:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2421,
                        "name": "balance",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2411,
                        "src": "21511:7:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 2417,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2405,
                        "src": "21484:5:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_MiniMeToken_$2462",
                          "typeString": "contract MiniMeToken"
                        }
                      },
                      "id": 2419,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "transfer",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1558,
                      "src": "21484:14:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                        "typeString": "function (address,uint256) external returns (bool)"
                      }
                    },
                    "id": 2422,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "21484:35:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 2423,
                  "nodeType": "ExpressionStatement",
                  "src": "21484:35:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2425,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2386,
                        "src": "21543:6:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2426,
                        "name": "controller",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1412,
                        "src": "21551:10:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2427,
                        "name": "balance",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2411,
                        "src": "21563:7:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 2424,
                      "name": "ClaimedTokens",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2439,
                      "src": "21529:13:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 2428,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "21529:42:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2429,
                  "nodeType": "ExpressionStatement",
                  "src": "21529:42:9"
                }
              ]
            },
            "documentation": "///////\n @notice This method can be used by the controller to extract mistakenly\n  sent tokens to this contract.\n @param _token The address of the token contract that you want to recover\n  set to 0 in case you want to extract ether.",
            "id": 2431,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": null,
                "id": 2389,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 2388,
                  "name": "onlyController",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1410,
                  "src": "21250:14:9",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "21250:14:9"
              }
            ],
            "name": "claimTokens",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2387,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2386,
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "scope": 2431,
                  "src": "21234:14:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2385,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "21234:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "21233:16:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 2390,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "21272:0:9"
            },
            "scope": 2462,
            "src": "21213:365:9",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "anonymous": false,
            "documentation": "/////////////",
            "id": 2439,
            "name": "ClaimedTokens",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 2438,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2433,
                  "indexed": true,
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "scope": 2439,
                  "src": "21648:22:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2432,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "21648:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2435,
                  "indexed": true,
                  "name": "_controller",
                  "nodeType": "VariableDeclaration",
                  "scope": 2439,
                  "src": "21672:27:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2434,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "21672:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2437,
                  "indexed": false,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 2439,
                  "src": "21701:12:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2436,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "21701:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "21647:67:9"
            },
            "src": "21628:87:9"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 2447,
            "name": "Transfer",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 2446,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2441,
                  "indexed": true,
                  "name": "_from",
                  "nodeType": "VariableDeclaration",
                  "scope": 2447,
                  "src": "21735:21:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2440,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "21735:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2443,
                  "indexed": true,
                  "name": "_to",
                  "nodeType": "VariableDeclaration",
                  "scope": 2447,
                  "src": "21758:19:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2442,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "21758:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2445,
                  "indexed": false,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 2447,
                  "src": "21779:15:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2444,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "21779:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "21734:61:9"
            },
            "src": "21720:76:9"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 2453,
            "name": "NewCloneToken",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 2452,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2449,
                  "indexed": true,
                  "name": "_cloneToken",
                  "nodeType": "VariableDeclaration",
                  "scope": 2453,
                  "src": "21821:27:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2448,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "21821:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2451,
                  "indexed": false,
                  "name": "_snapshotBlock",
                  "nodeType": "VariableDeclaration",
                  "scope": 2453,
                  "src": "21850:19:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2450,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "21850:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "21820:50:9"
            },
            "src": "21801:70:9"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 2461,
            "name": "Approval",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 2460,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2455,
                  "indexed": true,
                  "name": "_owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 2461,
                  "src": "21900:22:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2454,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "21900:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2457,
                  "indexed": true,
                  "name": "_spender",
                  "nodeType": "VariableDeclaration",
                  "scope": 2461,
                  "src": "21932:24:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2456,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "21932:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2459,
                  "indexed": false,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 2461,
                  "src": "21966:15:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2458,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "21966:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "21890:101:9"
            },
            "src": "21876:116:9"
          }
        ],
        "scope": 2504,
        "src": "2122:19873:9"
      },
      {
        "baseContracts": [],
        "contractDependencies": [
          2462
        ],
        "contractKind": "contract",
        "documentation": "/////////////\n @dev This contract is used to generate clone contracts from a contract.\n  In solidity this is the way to create a contract from a contract of the\n  same class",
        "fullyImplemented": true,
        "id": 2503,
        "linearizedBaseContracts": [
          2503
        ],
        "name": "MiniMeTokenFactory",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "body": {
              "id": 2501,
              "nodeType": "Block",
              "src": "23149:318:9",
              "statements": [
                {
                  "assignments": [
                    2480
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2480,
                      "name": "newToken",
                      "nodeType": "VariableDeclaration",
                      "scope": 2502,
                      "src": "23159:20:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_MiniMeToken_$2462",
                        "typeString": "contract MiniMeToken"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 2479,
                        "name": "MiniMeToken",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 2462,
                        "src": "23159:11:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_MiniMeToken_$2462",
                          "typeString": "contract MiniMeToken"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2491,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2483,
                        "name": "this",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10545,
                        "src": "23211:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_MiniMeTokenFactory_$2503",
                          "typeString": "contract MiniMeTokenFactory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2484,
                        "name": "_parentToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2464,
                        "src": "23229:12:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_MiniMeToken_$2462",
                          "typeString": "contract MiniMeToken"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2485,
                        "name": "_snapshotBlock",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2466,
                        "src": "23255:14:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2486,
                        "name": "_tokenName",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2468,
                        "src": "23283:10:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2487,
                        "name": "_decimalUnits",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2470,
                        "src": "23307:13:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2488,
                        "name": "_tokenSymbol",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2472,
                        "src": "23334:12:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2489,
                        "name": "_transfersEnabled",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2474,
                        "src": "23360:17:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_MiniMeTokenFactory_$2503",
                          "typeString": "contract MiniMeTokenFactory"
                        },
                        {
                          "typeIdentifier": "t_contract$_MiniMeToken_$2462",
                          "typeString": "contract MiniMeToken"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        },
                        {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        },
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 2482,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "NewExpression",
                      "src": "23182:15:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_creation_nonpayable$_t_contract$_MiniMeTokenFactory_$2503_$_t_contract$_MiniMeToken_$2462_$_t_uint256_$_t_string_memory_ptr_$_t_uint8_$_t_string_memory_ptr_$_t_bool_$returns$_t_contract$_MiniMeToken_$2462_$",
                        "typeString": "function (contract MiniMeTokenFactory,contract MiniMeToken,uint256,string memory,uint8,string memory,bool) returns (contract MiniMeToken)"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 2481,
                        "name": "MiniMeToken",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 2462,
                        "src": "23186:11:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_MiniMeToken_$2462",
                          "typeString": "contract MiniMeToken"
                        }
                      }
                    },
                    "id": 2490,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "23182:205:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_MiniMeToken_$2462",
                      "typeString": "contract MiniMeToken"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "23159:228:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2495,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 10404,
                          "src": "23424:3:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 2496,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "23424:10:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 2492,
                        "name": "newToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2480,
                        "src": "23398:8:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_MiniMeToken_$2462",
                          "typeString": "contract MiniMeToken"
                        }
                      },
                      "id": 2494,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "changeController",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1433,
                      "src": "23398:25:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address) external"
                      }
                    },
                    "id": 2497,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "23398:37:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2498,
                  "nodeType": "ExpressionStatement",
                  "src": "23398:37:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2499,
                    "name": "newToken",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 2480,
                    "src": "23452:8:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_MiniMeToken_$2462",
                      "typeString": "contract MiniMeToken"
                    }
                  },
                  "functionReturnParameters": 2478,
                  "id": 2500,
                  "nodeType": "Return",
                  "src": "23445:15:9"
                }
              ]
            },
            "documentation": "@notice Update the DApp by creating a new token with new functionalities\n  the msg.sender becomes the controller of this clone token\n @param _parentToken Address of the token being cloned\n @param _snapshotBlock Block of the parent token that will\n  determine the initial distribution of the clone token\n @param _tokenName Name of the new token\n @param _decimalUnits Number of decimals of the new token\n @param _tokenSymbol Token Symbol for the new token\n @param _transfersEnabled If true, tokens will be able to be transferred\n @return The address of the new token contract",
            "id": 2502,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "createCloneToken",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2475,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2464,
                  "name": "_parentToken",
                  "nodeType": "VariableDeclaration",
                  "scope": 2502,
                  "src": "22939:24:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_MiniMeToken_$2462",
                    "typeString": "contract MiniMeToken"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 2463,
                    "name": "MiniMeToken",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 2462,
                    "src": "22939:11:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_MiniMeToken_$2462",
                      "typeString": "contract MiniMeToken"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2466,
                  "name": "_snapshotBlock",
                  "nodeType": "VariableDeclaration",
                  "scope": 2502,
                  "src": "22973:19:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2465,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "22973:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2468,
                  "name": "_tokenName",
                  "nodeType": "VariableDeclaration",
                  "scope": 2502,
                  "src": "23002:17:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 2467,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "23002:6:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2470,
                  "name": "_decimalUnits",
                  "nodeType": "VariableDeclaration",
                  "scope": 2502,
                  "src": "23029:19:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 2469,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "23029:5:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2472,
                  "name": "_tokenSymbol",
                  "nodeType": "VariableDeclaration",
                  "scope": 2502,
                  "src": "23058:19:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 2471,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "23058:6:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2474,
                  "name": "_transfersEnabled",
                  "nodeType": "VariableDeclaration",
                  "scope": 2502,
                  "src": "23087:22:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 2473,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "23087:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "22929:186:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 2478,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2477,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2502,
                  "src": "23132:11:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_MiniMeToken_$2462",
                    "typeString": "contract MiniMeToken"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 2476,
                    "name": "MiniMeToken",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 2462,
                    "src": "23132:11:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_MiniMeToken_$2462",
                      "typeString": "contract MiniMeToken"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "23131:13:9"
            },
            "scope": 2503,
            "src": "22904:563:9",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          }
        ],
        "scope": 2504,
        "src": "22224:1245:9"
      }
    ],
    "src": "0:23469:9"
  },
  "legacyAST": {
    "absolutePath": "@aragon/apps-shared-minime/contracts/MiniMeToken.sol",
    "exportedSymbols": {
      "ApproveAndCallFallBack": [
        1446
      ],
      "Controlled": [
        1434
      ],
      "MiniMeToken": [
        2462
      ],
      "MiniMeTokenFactory": [
        2503
      ]
    },
    "id": 2504,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 1398,
        "literals": [
          "solidity",
          "^",
          "0.4",
          ".24"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:24:9"
      },
      {
        "absolutePath": "@aragon/apps-shared-minime/contracts/ITokenController.sol",
        "file": "./ITokenController.sol",
        "id": 1399,
        "nodeType": "ImportDirective",
        "scope": 2504,
        "sourceUnit": 1397,
        "src": "1123:32:9",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 1434,
        "linearizedBaseContracts": [
          1434
        ],
        "name": "Controlled",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "body": {
              "id": 1409,
              "nodeType": "Block",
              "src": "1326:61:9",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 1405,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 1402,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10404,
                            "src": "1344:3:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 1403,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "1344:10:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 1404,
                          "name": "controller",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1412,
                          "src": "1358:10:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "1344:24:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 1401,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        10407,
                        10408
                      ],
                      "referencedDeclaration": 10407,
                      "src": "1336:7:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 1406,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1336:33:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1407,
                  "nodeType": "ExpressionStatement",
                  "src": "1336:33:9"
                },
                {
                  "id": 1408,
                  "nodeType": "PlaceholderStatement",
                  "src": "1379:1:9"
                }
              ]
            },
            "documentation": "@notice The address of the controller is the only address that can call\n  a function with this modifier",
            "id": 1410,
            "name": "onlyController",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 1400,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1326:0:9"
            },
            "src": "1302:85:9",
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 1412,
            "name": "controller",
            "nodeType": "VariableDeclaration",
            "scope": 1434,
            "src": "1393:25:9",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 1411,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "1393:7:9",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1420,
              "nodeType": "Block",
              "src": "1455:27:9",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1418,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 1415,
                      "name": "controller",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1412,
                      "src": "1457:10:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1416,
                        "name": "msg",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10404,
                        "src": "1470:3:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_message",
                          "typeString": "msg"
                        }
                      },
                      "id": 1417,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sender",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "1470:10:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "1457:23:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 1419,
                  "nodeType": "ExpressionStatement",
                  "src": "1457:23:9"
                }
              ]
            },
            "documentation": null,
            "id": 1421,
            "implemented": true,
            "isConstructor": true,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "Controlled",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1413,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1444:2:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 1414,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1455:0:9"
            },
            "scope": 1434,
            "src": "1425:57:9",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1432,
              "nodeType": "Block",
              "src": "1681:44:9",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1430,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 1428,
                      "name": "controller",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1412,
                      "src": "1691:10:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 1429,
                      "name": "_newController",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1423,
                      "src": "1704:14:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "1691:27:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 1431,
                  "nodeType": "ExpressionStatement",
                  "src": "1691:27:9"
                }
              ]
            },
            "documentation": "@notice Changes the controller of the contract\n @param _newController The new controller of the contract",
            "id": 1433,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": null,
                "id": 1426,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 1425,
                  "name": "onlyController",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1410,
                  "src": "1658:14:9",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "1658:14:9"
              }
            ],
            "name": "changeController",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1424,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1423,
                  "name": "_newController",
                  "nodeType": "VariableDeclaration",
                  "scope": 1433,
                  "src": "1634:22:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1422,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1634:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1633:24:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 1427,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1681:0:9"
            },
            "scope": 1434,
            "src": "1608:117:9",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          }
        ],
        "scope": 2504,
        "src": "1157:570:9"
      },
      {
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": false,
        "id": 1446,
        "linearizedBaseContracts": [
          1446
        ],
        "name": "ApproveAndCallFallBack",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "body": null,
            "documentation": null,
            "id": 1445,
            "implemented": false,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "receiveApproval",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1443,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1436,
                  "name": "from",
                  "nodeType": "VariableDeclaration",
                  "scope": 1445,
                  "src": "1801:12:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1435,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1801:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1438,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 1445,
                  "src": "1823:15:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1437,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1823:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1440,
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "scope": 1445,
                  "src": "1848:14:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1439,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1848:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1442,
                  "name": "_data",
                  "nodeType": "VariableDeclaration",
                  "scope": 1445,
                  "src": "1872:11:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1441,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "1872:5:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1791:98:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 1444,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1896:0:9"
            },
            "scope": 1446,
            "src": "1767:130:9",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          }
        ],
        "scope": 2504,
        "src": "1729:170:9"
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 1447,
              "name": "Controlled",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 1434,
              "src": "2146:10:9",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Controlled_$1434",
                "typeString": "contract Controlled"
              }
            },
            "id": 1448,
            "nodeType": "InheritanceSpecifier",
            "src": "2146:10:9"
          }
        ],
        "contractDependencies": [
          1434
        ],
        "contractKind": "contract",
        "documentation": "@dev The actual token contract, the default controller is the msg.sender\n  that deploys the contract, so usually this token will be deployed by a\n  token controller contract, which Giveth will call a \"Campaign\"",
        "fullyImplemented": true,
        "id": 2462,
        "linearizedBaseContracts": [
          2462,
          1434
        ],
        "name": "MiniMeToken",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "constant": false,
            "id": 1450,
            "name": "name",
            "nodeType": "VariableDeclaration",
            "scope": 2462,
            "src": "2164:18:9",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_storage",
              "typeString": "string"
            },
            "typeName": {
              "id": 1449,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "2164:6:9",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 1452,
            "name": "decimals",
            "nodeType": "VariableDeclaration",
            "scope": 2462,
            "src": "2244:21:9",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint8",
              "typeString": "uint8"
            },
            "typeName": {
              "id": 1451,
              "name": "uint8",
              "nodeType": "ElementaryTypeName",
              "src": "2244:5:9",
              "typeDescriptions": {
                "typeIdentifier": "t_uint8",
                "typeString": "uint8"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 1454,
            "name": "symbol",
            "nodeType": "VariableDeclaration",
            "scope": 2462,
            "src": "2325:20:9",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_storage",
              "typeString": "string"
            },
            "typeName": {
              "id": 1453,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "2325:6:9",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 1457,
            "name": "version",
            "nodeType": "VariableDeclaration",
            "scope": 2462,
            "src": "2390:33:9",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_storage",
              "typeString": "string"
            },
            "typeName": {
              "id": 1455,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "2390:6:9",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "4d4d545f302e31",
              "id": 1456,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "2414:9:9",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_40fc38fa6d6143d33df7a9e2b8cbab7741b8990dbd52142e39a51c72d1e7c977",
                "typeString": "literal_string \"MMT_0.1\""
              },
              "value": "MMT_0.1"
            },
            "visibility": "public"
          },
          {
            "canonicalName": "MiniMeToken.Checkpoint",
            "id": 1462,
            "members": [
              {
                "constant": false,
                "id": 1459,
                "name": "fromBlock",
                "nodeType": "VariableDeclaration",
                "scope": 1462,
                "src": "2743:17:9",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint128",
                  "typeString": "uint128"
                },
                "typeName": {
                  "id": 1458,
                  "name": "uint128",
                  "nodeType": "ElementaryTypeName",
                  "src": "2743:7:9",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint128",
                    "typeString": "uint128"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 1461,
                "name": "value",
                "nodeType": "VariableDeclaration",
                "scope": 1462,
                "src": "2841:13:9",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint128",
                  "typeString": "uint128"
                },
                "typeName": {
                  "id": 1460,
                  "name": "uint128",
                  "nodeType": "ElementaryTypeName",
                  "src": "2841:7:9",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint128",
                    "typeString": "uint128"
                  }
                },
                "value": null,
                "visibility": "internal"
              }
            ],
            "name": "Checkpoint",
            "nodeType": "StructDefinition",
            "scope": 2462,
            "src": "2637:224:9",
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 1464,
            "name": "parentToken",
            "nodeType": "VariableDeclaration",
            "scope": 2462,
            "src": "3003:30:9",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_MiniMeToken_$2462",
              "typeString": "contract MiniMeToken"
            },
            "typeName": {
              "contractScope": null,
              "id": 1463,
              "name": "MiniMeToken",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 2462,
              "src": "3003:11:9",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_MiniMeToken_$2462",
                "typeString": "contract MiniMeToken"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 1466,
            "name": "parentSnapShotBlock",
            "nodeType": "VariableDeclaration",
            "scope": 2462,
            "src": "3190:31:9",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 1465,
              "name": "uint",
              "nodeType": "ElementaryTypeName",
              "src": "3190:4:9",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 1468,
            "name": "creationBlock",
            "nodeType": "VariableDeclaration",
            "scope": 2462,
            "src": "3304:25:9",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 1467,
              "name": "uint",
              "nodeType": "ElementaryTypeName",
              "src": "3304:4:9",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 1473,
            "name": "balances",
            "nodeType": "VariableDeclaration",
            "scope": 2462,
            "src": "3534:42:9",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_struct$_Checkpoint_$1462_storage_$dyn_storage_$",
              "typeString": "mapping(address => struct MiniMeToken.Checkpoint[])"
            },
            "typeName": {
              "id": 1472,
              "keyType": {
                "id": 1469,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "3543:7:9",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "3534:33:9",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_struct$_Checkpoint_$1462_storage_$dyn_storage_$",
                "typeString": "mapping(address => struct MiniMeToken.Checkpoint[])"
              },
              "valueType": {
                "baseType": {
                  "contractScope": null,
                  "id": 1470,
                  "name": "Checkpoint",
                  "nodeType": "UserDefinedTypeName",
                  "referencedDeclaration": 1462,
                  "src": "3554:10:9",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Checkpoint_$1462_storage_ptr",
                    "typeString": "struct MiniMeToken.Checkpoint"
                  }
                },
                "id": 1471,
                "length": null,
                "nodeType": "ArrayTypeName",
                "src": "3554:12:9",
                "typeDescriptions": {
                  "typeIdentifier": "t_array$_t_struct$_Checkpoint_$1462_storage_$dyn_storage_ptr",
                  "typeString": "struct MiniMeToken.Checkpoint[]"
                }
              }
            },
            "value": null,
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 1479,
            "name": "allowed",
            "nodeType": "VariableDeclaration",
            "scope": 2462,
            "src": "3656:57:9",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
              "typeString": "mapping(address => mapping(address => uint256))"
            },
            "typeName": {
              "id": 1478,
              "keyType": {
                "id": 1474,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "3665:7:9",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "3656:49:9",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                "typeString": "mapping(address => mapping(address => uint256))"
              },
              "valueType": {
                "id": 1477,
                "keyType": {
                  "id": 1475,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "3685:7:9",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "nodeType": "Mapping",
                "src": "3676:28:9",
                "typeDescriptions": {
                  "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                  "typeString": "mapping(address => uint256)"
                },
                "valueType": {
                  "id": 1476,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "3696:7:9",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                }
              }
            },
            "value": null,
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 1482,
            "name": "totalSupplyHistory",
            "nodeType": "VariableDeclaration",
            "scope": 2462,
            "src": "3780:31:9",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_array$_t_struct$_Checkpoint_$1462_storage_$dyn_storage",
              "typeString": "struct MiniMeToken.Checkpoint[]"
            },
            "typeName": {
              "baseType": {
                "contractScope": null,
                "id": 1480,
                "name": "Checkpoint",
                "nodeType": "UserDefinedTypeName",
                "referencedDeclaration": 1462,
                "src": "3780:10:9",
                "typeDescriptions": {
                  "typeIdentifier": "t_struct$_Checkpoint_$1462_storage_ptr",
                  "typeString": "struct MiniMeToken.Checkpoint"
                }
              },
              "id": 1481,
              "length": null,
              "nodeType": "ArrayTypeName",
              "src": "3780:12:9",
              "typeDescriptions": {
                "typeIdentifier": "t_array$_t_struct$_Checkpoint_$1462_storage_$dyn_storage_ptr",
                "typeString": "struct MiniMeToken.Checkpoint[]"
              }
            },
            "value": null,
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 1484,
            "name": "transfersEnabled",
            "nodeType": "VariableDeclaration",
            "scope": 2462,
            "src": "3883:28:9",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bool",
              "typeString": "bool"
            },
            "typeName": {
              "id": 1483,
              "name": "bool",
              "nodeType": "ElementaryTypeName",
              "src": "3883:4:9",
              "typeDescriptions": {
                "typeIdentifier": "t_bool",
                "typeString": "bool"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 1486,
            "name": "tokenFactory",
            "nodeType": "VariableDeclaration",
            "scope": 2462,
            "src": "3969:38:9",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_MiniMeTokenFactory_$2503",
              "typeString": "contract MiniMeTokenFactory"
            },
            "typeName": {
              "contractScope": null,
              "id": 1485,
              "name": "MiniMeTokenFactory",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 2503,
              "src": "3969:18:9",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_MiniMeTokenFactory_$2503",
                "typeString": "contract MiniMeTokenFactory"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1536,
              "nodeType": "Block",
              "src": "5091:448:9",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1505,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 1503,
                      "name": "tokenFactory",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1486,
                      "src": "5101:12:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_MiniMeTokenFactory_$2503",
                        "typeString": "contract MiniMeTokenFactory"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 1504,
                      "name": "_tokenFactory",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1488,
                      "src": "5116:13:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_MiniMeTokenFactory_$2503",
                        "typeString": "contract MiniMeTokenFactory"
                      }
                    },
                    "src": "5101:28:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_MiniMeTokenFactory_$2503",
                      "typeString": "contract MiniMeTokenFactory"
                    }
                  },
                  "id": 1506,
                  "nodeType": "ExpressionStatement",
                  "src": "5101:28:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1509,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 1507,
                      "name": "name",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1450,
                      "src": "5139:4:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_storage",
                        "typeString": "string storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 1508,
                      "name": "_tokenName",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1494,
                      "src": "5146:10:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string memory"
                      }
                    },
                    "src": "5139:17:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage",
                      "typeString": "string storage ref"
                    }
                  },
                  "id": 1510,
                  "nodeType": "ExpressionStatement",
                  "src": "5139:17:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1513,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 1511,
                      "name": "decimals",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1452,
                      "src": "5214:8:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 1512,
                      "name": "_decimalUnits",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1496,
                      "src": "5225:13:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "src": "5214:24:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "id": 1514,
                  "nodeType": "ExpressionStatement",
                  "src": "5214:24:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1517,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 1515,
                      "name": "symbol",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1454,
                      "src": "5293:6:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_storage",
                        "typeString": "string storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 1516,
                      "name": "_tokenSymbol",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1498,
                      "src": "5302:12:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string memory"
                      }
                    },
                    "src": "5293:21:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage",
                      "typeString": "string storage ref"
                    }
                  },
                  "id": 1518,
                  "nodeType": "ExpressionStatement",
                  "src": "5293:21:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1521,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 1519,
                      "name": "parentToken",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1464,
                      "src": "5370:11:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_MiniMeToken_$2462",
                        "typeString": "contract MiniMeToken"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 1520,
                      "name": "_parentToken",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1490,
                      "src": "5384:12:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_MiniMeToken_$2462",
                        "typeString": "contract MiniMeToken"
                      }
                    },
                    "src": "5370:26:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_MiniMeToken_$2462",
                      "typeString": "contract MiniMeToken"
                    }
                  },
                  "id": 1522,
                  "nodeType": "ExpressionStatement",
                  "src": "5370:26:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1525,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 1523,
                      "name": "parentSnapShotBlock",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1466,
                      "src": "5406:19:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 1524,
                      "name": "_parentSnapShotBlock",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1492,
                      "src": "5428:20:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "5406:42:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 1526,
                  "nodeType": "ExpressionStatement",
                  "src": "5406:42:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1529,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 1527,
                      "name": "transfersEnabled",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1484,
                      "src": "5458:16:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 1528,
                      "name": "_transfersEnabled",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1500,
                      "src": "5477:17:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "5458:36:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 1530,
                  "nodeType": "ExpressionStatement",
                  "src": "5458:36:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1534,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 1531,
                      "name": "creationBlock",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1468,
                      "src": "5504:13:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1532,
                        "name": "block",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10394,
                        "src": "5520:5:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_block",
                          "typeString": "block"
                        }
                      },
                      "id": 1533,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "number",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "5520:12:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "5504:28:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 1535,
                  "nodeType": "ExpressionStatement",
                  "src": "5504:28:9"
                }
              ]
            },
            "documentation": "/////////////\n @notice Constructor to create a MiniMeToken\n @param _tokenFactory The address of the MiniMeTokenFactory contract that\n  will create the Clone token contracts, the token factory needs to be\n  deployed first\n @param _parentToken Address of the parent token, set to 0x0 if it is a\n  new token\n @param _parentSnapShotBlock Block of the parent token that will\n  determine the initial distribution of the clone token, set to 0 if it\n  is a new token\n @param _tokenName Name of the new token\n @param _decimalUnits Number of decimals of the new token\n @param _tokenSymbol Token Symbol for the new token\n @param _transfersEnabled If true, tokens will be able to be transferred",
            "id": 1537,
            "implemented": true,
            "isConstructor": true,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "MiniMeToken",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1501,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1488,
                  "name": "_tokenFactory",
                  "nodeType": "VariableDeclaration",
                  "scope": 1537,
                  "src": "4854:32:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_MiniMeTokenFactory_$2503",
                    "typeString": "contract MiniMeTokenFactory"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 1487,
                    "name": "MiniMeTokenFactory",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 2503,
                    "src": "4854:18:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_MiniMeTokenFactory_$2503",
                      "typeString": "contract MiniMeTokenFactory"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1490,
                  "name": "_parentToken",
                  "nodeType": "VariableDeclaration",
                  "scope": 1537,
                  "src": "4896:24:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_MiniMeToken_$2462",
                    "typeString": "contract MiniMeToken"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 1489,
                    "name": "MiniMeToken",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 2462,
                    "src": "4896:11:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_MiniMeToken_$2462",
                      "typeString": "contract MiniMeToken"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1492,
                  "name": "_parentSnapShotBlock",
                  "nodeType": "VariableDeclaration",
                  "scope": 1537,
                  "src": "4930:25:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1491,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "4930:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1494,
                  "name": "_tokenName",
                  "nodeType": "VariableDeclaration",
                  "scope": 1537,
                  "src": "4965:17:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 1493,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "4965:6:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1496,
                  "name": "_decimalUnits",
                  "nodeType": "VariableDeclaration",
                  "scope": 1537,
                  "src": "4992:19:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 1495,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "4992:5:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1498,
                  "name": "_tokenSymbol",
                  "nodeType": "VariableDeclaration",
                  "scope": 1537,
                  "src": "5021:19:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 1497,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "5021:6:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1500,
                  "name": "_transfersEnabled",
                  "nodeType": "VariableDeclaration",
                  "scope": 1537,
                  "src": "5050:22:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 1499,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "5050:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4844:234:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 1502,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5091:0:9"
            },
            "scope": 2462,
            "src": "4824:715:9",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1557,
              "nodeType": "Block",
              "src": "5916:95:9",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1547,
                        "name": "transfersEnabled",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1484,
                        "src": "5934:16:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 1546,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        10407,
                        10408
                      ],
                      "referencedDeclaration": 10407,
                      "src": "5926:7:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 1548,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5926:25:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1549,
                  "nodeType": "ExpressionStatement",
                  "src": "5926:25:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 1551,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 10404,
                          "src": "5979:3:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 1552,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "5979:10:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1553,
                        "name": "_to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1539,
                        "src": "5991:3:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1554,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1541,
                        "src": "5996:7:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 1550,
                      "name": "doTransfer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1719,
                      "src": "5968:10:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$",
                        "typeString": "function (address,address,uint256) returns (bool)"
                      }
                    },
                    "id": 1555,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5968:36:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 1545,
                  "id": 1556,
                  "nodeType": "Return",
                  "src": "5961:43:9"
                }
              ]
            },
            "documentation": "////////////////\n @notice Send `_amount` tokens to `_to` from `msg.sender`\n @param _to The address of the recipient\n @param _amount The amount of tokens to be transferred\n @return Whether the transfer was successful or not",
            "id": 1558,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "transfer",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1542,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1539,
                  "name": "_to",
                  "nodeType": "VariableDeclaration",
                  "scope": 1558,
                  "src": "5856:11:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1538,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5856:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1541,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 1558,
                  "src": "5869:15:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1540,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5869:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5855:30:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 1545,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1544,
                  "name": "success",
                  "nodeType": "VariableDeclaration",
                  "scope": 1558,
                  "src": "5902:12:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 1543,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "5902:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5901:14:9"
            },
            "scope": 2462,
            "src": "5838:173:9",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1605,
              "nodeType": "Block",
              "src": "6458:619:9",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 1572,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1569,
                        "name": "msg",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10404,
                        "src": "6749:3:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_message",
                          "typeString": "msg"
                        }
                      },
                      "id": 1570,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sender",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "6749:10:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 1571,
                      "name": "controller",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1412,
                      "src": "6763:10:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "6749:24:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 1598,
                  "nodeType": "IfStatement",
                  "src": "6745:278:9",
                  "trueBody": {
                    "id": 1597,
                    "nodeType": "Block",
                    "src": "6775:248:9",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 1574,
                              "name": "transfersEnabled",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1484,
                              "src": "6797:16:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 1573,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              10407,
                              10408
                            ],
                            "referencedDeclaration": 10407,
                            "src": "6789:7:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                              "typeString": "function (bool) pure"
                            }
                          },
                          "id": 1575,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6789:25:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1576,
                        "nodeType": "ExpressionStatement",
                        "src": "6789:25:9"
                      },
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 1584,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 1577,
                                "name": "allowed",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1479,
                                "src": "6895:7:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                  "typeString": "mapping(address => mapping(address => uint256))"
                                }
                              },
                              "id": 1579,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 1578,
                                "name": "_from",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1560,
                                "src": "6903:5:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "6895:14:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 1582,
                            "indexExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 1580,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 10404,
                                "src": "6910:3:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 1581,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "6910:10:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "6895:26:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 1583,
                            "name": "_amount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1564,
                            "src": "6924:7:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "6895:36:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 1587,
                        "nodeType": "IfStatement",
                        "src": "6891:70:9",
                        "trueBody": {
                          "expression": {
                            "argumentTypes": null,
                            "hexValue": "66616c7365",
                            "id": 1585,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "bool",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "6956:5:9",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "value": "false"
                          },
                          "functionReturnParameters": 1568,
                          "id": 1586,
                          "nodeType": "Return",
                          "src": "6949:12:9"
                        }
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1595,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 1588,
                                "name": "allowed",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1479,
                                "src": "6975:7:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                  "typeString": "mapping(address => mapping(address => uint256))"
                                }
                              },
                              "id": 1592,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 1589,
                                "name": "_from",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1560,
                                "src": "6983:5:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "6975:14:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 1593,
                            "indexExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 1590,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 10404,
                                "src": "6990:3:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 1591,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "6990:10:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "6975:26:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "-=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 1594,
                            "name": "_amount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1564,
                            "src": "7005:7:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "6975:37:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1596,
                        "nodeType": "ExpressionStatement",
                        "src": "6975:37:9"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1600,
                        "name": "_from",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1560,
                        "src": "7050:5:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1601,
                        "name": "_to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1562,
                        "src": "7057:3:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1602,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1564,
                        "src": "7062:7:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 1599,
                      "name": "doTransfer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1719,
                      "src": "7039:10:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$",
                        "typeString": "function (address,address,uint256) returns (bool)"
                      }
                    },
                    "id": 1603,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7039:31:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 1568,
                  "id": 1604,
                  "nodeType": "Return",
                  "src": "7032:38:9"
                }
              ]
            },
            "documentation": "@notice Send `_amount` tokens to `_to` from `_from` on the condition it\n  is approved by `_from`\n @param _from The address holding the tokens being transferred\n @param _to The address of the recipient\n @param _amount The amount of tokens to be transferred\n @return True if the transfer was successful",
            "id": 1606,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "transferFrom",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1565,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1560,
                  "name": "_from",
                  "nodeType": "VariableDeclaration",
                  "scope": 1606,
                  "src": "6383:13:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1559,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6383:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1562,
                  "name": "_to",
                  "nodeType": "VariableDeclaration",
                  "scope": 1606,
                  "src": "6398:11:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1561,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6398:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1564,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 1606,
                  "src": "6411:15:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1563,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6411:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6382:45:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 1568,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1567,
                  "name": "success",
                  "nodeType": "VariableDeclaration",
                  "scope": 1606,
                  "src": "6444:12:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 1566,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "6444:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6443:14:9"
            },
            "scope": 2462,
            "src": "6361:716:9",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1718,
              "nodeType": "Block",
              "src": "7541:1425:9",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1619,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 1617,
                      "name": "_amount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1612,
                      "src": "7555:7:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 1618,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "7566:1:9",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "7555:12:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 1623,
                  "nodeType": "IfStatement",
                  "src": "7551:54:9",
                  "trueBody": {
                    "id": 1622,
                    "nodeType": "Block",
                    "src": "7569:36:9",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "74727565",
                          "id": 1620,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "7590:4:9",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "true"
                        },
                        "functionReturnParameters": 1616,
                        "id": 1621,
                        "nodeType": "Return",
                        "src": "7583:11:9"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 1628,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 1625,
                          "name": "parentSnapShotBlock",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1466,
                          "src": "7622:19:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 1626,
                            "name": "block",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10394,
                            "src": "7644:5:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_block",
                              "typeString": "block"
                            }
                          },
                          "id": 1627,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "number",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "7644:12:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "7622:34:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 1624,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        10407,
                        10408
                      ],
                      "referencedDeclaration": 10407,
                      "src": "7614:7:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 1629,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7614:43:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1630,
                  "nodeType": "ExpressionStatement",
                  "src": "7614:43:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 1642,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "id": 1634,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 1632,
                                "name": "_to",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1610,
                                "src": "7745:3:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "!=",
                              "rightExpression": {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 1633,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "7752:1:9",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "src": "7745:8:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "id": 1635,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "7744:10:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&&",
                        "rightExpression": {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "id": 1640,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 1636,
                                "name": "_to",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1610,
                                "src": "7759:3:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "!=",
                              "rightExpression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 1638,
                                    "name": "this",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 10543,
                                    "src": "7774:4:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_MiniMeToken_$2462",
                                      "typeString": "contract MiniMeToken"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_contract$_MiniMeToken_$2462",
                                      "typeString": "contract MiniMeToken"
                                    }
                                  ],
                                  "id": 1637,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "7766:7:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_address_$",
                                    "typeString": "type(address)"
                                  },
                                  "typeName": "address"
                                },
                                "id": 1639,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "7766:13:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "src": "7759:20:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "id": 1641,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "7758:22:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "7744:36:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 1631,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        10407,
                        10408
                      ],
                      "referencedDeclaration": 10407,
                      "src": "7736:7:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 1643,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7736:45:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1644,
                  "nodeType": "ExpressionStatement",
                  "src": "7736:45:9"
                },
                {
                  "assignments": [
                    1645
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1645,
                      "name": "previousBalanceFrom",
                      "nodeType": "VariableDeclaration",
                      "scope": 1719,
                      "src": "7912:23:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": null,
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1651,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1647,
                        "name": "_from",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1608,
                        "src": "7950:5:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 1648,
                          "name": "block",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 10394,
                          "src": "7957:5:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_block",
                            "typeString": "block"
                          }
                        },
                        "id": 1649,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "number",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "7957:12:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 1646,
                      "name": "balanceOfAt",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1915,
                      "src": "7938:11:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_address_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (address,uint256) view returns (uint256)"
                      }
                    },
                    "id": 1650,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7938:32:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7912:58:9"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1654,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 1652,
                      "name": "previousBalanceFrom",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1645,
                      "src": "7984:19:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 1653,
                      "name": "_amount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1612,
                      "src": "8006:7:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "7984:29:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 1658,
                  "nodeType": "IfStatement",
                  "src": "7980:72:9",
                  "trueBody": {
                    "id": 1657,
                    "nodeType": "Block",
                    "src": "8015:37:9",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "66616c7365",
                          "id": 1655,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "8036:5:9",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "false"
                        },
                        "functionReturnParameters": 1616,
                        "id": 1656,
                        "nodeType": "Return",
                        "src": "8029:12:9"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1660,
                        "name": "controller",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1412,
                        "src": "8131:10:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 1659,
                      "name": "isContract",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2341,
                      "src": "8120:10:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                        "typeString": "function (address) view returns (bool)"
                      }
                    },
                    "id": 1661,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8120:22:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 1676,
                  "nodeType": "IfStatement",
                  "src": "8116:198:9",
                  "trueBody": {
                    "id": 1675,
                    "nodeType": "Block",
                    "src": "8144:170:9",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "id": 1672,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 1667,
                                    "name": "_from",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1608,
                                    "src": "8274:5:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 1668,
                                    "name": "_to",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1610,
                                    "src": "8281:3:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 1669,
                                    "name": "_amount",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1612,
                                    "src": "8286:7:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "id": 1664,
                                        "name": "controller",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1412,
                                        "src": "8251:10:9",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      ],
                                      "id": 1663,
                                      "name": "ITokenController",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1396,
                                      "src": "8234:16:9",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_contract$_ITokenController_$1396_$",
                                        "typeString": "type(contract ITokenController)"
                                      }
                                    },
                                    "id": 1665,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "8234:28:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_ITokenController_$1396",
                                      "typeString": "contract ITokenController"
                                    }
                                  },
                                  "id": 1666,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "onTransfer",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 1384,
                                  "src": "8234:39:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$",
                                    "typeString": "function (address,address,uint256) external returns (bool)"
                                  }
                                },
                                "id": 1670,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "8234:60:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "argumentTypes": null,
                                "hexValue": "74727565",
                                "id": 1671,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "bool",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "8298:4:9",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                "value": "true"
                              },
                              "src": "8234:68:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 1662,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              10407,
                              10408
                            ],
                            "referencedDeclaration": 10407,
                            "src": "8226:7:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                              "typeString": "function (bool) pure"
                            }
                          },
                          "id": 1673,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8226:77:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1674,
                        "nodeType": "ExpressionStatement",
                        "src": "8226:77:9"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 1678,
                          "name": "balances",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1473,
                          "src": "8448:8:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_struct$_Checkpoint_$1462_storage_$dyn_storage_$",
                            "typeString": "mapping(address => struct MiniMeToken.Checkpoint storage ref[] storage ref)"
                          }
                        },
                        "id": 1680,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 1679,
                          "name": "_from",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1608,
                          "src": "8457:5:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "8448:15:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_Checkpoint_$1462_storage_$dyn_storage",
                          "typeString": "struct MiniMeToken.Checkpoint storage ref[] storage ref"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 1683,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 1681,
                          "name": "previousBalanceFrom",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1645,
                          "src": "8465:19:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "-",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 1682,
                          "name": "_amount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1612,
                          "src": "8487:7:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "8465:29:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_array$_t_struct$_Checkpoint_$1462_storage_$dyn_storage",
                          "typeString": "struct MiniMeToken.Checkpoint storage ref[] storage ref"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 1677,
                      "name": "updateValueAtNow",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2319,
                      "src": "8431:16:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_array$_t_struct$_Checkpoint_$1462_storage_$dyn_storage_ptr_$_t_uint256_$returns$__$",
                        "typeString": "function (struct MiniMeToken.Checkpoint storage ref[] storage pointer,uint256)"
                      }
                    },
                    "id": 1684,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8431:64:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1685,
                  "nodeType": "ExpressionStatement",
                  "src": "8431:64:9"
                },
                {
                  "assignments": [
                    1686
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1686,
                      "name": "previousBalanceTo",
                      "nodeType": "VariableDeclaration",
                      "scope": 1719,
                      "src": "8614:21:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": null,
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1692,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1688,
                        "name": "_to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1610,
                        "src": "8650:3:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 1689,
                          "name": "block",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 10394,
                          "src": "8655:5:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_block",
                            "typeString": "block"
                          }
                        },
                        "id": 1690,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "number",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "8655:12:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 1687,
                      "name": "balanceOfAt",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1915,
                      "src": "8638:11:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_address_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (address,uint256) view returns (uint256)"
                      }
                    },
                    "id": 1691,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8638:30:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "8614:54:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 1698,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 1696,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 1694,
                            "name": "previousBalanceTo",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1686,
                            "src": "8686:17:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "+",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 1695,
                            "name": "_amount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1612,
                            "src": "8706:7:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "8686:27:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 1697,
                          "name": "previousBalanceTo",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1686,
                          "src": "8717:17:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "8686:48:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 1693,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        10407,
                        10408
                      ],
                      "referencedDeclaration": 10407,
                      "src": "8678:7:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 1699,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8678:57:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1700,
                  "nodeType": "ExpressionStatement",
                  "src": "8678:57:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 1702,
                          "name": "balances",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1473,
                          "src": "8784:8:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_struct$_Checkpoint_$1462_storage_$dyn_storage_$",
                            "typeString": "mapping(address => struct MiniMeToken.Checkpoint storage ref[] storage ref)"
                          }
                        },
                        "id": 1704,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 1703,
                          "name": "_to",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1610,
                          "src": "8793:3:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "8784:13:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_Checkpoint_$1462_storage_$dyn_storage",
                          "typeString": "struct MiniMeToken.Checkpoint storage ref[] storage ref"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 1707,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 1705,
                          "name": "previousBalanceTo",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1686,
                          "src": "8799:17:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "+",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 1706,
                          "name": "_amount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1612,
                          "src": "8819:7:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "8799:27:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_array$_t_struct$_Checkpoint_$1462_storage_$dyn_storage",
                          "typeString": "struct MiniMeToken.Checkpoint storage ref[] storage ref"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 1701,
                      "name": "updateValueAtNow",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2319,
                      "src": "8767:16:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_array$_t_struct$_Checkpoint_$1462_storage_$dyn_storage_ptr_$_t_uint256_$returns$__$",
                        "typeString": "function (struct MiniMeToken.Checkpoint storage ref[] storage pointer,uint256)"
                      }
                    },
                    "id": 1708,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8767:60:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1709,
                  "nodeType": "ExpressionStatement",
                  "src": "8767:60:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1711,
                        "name": "_from",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1608,
                        "src": "8918:5:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1712,
                        "name": "_to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1610,
                        "src": "8925:3:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1713,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1612,
                        "src": "8930:7:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 1710,
                      "name": "Transfer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2447,
                      "src": "8909:8:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 1714,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8909:29:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1715,
                  "nodeType": "ExpressionStatement",
                  "src": "8909:29:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 1716,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "8955:4:9",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 1616,
                  "id": 1717,
                  "nodeType": "Return",
                  "src": "8948:11:9"
                }
              ]
            },
            "documentation": "@dev This is the actual transfer function in the token contract, it can\n  only be called by other functions in this contract.\n @param _from The address holding the tokens being transferred\n @param _to The address of the recipient\n @param _amount The amount of tokens to be transferred\n @return True if the transfer was successful",
            "id": 1719,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "doTransfer",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1613,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1608,
                  "name": "_from",
                  "nodeType": "VariableDeclaration",
                  "scope": 1719,
                  "src": "7476:13:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1607,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7476:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1610,
                  "name": "_to",
                  "nodeType": "VariableDeclaration",
                  "scope": 1719,
                  "src": "7491:11:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1609,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7491:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1612,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 1719,
                  "src": "7504:12:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1611,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "7504:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7475:42:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 1616,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1615,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1719,
                  "src": "7535:4:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 1614,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "7535:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7534:6:9"
            },
            "scope": 2462,
            "src": "7456:1510:9",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1732,
              "nodeType": "Block",
              "src": "9178:57:9",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1727,
                        "name": "_owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1721,
                        "src": "9207:6:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 1728,
                          "name": "block",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 10394,
                          "src": "9215:5:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_block",
                            "typeString": "block"
                          }
                        },
                        "id": 1729,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "number",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "9215:12:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 1726,
                      "name": "balanceOfAt",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1915,
                      "src": "9195:11:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_address_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (address,uint256) view returns (uint256)"
                      }
                    },
                    "id": 1730,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9195:33:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 1725,
                  "id": 1731,
                  "nodeType": "Return",
                  "src": "9188:40:9"
                }
              ]
            },
            "documentation": "@param _owner The address that's balance is being requested\n @return The balance of `_owner` at the current block",
            "id": 1733,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "balanceOf",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1722,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1721,
                  "name": "_owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 1733,
                  "src": "9120:14:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1720,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "9120:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9119:16:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 1725,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1724,
                  "name": "balance",
                  "nodeType": "VariableDeclaration",
                  "scope": 1733,
                  "src": "9161:15:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1723,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9161:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9160:17:9"
            },
            "scope": 2462,
            "src": "9101:134:9",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1800,
              "nodeType": "Block",
              "src": "9716:824:9",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1743,
                        "name": "transfersEnabled",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1484,
                        "src": "9734:16:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 1742,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        10407,
                        10408
                      ],
                      "referencedDeclaration": 10407,
                      "src": "9726:7:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 1744,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9726:25:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1745,
                  "nodeType": "ExpressionStatement",
                  "src": "9726:25:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 1760,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 1749,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 1747,
                                "name": "_amount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1737,
                                "src": "10074:7:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 1748,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "10085:1:9",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "src": "10074:12:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "id": 1750,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "10073:14:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "||",
                        "rightExpression": {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 1758,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "id": 1751,
                                    "name": "allowed",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1479,
                                    "src": "10092:7:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                      "typeString": "mapping(address => mapping(address => uint256))"
                                    }
                                  },
                                  "id": 1754,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 1752,
                                      "name": "msg",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 10404,
                                      "src": "10100:3:9",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_magic_message",
                                        "typeString": "msg"
                                      }
                                    },
                                    "id": 1753,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "sender",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": null,
                                    "src": "10100:10:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "10092:19:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                    "typeString": "mapping(address => uint256)"
                                  }
                                },
                                "id": 1756,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "id": 1755,
                                  "name": "_spender",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1735,
                                  "src": "10112:8:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "10092:29:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 1757,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "10125:1:9",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "src": "10092:34:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "id": 1759,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "10091:36:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "10073:54:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 1746,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        10407,
                        10408
                      ],
                      "referencedDeclaration": 10407,
                      "src": "10065:7:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 1761,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10065:63:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1762,
                  "nodeType": "ExpressionStatement",
                  "src": "10065:63:9"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1764,
                        "name": "controller",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1412,
                        "src": "10222:10:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 1763,
                      "name": "isContract",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2341,
                      "src": "10211:10:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                        "typeString": "function (address) view returns (bool)"
                      }
                    },
                    "id": 1765,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10211:22:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 1781,
                  "nodeType": "IfStatement",
                  "src": "10207:207:9",
                  "trueBody": {
                    "id": 1780,
                    "nodeType": "Block",
                    "src": "10235:179:9",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "id": 1777,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 1771,
                                      "name": "msg",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 10404,
                                      "src": "10364:3:9",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_magic_message",
                                        "typeString": "msg"
                                      }
                                    },
                                    "id": 1772,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "sender",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": null,
                                    "src": "10364:10:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 1773,
                                    "name": "_spender",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1735,
                                    "src": "10376:8:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 1774,
                                    "name": "_amount",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1737,
                                    "src": "10386:7:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "id": 1768,
                                        "name": "controller",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1412,
                                        "src": "10342:10:9",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      ],
                                      "id": 1767,
                                      "name": "ITokenController",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1396,
                                      "src": "10325:16:9",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_contract$_ITokenController_$1396_$",
                                        "typeString": "type(contract ITokenController)"
                                      }
                                    },
                                    "id": 1769,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "10325:28:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_ITokenController_$1396",
                                      "typeString": "contract ITokenController"
                                    }
                                  },
                                  "id": 1770,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "onApprove",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 1395,
                                  "src": "10325:38:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$",
                                    "typeString": "function (address,address,uint256) external returns (bool)"
                                  }
                                },
                                "id": 1775,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "10325:69:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "argumentTypes": null,
                                "hexValue": "74727565",
                                "id": 1776,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "bool",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "10398:4:9",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                "value": "true"
                              },
                              "src": "10325:77:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 1766,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              10407,
                              10408
                            ],
                            "referencedDeclaration": 10407,
                            "src": "10317:7:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                              "typeString": "function (bool) pure"
                            }
                          },
                          "id": 1778,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "10317:86:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1779,
                        "nodeType": "ExpressionStatement",
                        "src": "10317:86:9"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1789,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 1782,
                          "name": "allowed",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1479,
                          "src": "10424:7:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                            "typeString": "mapping(address => mapping(address => uint256))"
                          }
                        },
                        "id": 1786,
                        "indexExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 1783,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10404,
                            "src": "10432:3:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 1784,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "10432:10:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "10424:19:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 1787,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 1785,
                        "name": "_spender",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1735,
                        "src": "10444:8:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "10424:29:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 1788,
                      "name": "_amount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1737,
                      "src": "10456:7:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "10424:39:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 1790,
                  "nodeType": "ExpressionStatement",
                  "src": "10424:39:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 1792,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 10404,
                          "src": "10482:3:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 1793,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "10482:10:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1794,
                        "name": "_spender",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1735,
                        "src": "10494:8:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1795,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1737,
                        "src": "10504:7:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 1791,
                      "name": "Approval",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2461,
                      "src": "10473:8:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 1796,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10473:39:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1797,
                  "nodeType": "ExpressionStatement",
                  "src": "10473:39:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 1798,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "10529:4:9",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 1741,
                  "id": 1799,
                  "nodeType": "Return",
                  "src": "10522:11:9"
                }
              ]
            },
            "documentation": "@notice `msg.sender` approves `_spender` to spend `_amount` tokens on\n  its behalf. This is a modified version of the ERC20 approve function\n  to be a little bit safer\n @param _spender The address of the account able to transfer the tokens\n @param _amount The amount of tokens to be approved for transfer\n @return True if the approval was successful",
            "id": 1801,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "approve",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1738,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1735,
                  "name": "_spender",
                  "nodeType": "VariableDeclaration",
                  "scope": 1801,
                  "src": "9651:16:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1734,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "9651:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1737,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 1801,
                  "src": "9669:15:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1736,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9669:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9650:35:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 1741,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1740,
                  "name": "success",
                  "nodeType": "VariableDeclaration",
                  "scope": 1801,
                  "src": "9702:12:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 1739,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "9702:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9701:14:9"
            },
            "scope": 2462,
            "src": "9634:906:9",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1816,
              "nodeType": "Block",
              "src": "10956:49:9",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 1810,
                        "name": "allowed",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1479,
                        "src": "10973:7:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                          "typeString": "mapping(address => mapping(address => uint256))"
                        }
                      },
                      "id": 1812,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 1811,
                        "name": "_owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1803,
                        "src": "10981:6:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "10973:15:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                        "typeString": "mapping(address => uint256)"
                      }
                    },
                    "id": 1814,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 1813,
                      "name": "_spender",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1805,
                      "src": "10989:8:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "10973:25:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 1809,
                  "id": 1815,
                  "nodeType": "Return",
                  "src": "10966:32:9"
                }
              ]
            },
            "documentation": "@dev This function makes it easy to read the `allowed[]` map\n @param _owner The address of the account that owns the token\n @param _spender The address of the account able to transfer the tokens\n @return Amount of remaining tokens of _owner that _spender is allowed\n  to spend",
            "id": 1817,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "allowance",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1806,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1803,
                  "name": "_owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 1817,
                  "src": "10878:14:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1802,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "10878:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1805,
                  "name": "_spender",
                  "nodeType": "VariableDeclaration",
                  "scope": 1817,
                  "src": "10894:16:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1804,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "10894:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10877:34:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 1809,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1808,
                  "name": "remaining",
                  "nodeType": "VariableDeclaration",
                  "scope": 1817,
                  "src": "10937:17:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1807,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "10937:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10936:19:9"
            },
            "scope": 2462,
            "src": "10859:146:9",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1847,
              "nodeType": "Block",
              "src": "11644:206:9",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 1830,
                            "name": "_spender",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1819,
                            "src": "11670:8:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ApproveAndCallFallBack_$1446",
                              "typeString": "contract ApproveAndCallFallBack"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 1831,
                            "name": "_amount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1821,
                            "src": "11680:7:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_ApproveAndCallFallBack_$1446",
                              "typeString": "contract ApproveAndCallFallBack"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 1829,
                          "name": "approve",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1801,
                          "src": "11662:7:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                            "typeString": "function (address,uint256) returns (bool)"
                          }
                        },
                        "id": 1832,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "11662:26:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 1828,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        10407,
                        10408
                      ],
                      "referencedDeclaration": 10407,
                      "src": "11654:7:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 1833,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11654:35:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1834,
                  "nodeType": "ExpressionStatement",
                  "src": "11654:35:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 1838,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 10404,
                          "src": "11738:3:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 1839,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "11738:10:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1840,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1821,
                        "src": "11762:7:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1841,
                        "name": "this",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10543,
                        "src": "11783:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_MiniMeToken_$2462",
                          "typeString": "contract MiniMeToken"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1842,
                        "name": "_extraData",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1823,
                        "src": "11801:10:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_contract$_MiniMeToken_$2462",
                          "typeString": "contract MiniMeToken"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 1835,
                        "name": "_spender",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1819,
                        "src": "11700:8:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ApproveAndCallFallBack_$1446",
                          "typeString": "contract ApproveAndCallFallBack"
                        }
                      },
                      "id": 1837,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "receiveApproval",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1445,
                      "src": "11700:24:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$_t_address_$_t_bytes_memory_ptr_$returns$__$",
                        "typeString": "function (address,uint256,address,bytes memory) external"
                      }
                    },
                    "id": 1843,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11700:121:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1844,
                  "nodeType": "ExpressionStatement",
                  "src": "11700:121:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 1845,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "11839:4:9",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 1827,
                  "id": 1846,
                  "nodeType": "Return",
                  "src": "11832:11:9"
                }
              ]
            },
            "documentation": "@notice `msg.sender` approves `_spender` to send `_amount` tokens on\n  its behalf, and then a function is triggered in the contract that is\n  being approved, `_spender`. This allows users to use their tokens to\n  interact with contracts in one function call instead of two\n @param _spender The address of the contract able to transfer the tokens\n @param _amount The amount of tokens to be approved for transfer\n @return True if the function call was successful",
            "id": 1848,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "approveAndCall",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1824,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1819,
                  "name": "_spender",
                  "nodeType": "VariableDeclaration",
                  "scope": 1848,
                  "src": "11546:31:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ApproveAndCallFallBack_$1446",
                    "typeString": "contract ApproveAndCallFallBack"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 1818,
                    "name": "ApproveAndCallFallBack",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1446,
                    "src": "11546:22:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ApproveAndCallFallBack_$1446",
                      "typeString": "contract ApproveAndCallFallBack"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1821,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 1848,
                  "src": "11579:15:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1820,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "11579:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1823,
                  "name": "_extraData",
                  "nodeType": "VariableDeclaration",
                  "scope": 1848,
                  "src": "11596:16:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1822,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "11596:5:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11545:68:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 1827,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1826,
                  "name": "success",
                  "nodeType": "VariableDeclaration",
                  "scope": 1848,
                  "src": "11630:12:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 1825,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "11630:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11629:14:9"
            },
            "scope": 2462,
            "src": "11522:328:9",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1858,
              "nodeType": "Block",
              "src": "12028:51:9",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 1854,
                          "name": "block",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 10394,
                          "src": "12059:5:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_block",
                            "typeString": "block"
                          }
                        },
                        "id": 1855,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "number",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "12059:12:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 1853,
                      "name": "totalSupplyAt",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1962,
                      "src": "12045:13:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256) view returns (uint256)"
                      }
                    },
                    "id": 1856,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12045:27:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 1852,
                  "id": 1857,
                  "nodeType": "Return",
                  "src": "12038:34:9"
                }
              ]
            },
            "documentation": "@dev This function makes it easy to get the total number of tokens\n @return The total number of tokens",
            "id": 1859,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "totalSupply",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1849,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "11994:2:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 1852,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1851,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1859,
                  "src": "12022:4:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1850,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "12022:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12021:6:9"
            },
            "scope": 2462,
            "src": "11974:105:9",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1914,
              "nodeType": "Block",
              "src": "12520:831:9",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 1884,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 1873,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 1868,
                                "name": "balances",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1473,
                                "src": "12863:8:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_struct$_Checkpoint_$1462_storage_$dyn_storage_$",
                                  "typeString": "mapping(address => struct MiniMeToken.Checkpoint storage ref[] storage ref)"
                                }
                              },
                              "id": 1870,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 1869,
                                "name": "_owner",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1861,
                                "src": "12872:6:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "12863:16:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_struct$_Checkpoint_$1462_storage_$dyn_storage",
                                "typeString": "struct MiniMeToken.Checkpoint storage ref[] storage ref"
                              }
                            },
                            "id": 1871,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "12863:23:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 1872,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "12890:1:9",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "12863:28:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        }
                      ],
                      "id": 1874,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "12862:30:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "||",
                    "rightExpression": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 1882,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "id": 1875,
                                  "name": "balances",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1473,
                                  "src": "12897:8:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_struct$_Checkpoint_$1462_storage_$dyn_storage_$",
                                    "typeString": "mapping(address => struct MiniMeToken.Checkpoint storage ref[] storage ref)"
                                  }
                                },
                                "id": 1877,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "id": 1876,
                                  "name": "_owner",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1861,
                                  "src": "12906:6:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "12897:16:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_struct$_Checkpoint_$1462_storage_$dyn_storage",
                                  "typeString": "struct MiniMeToken.Checkpoint storage ref[] storage ref"
                                }
                              },
                              "id": 1879,
                              "indexExpression": {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 1878,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "12914:1:9",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "12897:19:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Checkpoint_$1462_storage",
                                "typeString": "struct MiniMeToken.Checkpoint storage ref"
                              }
                            },
                            "id": 1880,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "fromBlock",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1459,
                            "src": "12897:29:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint128",
                              "typeString": "uint128"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 1881,
                            "name": "_blockNumber",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1863,
                            "src": "12929:12:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "12897:44:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        }
                      ],
                      "id": 1883,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "12896:46:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "12862:80:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 1912,
                    "nodeType": "Block",
                    "src": "13271:74:9",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 1906,
                                "name": "balances",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1473,
                                "src": "13303:8:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_struct$_Checkpoint_$1462_storage_$dyn_storage_$",
                                  "typeString": "mapping(address => struct MiniMeToken.Checkpoint storage ref[] storage ref)"
                                }
                              },
                              "id": 1908,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 1907,
                                "name": "_owner",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1861,
                                "src": "13312:6:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "13303:16:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_struct$_Checkpoint_$1462_storage_$dyn_storage",
                                "typeString": "struct MiniMeToken.Checkpoint storage ref[] storage ref"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 1909,
                              "name": "_blockNumber",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1863,
                              "src": "13321:12:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_array$_t_struct$_Checkpoint_$1462_storage_$dyn_storage",
                                "typeString": "struct MiniMeToken.Checkpoint storage ref[] storage ref"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 1905,
                            "name": "getValueAt",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2248,
                            "src": "13292:10:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_array$_t_struct$_Checkpoint_$1462_storage_$dyn_storage_ptr_$_t_uint256_$returns$_t_uint256_$",
                              "typeString": "function (struct MiniMeToken.Checkpoint storage ref[] storage pointer,uint256) view returns (uint256)"
                            }
                          },
                          "id": 1910,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "13292:42:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 1867,
                        "id": 1911,
                        "nodeType": "Return",
                        "src": "13285:49:9"
                      }
                    ]
                  },
                  "id": 1913,
                  "nodeType": "IfStatement",
                  "src": "12858:487:9",
                  "trueBody": {
                    "id": 1904,
                    "nodeType": "Block",
                    "src": "12944:321:9",
                    "statements": [
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 1889,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 1886,
                                "name": "parentToken",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1464,
                                "src": "12970:11:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_MiniMeToken_$2462",
                                  "typeString": "contract MiniMeToken"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_MiniMeToken_$2462",
                                  "typeString": "contract MiniMeToken"
                                }
                              ],
                              "id": 1885,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "12962:7:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": "address"
                            },
                            "id": 1887,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "12962:20:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 1888,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "12986:1:9",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "12962:25:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "id": 1902,
                          "nodeType": "Block",
                          "src": "13106:74:9",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 1900,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "13164:1:9",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "functionReturnParameters": 1867,
                              "id": 1901,
                              "nodeType": "Return",
                              "src": "13157:8:9"
                            }
                          ]
                        },
                        "id": 1903,
                        "nodeType": "IfStatement",
                        "src": "12958:222:9",
                        "trueBody": {
                          "id": 1899,
                          "nodeType": "Block",
                          "src": "12989:111:9",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 1892,
                                    "name": "_owner",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1861,
                                    "src": "13038:6:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "id": 1894,
                                        "name": "_blockNumber",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1863,
                                        "src": "13050:12:9",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      {
                                        "argumentTypes": null,
                                        "id": 1895,
                                        "name": "parentSnapShotBlock",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1466,
                                        "src": "13064:19:9",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      ],
                                      "id": 1893,
                                      "name": "min",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2358,
                                      "src": "13046:3:9",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                                      }
                                    },
                                    "id": 1896,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "13046:38:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 1890,
                                    "name": "parentToken",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1464,
                                    "src": "13014:11:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_MiniMeToken_$2462",
                                      "typeString": "contract MiniMeToken"
                                    }
                                  },
                                  "id": 1891,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "balanceOfAt",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 1915,
                                  "src": "13014:23:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_external_view$_t_address_$_t_uint256_$returns$_t_uint256_$",
                                    "typeString": "function (address,uint256) view external returns (uint256)"
                                  }
                                },
                                "id": 1897,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "13014:71:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "functionReturnParameters": 1867,
                              "id": 1898,
                              "nodeType": "Return",
                              "src": "13007:78:9"
                            }
                          ]
                        }
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": "/////////////\n @dev Queries the balance of `_owner` at a specific `_blockNumber`\n @param _owner The address from which the balance will be retrieved\n @param _blockNumber The block number when the balance is queried\n @return The balance at `_blockNumber`",
            "id": 1915,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "balanceOfAt",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1864,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1861,
                  "name": "_owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 1915,
                  "src": "12454:14:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1860,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "12454:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1863,
                  "name": "_blockNumber",
                  "nodeType": "VariableDeclaration",
                  "scope": 1915,
                  "src": "12470:17:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1862,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "12470:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12453:35:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 1867,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1866,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1915,
                  "src": "12514:4:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1865,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "12514:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12513:6:9"
            },
            "scope": 2462,
            "src": "12433:918:9",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1961,
              "nodeType": "Block",
              "src": "13636:826:9",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 1934,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 1925,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 1922,
                              "name": "totalSupplyHistory",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1482,
                              "src": "14003:18:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_struct$_Checkpoint_$1462_storage_$dyn_storage",
                                "typeString": "struct MiniMeToken.Checkpoint storage ref[] storage ref"
                              }
                            },
                            "id": 1923,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "14003:25:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 1924,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "14032:1:9",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "14003:30:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        }
                      ],
                      "id": 1926,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "14002:32:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "||",
                    "rightExpression": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 1932,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 1927,
                                "name": "totalSupplyHistory",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1482,
                                "src": "14039:18:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_struct$_Checkpoint_$1462_storage_$dyn_storage",
                                  "typeString": "struct MiniMeToken.Checkpoint storage ref[] storage ref"
                                }
                              },
                              "id": 1929,
                              "indexExpression": {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 1928,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "14058:1:9",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "14039:21:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Checkpoint_$1462_storage",
                                "typeString": "struct MiniMeToken.Checkpoint storage ref"
                              }
                            },
                            "id": 1930,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "fromBlock",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1459,
                            "src": "14039:31:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint128",
                              "typeString": "uint128"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 1931,
                            "name": "_blockNumber",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1917,
                            "src": "14073:12:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "14039:46:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        }
                      ],
                      "id": 1933,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "14038:48:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "14002:84:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 1959,
                    "nodeType": "Block",
                    "src": "14380:76:9",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 1955,
                              "name": "totalSupplyHistory",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1482,
                              "src": "14412:18:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_struct$_Checkpoint_$1462_storage_$dyn_storage",
                                "typeString": "struct MiniMeToken.Checkpoint storage ref[] storage ref"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 1956,
                              "name": "_blockNumber",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1917,
                              "src": "14432:12:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_array$_t_struct$_Checkpoint_$1462_storage_$dyn_storage",
                                "typeString": "struct MiniMeToken.Checkpoint storage ref[] storage ref"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 1954,
                            "name": "getValueAt",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2248,
                            "src": "14401:10:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_array$_t_struct$_Checkpoint_$1462_storage_$dyn_storage_ptr_$_t_uint256_$returns$_t_uint256_$",
                              "typeString": "function (struct MiniMeToken.Checkpoint storage ref[] storage pointer,uint256) view returns (uint256)"
                            }
                          },
                          "id": 1957,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "14401:44:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 1921,
                        "id": 1958,
                        "nodeType": "Return",
                        "src": "14394:51:9"
                      }
                    ]
                  },
                  "id": 1960,
                  "nodeType": "IfStatement",
                  "src": "13998:458:9",
                  "trueBody": {
                    "id": 1953,
                    "nodeType": "Block",
                    "src": "14088:286:9",
                    "statements": [
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 1939,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 1936,
                                "name": "parentToken",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1464,
                                "src": "14114:11:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_MiniMeToken_$2462",
                                  "typeString": "contract MiniMeToken"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_MiniMeToken_$2462",
                                  "typeString": "contract MiniMeToken"
                                }
                              ],
                              "id": 1935,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "14106:7:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": "address"
                            },
                            "id": 1937,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "14106:20:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 1938,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "14130:1:9",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "14106:25:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "id": 1951,
                          "nodeType": "Block",
                          "src": "14244:41:9",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 1949,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "14269:1:9",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "functionReturnParameters": 1921,
                              "id": 1950,
                              "nodeType": "Return",
                              "src": "14262:8:9"
                            }
                          ]
                        },
                        "id": 1952,
                        "nodeType": "IfStatement",
                        "src": "14102:183:9",
                        "trueBody": {
                          "id": 1948,
                          "nodeType": "Block",
                          "src": "14133:105:9",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "id": 1943,
                                        "name": "_blockNumber",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1917,
                                        "src": "14188:12:9",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      {
                                        "argumentTypes": null,
                                        "id": 1944,
                                        "name": "parentSnapShotBlock",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1466,
                                        "src": "14202:19:9",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      ],
                                      "id": 1942,
                                      "name": "min",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2358,
                                      "src": "14184:3:9",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                                      }
                                    },
                                    "id": 1945,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "14184:38:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 1940,
                                    "name": "parentToken",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1464,
                                    "src": "14158:11:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_MiniMeToken_$2462",
                                      "typeString": "contract MiniMeToken"
                                    }
                                  },
                                  "id": 1941,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "totalSupplyAt",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 1962,
                                  "src": "14158:25:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_external_view$_t_uint256_$returns$_t_uint256_$",
                                    "typeString": "function (uint256) view external returns (uint256)"
                                  }
                                },
                                "id": 1946,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "14158:65:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "functionReturnParameters": 1921,
                              "id": 1947,
                              "nodeType": "Return",
                              "src": "14151:72:9"
                            }
                          ]
                        }
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": "@notice Total amount of tokens at a specific `_blockNumber`.\n @param _blockNumber The block number when the totalSupply is queried\n @return The total amount of tokens at `_blockNumber`",
            "id": 1962,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "totalSupplyAt",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1918,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1917,
                  "name": "_blockNumber",
                  "nodeType": "VariableDeclaration",
                  "scope": 1962,
                  "src": "13587:17:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1916,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "13587:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "13586:19:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 1921,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1920,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1962,
                  "src": "13630:4:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1919,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "13630:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "13629:6:9"
            },
            "scope": 2462,
            "src": "13564:898:9",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 2017,
              "nodeType": "Block",
              "src": "15424:530:9",
              "statements": [
                {
                  "assignments": [
                    1978
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1978,
                      "name": "snapshot",
                      "nodeType": "VariableDeclaration",
                      "scope": 2018,
                      "src": "15434:16:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1977,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "15434:7:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1988,
                  "initialValue": {
                    "argumentTypes": null,
                    "condition": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 1981,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 1979,
                        "name": "_snapshotBlock",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1970,
                        "src": "15453:14:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 1980,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "15471:1:9",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "src": "15453:19:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "falseExpression": {
                      "argumentTypes": null,
                      "id": 1986,
                      "name": "_snapshotBlock",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1970,
                      "src": "15494:14:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 1987,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "Conditional",
                    "src": "15453:55:9",
                    "trueExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 1985,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 1982,
                          "name": "block",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 10394,
                          "src": "15475:5:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_block",
                            "typeString": "block"
                          }
                        },
                        "id": 1983,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "number",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "15475:12:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "-",
                      "rightExpression": {
                        "argumentTypes": null,
                        "hexValue": "31",
                        "id": 1984,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "15490:1:9",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        },
                        "value": "1"
                      },
                      "src": "15475:16:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "15434:74:9"
                },
                {
                  "assignments": [
                    1990
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1990,
                      "name": "cloneToken",
                      "nodeType": "VariableDeclaration",
                      "scope": 2018,
                      "src": "15519:22:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_MiniMeToken_$2462",
                        "typeString": "contract MiniMeToken"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 1989,
                        "name": "MiniMeToken",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 2462,
                        "src": "15519:11:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_MiniMeToken_$2462",
                          "typeString": "contract MiniMeToken"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2000,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1993,
                        "name": "this",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10543,
                        "src": "15587:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_MiniMeToken_$2462",
                          "typeString": "contract MiniMeToken"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1994,
                        "name": "snapshot",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1978,
                        "src": "15605:8:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1995,
                        "name": "_cloneTokenName",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1964,
                        "src": "15627:15:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1996,
                        "name": "_cloneDecimalUnits",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1966,
                        "src": "15656:18:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1997,
                        "name": "_cloneTokenSymbol",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1968,
                        "src": "15688:17:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1998,
                        "name": "_transfersEnabled",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1972,
                        "src": "15719:17:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_MiniMeToken_$2462",
                          "typeString": "contract MiniMeToken"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        },
                        {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        },
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 1991,
                        "name": "tokenFactory",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1486,
                        "src": "15544:12:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_MiniMeTokenFactory_$2503",
                          "typeString": "contract MiniMeTokenFactory"
                        }
                      },
                      "id": 1992,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "createCloneToken",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2502,
                      "src": "15544:29:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_contract$_MiniMeToken_$2462_$_t_uint256_$_t_string_memory_ptr_$_t_uint8_$_t_string_memory_ptr_$_t_bool_$returns$_t_contract$_MiniMeToken_$2462_$",
                        "typeString": "function (contract MiniMeToken,uint256,string memory,uint8,string memory,bool) external returns (contract MiniMeToken)"
                      }
                    },
                    "id": 1999,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15544:202:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_MiniMeToken_$2462",
                      "typeString": "contract MiniMeToken"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "15519:227:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2004,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 10404,
                          "src": "15785:3:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 2005,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "15785:10:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 2001,
                        "name": "cloneToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1990,
                        "src": "15757:10:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_MiniMeToken_$2462",
                          "typeString": "contract MiniMeToken"
                        }
                      },
                      "id": 2003,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "changeController",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1433,
                      "src": "15757:27:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address) external"
                      }
                    },
                    "id": 2006,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15757:39:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2007,
                  "nodeType": "ExpressionStatement",
                  "src": "15757:39:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 2010,
                            "name": "cloneToken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1990,
                            "src": "15898:10:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_MiniMeToken_$2462",
                              "typeString": "contract MiniMeToken"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_MiniMeToken_$2462",
                              "typeString": "contract MiniMeToken"
                            }
                          ],
                          "id": 2009,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "15890:7:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 2011,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "15890:19:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2012,
                        "name": "snapshot",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1978,
                        "src": "15911:8:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 2008,
                      "name": "NewCloneToken",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2453,
                      "src": "15876:13:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256)"
                      }
                    },
                    "id": 2013,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15876:44:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2014,
                  "nodeType": "ExpressionStatement",
                  "src": "15876:44:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2015,
                    "name": "cloneToken",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1990,
                    "src": "15937:10:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_MiniMeToken_$2462",
                      "typeString": "contract MiniMeToken"
                    }
                  },
                  "functionReturnParameters": 1976,
                  "id": 2016,
                  "nodeType": "Return",
                  "src": "15930:17:9"
                }
              ]
            },
            "documentation": "/////////////\n @notice Creates a new clone token with the initial distribution being\n  this token at `_snapshotBlock`\n @param _cloneTokenName Name of the clone token\n @param _cloneDecimalUnits Number of decimals of the smallest unit\n @param _cloneTokenSymbol Symbol of the clone token\n @param _snapshotBlock Block when the distribution of the parent token is\n  copied to set the initial distribution of the new clone token;\n  if the block is zero than the actual block, the current block is used\n @param _transfersEnabled True if transfers are allowed in the clone\n @return The address of the new MiniMeToken Contract",
            "id": 2018,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "createCloneToken",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1973,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1964,
                  "name": "_cloneTokenName",
                  "nodeType": "VariableDeclaration",
                  "scope": 2018,
                  "src": "15234:22:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 1963,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "15234:6:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1966,
                  "name": "_cloneDecimalUnits",
                  "nodeType": "VariableDeclaration",
                  "scope": 2018,
                  "src": "15266:24:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 1965,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "15266:5:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1968,
                  "name": "_cloneTokenSymbol",
                  "nodeType": "VariableDeclaration",
                  "scope": 2018,
                  "src": "15300:24:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 1967,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "15300:6:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1970,
                  "name": "_snapshotBlock",
                  "nodeType": "VariableDeclaration",
                  "scope": 2018,
                  "src": "15334:19:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1969,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "15334:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1972,
                  "name": "_transfersEnabled",
                  "nodeType": "VariableDeclaration",
                  "scope": 2018,
                  "src": "15363:22:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 1971,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "15363:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "15224:167:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 1976,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1975,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2018,
                  "src": "15407:11:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_MiniMeToken_$2462",
                    "typeString": "contract MiniMeToken"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 1974,
                    "name": "MiniMeToken",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 2462,
                    "src": "15407:11:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_MiniMeToken_$2462",
                      "typeString": "contract MiniMeToken"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "15406:13:9"
            },
            "scope": 2462,
            "src": "15199:755:9",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 2080,
              "nodeType": "Block",
              "src": "16376:480:9",
              "statements": [
                {
                  "assignments": [
                    2030
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2030,
                      "name": "curTotalSupply",
                      "nodeType": "VariableDeclaration",
                      "scope": 2081,
                      "src": "16386:19:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2029,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "16386:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2033,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 2031,
                      "name": "totalSupply",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1859,
                      "src": "16408:11:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                        "typeString": "function () view returns (uint256)"
                      }
                    },
                    "id": 2032,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "16408:13:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "16386:35:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 2039,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 2037,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 2035,
                            "name": "curTotalSupply",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2030,
                            "src": "16439:14:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "+",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 2036,
                            "name": "_amount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2022,
                            "src": "16456:7:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "16439:24:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 2038,
                          "name": "curTotalSupply",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2030,
                          "src": "16467:14:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "16439:42:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 2034,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        10407,
                        10408
                      ],
                      "referencedDeclaration": 10407,
                      "src": "16431:7:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 2040,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "16431:51:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2041,
                  "nodeType": "ExpressionStatement",
                  "src": "16431:51:9"
                },
                {
                  "assignments": [
                    2043
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2043,
                      "name": "previousBalanceTo",
                      "nodeType": "VariableDeclaration",
                      "scope": 2081,
                      "src": "16514:22:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2042,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "16514:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2047,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2045,
                        "name": "_owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2020,
                        "src": "16549:6:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 2044,
                      "name": "balanceOf",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1733,
                      "src": "16539:9:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$",
                        "typeString": "function (address) view returns (uint256)"
                      }
                    },
                    "id": 2046,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "16539:17:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "16514:42:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 2053,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 2051,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 2049,
                            "name": "previousBalanceTo",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2043,
                            "src": "16574:17:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "+",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 2050,
                            "name": "_amount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2022,
                            "src": "16594:7:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "16574:27:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 2052,
                          "name": "previousBalanceTo",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2043,
                          "src": "16605:17:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "16574:48:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 2048,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        10407,
                        10408
                      ],
                      "referencedDeclaration": 10407,
                      "src": "16566:7:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 2054,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "16566:57:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2055,
                  "nodeType": "ExpressionStatement",
                  "src": "16566:57:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2057,
                        "name": "totalSupplyHistory",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1482,
                        "src": "16672:18:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_Checkpoint_$1462_storage_$dyn_storage",
                          "typeString": "struct MiniMeToken.Checkpoint storage ref[] storage ref"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 2060,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 2058,
                          "name": "curTotalSupply",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2030,
                          "src": "16692:14:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "+",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 2059,
                          "name": "_amount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2022,
                          "src": "16709:7:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "16692:24:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_array$_t_struct$_Checkpoint_$1462_storage_$dyn_storage",
                          "typeString": "struct MiniMeToken.Checkpoint storage ref[] storage ref"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 2056,
                      "name": "updateValueAtNow",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2319,
                      "src": "16655:16:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_array$_t_struct$_Checkpoint_$1462_storage_$dyn_storage_ptr_$_t_uint256_$returns$__$",
                        "typeString": "function (struct MiniMeToken.Checkpoint storage ref[] storage pointer,uint256)"
                      }
                    },
                    "id": 2061,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "16655:62:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2062,
                  "nodeType": "ExpressionStatement",
                  "src": "16655:62:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 2064,
                          "name": "balances",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1473,
                          "src": "16744:8:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_struct$_Checkpoint_$1462_storage_$dyn_storage_$",
                            "typeString": "mapping(address => struct MiniMeToken.Checkpoint storage ref[] storage ref)"
                          }
                        },
                        "id": 2066,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 2065,
                          "name": "_owner",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2020,
                          "src": "16753:6:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "16744:16:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_Checkpoint_$1462_storage_$dyn_storage",
                          "typeString": "struct MiniMeToken.Checkpoint storage ref[] storage ref"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 2069,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 2067,
                          "name": "previousBalanceTo",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2043,
                          "src": "16762:17:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "+",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 2068,
                          "name": "_amount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2022,
                          "src": "16782:7:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "16762:27:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_array$_t_struct$_Checkpoint_$1462_storage_$dyn_storage",
                          "typeString": "struct MiniMeToken.Checkpoint storage ref[] storage ref"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 2063,
                      "name": "updateValueAtNow",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2319,
                      "src": "16727:16:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_array$_t_struct$_Checkpoint_$1462_storage_$dyn_storage_ptr_$_t_uint256_$returns$__$",
                        "typeString": "function (struct MiniMeToken.Checkpoint storage ref[] storage pointer,uint256)"
                      }
                    },
                    "id": 2070,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "16727:63:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2071,
                  "nodeType": "ExpressionStatement",
                  "src": "16727:63:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 2073,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "16809:1:9",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      {
                        "argumentTypes": null,
                        "id": 2074,
                        "name": "_owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2020,
                        "src": "16812:6:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2075,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2022,
                        "src": "16820:7:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 2072,
                      "name": "Transfer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2447,
                      "src": "16800:8:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 2076,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "16800:28:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2077,
                  "nodeType": "ExpressionStatement",
                  "src": "16800:28:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 2078,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "16845:4:9",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 2028,
                  "id": 2079,
                  "nodeType": "Return",
                  "src": "16838:11:9"
                }
              ]
            },
            "documentation": "/////////////\n @notice Generates `_amount` tokens that are assigned to `_owner`\n @param _owner The address that will be assigned the new tokens\n @param _amount The quantity of tokens generated\n @return True if the tokens are generated correctly",
            "id": 2081,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": null,
                "id": 2025,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 2024,
                  "name": "onlyController",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1410,
                  "src": "16339:14:9",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "16339:14:9"
              }
            ],
            "name": "generateTokens",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2023,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2020,
                  "name": "_owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 2081,
                  "src": "16309:14:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2019,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "16309:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2022,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 2081,
                  "src": "16325:12:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2021,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "16325:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "16308:30:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 2028,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2027,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2081,
                  "src": "16370:4:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 2026,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "16370:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "16369:6:9"
            },
            "scope": 2462,
            "src": "16285:571:9",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 2139,
              "nodeType": "Block",
              "src": "17176:405:9",
              "statements": [
                {
                  "assignments": [
                    2093
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2093,
                      "name": "curTotalSupply",
                      "nodeType": "VariableDeclaration",
                      "scope": 2140,
                      "src": "17186:19:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2092,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "17186:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2096,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 2094,
                      "name": "totalSupply",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1859,
                      "src": "17208:11:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                        "typeString": "function () view returns (uint256)"
                      }
                    },
                    "id": 2095,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17208:13:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "17186:35:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 2100,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 2098,
                          "name": "curTotalSupply",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2093,
                          "src": "17239:14:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 2099,
                          "name": "_amount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2085,
                          "src": "17257:7:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "17239:25:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 2097,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        10407,
                        10408
                      ],
                      "referencedDeclaration": 10407,
                      "src": "17231:7:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 2101,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17231:34:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2102,
                  "nodeType": "ExpressionStatement",
                  "src": "17231:34:9"
                },
                {
                  "assignments": [
                    2104
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2104,
                      "name": "previousBalanceFrom",
                      "nodeType": "VariableDeclaration",
                      "scope": 2140,
                      "src": "17275:24:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2103,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "17275:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2108,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2106,
                        "name": "_owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2083,
                        "src": "17312:6:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 2105,
                      "name": "balanceOf",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1733,
                      "src": "17302:9:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$",
                        "typeString": "function (address) view returns (uint256)"
                      }
                    },
                    "id": 2107,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17302:17:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "17275:44:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 2112,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 2110,
                          "name": "previousBalanceFrom",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2104,
                          "src": "17337:19:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 2111,
                          "name": "_amount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2085,
                          "src": "17360:7:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "17337:30:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 2109,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        10407,
                        10408
                      ],
                      "referencedDeclaration": 10407,
                      "src": "17329:7:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 2113,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17329:39:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2114,
                  "nodeType": "ExpressionStatement",
                  "src": "17329:39:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2116,
                        "name": "totalSupplyHistory",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1482,
                        "src": "17395:18:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_Checkpoint_$1462_storage_$dyn_storage",
                          "typeString": "struct MiniMeToken.Checkpoint storage ref[] storage ref"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 2119,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 2117,
                          "name": "curTotalSupply",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2093,
                          "src": "17415:14:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "-",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 2118,
                          "name": "_amount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2085,
                          "src": "17432:7:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "17415:24:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_array$_t_struct$_Checkpoint_$1462_storage_$dyn_storage",
                          "typeString": "struct MiniMeToken.Checkpoint storage ref[] storage ref"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 2115,
                      "name": "updateValueAtNow",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2319,
                      "src": "17378:16:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_array$_t_struct$_Checkpoint_$1462_storage_$dyn_storage_ptr_$_t_uint256_$returns$__$",
                        "typeString": "function (struct MiniMeToken.Checkpoint storage ref[] storage pointer,uint256)"
                      }
                    },
                    "id": 2120,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17378:62:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2121,
                  "nodeType": "ExpressionStatement",
                  "src": "17378:62:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 2123,
                          "name": "balances",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1473,
                          "src": "17467:8:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_struct$_Checkpoint_$1462_storage_$dyn_storage_$",
                            "typeString": "mapping(address => struct MiniMeToken.Checkpoint storage ref[] storage ref)"
                          }
                        },
                        "id": 2125,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 2124,
                          "name": "_owner",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2083,
                          "src": "17476:6:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "17467:16:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_Checkpoint_$1462_storage_$dyn_storage",
                          "typeString": "struct MiniMeToken.Checkpoint storage ref[] storage ref"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 2128,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 2126,
                          "name": "previousBalanceFrom",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2104,
                          "src": "17485:19:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "-",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 2127,
                          "name": "_amount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2085,
                          "src": "17507:7:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "17485:29:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_array$_t_struct$_Checkpoint_$1462_storage_$dyn_storage",
                          "typeString": "struct MiniMeToken.Checkpoint storage ref[] storage ref"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 2122,
                      "name": "updateValueAtNow",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2319,
                      "src": "17450:16:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_array$_t_struct$_Checkpoint_$1462_storage_$dyn_storage_ptr_$_t_uint256_$returns$__$",
                        "typeString": "function (struct MiniMeToken.Checkpoint storage ref[] storage pointer,uint256)"
                      }
                    },
                    "id": 2129,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17450:65:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2130,
                  "nodeType": "ExpressionStatement",
                  "src": "17450:65:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2132,
                        "name": "_owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2083,
                        "src": "17534:6:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 2133,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "17542:1:9",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      {
                        "argumentTypes": null,
                        "id": 2134,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2085,
                        "src": "17545:7:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 2131,
                      "name": "Transfer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2447,
                      "src": "17525:8:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 2135,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17525:28:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2136,
                  "nodeType": "ExpressionStatement",
                  "src": "17525:28:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 2137,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "17570:4:9",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 2091,
                  "id": 2138,
                  "nodeType": "Return",
                  "src": "17563:11:9"
                }
              ]
            },
            "documentation": "@notice Burns `_amount` tokens from `_owner`\n @param _owner The address that will lose the tokens\n @param _amount The quantity of tokens to burn\n @return True if the tokens are burned correctly",
            "id": 2140,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": null,
                "id": 2088,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 2087,
                  "name": "onlyController",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1410,
                  "src": "17139:14:9",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "17139:14:9"
              }
            ],
            "name": "destroyTokens",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2086,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2083,
                  "name": "_owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 2140,
                  "src": "17109:14:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2082,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "17109:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2085,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 2140,
                  "src": "17125:12:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2084,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "17125:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "17108:30:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 2091,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2090,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2140,
                  "src": "17170:4:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 2089,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "17170:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "17169:6:9"
            },
            "scope": 2462,
            "src": "17086:495:9",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 2151,
              "nodeType": "Block",
              "src": "17875:53:9",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2149,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 2147,
                      "name": "transfersEnabled",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1484,
                      "src": "17885:16:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 2148,
                      "name": "_transfersEnabled",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2142,
                      "src": "17904:17:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "17885:36:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 2150,
                  "nodeType": "ExpressionStatement",
                  "src": "17885:36:9"
                }
              ]
            },
            "documentation": "/////////////\n @notice Enables token holders to transfer their tokens freely if true\n @param _transfersEnabled True if transfers are allowed in the clone",
            "id": 2152,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": null,
                "id": 2145,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 2144,
                  "name": "onlyController",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1410,
                  "src": "17853:14:9",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "17853:14:9"
              }
            ],
            "name": "enableTransfers",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2143,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2142,
                  "name": "_transfersEnabled",
                  "nodeType": "VariableDeclaration",
                  "scope": 2152,
                  "src": "17829:22:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 2141,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "17829:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "17828:24:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 2146,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "17875:0:9"
            },
            "scope": 2462,
            "src": "17804:124:9",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 2247,
              "nodeType": "Block",
              "src": "18402:685:9",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2165,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2162,
                        "name": "checkpoints",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2155,
                        "src": "18416:11:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_Checkpoint_$1462_storage_$dyn_storage_ptr",
                          "typeString": "struct MiniMeToken.Checkpoint storage ref[] storage pointer"
                        }
                      },
                      "id": 2163,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "18416:18:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 2164,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "18438:1:9",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "18416:23:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 2168,
                  "nodeType": "IfStatement",
                  "src": "18412:49:9",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 2166,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "18460:1:9",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "functionReturnParameters": 2161,
                    "id": 2167,
                    "nodeType": "Return",
                    "src": "18453:8:9"
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2177,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 2169,
                      "name": "_block",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2157,
                      "src": "18517:6:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 2170,
                          "name": "checkpoints",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2155,
                          "src": "18527:11:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_struct$_Checkpoint_$1462_storage_$dyn_storage_ptr",
                            "typeString": "struct MiniMeToken.Checkpoint storage ref[] storage pointer"
                          }
                        },
                        "id": 2175,
                        "indexExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 2174,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 2171,
                              "name": "checkpoints",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2155,
                              "src": "18539:11:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_struct$_Checkpoint_$1462_storage_$dyn_storage_ptr",
                                "typeString": "struct MiniMeToken.Checkpoint storage ref[] storage pointer"
                              }
                            },
                            "id": 2172,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "18539:18:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "-",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "31",
                            "id": 2173,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "18558:1:9",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            },
                            "value": "1"
                          },
                          "src": "18539:20:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "18527:33:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Checkpoint_$1462_storage",
                          "typeString": "struct MiniMeToken.Checkpoint storage ref"
                        }
                      },
                      "id": 2176,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "fromBlock",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1459,
                      "src": "18527:43:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint128",
                        "typeString": "uint128"
                      }
                    },
                    "src": "18517:53:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 2186,
                  "nodeType": "IfStatement",
                  "src": "18513:117:9",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 2178,
                          "name": "checkpoints",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2155,
                          "src": "18591:11:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_struct$_Checkpoint_$1462_storage_$dyn_storage_ptr",
                            "typeString": "struct MiniMeToken.Checkpoint storage ref[] storage pointer"
                          }
                        },
                        "id": 2183,
                        "indexExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 2182,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 2179,
                              "name": "checkpoints",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2155,
                              "src": "18603:11:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_struct$_Checkpoint_$1462_storage_$dyn_storage_ptr",
                                "typeString": "struct MiniMeToken.Checkpoint storage ref[] storage pointer"
                              }
                            },
                            "id": 2180,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "18603:18:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "-",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "31",
                            "id": 2181,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "18622:1:9",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            },
                            "value": "1"
                          },
                          "src": "18603:20:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "18591:33:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Checkpoint_$1462_storage",
                          "typeString": "struct MiniMeToken.Checkpoint storage ref"
                        }
                      },
                      "id": 2184,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "value",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1461,
                      "src": "18591:39:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint128",
                        "typeString": "uint128"
                      }
                    },
                    "functionReturnParameters": 2161,
                    "id": 2185,
                    "nodeType": "Return",
                    "src": "18584:46:9"
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2192,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 2187,
                      "name": "_block",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2157,
                      "src": "18644:6:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 2188,
                          "name": "checkpoints",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2155,
                          "src": "18653:11:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_struct$_Checkpoint_$1462_storage_$dyn_storage_ptr",
                            "typeString": "struct MiniMeToken.Checkpoint storage ref[] storage pointer"
                          }
                        },
                        "id": 2190,
                        "indexExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 2189,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "18665:1:9",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "18653:14:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Checkpoint_$1462_storage",
                          "typeString": "struct MiniMeToken.Checkpoint storage ref"
                        }
                      },
                      "id": 2191,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "fromBlock",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1459,
                      "src": "18653:24:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint128",
                        "typeString": "uint128"
                      }
                    },
                    "src": "18644:33:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 2195,
                  "nodeType": "IfStatement",
                  "src": "18640:59:9",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 2193,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "18698:1:9",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "functionReturnParameters": 2161,
                    "id": 2194,
                    "nodeType": "Return",
                    "src": "18691:8:9"
                  }
                },
                {
                  "assignments": [
                    2197
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2197,
                      "name": "min",
                      "nodeType": "VariableDeclaration",
                      "scope": 2248,
                      "src": "18761:8:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2196,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "18761:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2199,
                  "initialValue": {
                    "argumentTypes": null,
                    "hexValue": "30",
                    "id": 2198,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "18772:1:9",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_0_by_1",
                      "typeString": "int_const 0"
                    },
                    "value": "0"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "18761:12:9"
                },
                {
                  "assignments": [
                    2201
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2201,
                      "name": "max",
                      "nodeType": "VariableDeclaration",
                      "scope": 2248,
                      "src": "18783:8:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2200,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "18783:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2206,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2205,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2202,
                        "name": "checkpoints",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2155,
                        "src": "18794:11:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_Checkpoint_$1462_storage_$dyn_storage_ptr",
                          "typeString": "struct MiniMeToken.Checkpoint storage ref[] storage pointer"
                        }
                      },
                      "id": 2203,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "18794:18:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "-",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "31",
                      "id": 2204,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "18813:1:9",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "src": "18794:20:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "18783:31:9"
                },
                {
                  "body": {
                    "id": 2240,
                    "nodeType": "Block",
                    "src": "18842:200:9",
                    "statements": [
                      {
                        "assignments": [
                          2211
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 2211,
                            "name": "mid",
                            "nodeType": "VariableDeclaration",
                            "scope": 2248,
                            "src": "18856:8:9",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 2210,
                              "name": "uint",
                              "nodeType": "ElementaryTypeName",
                              "src": "18856:4:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 2220,
                        "initialValue": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 2219,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "components": [
                              {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 2216,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 2214,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "id": 2212,
                                    "name": "max",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2201,
                                    "src": "18868:3:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "+",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "id": 2213,
                                    "name": "min",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2197,
                                    "src": "18874:3:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "18868:9:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "+",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "hexValue": "31",
                                  "id": 2215,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "18880:1:9",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_1_by_1",
                                    "typeString": "int_const 1"
                                  },
                                  "value": "1"
                                },
                                "src": "18868:13:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "id": 2217,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "TupleExpression",
                            "src": "18867:15:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "/",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "32",
                            "id": 2218,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "18885:1:9",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_2_by_1",
                              "typeString": "int_const 2"
                            },
                            "value": "2"
                          },
                          "src": "18867:19:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "18856:30:9"
                      },
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 2226,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 2221,
                                "name": "checkpoints",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2155,
                                "src": "18904:11:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_struct$_Checkpoint_$1462_storage_$dyn_storage_ptr",
                                  "typeString": "struct MiniMeToken.Checkpoint storage ref[] storage pointer"
                                }
                              },
                              "id": 2223,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 2222,
                                "name": "mid",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2211,
                                "src": "18916:3:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "18904:16:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Checkpoint_$1462_storage",
                                "typeString": "struct MiniMeToken.Checkpoint storage ref"
                              }
                            },
                            "id": 2224,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "fromBlock",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1459,
                            "src": "18904:26:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint128",
                              "typeString": "uint128"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 2225,
                            "name": "_block",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2157,
                            "src": "18932:6:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "18904:34:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "id": 2238,
                          "nodeType": "Block",
                          "src": "18988:44:9",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 2236,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 2232,
                                  "name": "max",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2201,
                                  "src": "19006:3:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 2235,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "id": 2233,
                                    "name": "mid",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2211,
                                    "src": "19012:3:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "-",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "hexValue": "31",
                                    "id": 2234,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "19016:1:9",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_1_by_1",
                                      "typeString": "int_const 1"
                                    },
                                    "value": "1"
                                  },
                                  "src": "19012:5:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "19006:11:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 2237,
                              "nodeType": "ExpressionStatement",
                              "src": "19006:11:9"
                            }
                          ]
                        },
                        "id": 2239,
                        "nodeType": "IfStatement",
                        "src": "18900:132:9",
                        "trueBody": {
                          "id": 2231,
                          "nodeType": "Block",
                          "src": "18940:42:9",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 2229,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 2227,
                                  "name": "min",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2197,
                                  "src": "18958:3:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "id": 2228,
                                  "name": "mid",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2211,
                                  "src": "18964:3:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "18958:9:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 2230,
                              "nodeType": "ExpressionStatement",
                              "src": "18958:9:9"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2209,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 2207,
                      "name": "max",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2201,
                      "src": "18831:3:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 2208,
                      "name": "min",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2197,
                      "src": "18837:3:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "18831:9:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 2241,
                  "nodeType": "WhileStatement",
                  "src": "18824:218:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 2242,
                        "name": "checkpoints",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2155,
                        "src": "19058:11:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_Checkpoint_$1462_storage_$dyn_storage_ptr",
                          "typeString": "struct MiniMeToken.Checkpoint storage ref[] storage pointer"
                        }
                      },
                      "id": 2244,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 2243,
                        "name": "min",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2197,
                        "src": "19070:3:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "19058:16:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Checkpoint_$1462_storage",
                        "typeString": "struct MiniMeToken.Checkpoint storage ref"
                      }
                    },
                    "id": 2245,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "value",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 1461,
                    "src": "19058:22:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint128",
                      "typeString": "uint128"
                    }
                  },
                  "functionReturnParameters": 2161,
                  "id": 2246,
                  "nodeType": "Return",
                  "src": "19051:29:9"
                }
              ]
            },
            "documentation": "/////////////\n @dev `getValueAt` retrieves the number of tokens at a given block number\n @param checkpoints The history of values being queried\n @param _block The block number to retrieve the value at\n @return The number of tokens being queried",
            "id": 2248,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getValueAt",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2158,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2155,
                  "name": "checkpoints",
                  "nodeType": "VariableDeclaration",
                  "scope": 2248,
                  "src": "18322:32:9",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_struct$_Checkpoint_$1462_storage_$dyn_storage_ptr",
                    "typeString": "struct MiniMeToken.Checkpoint[]"
                  },
                  "typeName": {
                    "baseType": {
                      "contractScope": null,
                      "id": 2153,
                      "name": "Checkpoint",
                      "nodeType": "UserDefinedTypeName",
                      "referencedDeclaration": 1462,
                      "src": "18322:10:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Checkpoint_$1462_storage_ptr",
                        "typeString": "struct MiniMeToken.Checkpoint"
                      }
                    },
                    "id": 2154,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "18322:12:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_struct$_Checkpoint_$1462_storage_$dyn_storage_ptr",
                      "typeString": "struct MiniMeToken.Checkpoint[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2157,
                  "name": "_block",
                  "nodeType": "VariableDeclaration",
                  "scope": 2248,
                  "src": "18356:11:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2156,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "18356:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "18321:47:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 2161,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2160,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2248,
                  "src": "18396:4:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2159,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "18396:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "18395:6:9"
            },
            "scope": 2462,
            "src": "18302:785:9",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2318,
              "nodeType": "Block",
              "src": "19387:470:9",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 2272,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 2259,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 2256,
                              "name": "checkpoints",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2251,
                              "src": "19402:11:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_struct$_Checkpoint_$1462_storage_$dyn_storage_ptr",
                                "typeString": "struct MiniMeToken.Checkpoint storage ref[] storage pointer"
                              }
                            },
                            "id": 2257,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "19402:18:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 2258,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "19424:1:9",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "19402:23:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        }
                      ],
                      "id": 2260,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "19401:25:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "||",
                    "rightExpression": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 2270,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 2261,
                                "name": "checkpoints",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2251,
                                "src": "19431:11:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_struct$_Checkpoint_$1462_storage_$dyn_storage_ptr",
                                  "typeString": "struct MiniMeToken.Checkpoint storage ref[] storage pointer"
                                }
                              },
                              "id": 2266,
                              "indexExpression": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 2265,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 2262,
                                    "name": "checkpoints",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2251,
                                    "src": "19443:11:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_struct$_Checkpoint_$1462_storage_$dyn_storage_ptr",
                                      "typeString": "struct MiniMeToken.Checkpoint storage ref[] storage pointer"
                                    }
                                  },
                                  "id": 2263,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "length",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": null,
                                  "src": "19443:18:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "-",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "hexValue": "31",
                                  "id": 2264,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "19464:1:9",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_1_by_1",
                                    "typeString": "int_const 1"
                                  },
                                  "value": "1"
                                },
                                "src": "19443:22:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "19431:35:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Checkpoint_$1462_storage",
                                "typeString": "struct MiniMeToken.Checkpoint storage ref"
                              }
                            },
                            "id": 2267,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "fromBlock",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1459,
                            "src": "19431:45:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint128",
                              "typeString": "uint128"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 2268,
                              "name": "block",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 10394,
                              "src": "19479:5:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_block",
                                "typeString": "block"
                              }
                            },
                            "id": 2269,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "number",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "19479:12:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "19431:60:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        }
                      ],
                      "id": 2271,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "19430:62:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "19401:91:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 2316,
                    "nodeType": "Block",
                    "src": "19705:146:9",
                    "statements": [
                      {
                        "assignments": [
                          2300
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 2300,
                            "name": "oldCheckPoint",
                            "nodeType": "VariableDeclaration",
                            "scope": 2319,
                            "src": "19719:32:9",
                            "stateVariable": false,
                            "storageLocation": "storage",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Checkpoint_$1462_storage_ptr",
                              "typeString": "struct MiniMeToken.Checkpoint"
                            },
                            "typeName": {
                              "contractScope": null,
                              "id": 2299,
                              "name": "Checkpoint",
                              "nodeType": "UserDefinedTypeName",
                              "referencedDeclaration": 1462,
                              "src": "19719:10:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Checkpoint_$1462_storage_ptr",
                                "typeString": "struct MiniMeToken.Checkpoint"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 2307,
                        "initialValue": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 2301,
                            "name": "checkpoints",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2251,
                            "src": "19754:11:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_struct$_Checkpoint_$1462_storage_$dyn_storage_ptr",
                              "typeString": "struct MiniMeToken.Checkpoint storage ref[] storage pointer"
                            }
                          },
                          "id": 2306,
                          "indexExpression": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 2305,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2302,
                                "name": "checkpoints",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2251,
                                "src": "19766:11:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_struct$_Checkpoint_$1462_storage_$dyn_storage_ptr",
                                  "typeString": "struct MiniMeToken.Checkpoint storage ref[] storage pointer"
                                }
                              },
                              "id": 2303,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "length",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "19766:18:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "-",
                            "rightExpression": {
                              "argumentTypes": null,
                              "hexValue": "31",
                              "id": 2304,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "19787:1:9",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              },
                              "value": "1"
                            },
                            "src": "19766:22:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "19754:35:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Checkpoint_$1462_storage",
                            "typeString": "struct MiniMeToken.Checkpoint storage ref"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "19719:70:9"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 2314,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 2308,
                              "name": "oldCheckPoint",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2300,
                              "src": "19803:13:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Checkpoint_$1462_storage_ptr",
                                "typeString": "struct MiniMeToken.Checkpoint storage pointer"
                              }
                            },
                            "id": 2310,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "value",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1461,
                            "src": "19803:19:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint128",
                              "typeString": "uint128"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 2312,
                                "name": "_value",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2253,
                                "src": "19833:6:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 2311,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "19825:7:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_uint128_$",
                                "typeString": "type(uint128)"
                              },
                              "typeName": "uint128"
                            },
                            "id": 2313,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "19825:15:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint128",
                              "typeString": "uint128"
                            }
                          },
                          "src": "19803:37:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        "id": 2315,
                        "nodeType": "ExpressionStatement",
                        "src": "19803:37:9"
                      }
                    ]
                  },
                  "id": 2317,
                  "nodeType": "IfStatement",
                  "src": "19397:454:9",
                  "trueBody": {
                    "id": 2298,
                    "nodeType": "Block",
                    "src": "19494:205:9",
                    "statements": [
                      {
                        "assignments": [
                          2274
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 2274,
                            "name": "newCheckPoint",
                            "nodeType": "VariableDeclaration",
                            "scope": 2319,
                            "src": "19508:32:9",
                            "stateVariable": false,
                            "storageLocation": "storage",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Checkpoint_$1462_storage_ptr",
                              "typeString": "struct MiniMeToken.Checkpoint"
                            },
                            "typeName": {
                              "contractScope": null,
                              "id": 2273,
                              "name": "Checkpoint",
                              "nodeType": "UserDefinedTypeName",
                              "referencedDeclaration": 1462,
                              "src": "19508:10:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Checkpoint_$1462_storage_ptr",
                                "typeString": "struct MiniMeToken.Checkpoint"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 2280,
                        "initialValue": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 2275,
                            "name": "checkpoints",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2251,
                            "src": "19543:11:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_struct$_Checkpoint_$1462_storage_$dyn_storage_ptr",
                              "typeString": "struct MiniMeToken.Checkpoint storage ref[] storage pointer"
                            }
                          },
                          "id": 2279,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 2278,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "UnaryOperation",
                            "operator": "++",
                            "prefix": false,
                            "src": "19555:20:9",
                            "subExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2276,
                                "name": "checkpoints",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2251,
                                "src": "19555:11:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_struct$_Checkpoint_$1462_storage_$dyn_storage_ptr",
                                  "typeString": "struct MiniMeToken.Checkpoint storage ref[] storage pointer"
                                }
                              },
                              "id": 2277,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": true,
                              "memberName": "length",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "19555:18:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "19543:33:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Checkpoint_$1462_storage",
                            "typeString": "struct MiniMeToken.Checkpoint storage ref"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "19508:68:9"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 2288,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 2281,
                              "name": "newCheckPoint",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2274,
                              "src": "19590:13:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Checkpoint_$1462_storage_ptr",
                                "typeString": "struct MiniMeToken.Checkpoint storage pointer"
                              }
                            },
                            "id": 2283,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "fromBlock",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1459,
                            "src": "19590:23:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint128",
                              "typeString": "uint128"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 2285,
                                  "name": "block",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 10394,
                                  "src": "19624:5:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_block",
                                    "typeString": "block"
                                  }
                                },
                                "id": 2286,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "number",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "19624:12:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 2284,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "19616:7:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_uint128_$",
                                "typeString": "type(uint128)"
                              },
                              "typeName": "uint128"
                            },
                            "id": 2287,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "19616:21:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint128",
                              "typeString": "uint128"
                            }
                          },
                          "src": "19590:47:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        "id": 2289,
                        "nodeType": "ExpressionStatement",
                        "src": "19590:47:9"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 2296,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 2290,
                              "name": "newCheckPoint",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2274,
                              "src": "19651:13:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Checkpoint_$1462_storage_ptr",
                                "typeString": "struct MiniMeToken.Checkpoint storage pointer"
                              }
                            },
                            "id": 2292,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "value",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1461,
                            "src": "19651:19:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint128",
                              "typeString": "uint128"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 2294,
                                "name": "_value",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2253,
                                "src": "19681:6:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 2293,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "19673:7:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_uint128_$",
                                "typeString": "type(uint128)"
                              },
                              "typeName": "uint128"
                            },
                            "id": 2295,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "19673:15:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint128",
                              "typeString": "uint128"
                            }
                          },
                          "src": "19651:37:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        "id": 2297,
                        "nodeType": "ExpressionStatement",
                        "src": "19651:37:9"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": "@dev `updateValueAtNow` used to update the `balances` map and the\n  `totalSupplyHistory`\n @param checkpoints The history of data being updated\n @param _value The new number of tokens",
            "id": 2319,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "updateValueAtNow",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2254,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2251,
                  "name": "checkpoints",
                  "nodeType": "VariableDeclaration",
                  "scope": 2319,
                  "src": "19331:32:9",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_struct$_Checkpoint_$1462_storage_$dyn_storage_ptr",
                    "typeString": "struct MiniMeToken.Checkpoint[]"
                  },
                  "typeName": {
                    "baseType": {
                      "contractScope": null,
                      "id": 2249,
                      "name": "Checkpoint",
                      "nodeType": "UserDefinedTypeName",
                      "referencedDeclaration": 1462,
                      "src": "19331:10:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Checkpoint_$1462_storage_ptr",
                        "typeString": "struct MiniMeToken.Checkpoint"
                      }
                    },
                    "id": 2250,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "19331:12:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_struct$_Checkpoint_$1462_storage_$dyn_storage_ptr",
                      "typeString": "struct MiniMeToken.Checkpoint[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2253,
                  "name": "_value",
                  "nodeType": "VariableDeclaration",
                  "scope": 2319,
                  "src": "19365:11:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2252,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "19365:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "19330:47:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 2255,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "19387:0:9"
            },
            "scope": 2462,
            "src": "19305:552:9",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2340,
              "nodeType": "Block",
              "src": "20095:169:9",
              "statements": [
                {
                  "assignments": [],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2327,
                      "name": "size",
                      "nodeType": "VariableDeclaration",
                      "scope": 2341,
                      "src": "20105:9:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2326,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "20105:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2328,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "20105:9:9"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 2331,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 2329,
                      "name": "_addr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2321,
                      "src": "20128:5:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 2330,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "20137:1:9",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "20128:10:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 2334,
                  "nodeType": "IfStatement",
                  "src": "20124:40:9",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "hexValue": "66616c7365",
                      "id": 2332,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "20159:5:9",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "false"
                    },
                    "functionReturnParameters": 2325,
                    "id": 2333,
                    "nodeType": "Return",
                    "src": "20152:12:9"
                  }
                },
                {
                  "externalReferences": [
                    {
                      "size": {
                        "declaration": 2327,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "20198:4:9",
                        "valueSize": 1
                      }
                    },
                    {
                      "_addr": {
                        "declaration": 2321,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "20218:5:9",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 2335,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    size := extcodesize(_addr)\n}",
                  "src": "20175:75:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2338,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 2336,
                      "name": "size",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2327,
                      "src": "20251:4:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 2337,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "20256:1:9",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "20251:6:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 2325,
                  "id": 2339,
                  "nodeType": "Return",
                  "src": "20244:13:9"
                }
              ]
            },
            "documentation": "@dev Internal function to determine if an address is a contract\n @param _addr The address being queried\n @return True if `_addr` is a contract",
            "id": 2341,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "isContract",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2322,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2321,
                  "name": "_addr",
                  "nodeType": "VariableDeclaration",
                  "scope": 2341,
                  "src": "20048:13:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2320,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "20048:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "20047:15:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 2325,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2324,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2341,
                  "src": "20089:4:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 2323,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "20089:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "20088:6:9"
            },
            "scope": 2462,
            "src": "20028:236:9",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2357,
              "nodeType": "Block",
              "src": "20394:37:9",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "condition": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 2352,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 2350,
                        "name": "a",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2343,
                        "src": "20411:1:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "<",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 2351,
                        "name": "b",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2345,
                        "src": "20415:1:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "20411:5:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "falseExpression": {
                      "argumentTypes": null,
                      "id": 2354,
                      "name": "b",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2345,
                      "src": "20423:1:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 2355,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "Conditional",
                    "src": "20411:13:9",
                    "trueExpression": {
                      "argumentTypes": null,
                      "id": 2353,
                      "name": "a",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2343,
                      "src": "20419:1:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 2349,
                  "id": 2356,
                  "nodeType": "Return",
                  "src": "20404:20:9"
                }
              ]
            },
            "documentation": "@dev Helper function to return a min betwen the two uints",
            "id": 2358,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "min",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2346,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2343,
                  "name": "a",
                  "nodeType": "VariableDeclaration",
                  "scope": 2358,
                  "src": "20349:6:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2342,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "20349:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2345,
                  "name": "b",
                  "nodeType": "VariableDeclaration",
                  "scope": 2358,
                  "src": "20357:6:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2344,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "20357:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "20348:16:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 2349,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2348,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2358,
                  "src": "20388:4:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2347,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "20388:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "20387:6:9"
            },
            "scope": 2462,
            "src": "20336:95:9",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2383,
              "nodeType": "Block",
              "src": "20704:209:9",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 2363,
                            "name": "controller",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1412,
                            "src": "20733:10:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 2362,
                          "name": "isContract",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2341,
                          "src": "20722:10:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                            "typeString": "function (address) view returns (bool)"
                          }
                        },
                        "id": 2364,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "20722:22:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 2361,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        10407,
                        10408
                      ],
                      "referencedDeclaration": 10407,
                      "src": "20714:7:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 2365,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "20714:31:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2366,
                  "nodeType": "ExpressionStatement",
                  "src": "20714:31:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 2380,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2376,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 10404,
                                "src": "20886:3:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 2377,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "20886:10:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 2373,
                                  "name": "msg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 10404,
                                  "src": "20875:3:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_message",
                                    "typeString": "msg"
                                  }
                                },
                                "id": 2374,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "value",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "20875:9:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 2369,
                                      "name": "controller",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1412,
                                      "src": "20844:10:9",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    ],
                                    "id": 2368,
                                    "name": "ITokenController",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1396,
                                    "src": "20827:16:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_contract$_ITokenController_$1396_$",
                                      "typeString": "type(contract ITokenController)"
                                    }
                                  },
                                  "id": 2370,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "20827:28:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_ITokenController_$1396",
                                    "typeString": "contract ITokenController"
                                  }
                                },
                                "id": 2371,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "proxyPayment",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 1373,
                                "src": "20827:41:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_external_payable$_t_address_$returns$_t_bool_$",
                                  "typeString": "function (address) payable external returns (bool)"
                                }
                              },
                              "id": 2372,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "value",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "20827:47:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_setvalue_nonpayable$_t_uint256_$returns$_t_function_external_payable$_t_address_$returns$_t_bool_$value_$",
                                "typeString": "function (uint256) returns (function (address) payable external returns (bool))"
                              }
                            },
                            "id": 2375,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "20827:58:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_payable$_t_address_$returns$_t_bool_$value",
                              "typeString": "function (address) payable external returns (bool)"
                            }
                          },
                          "id": 2378,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "20827:70:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "74727565",
                          "id": 2379,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "20901:4:9",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "true"
                        },
                        "src": "20827:78:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 2367,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        10407,
                        10408
                      ],
                      "referencedDeclaration": 10407,
                      "src": "20819:7:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 2381,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "20819:87:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2382,
                  "nodeType": "ExpressionStatement",
                  "src": "20819:87:9"
                }
              ]
            },
            "documentation": "@notice The fallback function: If the contract's controller has not been\n  set to 0, then the `proxyPayment` method is called which relays the\n  ether and creates tokens as described in the token controller contract",
            "id": 2384,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2359,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "20684:2:9"
            },
            "payable": true,
            "returnParameters": {
              "id": 2360,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "20704:0:9"
            },
            "scope": 2462,
            "src": "20675:238:9",
            "stateMutability": "payable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 2430,
              "nodeType": "Block",
              "src": "21272:306:9",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 2393,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 2391,
                      "name": "_token",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2386,
                      "src": "21286:6:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "307830",
                      "id": 2392,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "21296:3:9",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0x0"
                    },
                    "src": "21286:13:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 2403,
                  "nodeType": "IfStatement",
                  "src": "21282:97:9",
                  "trueBody": {
                    "id": 2402,
                    "nodeType": "Block",
                    "src": "21301:78:9",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2397,
                                "name": "this",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 10543,
                                "src": "21335:4:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_MiniMeToken_$2462",
                                  "typeString": "contract MiniMeToken"
                                }
                              },
                              "id": 2398,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "balance",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "21335:12:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 2394,
                              "name": "controller",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1412,
                              "src": "21315:10:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "id": 2396,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "transfer",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "21315:19:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_transfer_nonpayable$_t_uint256_$returns$__$",
                              "typeString": "function (uint256)"
                            }
                          },
                          "id": 2399,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "21315:33:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 2400,
                        "nodeType": "ExpressionStatement",
                        "src": "21315:33:9"
                      },
                      {
                        "expression": null,
                        "functionReturnParameters": 2390,
                        "id": 2401,
                        "nodeType": "Return",
                        "src": "21362:7:9"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    2405
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2405,
                      "name": "token",
                      "nodeType": "VariableDeclaration",
                      "scope": 2431,
                      "src": "21389:17:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_MiniMeToken_$2462",
                        "typeString": "contract MiniMeToken"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 2404,
                        "name": "MiniMeToken",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 2462,
                        "src": "21389:11:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_MiniMeToken_$2462",
                          "typeString": "contract MiniMeToken"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2409,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2407,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2386,
                        "src": "21421:6:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 2406,
                      "name": "MiniMeToken",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2462,
                      "src": "21409:11:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_MiniMeToken_$2462_$",
                        "typeString": "type(contract MiniMeToken)"
                      }
                    },
                    "id": 2408,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "21409:19:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_MiniMeToken_$2462",
                      "typeString": "contract MiniMeToken"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "21389:39:9"
                },
                {
                  "assignments": [
                    2411
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2411,
                      "name": "balance",
                      "nodeType": "VariableDeclaration",
                      "scope": 2431,
                      "src": "21438:12:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2410,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "21438:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2416,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2414,
                        "name": "this",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10543,
                        "src": "21469:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_MiniMeToken_$2462",
                          "typeString": "contract MiniMeToken"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_MiniMeToken_$2462",
                          "typeString": "contract MiniMeToken"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 2412,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2405,
                        "src": "21453:5:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_MiniMeToken_$2462",
                          "typeString": "contract MiniMeToken"
                        }
                      },
                      "id": 2413,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "balanceOf",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1733,
                      "src": "21453:15:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                        "typeString": "function (address) view external returns (uint256)"
                      }
                    },
                    "id": 2415,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "21453:21:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "21438:36:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2420,
                        "name": "controller",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1412,
                        "src": "21499:10:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2421,
                        "name": "balance",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2411,
                        "src": "21511:7:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 2417,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2405,
                        "src": "21484:5:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_MiniMeToken_$2462",
                          "typeString": "contract MiniMeToken"
                        }
                      },
                      "id": 2419,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "transfer",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1558,
                      "src": "21484:14:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                        "typeString": "function (address,uint256) external returns (bool)"
                      }
                    },
                    "id": 2422,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "21484:35:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 2423,
                  "nodeType": "ExpressionStatement",
                  "src": "21484:35:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2425,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2386,
                        "src": "21543:6:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2426,
                        "name": "controller",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1412,
                        "src": "21551:10:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2427,
                        "name": "balance",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2411,
                        "src": "21563:7:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 2424,
                      "name": "ClaimedTokens",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2439,
                      "src": "21529:13:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 2428,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "21529:42:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2429,
                  "nodeType": "ExpressionStatement",
                  "src": "21529:42:9"
                }
              ]
            },
            "documentation": "///////\n @notice This method can be used by the controller to extract mistakenly\n  sent tokens to this contract.\n @param _token The address of the token contract that you want to recover\n  set to 0 in case you want to extract ether.",
            "id": 2431,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": null,
                "id": 2389,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 2388,
                  "name": "onlyController",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1410,
                  "src": "21250:14:9",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "21250:14:9"
              }
            ],
            "name": "claimTokens",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2387,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2386,
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "scope": 2431,
                  "src": "21234:14:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2385,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "21234:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "21233:16:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 2390,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "21272:0:9"
            },
            "scope": 2462,
            "src": "21213:365:9",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "anonymous": false,
            "documentation": "/////////////",
            "id": 2439,
            "name": "ClaimedTokens",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 2438,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2433,
                  "indexed": true,
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "scope": 2439,
                  "src": "21648:22:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2432,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "21648:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2435,
                  "indexed": true,
                  "name": "_controller",
                  "nodeType": "VariableDeclaration",
                  "scope": 2439,
                  "src": "21672:27:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2434,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "21672:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2437,
                  "indexed": false,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 2439,
                  "src": "21701:12:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2436,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "21701:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "21647:67:9"
            },
            "src": "21628:87:9"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 2447,
            "name": "Transfer",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 2446,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2441,
                  "indexed": true,
                  "name": "_from",
                  "nodeType": "VariableDeclaration",
                  "scope": 2447,
                  "src": "21735:21:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2440,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "21735:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2443,
                  "indexed": true,
                  "name": "_to",
                  "nodeType": "VariableDeclaration",
                  "scope": 2447,
                  "src": "21758:19:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2442,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "21758:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2445,
                  "indexed": false,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 2447,
                  "src": "21779:15:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2444,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "21779:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "21734:61:9"
            },
            "src": "21720:76:9"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 2453,
            "name": "NewCloneToken",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 2452,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2449,
                  "indexed": true,
                  "name": "_cloneToken",
                  "nodeType": "VariableDeclaration",
                  "scope": 2453,
                  "src": "21821:27:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2448,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "21821:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2451,
                  "indexed": false,
                  "name": "_snapshotBlock",
                  "nodeType": "VariableDeclaration",
                  "scope": 2453,
                  "src": "21850:19:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2450,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "21850:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "21820:50:9"
            },
            "src": "21801:70:9"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 2461,
            "name": "Approval",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 2460,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2455,
                  "indexed": true,
                  "name": "_owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 2461,
                  "src": "21900:22:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2454,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "21900:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2457,
                  "indexed": true,
                  "name": "_spender",
                  "nodeType": "VariableDeclaration",
                  "scope": 2461,
                  "src": "21932:24:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2456,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "21932:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2459,
                  "indexed": false,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 2461,
                  "src": "21966:15:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2458,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "21966:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "21890:101:9"
            },
            "src": "21876:116:9"
          }
        ],
        "scope": 2504,
        "src": "2122:19873:9"
      },
      {
        "baseContracts": [],
        "contractDependencies": [
          2462
        ],
        "contractKind": "contract",
        "documentation": "/////////////\n @dev This contract is used to generate clone contracts from a contract.\n  In solidity this is the way to create a contract from a contract of the\n  same class",
        "fullyImplemented": true,
        "id": 2503,
        "linearizedBaseContracts": [
          2503
        ],
        "name": "MiniMeTokenFactory",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "body": {
              "id": 2501,
              "nodeType": "Block",
              "src": "23149:318:9",
              "statements": [
                {
                  "assignments": [
                    2480
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2480,
                      "name": "newToken",
                      "nodeType": "VariableDeclaration",
                      "scope": 2502,
                      "src": "23159:20:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_MiniMeToken_$2462",
                        "typeString": "contract MiniMeToken"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 2479,
                        "name": "MiniMeToken",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 2462,
                        "src": "23159:11:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_MiniMeToken_$2462",
                          "typeString": "contract MiniMeToken"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2491,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2483,
                        "name": "this",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10545,
                        "src": "23211:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_MiniMeTokenFactory_$2503",
                          "typeString": "contract MiniMeTokenFactory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2484,
                        "name": "_parentToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2464,
                        "src": "23229:12:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_MiniMeToken_$2462",
                          "typeString": "contract MiniMeToken"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2485,
                        "name": "_snapshotBlock",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2466,
                        "src": "23255:14:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2486,
                        "name": "_tokenName",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2468,
                        "src": "23283:10:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2487,
                        "name": "_decimalUnits",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2470,
                        "src": "23307:13:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2488,
                        "name": "_tokenSymbol",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2472,
                        "src": "23334:12:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2489,
                        "name": "_transfersEnabled",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2474,
                        "src": "23360:17:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_MiniMeTokenFactory_$2503",
                          "typeString": "contract MiniMeTokenFactory"
                        },
                        {
                          "typeIdentifier": "t_contract$_MiniMeToken_$2462",
                          "typeString": "contract MiniMeToken"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        },
                        {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        },
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 2482,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "NewExpression",
                      "src": "23182:15:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_creation_nonpayable$_t_contract$_MiniMeTokenFactory_$2503_$_t_contract$_MiniMeToken_$2462_$_t_uint256_$_t_string_memory_ptr_$_t_uint8_$_t_string_memory_ptr_$_t_bool_$returns$_t_contract$_MiniMeToken_$2462_$",
                        "typeString": "function (contract MiniMeTokenFactory,contract MiniMeToken,uint256,string memory,uint8,string memory,bool) returns (contract MiniMeToken)"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 2481,
                        "name": "MiniMeToken",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 2462,
                        "src": "23186:11:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_MiniMeToken_$2462",
                          "typeString": "contract MiniMeToken"
                        }
                      }
                    },
                    "id": 2490,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "23182:205:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_MiniMeToken_$2462",
                      "typeString": "contract MiniMeToken"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "23159:228:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2495,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 10404,
                          "src": "23424:3:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 2496,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "23424:10:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 2492,
                        "name": "newToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2480,
                        "src": "23398:8:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_MiniMeToken_$2462",
                          "typeString": "contract MiniMeToken"
                        }
                      },
                      "id": 2494,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "changeController",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1433,
                      "src": "23398:25:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address) external"
                      }
                    },
                    "id": 2497,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "23398:37:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2498,
                  "nodeType": "ExpressionStatement",
                  "src": "23398:37:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2499,
                    "name": "newToken",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 2480,
                    "src": "23452:8:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_MiniMeToken_$2462",
                      "typeString": "contract MiniMeToken"
                    }
                  },
                  "functionReturnParameters": 2478,
                  "id": 2500,
                  "nodeType": "Return",
                  "src": "23445:15:9"
                }
              ]
            },
            "documentation": "@notice Update the DApp by creating a new token with new functionalities\n  the msg.sender becomes the controller of this clone token\n @param _parentToken Address of the token being cloned\n @param _snapshotBlock Block of the parent token that will\n  determine the initial distribution of the clone token\n @param _tokenName Name of the new token\n @param _decimalUnits Number of decimals of the new token\n @param _tokenSymbol Token Symbol for the new token\n @param _transfersEnabled If true, tokens will be able to be transferred\n @return The address of the new token contract",
            "id": 2502,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "createCloneToken",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2475,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2464,
                  "name": "_parentToken",
                  "nodeType": "VariableDeclaration",
                  "scope": 2502,
                  "src": "22939:24:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_MiniMeToken_$2462",
                    "typeString": "contract MiniMeToken"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 2463,
                    "name": "MiniMeToken",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 2462,
                    "src": "22939:11:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_MiniMeToken_$2462",
                      "typeString": "contract MiniMeToken"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2466,
                  "name": "_snapshotBlock",
                  "nodeType": "VariableDeclaration",
                  "scope": 2502,
                  "src": "22973:19:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2465,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "22973:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2468,
                  "name": "_tokenName",
                  "nodeType": "VariableDeclaration",
                  "scope": 2502,
                  "src": "23002:17:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 2467,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "23002:6:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2470,
                  "name": "_decimalUnits",
                  "nodeType": "VariableDeclaration",
                  "scope": 2502,
                  "src": "23029:19:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 2469,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "23029:5:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2472,
                  "name": "_tokenSymbol",
                  "nodeType": "VariableDeclaration",
                  "scope": 2502,
                  "src": "23058:19:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 2471,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "23058:6:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2474,
                  "name": "_transfersEnabled",
                  "nodeType": "VariableDeclaration",
                  "scope": 2502,
                  "src": "23087:22:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 2473,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "23087:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "22929:186:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 2478,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2477,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2502,
                  "src": "23132:11:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_MiniMeToken_$2462",
                    "typeString": "contract MiniMeToken"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 2476,
                    "name": "MiniMeToken",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 2462,
                    "src": "23132:11:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_MiniMeToken_$2462",
                      "typeString": "contract MiniMeToken"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "23131:13:9"
            },
            "scope": 2503,
            "src": "22904:563:9",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          }
        ],
        "scope": 2504,
        "src": "22224:1245:9"
      }
    ],
    "src": "0:23469:9"
  },
  "compiler": {
    "name": "solc",
    "version": "0.4.24+commit.e67f0147.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.2.0",
  "updatedAt": "2020-06-07T23:27:00.451Z",
  "devdoc": {
    "methods": {}
  },
  "userdoc": {
    "methods": {}
  }
}