{
  "contractName": "CErc20",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "underlying_",
          "type": "address"
        },
        {
          "internalType": "contract ComptrollerInterface",
          "name": "comptroller_",
          "type": "address"
        },
        {
          "internalType": "contract InterestRateModel",
          "name": "interestRateModel_",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "initialExchangeRateMantissa_",
          "type": "uint256"
        },
        {
          "internalType": "string",
          "name": "name_",
          "type": "string"
        },
        {
          "internalType": "string",
          "name": "symbol_",
          "type": "string"
        },
        {
          "internalType": "uint256",
          "name": "decimals_",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "interestAccumulated",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "borrowIndex",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "totalBorrows",
          "type": "uint256"
        }
      ],
      "name": "AccrueInterest",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "Approval",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "borrower",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "borrowAmount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "accountBorrows",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "totalBorrows",
          "type": "uint256"
        }
      ],
      "name": "Borrow",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "error",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "info",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "detail",
          "type": "uint256"
        }
      ],
      "name": "Failure",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "liquidator",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "borrower",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "repayAmount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "cTokenCollateral",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "seizeTokens",
          "type": "uint256"
        }
      ],
      "name": "LiquidateBorrow",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "minter",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "mintAmount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "mintTokens",
          "type": "uint256"
        }
      ],
      "name": "Mint",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "oldAdmin",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "newAdmin",
          "type": "address"
        }
      ],
      "name": "NewAdmin",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "contract ComptrollerInterface",
          "name": "oldComptroller",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "contract ComptrollerInterface",
          "name": "newComptroller",
          "type": "address"
        }
      ],
      "name": "NewComptroller",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "contract InterestRateModel",
          "name": "oldInterestRateModel",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "contract InterestRateModel",
          "name": "newInterestRateModel",
          "type": "address"
        }
      ],
      "name": "NewMarketInterestRateModel",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "oldPendingAdmin",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "newPendingAdmin",
          "type": "address"
        }
      ],
      "name": "NewPendingAdmin",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "oldReserveFactorMantissa",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "newReserveFactorMantissa",
          "type": "uint256"
        }
      ],
      "name": "NewReserveFactor",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "redeemer",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "redeemAmount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "redeemTokens",
          "type": "uint256"
        }
      ],
      "name": "Redeem",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "payer",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "borrower",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "repayAmount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "accountBorrows",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "totalBorrows",
          "type": "uint256"
        }
      ],
      "name": "RepayBorrow",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "admin",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "reduceAmount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "newTotalReserves",
          "type": "uint256"
        }
      ],
      "name": "ReservesReduced",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "Transfer",
      "type": "event"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "_acceptAdmin",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "reduceAmount",
          "type": "uint256"
        }
      ],
      "name": "_reduceReserves",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "contract ComptrollerInterface",
          "name": "newComptroller",
          "type": "address"
        }
      ],
      "name": "_setComptroller",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "contract InterestRateModel",
          "name": "newInterestRateModel",
          "type": "address"
        }
      ],
      "name": "_setInterestRateModel",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address payable",
          "name": "newPendingAdmin",
          "type": "address"
        }
      ],
      "name": "_setPendingAdmin",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "newReserveFactorMantissa",
          "type": "uint256"
        }
      ],
      "name": "_setReserveFactor",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "accrualBlockNumber",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "accrueInterest",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "admin",
      "outputs": [
        {
          "internalType": "address payable",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        }
      ],
      "name": "allowance",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "approve",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "balanceOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "balanceOfUnderlying",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "borrowBalanceCurrent",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "borrowBalanceStored",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "borrowIndex",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "borrowRatePerBlock",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "comptroller",
      "outputs": [
        {
          "internalType": "contract ComptrollerInterface",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "decimals",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "exchangeRateCurrent",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "exchangeRateStored",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "getAccountSnapshot",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getCash",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "initialExchangeRateMantissa",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "interestRateModel",
      "outputs": [
        {
          "internalType": "contract InterestRateModel",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "isCToken",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "name",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "pendingAdmin",
      "outputs": [
        {
          "internalType": "address payable",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "reserveFactorMantissa",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "liquidator",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "borrower",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "seizeTokens",
          "type": "uint256"
        }
      ],
      "name": "seize",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "supplyRatePerBlock",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "symbol",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "totalBorrows",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "totalBorrowsCurrent",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "totalReserves",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "totalSupply",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "dst",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "transfer",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "src",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "dst",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "transferFrom",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "underlying",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "mintAmount",
          "type": "uint256"
        }
      ],
      "name": "mint",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "redeemTokens",
          "type": "uint256"
        }
      ],
      "name": "redeem",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "redeemAmount",
          "type": "uint256"
        }
      ],
      "name": "redeemUnderlying",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "borrowAmount",
          "type": "uint256"
        }
      ],
      "name": "borrow",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "repayAmount",
          "type": "uint256"
        }
      ],
      "name": "repayBorrow",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "borrower",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "repayAmount",
          "type": "uint256"
        }
      ],
      "name": "repayBorrowBehalf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "borrower",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "repayAmount",
          "type": "uint256"
        },
        {
          "internalType": "contract CToken",
          "name": "cTokenCollateral",
          "type": "address"
        }
      ],
      "name": "liquidateBorrow",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.5.12+commit.7709ece9\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"underlying_\",\"type\":\"address\"},{\"internalType\":\"contract ComptrollerInterface\",\"name\":\"comptroller_\",\"type\":\"address\"},{\"internalType\":\"contract InterestRateModel\",\"name\":\"interestRateModel_\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"initialExchangeRateMantissa_\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"name_\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"symbol_\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"decimals_\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"interestAccumulated\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"borrowIndex\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalBorrows\",\"type\":\"uint256\"}],\"name\":\"AccrueInterest\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"borrower\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"borrowAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"accountBorrows\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalBorrows\",\"type\":\"uint256\"}],\"name\":\"Borrow\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"error\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"info\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"detail\",\"type\":\"uint256\"}],\"name\":\"Failure\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"liquidator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"borrower\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"repayAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"cTokenCollateral\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"seizeTokens\",\"type\":\"uint256\"}],\"name\":\"LiquidateBorrow\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"minter\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"mintAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"mintTokens\",\"type\":\"uint256\"}],\"name\":\"Mint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"oldAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"NewAdmin\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"contract ComptrollerInterface\",\"name\":\"oldComptroller\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"contract ComptrollerInterface\",\"name\":\"newComptroller\",\"type\":\"address\"}],\"name\":\"NewComptroller\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"contract InterestRateModel\",\"name\":\"oldInterestRateModel\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"contract InterestRateModel\",\"name\":\"newInterestRateModel\",\"type\":\"address\"}],\"name\":\"NewMarketInterestRateModel\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"oldPendingAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newPendingAdmin\",\"type\":\"address\"}],\"name\":\"NewPendingAdmin\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldReserveFactorMantissa\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newReserveFactorMantissa\",\"type\":\"uint256\"}],\"name\":\"NewReserveFactor\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"redeemer\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"redeemAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"redeemTokens\",\"type\":\"uint256\"}],\"name\":\"Redeem\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"payer\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"borrower\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"repayAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"accountBorrows\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalBorrows\",\"type\":\"uint256\"}],\"name\":\"RepayBorrow\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"reduceAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newTotalReserves\",\"type\":\"uint256\"}],\"name\":\"ReservesReduced\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"constant\":false,\"inputs\":[],\"name\":\"_acceptAdmin\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"reduceAmount\",\"type\":\"uint256\"}],\"name\":\"_reduceReserves\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"contract ComptrollerInterface\",\"name\":\"newComptroller\",\"type\":\"address\"}],\"name\":\"_setComptroller\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"contract InterestRateModel\",\"name\":\"newInterestRateModel\",\"type\":\"address\"}],\"name\":\"_setInterestRateModel\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address payable\",\"name\":\"newPendingAdmin\",\"type\":\"address\"}],\"name\":\"_setPendingAdmin\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newReserveFactorMantissa\",\"type\":\"uint256\"}],\"name\":\"_setReserveFactor\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"accrualBlockNumber\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"accrueInterest\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address payable\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"balanceOfUnderlying\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"borrowAmount\",\"type\":\"uint256\"}],\"name\":\"borrow\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"borrowBalanceCurrent\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"borrowBalanceStored\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"borrowIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"borrowRatePerBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"comptroller\",\"outputs\":[{\"internalType\":\"contract ComptrollerInterface\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"exchangeRateCurrent\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"exchangeRateStored\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"getAccountSnapshot\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getCash\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"initialExchangeRateMantissa\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"interestRateModel\",\"outputs\":[{\"internalType\":\"contract InterestRateModel\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"isCToken\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"borrower\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"repayAmount\",\"type\":\"uint256\"},{\"internalType\":\"contract CToken\",\"name\":\"cTokenCollateral\",\"type\":\"address\"}],\"name\":\"liquidateBorrow\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"mintAmount\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"pendingAdmin\",\"outputs\":[{\"internalType\":\"address payable\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"redeemTokens\",\"type\":\"uint256\"}],\"name\":\"redeem\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"redeemAmount\",\"type\":\"uint256\"}],\"name\":\"redeemUnderlying\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"repayAmount\",\"type\":\"uint256\"}],\"name\":\"repayBorrow\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"borrower\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"repayAmount\",\"type\":\"uint256\"}],\"name\":\"repayBorrowBehalf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"reserveFactorMantissa\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"liquidator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"borrower\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"seizeTokens\",\"type\":\"uint256\"}],\"name\":\"seize\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"supplyRatePerBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"totalBorrows\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"totalBorrowsCurrent\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"totalReserves\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"dst\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"src\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"dst\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"underlying\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Compound\",\"methods\":{\"_acceptAdmin()\":{\"details\":\"Admin function for pending admin to accept role and update admin\",\"return\":\"uint 0=success, otherwise a failure (see ErrorReporter.sol for details)\"},\"_reduceReserves(uint256)\":{\"params\":{\"reduceAmount\":\"Amount of reduction to reserves\"},\"return\":\"uint 0=success, otherwise a failure (see ErrorReporter.sol for details)\"},\"_setComptroller(address)\":{\"details\":\"Admin function to set a new comptroller\",\"return\":\"uint 0=success, otherwise a failure (see ErrorReporter.sol for details)\"},\"_setInterestRateModel(address)\":{\"details\":\"Admin function to accrue interest and update the interest rate model\",\"params\":{\"newInterestRateModel\":\"the new interest rate model to use\"},\"return\":\"uint 0=success, otherwise a failure (see ErrorReporter.sol for details)\"},\"_setPendingAdmin(address)\":{\"details\":\"Admin function to begin change of admin. The newPendingAdmin must call `_acceptAdmin` to finalize the transfer.\",\"params\":{\"newPendingAdmin\":\"New pending admin.\"},\"return\":\"uint 0=success, otherwise a failure (see ErrorReporter.sol for details)      * TODO: Should we add a second arg to verify, like a checksum of `newAdmin` address?\"},\"_setReserveFactor(uint256)\":{\"details\":\"Admin function to accrue interest and set a new reserve factor\",\"return\":\"uint 0=success, otherwise a failure (see ErrorReporter.sol for details)\"},\"accrueInterest()\":{\"details\":\"This calculates interest accrued from the last checkpointed block     up to the current block and writes new checkpoint to storage.\"},\"allowance(address,address)\":{\"params\":{\"owner\":\"The address of the account which owns the tokens to be spent\",\"spender\":\"The address of the account which may transfer tokens\"},\"return\":\"The number of tokens allowed to be spent (-1 means infinite)\"},\"approve(address,uint256)\":{\"details\":\"This will overwrite the approval amount for `spender` and is subject to issues noted [here](https://eips.ethereum.org/EIPS/eip-20#approve)\",\"params\":{\"amount\":\"The number of tokens that are approved (-1 means infinite)\",\"spender\":\"The address of the account which may transfer tokens\"},\"return\":\"Whether or not the approval succeeded\"},\"balanceOf(address)\":{\"params\":{\"owner\":\"The address of the account to query\"},\"return\":\"The number of tokens owned by `owner`\"},\"balanceOfUnderlying(address)\":{\"details\":\"This also accrues interest in a transaction\",\"params\":{\"owner\":\"The address of the account to query\"},\"return\":\"The amount of underlying owned by `owner`\"},\"borrow(uint256)\":{\"params\":{\"borrowAmount\":\"The amount of the underlying asset to borrow\"},\"return\":\"uint 0=success, otherwise a failure (see ErrorReporter.sol for details)\"},\"borrowBalanceCurrent(address)\":{\"params\":{\"account\":\"The address whose balance should be calculated after updating borrowIndex\"},\"return\":\"The calculated balance\"},\"borrowBalanceStored(address)\":{\"params\":{\"account\":\"The address whose balance should be calculated\"},\"return\":\"The calculated balance\"},\"borrowRatePerBlock()\":{\"return\":\"The borrow interest rate per block, scaled by 1e18\"},\"constructor\":{\"params\":{\"comptroller_\":\"The address of the Comptroller\",\"decimals_\":\"ERC-20 decimal precision of this token\",\"initialExchangeRateMantissa_\":\"The initial exchange rate, scaled by 1e18\",\"interestRateModel_\":\"The address of the interest rate model\",\"name_\":\"ERC-20 name of this token\",\"symbol_\":\"ERC-20 symbol of this token\",\"underlying_\":\"The address of the underlying asset\"}},\"exchangeRateCurrent()\":{\"return\":\"Calculated exchange rate scaled by 1e18\"},\"exchangeRateStored()\":{\"details\":\"This function does not accrue interest before calculating the exchange rate\",\"return\":\"Calculated exchange rate scaled by 1e18\"},\"getAccountSnapshot(address)\":{\"details\":\"This is used by comptroller to more efficiently perform liquidity checks.\",\"params\":{\"account\":\"Address of the account to snapshot\"},\"return\":\"(possible error, token balance, borrow balance, exchange rate mantissa)\"},\"getCash()\":{\"return\":\"The quantity of underlying asset owned by this contract\"},\"liquidateBorrow(address,uint256,address)\":{\"params\":{\"borrower\":\"The borrower of this cToken to be liquidated\",\"cTokenCollateral\":\"The market in which to seize collateral from the borrower\",\"repayAmount\":\"The amount of the underlying borrowed asset to repay\"},\"return\":\"uint 0=success, otherwise a failure (see ErrorReporter.sol for details)\"},\"mint(uint256)\":{\"details\":\"Accrues interest whether or not the operation succeeds, unless reverted\",\"params\":{\"mintAmount\":\"The amount of the underlying asset to supply\"},\"return\":\"uint 0=success, otherwise a failure (see ErrorReporter.sol for details)\"},\"redeem(uint256)\":{\"details\":\"Accrues interest whether or not the operation succeeds, unless reverted\",\"params\":{\"redeemTokens\":\"The number of cTokens to redeem into underlying\"},\"return\":\"uint 0=success, otherwise a failure (see ErrorReporter.sol for details)\"},\"redeemUnderlying(uint256)\":{\"details\":\"Accrues interest whether or not the operation succeeds, unless reverted\",\"params\":{\"redeemAmount\":\"The amount of underlying to redeem\"},\"return\":\"uint 0=success, otherwise a failure (see ErrorReporter.sol for details)\"},\"repayBorrow(uint256)\":{\"params\":{\"repayAmount\":\"The amount to repay\"},\"return\":\"uint 0=success, otherwise a failure (see ErrorReporter.sol for details)\"},\"repayBorrowBehalf(address,uint256)\":{\"params\":{\"borrower\":\"the account with the debt being payed off\",\"repayAmount\":\"The amount to repay\"},\"return\":\"uint 0=success, otherwise a failure (see ErrorReporter.sol for details)\"},\"seize(address,address,uint256)\":{\"details\":\"Will fail unless called by another cToken during the process of liquidation. Its absolutely critical to use msg.sender as the borrowed cToken and not a parameter.\",\"params\":{\"borrower\":\"The account having collateral seized\",\"liquidator\":\"The account receiving seized collateral\",\"seizeTokens\":\"The number of cTokens to seize\"},\"return\":\"uint 0=success, otherwise a failure (see ErrorReporter.sol for details)\"},\"supplyRatePerBlock()\":{\"return\":\"The supply interest rate per block, scaled by 1e18\"},\"totalBorrowsCurrent()\":{\"return\":\"The total borrows with interest\"},\"transfer(address,uint256)\":{\"params\":{\"amount\":\"The number of tokens to transfer\",\"dst\":\"The address of the destination account\"},\"return\":\"Whether or not the transfer succeeded\"},\"transferFrom(address,address,uint256)\":{\"params\":{\"amount\":\"The number of tokens to transfer\",\"dst\":\"The address of the destination account\",\"src\":\"The address of the source account\"},\"return\":\"Whether or not the transfer succeeded\"}},\"title\":\"Compound's CErc20 Contract\"},\"userdoc\":{\"methods\":{\"_acceptAdmin()\":{\"notice\":\"Accepts transfer of admin rights. msg.sender must be pendingAdmin\"},\"_reduceReserves(uint256)\":{\"notice\":\"Accrues interest and reduces reserves by transferring to admin\"},\"_setComptroller(address)\":{\"notice\":\"Sets a new comptroller for the market\"},\"_setInterestRateModel(address)\":{\"notice\":\"accrues interest and updates the interest rate model using _setInterestRateModelFresh\"},\"_setPendingAdmin(address)\":{\"notice\":\"Begins transfer of admin rights. The newPendingAdmin must call `_acceptAdmin` to finalize the transfer.\"},\"_setReserveFactor(uint256)\":{\"notice\":\"accrues interest and sets a new reserve factor for the protocol using _setReserveFactorFresh\"},\"accrueInterest()\":{\"notice\":\"Applies accrued interest to total borrows and reserves.\"},\"allowance(address,address)\":{\"notice\":\"Get the current allowance from `owner` for `spender`\"},\"approve(address,uint256)\":{\"notice\":\"Approve `spender` to transfer up to `amount` from `src`\"},\"balanceOf(address)\":{\"notice\":\"Get the token balance of the `owner`\"},\"balanceOfUnderlying(address)\":{\"notice\":\"Get the underlying balance of the `owner`\"},\"borrow(uint256)\":{\"notice\":\"Sender borrows assets from the protocol to their own address\"},\"borrowBalanceCurrent(address)\":{\"notice\":\"Accrue interest to updated borrowIndex and then calculate account's borrow balance using the updated borrowIndex\"},\"borrowBalanceStored(address)\":{\"notice\":\"Return the borrow balance of account based on stored data\"},\"borrowRatePerBlock()\":{\"notice\":\"Returns the current per-block borrow interest rate for this cToken\"},\"constructor\":\"Construct a new money market\",\"exchangeRateCurrent()\":{\"notice\":\"Accrue interest then return the up-to-date exchange rate\"},\"exchangeRateStored()\":{\"notice\":\"Calculates the exchange rate from the underlying to the CToken\"},\"getAccountSnapshot(address)\":{\"notice\":\"Get a snapshot of the account's balances, and the cached exchange rate\"},\"getCash()\":{\"notice\":\"Get cash balance of this cToken in the underlying asset\"},\"liquidateBorrow(address,uint256,address)\":{\"notice\":\"The sender liquidates the borrowers collateral. The collateral seized is transferred to the liquidator.\"},\"mint(uint256)\":{\"notice\":\"Sender supplies assets into the market and receives cTokens in exchange\"},\"redeem(uint256)\":{\"notice\":\"Sender redeems cTokens in exchange for the underlying asset\"},\"redeemUnderlying(uint256)\":{\"notice\":\"Sender redeems cTokens in exchange for a specified amount of underlying asset\"},\"repayBorrow(uint256)\":{\"notice\":\"Sender repays their own borrow\"},\"repayBorrowBehalf(address,uint256)\":{\"notice\":\"Sender repays a borrow belonging to borrower\"},\"seize(address,address,uint256)\":{\"notice\":\"Transfers collateral tokens (this market) to the liquidator.\"},\"supplyRatePerBlock()\":{\"notice\":\"Returns the current per-block supply interest rate for this cToken\"},\"totalBorrowsCurrent()\":{\"notice\":\"Returns the current total borrows plus accrued interest\"},\"transfer(address,uint256)\":{\"notice\":\"Transfer `amount` tokens from `msg.sender` to `dst`\"},\"transferFrom(address,address,uint256)\":{\"notice\":\"Transfer `amount` tokens from `src` to `dst`\"}},\"notice\":\"CTokens which wrap an EIP-20 underlying\"}},\"settings\":{\"compilationTarget\":{\"/home/runner/work/rtoken-contracts/rtoken-contracts/packages/contracts/compound/contracts/CErc20.sol\":\"CErc20\"},\"evmVersion\":\"petersburg\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/home/runner/work/rtoken-contracts/rtoken-contracts/packages/contracts/compound/contracts/CErc20.sol\":{\"keccak256\":\"0x5a851f847c93f5d6ca92f711758c05972458e34c001db2b64057be5a5ba6520b\",\"urls\":[\"bzz-raw://04d9db51fd3fa3d23507624e02cc1ccaf4490c7d42f0de7782327aa9d277c89e\",\"dweb:/ipfs/Qmdf2aNBzFfVvrma6GiQEnppt3imb7tyQHShb2tz74Re6b\"]},\"/home/runner/work/rtoken-contracts/rtoken-contracts/packages/contracts/compound/contracts/CToken.sol\":{\"keccak256\":\"0xf9e6eb4ce700c024efaa3bb367a191f8bf98471e9fff6854f55eb81f69d6be68\",\"urls\":[\"bzz-raw://1a036193c252f3995667652d57fc424b54774af0a85813621bd86c6d1fc3bfbb\",\"dweb:/ipfs/Qmck2Ab2tC4vaTjfntexeoAgpggdw2czWPoAgR3JHmukMf\"]},\"/home/runner/work/rtoken-contracts/rtoken-contracts/packages/contracts/compound/contracts/CarefulMath.sol\":{\"keccak256\":\"0xbeb605bfb980199c42701b9557bcffffa3a845c6386adfc6130568d9f3f38495\",\"urls\":[\"bzz-raw://6595932dbb88fb67d81694ab43f9dd42124e3db91d3b29d8c226577c1a96481a\",\"dweb:/ipfs/Qmb66bD8XPmJBH1eShryFwWUAWEyAx4uHzDdLQs1mZMVTe\"]},\"/home/runner/work/rtoken-contracts/rtoken-contracts/packages/contracts/compound/contracts/ComptrollerInterface.sol\":{\"keccak256\":\"0xde6c4cb111e4d36ec44f350299a5b585d9a45636189e25a814d7b9f2dbb822af\",\"urls\":[\"bzz-raw://a67fcb86ceabbd676cff39ce557a74b726879af516f33557e1fb618bff68d295\",\"dweb:/ipfs/QmbD6qN2xXE2zmqjkNo3TED5deEziS3V5yrDNL4nAvi2GB\"]},\"/home/runner/work/rtoken-contracts/rtoken-contracts/packages/contracts/compound/contracts/EIP20Interface.sol\":{\"keccak256\":\"0x8bef6d59a76c8541a034a403357b73dcb50d75847259371b7bdd64f5609ca674\",\"urls\":[\"bzz-raw://b5dd267ee3867de45e4c6491782fcf7259ce9265cf01e7bdf49612c4852f721f\",\"dweb:/ipfs/QmbLiQf3NSTetqHiNVog42wADgQEvVDRxfBjZJ6ouL3D5e\"]},\"/home/runner/work/rtoken-contracts/rtoken-contracts/packages/contracts/compound/contracts/EIP20NonStandardInterface.sol\":{\"keccak256\":\"0x83355bb84aad5f6b682cf9066f2b0899dca97b844e720f6e55a3aa46bd0d2049\",\"urls\":[\"bzz-raw://8e67fcb8e269e6f23805f42976390de78a9727c3800f7ff626ac39ac6d9f26d0\",\"dweb:/ipfs/QmaTtMbQEqCXrdsifhiZ3erLeig1K48DV1cibtayRB5WVd\"]},\"/home/runner/work/rtoken-contracts/rtoken-contracts/packages/contracts/compound/contracts/ErrorReporter.sol\":{\"keccak256\":\"0x3f0cb233287ad13e45a46b4fa63dbad2c63a17d0647049c04f487bf3c71c8cac\",\"urls\":[\"bzz-raw://b6b34d0f897d0a2917d2e6567e95a21bd7e0b25adc172c431c40fdae96cc5504\",\"dweb:/ipfs/QmV32L6X3fHz6kFgS5VQkm24cZxre4jMEdexjLZ6DVCgCi\"]},\"/home/runner/work/rtoken-contracts/rtoken-contracts/packages/contracts/compound/contracts/Exponential.sol\":{\"keccak256\":\"0x5578daa70764231d35e464fdb46d473d1a08c727ef5676c7b12015948b218dbf\",\"urls\":[\"bzz-raw://ef86f477727842fea96169716f57a53b1307d9f0d4770d5963c0df0ef029f0d0\",\"dweb:/ipfs/Qmahf4aXZGnMMmuY6gebrTCWd64rPHuToSeqhkeFXL7T62\"]},\"/home/runner/work/rtoken-contracts/rtoken-contracts/packages/contracts/compound/contracts/InterestRateModel.sol\":{\"keccak256\":\"0x1aca227009cbde84beabddc89823f55130c2519823d4669d4e714a2a798af6c2\",\"urls\":[\"bzz-raw://cb8fc34b58cd973fa29d1636a5ecf02858f355f477ffc7525acf62e1c3aa5977\",\"dweb:/ipfs/QmXiAaRwvSw7FFLzuyJD7zwxZrGAhLEo4APJZjDc8yXYem\"]},\"/home/runner/work/rtoken-contracts/rtoken-contracts/packages/contracts/compound/contracts/ReentrancyGuard.sol\":{\"keccak256\":\"0x185090f837286a2757b50a3535fc78b1409a1f261fcc375c05ef86a348026488\",\"urls\":[\"bzz-raw://c7f61e912a2d9649e89f6a2fa0c4a574178003da8775edb6f14959df1ab76796\",\"dweb:/ipfs/QmVtSqyJfhJkrCjJbmcw8MWCC6zNcoPW7Nyr2uXhJfYyCV\"]}},\"version\":1}",
  "bytecode": "0x60806040523480156200001157600080fd5b506040516200525038038062005250833981810160405260e08110156200003757600080fd5b81516020830151604080850151606086015160808701805193519597949692959194919392820192846401000000008211156200007357600080fd5b9083019060208201858111156200008957600080fd5b8251640100000000811182820188101715620000a457600080fd5b82525081516020918201929091019080838360005b83811015620000d3578181015183820152602001620000b9565b50505050905090810190601f168015620001015780820380516001836020036101000a031916815260200191505b50604052602001805160405193929190846401000000008211156200012557600080fd5b9083019060208201858111156200013b57600080fd5b82516401000000008111828201881017156200015657600080fd5b82525081516020918201929091019080838360005b83811015620001855781810151838201526020016200016b565b50505050905090810190601f168015620001b35780820380516001836020036101000a031916815260200191505b50604052602001516001600055600480546001600160a01b031916331790556008869055915086905085858585858362000239576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526030815260200180620052206030913960400191505060405180910390fd5b60006200024f876001600160e01b036200043516565b90508015620002bf57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f53657474696e6720636f6d7074726f6c6c6572206661696c6564000000000000604482015290519081900360640190fd5b620002d26001600160e01b03620005cb16565b600a55670de0b6b3a7640000600b55620002f5866001600160e01b03620005d016565b9050801562000350576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180620051fe6022913960400191505060405180910390fd5b835162000365906001906020870190620007fb565b5082516200037b906002906020860190620007fb565b50506003555050601280546001600160a01b0319166001600160a01b038c81169190911791829055604080517f18160ddd00000000000000000000000000000000000000000000000000000000815290519290911694506318160ddd93506004808201935060209291829003018186803b158015620003f957600080fd5b505afa1580156200040e573d6000803e3d6000fd5b505050506040513d60208110156200042557600080fd5b506200089d975050505050505050565b6004546000906001600160a01b031633146200046a57620004626001603f6001600160e01b036200078b16565b9050620005c6565b600654604080517e7e3dd200000000000000000000000000000000000000000000000000000000815290516001600160a01b0392831692851691627e3dd2916004808301926020929190829003018186803b158015620004c957600080fd5b505afa158015620004de573d6000803e3d6000fd5b505050506040513d6020811015620004f557600080fd5b50516200056357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f6d61726b6572206d6574686f642072657475726e65642066616c736500000000604482015290519081900360640190fd5b600680546001600160a01b0319166001600160a01b03858116918217909255604080519284168352602083019190915280517f7ac369dbd14fa5ea3f473ed67cc9d598964a77501540ba6751eb0b3decf5870d9281900390910190a160005b9150505b919050565b435b90565b60045460009081906001600160a01b031633146200060857620005ff600160426001600160e01b036200078b16565b915050620005c6565b6200061b6001600160e01b03620005cb16565b600a54146200063b57620005ff600a60416001600160e01b036200078b16565b600760009054906101000a90046001600160a01b03169050826001600160a01b0316632191f92a6040518163ffffffff1660e01b815260040160206040518083038186803b1580156200068d57600080fd5b505afa158015620006a2573d6000803e3d6000fd5b505050506040513d6020811015620006b957600080fd5b50516200072757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f6d61726b6572206d6574686f642072657475726e65642066616c736500000000604482015290519081900360640190fd5b600780546001600160a01b0319166001600160a01b03858116918217909255604080519284168352602083019190915280517fedffc32e068c7c95dfd4bdfd5c4d939a084d6b11c4199eac8436ed234d72f9269281900390910190a16000620005c2565b60007f45b96fe442630264581b197e84bbada861235052c5a1aadfff9ea4e40a969aa0836010811115620007bb57fe5b83604d811115620007c857fe5b604080519283526020830191909152600082820152519081900360600190a1826010811115620007f457fe5b9392505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200083e57805160ff19168380011785556200086e565b828001600101855582156200086e579182015b828111156200086e57825182559160200191906001019062000851565b506200087c92915062000880565b5090565b620005cd91905b808211156200087c576000815560010162000887565b61495180620008ad6000396000f3fe608060405234801561001057600080fd5b506004361061028a5760003560e01c80638f840ddd1161015c578063c37f68e2116100ce578063f3fdb15a11610087578063f3fdb15a14610708578063f5e3c46214610710578063f851a44014610746578063f8f9da281461074e578063fca7820b14610756578063fe9c44ae146107735761028a565b8063c37f68e214610626578063c5ebeaec14610672578063db006a751461068f578063dd62ed3e146106ac578063e9c714f2146106da578063f2b3abbd146106e25761028a565b8063a9059cbb11610120578063a9059cbb14610586578063aa5af0fd146105b2578063ae9d70b0146105ba578063b2a02ff1146105c2578063b71d1a0c146105f8578063bd6d894d1461061e5761028a565b80638f840ddd1461052b57806395d89b411461053357806395dd91931461053b578063a0712d6814610561578063a6afed951461057e5761028a565b80633af9e66911610200578063675d972c116101b9578063675d972c146104c85780636c540baf146104d05780636f307dc3146104d857806370a08231146104e057806373acee9814610506578063852a12e31461050e5761028a565b80633af9e669146104475780633b1d21a21461046d5780634576b5db1461047557806347bd37181461049b5780635fe3b567146104a3578063601a0bf1146104ab5761028a565b806318160ddd1161025257806318160ddd146103a9578063182df0f5146103b157806323b872dd146103b95780632608f818146103ef578063267822471461041b578063313ce5671461043f5761028a565b806306fdde031461028f578063095ea7b31461030c5780630e7527021461034c578063173b99041461037b57806317bfdfbc14610383575b600080fd5b61029761077b565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102d15781810151838201526020016102b9565b50505050905090810190601f1680156102fe5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6103386004803603604081101561032257600080fd5b506001600160a01b038135169060200135610808565b604080519115158252519081900360200190f35b6103696004803603602081101561036257600080fd5b5035610875565b60408051918252519081900360200190f35b610369610888565b6103696004803603602081101561039957600080fd5b50356001600160a01b031661088e565b610369610941565b610369610947565b610338600480360360608110156103cf57600080fd5b506001600160a01b038135811691602081013590911690604001356109aa565b6103696004803603604081101561040557600080fd5b506001600160a01b038135169060200135610a10565b610423610a23565b604080516001600160a01b039092168252519081900360200190f35b610369610a32565b6103696004803603602081101561045d57600080fd5b50356001600160a01b0316610a38565b610369610aa6565b6103696004803603602081101561048b57600080fd5b50356001600160a01b0316610ab5565b610369610c04565b610423610c0a565b610369600480360360208110156104c157600080fd5b5035610c19565b610369610ca1565b610369610ca7565b610423610cad565b610369600480360360208110156104f657600080fd5b50356001600160a01b0316610cbc565b610369610cd7565b6103696004803603602081101561052457600080fd5b5035610d81565b610369610d8c565b610297610d92565b6103696004803603602081101561055157600080fd5b50356001600160a01b0316610dea565b6103696004803603602081101561057757600080fd5b5035610e47565b610369610e52565b6103386004803603604081101561059c57600080fd5b506001600160a01b03813516906020013561124b565b6103696112b0565b6103696112b6565b610369600480360360608110156105d857600080fd5b506001600160a01b03813581169160208101359091169060400135611581565b6103696004803603602081101561060e57600080fd5b50356001600160a01b0316611832565b6103696118b9565b61064c6004803603602081101561063c57600080fd5b50356001600160a01b0316611964565b604080519485526020850193909352838301919091526060830152519081900360800190f35b6103696004803603602081101561068857600080fd5b50356119f9565b610369600480360360208110156106a557600080fd5b5035611a04565b610369600480360360408110156106c257600080fd5b506001600160a01b0381358116916020013516611a0f565b610369611a3a565b610369600480360360208110156106f857600080fd5b50356001600160a01b0316611b29565b610423611b63565b6103696004803603606081101561072657600080fd5b506001600160a01b03813581169160208101359160409091013516611b72565b610423611b7f565b610369611b8e565b6103696004803603602081101561076c57600080fd5b5035611c6a565b610338611ca4565b60018054604080516020600284861615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156108005780601f106107d557610100808354040283529160200191610800565b820191906000526020600020905b8154815290600101906020018083116107e357829003601f168201915b505050505081565b3360008181526010602090815260408083206001600160a01b03871680855290835281842086905581518681529151939493909284927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929081900390910190a360019150505b92915050565b600061088082611ca9565b90505b919050565b60095481565b60008054600101808255816108a1610e52565b146108ec576040805162461bcd60e51b81526020600482015260166024820152751858d8dc9d59481a5b9d195c995cdd0819985a5b195960521b604482015290519081900360640190fd5b6108f583610dea565b91505b600054811461093b576040805162461bcd60e51b815260206004820152600a6024820152691c994b595b9d195c995960b21b604482015290519081900360640190fd5b50919050565b600e5481565b6000806000610954611ce5565b9092509050600082600381111561096757fe5b146109a35760405162461bcd60e51b81526004018080602001828103825260358152602001806148906035913960400191505060405180910390fd5b9150505b90565b60008054600101808255816109c133878787611d93565b1491505b6000548114610a08576040805162461bcd60e51b815260206004820152600a6024820152691c994b595b9d195c995960b21b604482015290519081900360640190fd5b509392505050565b6000610a1c83836120a1565b9392505050565b6005546001600160a01b031681565b60035481565b6000610a426145e9565b6040518060200160405280610a556118b9565b90526001600160a01b0384166000908152600f6020526040812054919250908190610a8190849061212b565b90925090506000826003811115610a9457fe5b14610a9e57600080fd5b949350505050565b6000610ab061217f565b905090565b6004546000906001600160a01b03163314610add57610ad66001603f6121ff565b9050610883565b60065460408051623f1ee960e11b815290516001600160a01b0392831692851691627e3dd2916004808301926020929190829003018186803b158015610b2257600080fd5b505afa158015610b36573d6000803e3d6000fd5b505050506040513d6020811015610b4c57600080fd5b5051610b9f576040805162461bcd60e51b815260206004820152601c60248201527f6d61726b6572206d6574686f642072657475726e65642066616c736500000000604482015290519081900360640190fd5b600680546001600160a01b0319166001600160a01b03858116918217909255604080519284168352602083019190915280517f7ac369dbd14fa5ea3f473ed67cc9d598964a77501540ba6751eb0b3decf5870d9281900390910190a160009392505050565b600c5481565b6006546001600160a01b031681565b6000805460010180825581610c2c610e52565b90508015610c5257610c4a816010811115610c4357fe5b60306121ff565b9250506108f8565b610c5b84612265565b925050600054811461093b576040805162461bcd60e51b815260206004820152600a6024820152691c994b595b9d195c995960b21b604482015290519081900360640190fd5b60085481565b600a5481565b6012546001600160a01b031681565b6001600160a01b03166000908152600f602052604090205490565b6000805460010180825581610cea610e52565b14610d35576040805162461bcd60e51b81526020600482015260166024820152751858d8dc9d59481a5b9d195c995cdd0819985a5b195960521b604482015290519081900360640190fd5b600c5491506000548114610d7d576040805162461bcd60e51b815260206004820152600a6024820152691c994b595b9d195c995960b21b604482015290519081900360640190fd5b5090565b6000610880826123e3565b600d5481565b6002805460408051602060018416156101000260001901909316849004601f810184900484028201840190925281815292918301828280156108005780601f106107d557610100808354040283529160200191610800565b6000806000610df884612420565b90925090506000826003811115610e0b57fe5b14610a1c5760405162461bcd60e51b81526004018080602001828103825260378152602001806147646037913960400191505060405180910390fd5b6000610880826124d4565b6000610e5c6145fc565b6007546001600160a01b03166315f24053610e7561217f565b600c54600d546040518463ffffffff1660e01b8152600401808481526020018381526020018281526020019350505050604080518083038186803b158015610ebc57600080fd5b505afa158015610ed0573d6000803e3d6000fd5b505050506040513d6040811015610ee657600080fd5b50805160209182015160408401819052918301526601c6bf526340001015610f55576040805162461bcd60e51b815260206004820152601c60248201527f626f72726f772072617465206973206162737572646c79206869676800000000604482015290519081900360640190fd5b602081015115610f7857610f7060056002836020015161250f565b9150506109a7565b610f80612575565b60608201819052600a54610f949190612579565b6080830181905282826003811115610fa857fe5b6003811115610fb357fe5b9052506000905081516003811115610fc757fe5b14610fce57fe5b610fee60405180602001604052808360400151815250826080015161259c565b60a083018190528282600381111561100257fe5b600381111561100d57fe5b905250600090508151600381111561102157fe5b1461104257610f70600960068360000151600381111561103d57fe5b61250f565b6110528160a00151600c5461212b565b60c083018190528282600381111561106657fe5b600381111561107157fe5b905250600090508151600381111561108557fe5b146110a157610f70600960018360000151600381111561103d57fe5b6110b18160c00151600c54612604565b60e08301819052828260038111156110c557fe5b60038111156110d057fe5b90525060009050815160038111156110e457fe5b1461110057610f70600960048360000151600381111561103d57fe5b61112160405180602001604052806009548152508260c00151600d5461262a565b61010083018190528282600381111561113657fe5b600381111561114157fe5b905250600090508151600381111561115557fe5b1461117157610f70600960058360000151600381111561103d57fe5b6111848160a00151600b54600b5461262a565b61012083018190528282600381111561119957fe5b60038111156111a457fe5b90525060009050815160038111156111b857fe5b146111d457610f70600960038360000151600381111561103d57fe5b606080820151600a55610120820151600b81905560e0830151600c819055610100840151600d5560c08401516040805191825260208201939093528083019190915290517f875352fb3fadeb8c0be7cbbe8ff761b308fa7033470cd0287f02f3436fd76cb9929181900390910190a1600091505090565b600080546001018082558161126233338787611d93565b1491505b60005481146112a9576040805162461bcd60e51b815260206004820152600a6024820152691c994b595b9d195c995960b21b604482015290519081900360640190fd5b5092915050565b600b5481565b6000806112c1610947565b60075490915060009081906001600160a01b03166315f240536112e261217f565b600c54600d546040518463ffffffff1660e01b8152600401808481526020018381526020018281526020019350505050604080518083038186803b15801561132957600080fd5b505afa15801561133d573d6000803e3d6000fd5b505050506040513d604081101561135357600080fd5b5080516020909101519092509050811561139e5760405162461bcd60e51b81526004018080602001828103825260318152602001806148036031913960400191505060405180910390fd5b60006113a86145e9565b6113c2604051806020016040528087815250600e5461259c565b909250905060008260038111156113d557fe5b146114115760405162461bcd60e51b815260040180806020018281038252603181526020018061479b6031913960400191505060405180910390fd5b600061141b6145e9565b611427600c5484612686565b9092509050600082600381111561143a57fe5b146114765760405162461bcd60e51b81526004018080602001828103825260318152602001806146df6031913960400191505060405180910390fd5b60006114806145e9565b6114b06040518060200160405280670de0b6b3a764000081525060405180602001604052806009548152506126e5565b909250905060008260038111156114c357fe5b146114ff5760405162461bcd60e51b815260040180806020018281038252603c815260200180614854603c913960400191505060405180910390fd5b60006115096145e9565b61152260405180602001604052808b815250848761271f565b9092509050600082600381111561153557fe5b146115715760405162461bcd60e51b81526004018080602001828103825260318152602001806147336031913960400191505060405180910390fd5b519a505050505050505050505090565b600080546001018082556006546040805163d02f735160e01b81523060048201523360248201526001600160a01b03888116604483015287811660648301526084820187905291518593929092169163d02f73519160a48082019260209290919082900301818787803b1580156115f757600080fd5b505af115801561160b573d6000803e3d6000fd5b505050506040513d602081101561162157600080fd5b505190508015611640576116386003601b8361250f565b9250506109c5565b856001600160a01b0316856001600160a01b03161415611666576116386006601c6121ff565b6001600160a01b0385166000908152600f60205260408120548190819061168d9088612579565b909350915060008360038111156116a057fe5b146116c3576116b86009601a85600381111561103d57fe5b9550505050506109c5565b6001600160a01b0389166000908152600f60205260409020546116e69088612604565b909350905060008360038111156116f957fe5b14611711576116b86009601985600381111561103d57fe5b6001600160a01b038089166000818152600f60209081526040808320879055938d168083529184902085905583518b815293519193600080516020614834833981519152929081900390910190a360065460408051636d35bf9160e01b81523060048201523360248201526001600160a01b038c811660448301528b81166064830152608482018b905291519190921691636d35bf919160a480830192600092919082900301818387803b1580156117c857600080fd5b505af11580156117dc573d6000803e3d6000fd5b50600092506117e9915050565b9550505050506000548114610a08576040805162461bcd60e51b815260206004820152600a6024820152691c994b595b9d195c995960b21b604482015290519081900360640190fd5b6004546000906001600160a01b0316331461185357610ad6600160456121ff565b600580546001600160a01b038481166001600160a01b0319831681179093556040805191909216808252602082019390935281517fca4f2f25d0898edd99413412fb94012f9e54ec8142f9b093e7720646a95b16a9929181900390910190a16000610a1c565b60008054600101808255816118cc610e52565b14611917576040805162461bcd60e51b81526020600482015260166024820152751858d8dc9d59481a5b9d195c995cdd0819985a5b195960521b604482015290519081900360640190fd5b61191f610947565b91506000548114610d7d576040805162461bcd60e51b815260206004820152600a6024820152691c994b595b9d195c995960b21b604482015290519081900360640190fd5b6001600160a01b0381166000908152600f602052604081205481908190819081808061198f89612420565b9350905060008160038111156119a157fe5b146119bf5760095b9750600096508695508594506119f29350505050565b6119c7611ce5565b9250905060008160038111156119d957fe5b146119e55760096119a9565b5060009650919450925090505b9193509193565b600061088082612769565b6000610880826127a4565b6001600160a01b03918216600090815260106020908152604080832093909416825291909152205490565b6005546000906001600160a01b031633141580611a55575033155b15611a6d57611a66600160006121ff565b90506109a7565b60048054600580546001600160a01b038082166001600160a01b031980861682179687905590921690925560408051938316808552949092166020840152815190927ff9ffabca9c8276e99321725bcb43fb076a6c66a54b7f21c4e8146d8519b417dc92908290030190a1600554604080516001600160a01b038085168252909216602083015280517fca4f2f25d0898edd99413412fb94012f9e54ec8142f9b093e7720646a95b16a99281900390910190a160009250505090565b600080611b34610e52565b90508015611b5a57611b52816010811115611b4b57fe5b60406121ff565b915050610883565b610a1c836127da565b6007546001600160a01b031681565b6000610a9e84848461294a565b6004546001600160a01b031681565b600754600090819081906001600160a01b03166315f24053611bae61217f565b600c54600d546040518463ffffffff1660e01b8152600401808481526020018381526020018281526020019350505050604080518083038186803b158015611bf557600080fd5b505afa158015611c09573d6000803e3d6000fd5b505050506040513d6040811015611c1f57600080fd5b508051602090910151909250905081156109a35760405162461bcd60e51b81526004018080602001828103825260378152602001806147cc6037913960400191505060405180910390fd5b6000805460010180825581611c7d610e52565b90508015611c9b57610c4a816010811115611c9457fe5b60466121ff565b610c5b84612a52565b600181565b6000805460010180825581611cbc610e52565b90508015611cda57610c4a816010811115611cd357fe5b60366121ff565b610c5b333386612af5565b600080600e5460001415611d00575050600854600090611d8f565b6000611d0a61217f565b90506000611d166145e9565b6000611d2784600c54600d54612f48565b935090506000816003811115611d3957fe5b14611d4d57945060009350611d8f92505050565b611d5983600e54612f86565b925090506000816003811115611d6b57fe5b14611d7f57945060009350611d8f92505050565b5051600094509250611d8f915050565b9091565b600654604080516317b9b84b60e31b81523060048201526001600160a01b03868116602483015285811660448301526064820185905291516000938493169163bdcdc25891608480830192602092919082900301818787803b158015611df857600080fd5b505af1158015611e0c573d6000803e3d6000fd5b505050506040513d6020811015611e2257600080fd5b505190508015611e4157611e396003604a8361250f565b915050610a9e565b836001600160a01b0316856001600160a01b03161415611e6757611e396002604b6121ff565b60006001600160a01b038781169087161415611e865750600019611eae565b506001600160a01b038086166000908152601060209081526040808320938a16835292905220545b600080600080611ebe8589612579565b90945092506000846003811115611ed157fe5b14611eef57611ee26009604b6121ff565b9650505050505050610a9e565b6001600160a01b038a166000908152600f6020526040902054611f129089612579565b90945091506000846003811115611f2557fe5b14611f3657611ee26009604c6121ff565b6001600160a01b0389166000908152600f6020526040902054611f599089612604565b90945090506000846003811115611f6c57fe5b14611f7d57611ee26009604d6121ff565b6001600160a01b03808b166000908152600f6020526040808220859055918b168152208190556000198514611fd5576001600160a01b03808b166000908152601060209081526040808320938f168352929052208390555b886001600160a01b03168a6001600160a01b03166000805160206148348339815191528a6040518082815260200191505060405180910390a36006546040805163352b4a3f60e11b81523060048201526001600160a01b038d811660248301528c81166044830152606482018c905291519190921691636a56947e91608480830192600092919082900301818387803b15801561207157600080fd5b505af1158015612085573d6000803e3d6000fd5b5060009250612092915050565b9b9a5050505050505050505050565b60008054600101808255816120b4610e52565b905080156120da576120d28160108111156120cb57fe5b60356121ff565b925050611266565b6120e5338686612af5565b92505060005481146112a9576040805162461bcd60e51b815260206004820152600a6024820152691c994b595b9d195c995960b21b604482015290519081900360640190fd5b60008060006121386145e9565b612142868661259c565b9092509050600082600381111561215557fe5b146121665750915060009050612178565b600061217182613036565b9350935050505b9250929050565b601254604080516370a0823160e01b815230600482015290516000926001600160a01b03169182916370a0823191602480820192602092909190829003018186803b1580156121cd57600080fd5b505afa1580156121e1573d6000803e3d6000fd5b505050506040513d60208110156121f757600080fd5b505191505090565b60007f45b96fe442630264581b197e84bbada861235052c5a1aadfff9ea4e40a969aa083601081111561222e57fe5b83604d81111561223a57fe5b604080519283526020830191909152600082820152519081900360600190a1826010811115610a1c57fe5b600454600090819081906001600160a01b031633146122935761228a600160316121ff565b92505050610883565b61229b612575565b600a54146122af5761228a600a60336121ff565b836122b861217f565b10156122ca5761228a600e60326121ff565b600d548411156122e05761228a600260346121ff565b50600d54838103908111156123265760405162461bcd60e51b81526004018080602001828103825260248152602001806148f96024913960400191505060405180910390fd5b600d819055600454612341906001600160a01b031685613045565b9150600082601081111561235157fe5b1461238d5760405162461bcd60e51b81526004018080602001828103825260238152602001806147106023913960400191505060405180910390fd5b600454604080516001600160a01b03909216825260208201869052818101839052517f3bad0c59cf2f06e7314077049f48a93578cd16f5ef92329f1dab1420a99c177e9181900360600190a16000949350505050565b60008054600101808255816123f6610e52565b9050801561241457610c4a81601081111561240d57fe5b60276121ff565b610c5b33600086613101565b6001600160a01b0381166000908152601160205260408120805482918291829182916124575750600094508493506124cf92505050565b6124678160000154600b5461360a565b9094509250600084600381111561247a57fe5b1461248f5750919350600092506124cf915050565b61249d838260010154613649565b909450915060008460038111156124b057fe5b146124c55750919350600092506124cf915050565b5060009450925050505b915091565b60008054600101808255816124e7610e52565b9050801561250557610c4a8160108111156124fe57fe5b601e6121ff565b610c5b3385613674565b60007f45b96fe442630264581b197e84bbada861235052c5a1aadfff9ea4e40a969aa084601081111561253e57fe5b84604d81111561254a57fe5b604080519283526020830191909152818101859052519081900360600190a1836010811115610a9e57fe5b4390565b600080838311612590575060009050818303612178565b50600390506000612178565b60006125a66145e9565b6000806125b786600001518661360a565b909250905060008260038111156125ca57fe5b146125e957506040805160208101909152600081529092509050612178565b60408051602081019091529081526000969095509350505050565b60008083830184811061261c57600092509050612178565b506002915060009050612178565b60008060006126376145e9565b612641878761259c565b9092509050600082600381111561265457fe5b14612665575091506000905061267e565b61267761267182613036565b86612604565b9350935050505b935093915050565b60006126906145e9565b6000806126a5670de0b6b3a76400008761360a565b909250905060008260038111156126b857fe5b146126d757506040805160208101909152600081529092509050612178565b612171818660000151612f86565b60006126ef6145e9565b60008061270486600001518660000151612579565b60408051602081019091529081529097909650945050505050565b60006127296145e9565b60006127336145e9565b61273d8787613abc565b9092509050600082600381111561275057fe5b1461275f57909250905061267e565b6126778186613abc565b600080546001018082558161277c610e52565b9050801561279a57610c4a81601081111561279357fe5b60086121ff565b610c5b3385613ba5565b60008054600101808255816127b7610e52565b905080156127ce57610c4a81601081111561240d57fe5b610c5b33856000613101565b60045460009081906001600160a01b031633146127fd57611b52600160426121ff565b612805612575565b600a541461281957611b52600a60416121ff565b600760009054906101000a90046001600160a01b03169050826001600160a01b0316632191f92a6040518163ffffffff1660e01b815260040160206040518083038186803b15801561286a57600080fd5b505afa15801561287e573d6000803e3d6000fd5b505050506040513d602081101561289457600080fd5b50516128e7576040805162461bcd60e51b815260206004820152601c60248201527f6d61726b6572206d6574686f642072657475726e65642066616c736500000000604482015290519081900360640190fd5b600780546001600160a01b0319166001600160a01b03858116918217909255604080519284168352602083019190915280517fedffc32e068c7c95dfd4bdfd5c4d939a084d6b11c4199eac8436ed234d72f9269281900390910190a16000610a1c565b600080546001018082558161295d610e52565b9050801561297b5761163881601081111561297457fe5b600f6121ff565b836001600160a01b031663a6afed956040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156129b657600080fd5b505af11580156129ca573d6000803e3d6000fd5b505050506040513d60208110156129e057600080fd5b505190508015612a00576116388160108111156129f957fe5b60106121ff565b612a0c33878787613f0b565b9250506000548114610a08576040805162461bcd60e51b815260206004820152600a6024820152691c994b595b9d195c995960b21b604482015290519081900360640190fd5b6004546000906001600160a01b03163314612a7357610ad6600160476121ff565b612a7b612575565b600a5414612a8f57610ad6600a60486121ff565b670de0b6b3a7640000821115612aab57610ad6600260496121ff565b6009805490839055604080518281526020810185905281517faaa68312e2ea9d50e16af5068410ab56e1a1fd06037b1a35664812c30f821460929181900390910190a16000610a1c565b60065460408051631200453160e11b81523060048201526001600160a01b0386811660248301528581166044830152606482018590529151600093849316916324008a6291608480830192602092919082900301818787803b158015612b5a57600080fd5b505af1158015612b6e573d6000803e3d6000fd5b505050506040513d6020811015612b8457600080fd5b505190508015612ba357612b9b600360388361250f565b915050610a1c565b612bab612575565b600a5414612bbf57612b9b600a60396121ff565b612bc7614656565b6001600160a01b0385166000908152601160205260409020600101546060820152612bf185612420565b6080830181905260208301826003811115612c0857fe5b6003811115612c1357fe5b9052506000905081602001516003811115612c2a57fe5b14612c4f57612c46600960378360200151600381111561103d57fe5b92505050610a1c565b600019841415612c685760808101516040820152612c70565b604081018490525b612c7e8682604001516143e7565b81906010811115612c8b57fe5b90816010811115612c9857fe5b905250600081516010811115612caa57fe5b14612cbc578051612c4690603c6121ff565b612cce81608001518260400151612579565b60a0830181905260208301826003811115612ce557fe5b6003811115612cf057fe5b9052506000905081602001516003811115612d0757fe5b14612d2357612c466009603a8360200151600381111561103d57fe5b612d33600c548260400151612579565b60c0830181905260208301826003811115612d4a57fe5b6003811115612d5557fe5b9052506000905081602001516003811115612d6c57fe5b14612d8857612c466009603b8360200151600381111561103d57fe5b612d9686826040015161451b565b81906010811115612da357fe5b90816010811115612db057fe5b905250600081516010811115612dc257fe5b14612e14576040805162461bcd60e51b815260206004820152601f60248201527f726570617920626f72726f77207472616e7366657220696e206661696c656400604482015290519081900360640190fd5b60a080820180516001600160a01b03808916600081815260116020908152604091829020948555600b5460019095019490945560c0870151600c8190558188015195518251948e16855294840192909252828101949094526060820192909252608081019190915290517f1a2a22cb034d26d1854bdc6666a5b91fe25efbbb5dcad3b0355478d6f5c362a1929181900390910190a160065460408083015160608401518251631ededc9160e01b81523060048201526001600160a01b038b811660248301528a81166044830152606482019390935260848101919091529151921691631ededc919160a48082019260009290919082900301818387803b158015612f1d57600080fd5b505af1158015612f31573d6000803e3d6000fd5b5060009250612f3e915050565b9695505050505050565b600080600080612f588787612604565b90925090506000826003811115612f6b57fe5b14612f7c575091506000905061267e565b6126778186612579565b6000612f906145e9565b600080612fa586670de0b6b3a764000061360a565b90925090506000826003811115612fb857fe5b14612fd757506040805160208101909152600081529092509050612178565b600080612fe48388613649565b90925090506000826003811115612ff757fe5b1461301957506040805160208101909152600081529094509250612178915050565b604080516020810190915290815260009890975095505050505050565b51670de0b6b3a7640000900490565b6012546040805163a9059cbb60e01b81526001600160a01b03858116600483015260248201859052915160009392909216918391839163a9059cbb91604480820192869290919082900301818387803b1580156130a157600080fd5b505af11580156130b5573d6000803e3d6000fd5b505050503d600081146130cf57602081146130d957600080fd5b60001991506130e5565b60206000803e60005191505b50806130f65760109250505061086f565b506000949350505050565b600082158061310e575081155b6131495760405162461bcd60e51b81526004018080602001828103825260348152602001806148c56034913960400191505060405180910390fd5b613151614656565b613159611ce5565b604083018190526020830182600381111561317057fe5b600381111561317b57fe5b905250600090508160200151600381111561319257fe5b146131ae57612b9b6009602b8360200151600381111561103d57fe5b831561322f5760608101849052604080516020810182529082015181526131d5908561212b565b60808301819052602083018260038111156131ec57fe5b60038111156131f757fe5b905250600090508160200151600381111561320e57fe5b1461322a57612b9b600960298360200151600381111561103d57fe5b6132a8565b61324b83604051806020016040528084604001518152506145d2565b606083018190526020830182600381111561326257fe5b600381111561326d57fe5b905250600090508160200151600381111561328457fe5b146132a057612b9b6009602a8360200151600381111561103d57fe5b608081018390525b60065460608201516040805163eabe7d9160e01b81523060048201526001600160a01b03898116602483015260448201939093529051600093929092169163eabe7d919160648082019260209290919082900301818787803b15801561330d57600080fd5b505af1158015613321573d6000803e3d6000fd5b505050506040513d602081101561333757600080fd5b50519050801561334e57612c46600360288361250f565b613356612575565b600a541461336a57612c46600a602c6121ff565b61337a600e548360600151612579565b60a084018190526020840182600381111561339157fe5b600381111561339c57fe5b90525060009050826020015160038111156133b357fe5b146133cf57612c466009602e8460200151600381111561103d57fe5b6001600160a01b0386166000908152600f602052604090205460608301516133f79190612579565b60c084018190526020840182600381111561340e57fe5b600381111561341957fe5b905250600090508260200151600381111561343057fe5b1461344c57612c466009602d8460200151600381111561103d57fe5b816080015161345961217f565b101561346b57612c46600e602f6121ff565b613479868360800151613045565b8290601081111561348657fe5b9081601081111561349357fe5b9052506000825160108111156134a557fe5b146134f7576040805162461bcd60e51b815260206004820152601a60248201527f72656465656d207472616e73666572206f7574206661696c6564000000000000604482015290519081900360640190fd5b60a0820151600e5560c08201516001600160a01b0387166000818152600f6020908152604091829020939093556060850151815190815290513093600080516020614834833981519152928290030190a36080820151606080840151604080516001600160a01b038b168152602081019490945283810191909152517fe5b754fb1abb7f01b499791d0b820ae3b6af3424ac1c59768edb53f4ec31a9299281900390910190a160065460808301516060840151604080516351dff98960e01b81523060048201526001600160a01b038b81166024830152604482019490945260648101929092525191909216916351dff98991608480830192600092919082900301818387803b158015612f1d57600080fd5b6000808361361d57506000905080612178565b8383028385828161362a57fe5b041461363e57506002915060009050612178565b600092509050612178565b6000808261365d5750600190506000612178565b600083858161366857fe5b04915091509250929050565b60065460408051634ef4c3e160e01b81523060048201526001600160a01b03858116602483015260448201859052915160009384931691634ef4c3e191606480830192602092919082900301818787803b1580156136d157600080fd5b505af11580156136e5573d6000803e3d6000fd5b505050506040513d60208110156136fb57600080fd5b50519050801561371a576137126003601f8361250f565b91505061086f565b613722612575565b600a541461373657613712600a60226121ff565b61373e614694565b61374885856143e7565b8190601081111561375557fe5b9081601081111561376257fe5b90525060008151601081111561377457fe5b1461378f5780516137869060266121ff565b9250505061086f565b613797611ce5565b60408301819052602083018260038111156137ae57fe5b60038111156137b957fe5b90525060009050816020015160038111156137d057fe5b146137ec57613786600960218360200151600381111561103d57fe5b61380884604051806020016040528084604001518152506145d2565b606083018190526020830182600381111561381f57fe5b600381111561382a57fe5b905250600090508160200151600381111561384157fe5b1461385d57613786600960208360200151600381111561103d57fe5b61386d600e548260600151612604565b608083018190526020830182600381111561388457fe5b600381111561388f57fe5b90525060009050816020015160038111156138a657fe5b146138c257613786600960248360200151600381111561103d57fe5b6001600160a01b0385166000908152600f602052604090205460608201516138ea9190612604565b60a083018190526020830182600381111561390157fe5b600381111561390c57fe5b905250600090508160200151600381111561392357fe5b1461393f57613786600960238360200151600381111561103d57fe5b613949858561451b565b8190601081111561395657fe5b9081601081111561396357fe5b90525060008151601081111561397557fe5b146139875780516137869060256121ff565b6080810151600e5560a08101516001600160a01b0386166000818152600f602090815260409182902093909355606080850151825193845293830188905282820193909352517f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f929181900390910190a1606081015160408051918252516001600160a01b0387169130916000805160206148348339815191529181900360200190a36006546060820151604080516341c728b960e01b81523060048201526001600160a01b038981166024830152604482018990526064820193909352905191909216916341c728b991608480830192600092919082900301818387803b158015613a9257600080fd5b505af1158015613aa6573d6000803e3d6000fd5b5060009250613ab3915050565b95945050505050565b6000613ac66145e9565b600080613adb8660000151866000015161360a565b90925090506000826003811115613aee57fe5b14613b0d57506040805160208101909152600081529092509050612178565b600080613b226706f05b59d3b2000084612604565b90925090506000826003811115613b3557fe5b14613b5757506040805160208101909152600081529094509250612178915050565b600080613b6c83670de0b6b3a7640000613649565b90925090506000826003811115613b7f57fe5b14613b8657fe5b604080516020810190915290815260009a909950975050505050505050565b6006546040805163368f515360e21b81523060048201526001600160a01b0385811660248301526044820185905291516000938493169163da3d454c91606480830192602092919082900301818787803b158015613c0257600080fd5b505af1158015613c16573d6000803e3d6000fd5b505050506040513d6020811015613c2c57600080fd5b505190508015613c43576137126003600e8361250f565b613c4b612575565b600a5414613c5e57613712600a806121ff565b82613c6761217f565b1015613c7957613712600e60096121ff565b613c816146ae565b613c8a85612420565b6040830181905260208301826003811115613ca157fe5b6003811115613cac57fe5b9052506000905081602001516003811115613cc357fe5b14613cdf57613786600960078360200151600381111561103d57fe5b613ced816040015185612604565b6060830181905260208301826003811115613d0457fe5b6003811115613d0f57fe5b9052506000905081602001516003811115613d2657fe5b14613d42576137866009600c8360200151600381111561103d57fe5b613d4e600c5485612604565b6080830181905260208301826003811115613d6557fe5b6003811115613d7057fe5b9052506000905081602001516003811115613d8757fe5b14613da3576137866009600b8360200151600381111561103d57fe5b613dad8585613045565b81906010811115613dba57fe5b90816010811115613dc757fe5b905250600081516010811115613dd957fe5b14613e2b576040805162461bcd60e51b815260206004820152601a60248201527f626f72726f77207472616e73666572206f7574206661696c6564000000000000604482015290519081900360640190fd5b606080820180516001600160a01b038816600081815260116020908152604091829020938455600b54600190940193909355608080870151600c819055945182519384529383018a9052828201939093529381019290925291517f13ed6866d4e1ee6da46f845c46d7e54120883d75c5ea9a2dacc1c4ca8984ab80929181900390910190a160065460408051635c77860560e01b81523060048201526001600160a01b0388811660248301526044820188905291519190921691635c77860591606480830192600092919082900301818387803b158015613a9257600080fd5b60065460408051632fe3f38f60e11b81523060048201526001600160a01b0384811660248301528781166044830152868116606483015260848201869052915160009384931691635fc7e71e9160a480830192602092919082900301818787803b158015613f7857600080fd5b505af1158015613f8c573d6000803e3d6000fd5b505050506040513d6020811015613fa257600080fd5b505190508015613fb957611e39600360128361250f565b613fc1612575565b600a5414613fd557611e39600a60166121ff565b613fdd612575565b836001600160a01b0316636c540baf6040518163ffffffff1660e01b815260040160206040518083038186803b15801561401657600080fd5b505afa15801561402a573d6000803e3d6000fd5b505050506040513d602081101561404057600080fd5b50511461405357611e39600a60116121ff565b856001600160a01b0316856001600160a01b0316141561407957611e39600660176121ff565b8361408a57611e39600760156121ff565b6000198414156140a057611e39600760146121ff565b6006546040805163c488847b60e01b81523060048201526001600160a01b038681166024830152604482018890528251600094859492169263c488847b926064808301939192829003018186803b1580156140fa57600080fd5b505afa15801561410e573d6000803e3d6000fd5b505050506040513d604081101561412457600080fd5b5080516020909101519092509050811561414f57614145600460138461250f565b9350505050610a9e565b846001600160a01b03166370a08231886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156141a557600080fd5b505afa1580156141b9573d6000803e3d6000fd5b505050506040513d60208110156141cf57600080fd5b50518111156141e457614145600d601d6121ff565b60006141f1898989612af5565b9050801561421a5761420f81601081111561420857fe5b60186121ff565b945050505050610a9e565b6040805163b2a02ff160e01b81526001600160a01b038b811660048301528a8116602483015260448201859052915160009289169163b2a02ff191606480830192602092919082900301818787803b15801561427557600080fd5b505af1158015614289573d6000803e3d6000fd5b505050506040513d602081101561429f57600080fd5b5051905080156142ed576040805162461bcd60e51b81526020600482015260146024820152731d1bdad95b881cd95a5e9d5c994819985a5b195960621b604482015290519081900360640190fd5b604080516001600160a01b03808d168252808c1660208301528183018b9052891660608201526080810185905290517f298637f684da70674f26509b10f07ec2fbc77a335ab1e7d6215a4b2484d8bb529181900360a00190a1600654604080516347ef3b3b60e01b81523060048201526001600160a01b038a811660248301528d811660448301528c81166064830152608482018c905260a48201879052915191909216916347ef3b3b9160c480830192600092919082900301818387803b1580156143b857600080fd5b505af11580156143cc573d6000803e3d6000fd5b50600092506143d9915050565b9a9950505050505050505050565b60125460408051636eb1769f60e11b81526001600160a01b038581166004830152306024830152915160009392909216918491839163dd62ed3e91604480820192602092909190829003018186803b15801561444257600080fd5b505afa158015614456573d6000803e3d6000fd5b505050506040513d602081101561446c57600080fd5b5051101561447e57600c91505061086f565b82816001600160a01b03166370a08231866040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156144d557600080fd5b505afa1580156144e9573d6000803e3d6000fd5b505050506040513d60208110156144ff57600080fd5b5051101561451157600d91505061086f565b5060009392505050565b601254604080516323b872dd60e01b81526001600160a01b0385811660048301523060248301526044820185905291516000939290921691839183916323b872dd91606480820192869290919082900301818387803b15801561457d57600080fd5b505af1158015614591573d6000803e3d6000fd5b505050503d600081146145ab57602081146145b557600080fd5b60001991506145c1565b60206000803e60005191505b50806130f657600f9250505061086f565b60008060006145df6145e9565b6121428686612686565b6040518060200160405280600081525090565b6040805161014081019091528060008152602001600081526020016000815260200160008152602001600081526020016146346145e9565b8152602001600081526020016000815260200160008152602001600081525090565b6040805160e0810190915280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6040805160c0810190915280600081526020016000614634565b6040805160a08101909152806000815260200160008152602001600081526020016000815260200160008152509056fe737570706c7952617465506572426c6f636b3a2063616c63756c6174696e6720626f72726f7773506572206661696c6564726564756365207265736572766573207472616e73666572206f7574206661696c6564737570706c7952617465506572426c6f636b3a2063616c63756c6174696e6720737570706c7952617465206661696c6564626f72726f7742616c616e636553746f7265643a20626f72726f7742616c616e636553746f726564496e7465726e616c206661696c6564737570706c7952617465506572426c6f636b3a2063616c63756c6174696e6720756e6465726c79696e67206661696c6564626f72726f7752617465506572426c6f636b3a20696e746572657374526174654d6f64656c2e626f72726f7752617465206661696c6564737570706c7952617465506572426c6f636b3a2063616c63756c6174696e6720626f72726f7752617465206661696c6564ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef737570706c7952617465506572426c6f636b3a2063616c63756c6174696e67206f6e654d696e757352657365727665466163746f72206661696c656465786368616e67655261746553746f7265643a2065786368616e67655261746553746f726564496e7465726e616c206661696c65646f6e65206f662072656465656d546f6b656e73496e206f722072656465656d416d6f756e74496e206d757374206265207a65726f72656475636520726573657276657320756e657870656374656420756e646572666c6f77a265627a7a72315820341daf9adf4d7120cf423a6b3b1aa4cb48b45d285bf266f82cf92af70cedc13f64736f6c634300050c003253657474696e6720696e7465726573742072617465206d6f64656c206661696c6564496e697469616c2065786368616e67652072617465206d7573742062652067726561746572207468616e207a65726f2e",
  "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061028a5760003560e01c80638f840ddd1161015c578063c37f68e2116100ce578063f3fdb15a11610087578063f3fdb15a14610708578063f5e3c46214610710578063f851a44014610746578063f8f9da281461074e578063fca7820b14610756578063fe9c44ae146107735761028a565b8063c37f68e214610626578063c5ebeaec14610672578063db006a751461068f578063dd62ed3e146106ac578063e9c714f2146106da578063f2b3abbd146106e25761028a565b8063a9059cbb11610120578063a9059cbb14610586578063aa5af0fd146105b2578063ae9d70b0146105ba578063b2a02ff1146105c2578063b71d1a0c146105f8578063bd6d894d1461061e5761028a565b80638f840ddd1461052b57806395d89b411461053357806395dd91931461053b578063a0712d6814610561578063a6afed951461057e5761028a565b80633af9e66911610200578063675d972c116101b9578063675d972c146104c85780636c540baf146104d05780636f307dc3146104d857806370a08231146104e057806373acee9814610506578063852a12e31461050e5761028a565b80633af9e669146104475780633b1d21a21461046d5780634576b5db1461047557806347bd37181461049b5780635fe3b567146104a3578063601a0bf1146104ab5761028a565b806318160ddd1161025257806318160ddd146103a9578063182df0f5146103b157806323b872dd146103b95780632608f818146103ef578063267822471461041b578063313ce5671461043f5761028a565b806306fdde031461028f578063095ea7b31461030c5780630e7527021461034c578063173b99041461037b57806317bfdfbc14610383575b600080fd5b61029761077b565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102d15781810151838201526020016102b9565b50505050905090810190601f1680156102fe5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6103386004803603604081101561032257600080fd5b506001600160a01b038135169060200135610808565b604080519115158252519081900360200190f35b6103696004803603602081101561036257600080fd5b5035610875565b60408051918252519081900360200190f35b610369610888565b6103696004803603602081101561039957600080fd5b50356001600160a01b031661088e565b610369610941565b610369610947565b610338600480360360608110156103cf57600080fd5b506001600160a01b038135811691602081013590911690604001356109aa565b6103696004803603604081101561040557600080fd5b506001600160a01b038135169060200135610a10565b610423610a23565b604080516001600160a01b039092168252519081900360200190f35b610369610a32565b6103696004803603602081101561045d57600080fd5b50356001600160a01b0316610a38565b610369610aa6565b6103696004803603602081101561048b57600080fd5b50356001600160a01b0316610ab5565b610369610c04565b610423610c0a565b610369600480360360208110156104c157600080fd5b5035610c19565b610369610ca1565b610369610ca7565b610423610cad565b610369600480360360208110156104f657600080fd5b50356001600160a01b0316610cbc565b610369610cd7565b6103696004803603602081101561052457600080fd5b5035610d81565b610369610d8c565b610297610d92565b6103696004803603602081101561055157600080fd5b50356001600160a01b0316610dea565b6103696004803603602081101561057757600080fd5b5035610e47565b610369610e52565b6103386004803603604081101561059c57600080fd5b506001600160a01b03813516906020013561124b565b6103696112b0565b6103696112b6565b610369600480360360608110156105d857600080fd5b506001600160a01b03813581169160208101359091169060400135611581565b6103696004803603602081101561060e57600080fd5b50356001600160a01b0316611832565b6103696118b9565b61064c6004803603602081101561063c57600080fd5b50356001600160a01b0316611964565b604080519485526020850193909352838301919091526060830152519081900360800190f35b6103696004803603602081101561068857600080fd5b50356119f9565b610369600480360360208110156106a557600080fd5b5035611a04565b610369600480360360408110156106c257600080fd5b506001600160a01b0381358116916020013516611a0f565b610369611a3a565b610369600480360360208110156106f857600080fd5b50356001600160a01b0316611b29565b610423611b63565b6103696004803603606081101561072657600080fd5b506001600160a01b03813581169160208101359160409091013516611b72565b610423611b7f565b610369611b8e565b6103696004803603602081101561076c57600080fd5b5035611c6a565b610338611ca4565b60018054604080516020600284861615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156108005780601f106107d557610100808354040283529160200191610800565b820191906000526020600020905b8154815290600101906020018083116107e357829003601f168201915b505050505081565b3360008181526010602090815260408083206001600160a01b03871680855290835281842086905581518681529151939493909284927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929081900390910190a360019150505b92915050565b600061088082611ca9565b90505b919050565b60095481565b60008054600101808255816108a1610e52565b146108ec576040805162461bcd60e51b81526020600482015260166024820152751858d8dc9d59481a5b9d195c995cdd0819985a5b195960521b604482015290519081900360640190fd5b6108f583610dea565b91505b600054811461093b576040805162461bcd60e51b815260206004820152600a6024820152691c994b595b9d195c995960b21b604482015290519081900360640190fd5b50919050565b600e5481565b6000806000610954611ce5565b9092509050600082600381111561096757fe5b146109a35760405162461bcd60e51b81526004018080602001828103825260358152602001806148906035913960400191505060405180910390fd5b9150505b90565b60008054600101808255816109c133878787611d93565b1491505b6000548114610a08576040805162461bcd60e51b815260206004820152600a6024820152691c994b595b9d195c995960b21b604482015290519081900360640190fd5b509392505050565b6000610a1c83836120a1565b9392505050565b6005546001600160a01b031681565b60035481565b6000610a426145e9565b6040518060200160405280610a556118b9565b90526001600160a01b0384166000908152600f6020526040812054919250908190610a8190849061212b565b90925090506000826003811115610a9457fe5b14610a9e57600080fd5b949350505050565b6000610ab061217f565b905090565b6004546000906001600160a01b03163314610add57610ad66001603f6121ff565b9050610883565b60065460408051623f1ee960e11b815290516001600160a01b0392831692851691627e3dd2916004808301926020929190829003018186803b158015610b2257600080fd5b505afa158015610b36573d6000803e3d6000fd5b505050506040513d6020811015610b4c57600080fd5b5051610b9f576040805162461bcd60e51b815260206004820152601c60248201527f6d61726b6572206d6574686f642072657475726e65642066616c736500000000604482015290519081900360640190fd5b600680546001600160a01b0319166001600160a01b03858116918217909255604080519284168352602083019190915280517f7ac369dbd14fa5ea3f473ed67cc9d598964a77501540ba6751eb0b3decf5870d9281900390910190a160009392505050565b600c5481565b6006546001600160a01b031681565b6000805460010180825581610c2c610e52565b90508015610c5257610c4a816010811115610c4357fe5b60306121ff565b9250506108f8565b610c5b84612265565b925050600054811461093b576040805162461bcd60e51b815260206004820152600a6024820152691c994b595b9d195c995960b21b604482015290519081900360640190fd5b60085481565b600a5481565b6012546001600160a01b031681565b6001600160a01b03166000908152600f602052604090205490565b6000805460010180825581610cea610e52565b14610d35576040805162461bcd60e51b81526020600482015260166024820152751858d8dc9d59481a5b9d195c995cdd0819985a5b195960521b604482015290519081900360640190fd5b600c5491506000548114610d7d576040805162461bcd60e51b815260206004820152600a6024820152691c994b595b9d195c995960b21b604482015290519081900360640190fd5b5090565b6000610880826123e3565b600d5481565b6002805460408051602060018416156101000260001901909316849004601f810184900484028201840190925281815292918301828280156108005780601f106107d557610100808354040283529160200191610800565b6000806000610df884612420565b90925090506000826003811115610e0b57fe5b14610a1c5760405162461bcd60e51b81526004018080602001828103825260378152602001806147646037913960400191505060405180910390fd5b6000610880826124d4565b6000610e5c6145fc565b6007546001600160a01b03166315f24053610e7561217f565b600c54600d546040518463ffffffff1660e01b8152600401808481526020018381526020018281526020019350505050604080518083038186803b158015610ebc57600080fd5b505afa158015610ed0573d6000803e3d6000fd5b505050506040513d6040811015610ee657600080fd5b50805160209182015160408401819052918301526601c6bf526340001015610f55576040805162461bcd60e51b815260206004820152601c60248201527f626f72726f772072617465206973206162737572646c79206869676800000000604482015290519081900360640190fd5b602081015115610f7857610f7060056002836020015161250f565b9150506109a7565b610f80612575565b60608201819052600a54610f949190612579565b6080830181905282826003811115610fa857fe5b6003811115610fb357fe5b9052506000905081516003811115610fc757fe5b14610fce57fe5b610fee60405180602001604052808360400151815250826080015161259c565b60a083018190528282600381111561100257fe5b600381111561100d57fe5b905250600090508151600381111561102157fe5b1461104257610f70600960068360000151600381111561103d57fe5b61250f565b6110528160a00151600c5461212b565b60c083018190528282600381111561106657fe5b600381111561107157fe5b905250600090508151600381111561108557fe5b146110a157610f70600960018360000151600381111561103d57fe5b6110b18160c00151600c54612604565b60e08301819052828260038111156110c557fe5b60038111156110d057fe5b90525060009050815160038111156110e457fe5b1461110057610f70600960048360000151600381111561103d57fe5b61112160405180602001604052806009548152508260c00151600d5461262a565b61010083018190528282600381111561113657fe5b600381111561114157fe5b905250600090508151600381111561115557fe5b1461117157610f70600960058360000151600381111561103d57fe5b6111848160a00151600b54600b5461262a565b61012083018190528282600381111561119957fe5b60038111156111a457fe5b90525060009050815160038111156111b857fe5b146111d457610f70600960038360000151600381111561103d57fe5b606080820151600a55610120820151600b81905560e0830151600c819055610100840151600d5560c08401516040805191825260208201939093528083019190915290517f875352fb3fadeb8c0be7cbbe8ff761b308fa7033470cd0287f02f3436fd76cb9929181900390910190a1600091505090565b600080546001018082558161126233338787611d93565b1491505b60005481146112a9576040805162461bcd60e51b815260206004820152600a6024820152691c994b595b9d195c995960b21b604482015290519081900360640190fd5b5092915050565b600b5481565b6000806112c1610947565b60075490915060009081906001600160a01b03166315f240536112e261217f565b600c54600d546040518463ffffffff1660e01b8152600401808481526020018381526020018281526020019350505050604080518083038186803b15801561132957600080fd5b505afa15801561133d573d6000803e3d6000fd5b505050506040513d604081101561135357600080fd5b5080516020909101519092509050811561139e5760405162461bcd60e51b81526004018080602001828103825260318152602001806148036031913960400191505060405180910390fd5b60006113a86145e9565b6113c2604051806020016040528087815250600e5461259c565b909250905060008260038111156113d557fe5b146114115760405162461bcd60e51b815260040180806020018281038252603181526020018061479b6031913960400191505060405180910390fd5b600061141b6145e9565b611427600c5484612686565b9092509050600082600381111561143a57fe5b146114765760405162461bcd60e51b81526004018080602001828103825260318152602001806146df6031913960400191505060405180910390fd5b60006114806145e9565b6114b06040518060200160405280670de0b6b3a764000081525060405180602001604052806009548152506126e5565b909250905060008260038111156114c357fe5b146114ff5760405162461bcd60e51b815260040180806020018281038252603c815260200180614854603c913960400191505060405180910390fd5b60006115096145e9565b61152260405180602001604052808b815250848761271f565b9092509050600082600381111561153557fe5b146115715760405162461bcd60e51b81526004018080602001828103825260318152602001806147336031913960400191505060405180910390fd5b519a505050505050505050505090565b600080546001018082556006546040805163d02f735160e01b81523060048201523360248201526001600160a01b03888116604483015287811660648301526084820187905291518593929092169163d02f73519160a48082019260209290919082900301818787803b1580156115f757600080fd5b505af115801561160b573d6000803e3d6000fd5b505050506040513d602081101561162157600080fd5b505190508015611640576116386003601b8361250f565b9250506109c5565b856001600160a01b0316856001600160a01b03161415611666576116386006601c6121ff565b6001600160a01b0385166000908152600f60205260408120548190819061168d9088612579565b909350915060008360038111156116a057fe5b146116c3576116b86009601a85600381111561103d57fe5b9550505050506109c5565b6001600160a01b0389166000908152600f60205260409020546116e69088612604565b909350905060008360038111156116f957fe5b14611711576116b86009601985600381111561103d57fe5b6001600160a01b038089166000818152600f60209081526040808320879055938d168083529184902085905583518b815293519193600080516020614834833981519152929081900390910190a360065460408051636d35bf9160e01b81523060048201523360248201526001600160a01b038c811660448301528b81166064830152608482018b905291519190921691636d35bf919160a480830192600092919082900301818387803b1580156117c857600080fd5b505af11580156117dc573d6000803e3d6000fd5b50600092506117e9915050565b9550505050506000548114610a08576040805162461bcd60e51b815260206004820152600a6024820152691c994b595b9d195c995960b21b604482015290519081900360640190fd5b6004546000906001600160a01b0316331461185357610ad6600160456121ff565b600580546001600160a01b038481166001600160a01b0319831681179093556040805191909216808252602082019390935281517fca4f2f25d0898edd99413412fb94012f9e54ec8142f9b093e7720646a95b16a9929181900390910190a16000610a1c565b60008054600101808255816118cc610e52565b14611917576040805162461bcd60e51b81526020600482015260166024820152751858d8dc9d59481a5b9d195c995cdd0819985a5b195960521b604482015290519081900360640190fd5b61191f610947565b91506000548114610d7d576040805162461bcd60e51b815260206004820152600a6024820152691c994b595b9d195c995960b21b604482015290519081900360640190fd5b6001600160a01b0381166000908152600f602052604081205481908190819081808061198f89612420565b9350905060008160038111156119a157fe5b146119bf5760095b9750600096508695508594506119f29350505050565b6119c7611ce5565b9250905060008160038111156119d957fe5b146119e55760096119a9565b5060009650919450925090505b9193509193565b600061088082612769565b6000610880826127a4565b6001600160a01b03918216600090815260106020908152604080832093909416825291909152205490565b6005546000906001600160a01b031633141580611a55575033155b15611a6d57611a66600160006121ff565b90506109a7565b60048054600580546001600160a01b038082166001600160a01b031980861682179687905590921690925560408051938316808552949092166020840152815190927ff9ffabca9c8276e99321725bcb43fb076a6c66a54b7f21c4e8146d8519b417dc92908290030190a1600554604080516001600160a01b038085168252909216602083015280517fca4f2f25d0898edd99413412fb94012f9e54ec8142f9b093e7720646a95b16a99281900390910190a160009250505090565b600080611b34610e52565b90508015611b5a57611b52816010811115611b4b57fe5b60406121ff565b915050610883565b610a1c836127da565b6007546001600160a01b031681565b6000610a9e84848461294a565b6004546001600160a01b031681565b600754600090819081906001600160a01b03166315f24053611bae61217f565b600c54600d546040518463ffffffff1660e01b8152600401808481526020018381526020018281526020019350505050604080518083038186803b158015611bf557600080fd5b505afa158015611c09573d6000803e3d6000fd5b505050506040513d6040811015611c1f57600080fd5b508051602090910151909250905081156109a35760405162461bcd60e51b81526004018080602001828103825260378152602001806147cc6037913960400191505060405180910390fd5b6000805460010180825581611c7d610e52565b90508015611c9b57610c4a816010811115611c9457fe5b60466121ff565b610c5b84612a52565b600181565b6000805460010180825581611cbc610e52565b90508015611cda57610c4a816010811115611cd357fe5b60366121ff565b610c5b333386612af5565b600080600e5460001415611d00575050600854600090611d8f565b6000611d0a61217f565b90506000611d166145e9565b6000611d2784600c54600d54612f48565b935090506000816003811115611d3957fe5b14611d4d57945060009350611d8f92505050565b611d5983600e54612f86565b925090506000816003811115611d6b57fe5b14611d7f57945060009350611d8f92505050565b5051600094509250611d8f915050565b9091565b600654604080516317b9b84b60e31b81523060048201526001600160a01b03868116602483015285811660448301526064820185905291516000938493169163bdcdc25891608480830192602092919082900301818787803b158015611df857600080fd5b505af1158015611e0c573d6000803e3d6000fd5b505050506040513d6020811015611e2257600080fd5b505190508015611e4157611e396003604a8361250f565b915050610a9e565b836001600160a01b0316856001600160a01b03161415611e6757611e396002604b6121ff565b60006001600160a01b038781169087161415611e865750600019611eae565b506001600160a01b038086166000908152601060209081526040808320938a16835292905220545b600080600080611ebe8589612579565b90945092506000846003811115611ed157fe5b14611eef57611ee26009604b6121ff565b9650505050505050610a9e565b6001600160a01b038a166000908152600f6020526040902054611f129089612579565b90945091506000846003811115611f2557fe5b14611f3657611ee26009604c6121ff565b6001600160a01b0389166000908152600f6020526040902054611f599089612604565b90945090506000846003811115611f6c57fe5b14611f7d57611ee26009604d6121ff565b6001600160a01b03808b166000908152600f6020526040808220859055918b168152208190556000198514611fd5576001600160a01b03808b166000908152601060209081526040808320938f168352929052208390555b886001600160a01b03168a6001600160a01b03166000805160206148348339815191528a6040518082815260200191505060405180910390a36006546040805163352b4a3f60e11b81523060048201526001600160a01b038d811660248301528c81166044830152606482018c905291519190921691636a56947e91608480830192600092919082900301818387803b15801561207157600080fd5b505af1158015612085573d6000803e3d6000fd5b5060009250612092915050565b9b9a5050505050505050505050565b60008054600101808255816120b4610e52565b905080156120da576120d28160108111156120cb57fe5b60356121ff565b925050611266565b6120e5338686612af5565b92505060005481146112a9576040805162461bcd60e51b815260206004820152600a6024820152691c994b595b9d195c995960b21b604482015290519081900360640190fd5b60008060006121386145e9565b612142868661259c565b9092509050600082600381111561215557fe5b146121665750915060009050612178565b600061217182613036565b9350935050505b9250929050565b601254604080516370a0823160e01b815230600482015290516000926001600160a01b03169182916370a0823191602480820192602092909190829003018186803b1580156121cd57600080fd5b505afa1580156121e1573d6000803e3d6000fd5b505050506040513d60208110156121f757600080fd5b505191505090565b60007f45b96fe442630264581b197e84bbada861235052c5a1aadfff9ea4e40a969aa083601081111561222e57fe5b83604d81111561223a57fe5b604080519283526020830191909152600082820152519081900360600190a1826010811115610a1c57fe5b600454600090819081906001600160a01b031633146122935761228a600160316121ff565b92505050610883565b61229b612575565b600a54146122af5761228a600a60336121ff565b836122b861217f565b10156122ca5761228a600e60326121ff565b600d548411156122e05761228a600260346121ff565b50600d54838103908111156123265760405162461bcd60e51b81526004018080602001828103825260248152602001806148f96024913960400191505060405180910390fd5b600d819055600454612341906001600160a01b031685613045565b9150600082601081111561235157fe5b1461238d5760405162461bcd60e51b81526004018080602001828103825260238152602001806147106023913960400191505060405180910390fd5b600454604080516001600160a01b03909216825260208201869052818101839052517f3bad0c59cf2f06e7314077049f48a93578cd16f5ef92329f1dab1420a99c177e9181900360600190a16000949350505050565b60008054600101808255816123f6610e52565b9050801561241457610c4a81601081111561240d57fe5b60276121ff565b610c5b33600086613101565b6001600160a01b0381166000908152601160205260408120805482918291829182916124575750600094508493506124cf92505050565b6124678160000154600b5461360a565b9094509250600084600381111561247a57fe5b1461248f5750919350600092506124cf915050565b61249d838260010154613649565b909450915060008460038111156124b057fe5b146124c55750919350600092506124cf915050565b5060009450925050505b915091565b60008054600101808255816124e7610e52565b9050801561250557610c4a8160108111156124fe57fe5b601e6121ff565b610c5b3385613674565b60007f45b96fe442630264581b197e84bbada861235052c5a1aadfff9ea4e40a969aa084601081111561253e57fe5b84604d81111561254a57fe5b604080519283526020830191909152818101859052519081900360600190a1836010811115610a9e57fe5b4390565b600080838311612590575060009050818303612178565b50600390506000612178565b60006125a66145e9565b6000806125b786600001518661360a565b909250905060008260038111156125ca57fe5b146125e957506040805160208101909152600081529092509050612178565b60408051602081019091529081526000969095509350505050565b60008083830184811061261c57600092509050612178565b506002915060009050612178565b60008060006126376145e9565b612641878761259c565b9092509050600082600381111561265457fe5b14612665575091506000905061267e565b61267761267182613036565b86612604565b9350935050505b935093915050565b60006126906145e9565b6000806126a5670de0b6b3a76400008761360a565b909250905060008260038111156126b857fe5b146126d757506040805160208101909152600081529092509050612178565b612171818660000151612f86565b60006126ef6145e9565b60008061270486600001518660000151612579565b60408051602081019091529081529097909650945050505050565b60006127296145e9565b60006127336145e9565b61273d8787613abc565b9092509050600082600381111561275057fe5b1461275f57909250905061267e565b6126778186613abc565b600080546001018082558161277c610e52565b9050801561279a57610c4a81601081111561279357fe5b60086121ff565b610c5b3385613ba5565b60008054600101808255816127b7610e52565b905080156127ce57610c4a81601081111561240d57fe5b610c5b33856000613101565b60045460009081906001600160a01b031633146127fd57611b52600160426121ff565b612805612575565b600a541461281957611b52600a60416121ff565b600760009054906101000a90046001600160a01b03169050826001600160a01b0316632191f92a6040518163ffffffff1660e01b815260040160206040518083038186803b15801561286a57600080fd5b505afa15801561287e573d6000803e3d6000fd5b505050506040513d602081101561289457600080fd5b50516128e7576040805162461bcd60e51b815260206004820152601c60248201527f6d61726b6572206d6574686f642072657475726e65642066616c736500000000604482015290519081900360640190fd5b600780546001600160a01b0319166001600160a01b03858116918217909255604080519284168352602083019190915280517fedffc32e068c7c95dfd4bdfd5c4d939a084d6b11c4199eac8436ed234d72f9269281900390910190a16000610a1c565b600080546001018082558161295d610e52565b9050801561297b5761163881601081111561297457fe5b600f6121ff565b836001600160a01b031663a6afed956040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156129b657600080fd5b505af11580156129ca573d6000803e3d6000fd5b505050506040513d60208110156129e057600080fd5b505190508015612a00576116388160108111156129f957fe5b60106121ff565b612a0c33878787613f0b565b9250506000548114610a08576040805162461bcd60e51b815260206004820152600a6024820152691c994b595b9d195c995960b21b604482015290519081900360640190fd5b6004546000906001600160a01b03163314612a7357610ad6600160476121ff565b612a7b612575565b600a5414612a8f57610ad6600a60486121ff565b670de0b6b3a7640000821115612aab57610ad6600260496121ff565b6009805490839055604080518281526020810185905281517faaa68312e2ea9d50e16af5068410ab56e1a1fd06037b1a35664812c30f821460929181900390910190a16000610a1c565b60065460408051631200453160e11b81523060048201526001600160a01b0386811660248301528581166044830152606482018590529151600093849316916324008a6291608480830192602092919082900301818787803b158015612b5a57600080fd5b505af1158015612b6e573d6000803e3d6000fd5b505050506040513d6020811015612b8457600080fd5b505190508015612ba357612b9b600360388361250f565b915050610a1c565b612bab612575565b600a5414612bbf57612b9b600a60396121ff565b612bc7614656565b6001600160a01b0385166000908152601160205260409020600101546060820152612bf185612420565b6080830181905260208301826003811115612c0857fe5b6003811115612c1357fe5b9052506000905081602001516003811115612c2a57fe5b14612c4f57612c46600960378360200151600381111561103d57fe5b92505050610a1c565b600019841415612c685760808101516040820152612c70565b604081018490525b612c7e8682604001516143e7565b81906010811115612c8b57fe5b90816010811115612c9857fe5b905250600081516010811115612caa57fe5b14612cbc578051612c4690603c6121ff565b612cce81608001518260400151612579565b60a0830181905260208301826003811115612ce557fe5b6003811115612cf057fe5b9052506000905081602001516003811115612d0757fe5b14612d2357612c466009603a8360200151600381111561103d57fe5b612d33600c548260400151612579565b60c0830181905260208301826003811115612d4a57fe5b6003811115612d5557fe5b9052506000905081602001516003811115612d6c57fe5b14612d8857612c466009603b8360200151600381111561103d57fe5b612d9686826040015161451b565b81906010811115612da357fe5b90816010811115612db057fe5b905250600081516010811115612dc257fe5b14612e14576040805162461bcd60e51b815260206004820152601f60248201527f726570617920626f72726f77207472616e7366657220696e206661696c656400604482015290519081900360640190fd5b60a080820180516001600160a01b03808916600081815260116020908152604091829020948555600b5460019095019490945560c0870151600c8190558188015195518251948e16855294840192909252828101949094526060820192909252608081019190915290517f1a2a22cb034d26d1854bdc6666a5b91fe25efbbb5dcad3b0355478d6f5c362a1929181900390910190a160065460408083015160608401518251631ededc9160e01b81523060048201526001600160a01b038b811660248301528a81166044830152606482019390935260848101919091529151921691631ededc919160a48082019260009290919082900301818387803b158015612f1d57600080fd5b505af1158015612f31573d6000803e3d6000fd5b5060009250612f3e915050565b9695505050505050565b600080600080612f588787612604565b90925090506000826003811115612f6b57fe5b14612f7c575091506000905061267e565b6126778186612579565b6000612f906145e9565b600080612fa586670de0b6b3a764000061360a565b90925090506000826003811115612fb857fe5b14612fd757506040805160208101909152600081529092509050612178565b600080612fe48388613649565b90925090506000826003811115612ff757fe5b1461301957506040805160208101909152600081529094509250612178915050565b604080516020810190915290815260009890975095505050505050565b51670de0b6b3a7640000900490565b6012546040805163a9059cbb60e01b81526001600160a01b03858116600483015260248201859052915160009392909216918391839163a9059cbb91604480820192869290919082900301818387803b1580156130a157600080fd5b505af11580156130b5573d6000803e3d6000fd5b505050503d600081146130cf57602081146130d957600080fd5b60001991506130e5565b60206000803e60005191505b50806130f65760109250505061086f565b506000949350505050565b600082158061310e575081155b6131495760405162461bcd60e51b81526004018080602001828103825260348152602001806148c56034913960400191505060405180910390fd5b613151614656565b613159611ce5565b604083018190526020830182600381111561317057fe5b600381111561317b57fe5b905250600090508160200151600381111561319257fe5b146131ae57612b9b6009602b8360200151600381111561103d57fe5b831561322f5760608101849052604080516020810182529082015181526131d5908561212b565b60808301819052602083018260038111156131ec57fe5b60038111156131f757fe5b905250600090508160200151600381111561320e57fe5b1461322a57612b9b600960298360200151600381111561103d57fe5b6132a8565b61324b83604051806020016040528084604001518152506145d2565b606083018190526020830182600381111561326257fe5b600381111561326d57fe5b905250600090508160200151600381111561328457fe5b146132a057612b9b6009602a8360200151600381111561103d57fe5b608081018390525b60065460608201516040805163eabe7d9160e01b81523060048201526001600160a01b03898116602483015260448201939093529051600093929092169163eabe7d919160648082019260209290919082900301818787803b15801561330d57600080fd5b505af1158015613321573d6000803e3d6000fd5b505050506040513d602081101561333757600080fd5b50519050801561334e57612c46600360288361250f565b613356612575565b600a541461336a57612c46600a602c6121ff565b61337a600e548360600151612579565b60a084018190526020840182600381111561339157fe5b600381111561339c57fe5b90525060009050826020015160038111156133b357fe5b146133cf57612c466009602e8460200151600381111561103d57fe5b6001600160a01b0386166000908152600f602052604090205460608301516133f79190612579565b60c084018190526020840182600381111561340e57fe5b600381111561341957fe5b905250600090508260200151600381111561343057fe5b1461344c57612c466009602d8460200151600381111561103d57fe5b816080015161345961217f565b101561346b57612c46600e602f6121ff565b613479868360800151613045565b8290601081111561348657fe5b9081601081111561349357fe5b9052506000825160108111156134a557fe5b146134f7576040805162461bcd60e51b815260206004820152601a60248201527f72656465656d207472616e73666572206f7574206661696c6564000000000000604482015290519081900360640190fd5b60a0820151600e5560c08201516001600160a01b0387166000818152600f6020908152604091829020939093556060850151815190815290513093600080516020614834833981519152928290030190a36080820151606080840151604080516001600160a01b038b168152602081019490945283810191909152517fe5b754fb1abb7f01b499791d0b820ae3b6af3424ac1c59768edb53f4ec31a9299281900390910190a160065460808301516060840151604080516351dff98960e01b81523060048201526001600160a01b038b81166024830152604482019490945260648101929092525191909216916351dff98991608480830192600092919082900301818387803b158015612f1d57600080fd5b6000808361361d57506000905080612178565b8383028385828161362a57fe5b041461363e57506002915060009050612178565b600092509050612178565b6000808261365d5750600190506000612178565b600083858161366857fe5b04915091509250929050565b60065460408051634ef4c3e160e01b81523060048201526001600160a01b03858116602483015260448201859052915160009384931691634ef4c3e191606480830192602092919082900301818787803b1580156136d157600080fd5b505af11580156136e5573d6000803e3d6000fd5b505050506040513d60208110156136fb57600080fd5b50519050801561371a576137126003601f8361250f565b91505061086f565b613722612575565b600a541461373657613712600a60226121ff565b61373e614694565b61374885856143e7565b8190601081111561375557fe5b9081601081111561376257fe5b90525060008151601081111561377457fe5b1461378f5780516137869060266121ff565b9250505061086f565b613797611ce5565b60408301819052602083018260038111156137ae57fe5b60038111156137b957fe5b90525060009050816020015160038111156137d057fe5b146137ec57613786600960218360200151600381111561103d57fe5b61380884604051806020016040528084604001518152506145d2565b606083018190526020830182600381111561381f57fe5b600381111561382a57fe5b905250600090508160200151600381111561384157fe5b1461385d57613786600960208360200151600381111561103d57fe5b61386d600e548260600151612604565b608083018190526020830182600381111561388457fe5b600381111561388f57fe5b90525060009050816020015160038111156138a657fe5b146138c257613786600960248360200151600381111561103d57fe5b6001600160a01b0385166000908152600f602052604090205460608201516138ea9190612604565b60a083018190526020830182600381111561390157fe5b600381111561390c57fe5b905250600090508160200151600381111561392357fe5b1461393f57613786600960238360200151600381111561103d57fe5b613949858561451b565b8190601081111561395657fe5b9081601081111561396357fe5b90525060008151601081111561397557fe5b146139875780516137869060256121ff565b6080810151600e5560a08101516001600160a01b0386166000818152600f602090815260409182902093909355606080850151825193845293830188905282820193909352517f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f929181900390910190a1606081015160408051918252516001600160a01b0387169130916000805160206148348339815191529181900360200190a36006546060820151604080516341c728b960e01b81523060048201526001600160a01b038981166024830152604482018990526064820193909352905191909216916341c728b991608480830192600092919082900301818387803b158015613a9257600080fd5b505af1158015613aa6573d6000803e3d6000fd5b5060009250613ab3915050565b95945050505050565b6000613ac66145e9565b600080613adb8660000151866000015161360a565b90925090506000826003811115613aee57fe5b14613b0d57506040805160208101909152600081529092509050612178565b600080613b226706f05b59d3b2000084612604565b90925090506000826003811115613b3557fe5b14613b5757506040805160208101909152600081529094509250612178915050565b600080613b6c83670de0b6b3a7640000613649565b90925090506000826003811115613b7f57fe5b14613b8657fe5b604080516020810190915290815260009a909950975050505050505050565b6006546040805163368f515360e21b81523060048201526001600160a01b0385811660248301526044820185905291516000938493169163da3d454c91606480830192602092919082900301818787803b158015613c0257600080fd5b505af1158015613c16573d6000803e3d6000fd5b505050506040513d6020811015613c2c57600080fd5b505190508015613c43576137126003600e8361250f565b613c4b612575565b600a5414613c5e57613712600a806121ff565b82613c6761217f565b1015613c7957613712600e60096121ff565b613c816146ae565b613c8a85612420565b6040830181905260208301826003811115613ca157fe5b6003811115613cac57fe5b9052506000905081602001516003811115613cc357fe5b14613cdf57613786600960078360200151600381111561103d57fe5b613ced816040015185612604565b6060830181905260208301826003811115613d0457fe5b6003811115613d0f57fe5b9052506000905081602001516003811115613d2657fe5b14613d42576137866009600c8360200151600381111561103d57fe5b613d4e600c5485612604565b6080830181905260208301826003811115613d6557fe5b6003811115613d7057fe5b9052506000905081602001516003811115613d8757fe5b14613da3576137866009600b8360200151600381111561103d57fe5b613dad8585613045565b81906010811115613dba57fe5b90816010811115613dc757fe5b905250600081516010811115613dd957fe5b14613e2b576040805162461bcd60e51b815260206004820152601a60248201527f626f72726f77207472616e73666572206f7574206661696c6564000000000000604482015290519081900360640190fd5b606080820180516001600160a01b038816600081815260116020908152604091829020938455600b54600190940193909355608080870151600c819055945182519384529383018a9052828201939093529381019290925291517f13ed6866d4e1ee6da46f845c46d7e54120883d75c5ea9a2dacc1c4ca8984ab80929181900390910190a160065460408051635c77860560e01b81523060048201526001600160a01b0388811660248301526044820188905291519190921691635c77860591606480830192600092919082900301818387803b158015613a9257600080fd5b60065460408051632fe3f38f60e11b81523060048201526001600160a01b0384811660248301528781166044830152868116606483015260848201869052915160009384931691635fc7e71e9160a480830192602092919082900301818787803b158015613f7857600080fd5b505af1158015613f8c573d6000803e3d6000fd5b505050506040513d6020811015613fa257600080fd5b505190508015613fb957611e39600360128361250f565b613fc1612575565b600a5414613fd557611e39600a60166121ff565b613fdd612575565b836001600160a01b0316636c540baf6040518163ffffffff1660e01b815260040160206040518083038186803b15801561401657600080fd5b505afa15801561402a573d6000803e3d6000fd5b505050506040513d602081101561404057600080fd5b50511461405357611e39600a60116121ff565b856001600160a01b0316856001600160a01b0316141561407957611e39600660176121ff565b8361408a57611e39600760156121ff565b6000198414156140a057611e39600760146121ff565b6006546040805163c488847b60e01b81523060048201526001600160a01b038681166024830152604482018890528251600094859492169263c488847b926064808301939192829003018186803b1580156140fa57600080fd5b505afa15801561410e573d6000803e3d6000fd5b505050506040513d604081101561412457600080fd5b5080516020909101519092509050811561414f57614145600460138461250f565b9350505050610a9e565b846001600160a01b03166370a08231886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156141a557600080fd5b505afa1580156141b9573d6000803e3d6000fd5b505050506040513d60208110156141cf57600080fd5b50518111156141e457614145600d601d6121ff565b60006141f1898989612af5565b9050801561421a5761420f81601081111561420857fe5b60186121ff565b945050505050610a9e565b6040805163b2a02ff160e01b81526001600160a01b038b811660048301528a8116602483015260448201859052915160009289169163b2a02ff191606480830192602092919082900301818787803b15801561427557600080fd5b505af1158015614289573d6000803e3d6000fd5b505050506040513d602081101561429f57600080fd5b5051905080156142ed576040805162461bcd60e51b81526020600482015260146024820152731d1bdad95b881cd95a5e9d5c994819985a5b195960621b604482015290519081900360640190fd5b604080516001600160a01b03808d168252808c1660208301528183018b9052891660608201526080810185905290517f298637f684da70674f26509b10f07ec2fbc77a335ab1e7d6215a4b2484d8bb529181900360a00190a1600654604080516347ef3b3b60e01b81523060048201526001600160a01b038a811660248301528d811660448301528c81166064830152608482018c905260a48201879052915191909216916347ef3b3b9160c480830192600092919082900301818387803b1580156143b857600080fd5b505af11580156143cc573d6000803e3d6000fd5b50600092506143d9915050565b9a9950505050505050505050565b60125460408051636eb1769f60e11b81526001600160a01b038581166004830152306024830152915160009392909216918491839163dd62ed3e91604480820192602092909190829003018186803b15801561444257600080fd5b505afa158015614456573d6000803e3d6000fd5b505050506040513d602081101561446c57600080fd5b5051101561447e57600c91505061086f565b82816001600160a01b03166370a08231866040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156144d557600080fd5b505afa1580156144e9573d6000803e3d6000fd5b505050506040513d60208110156144ff57600080fd5b5051101561451157600d91505061086f565b5060009392505050565b601254604080516323b872dd60e01b81526001600160a01b0385811660048301523060248301526044820185905291516000939290921691839183916323b872dd91606480820192869290919082900301818387803b15801561457d57600080fd5b505af1158015614591573d6000803e3d6000fd5b505050503d600081146145ab57602081146145b557600080fd5b60001991506145c1565b60206000803e60005191505b50806130f657600f9250505061086f565b60008060006145df6145e9565b6121428686612686565b6040518060200160405280600081525090565b6040805161014081019091528060008152602001600081526020016000815260200160008152602001600081526020016146346145e9565b8152602001600081526020016000815260200160008152602001600081525090565b6040805160e0810190915280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6040805160c0810190915280600081526020016000614634565b6040805160a08101909152806000815260200160008152602001600081526020016000815260200160008152509056fe737570706c7952617465506572426c6f636b3a2063616c63756c6174696e6720626f72726f7773506572206661696c6564726564756365207265736572766573207472616e73666572206f7574206661696c6564737570706c7952617465506572426c6f636b3a2063616c63756c6174696e6720737570706c7952617465206661696c6564626f72726f7742616c616e636553746f7265643a20626f72726f7742616c616e636553746f726564496e7465726e616c206661696c6564737570706c7952617465506572426c6f636b3a2063616c63756c6174696e6720756e6465726c79696e67206661696c6564626f72726f7752617465506572426c6f636b3a20696e746572657374526174654d6f64656c2e626f72726f7752617465206661696c6564737570706c7952617465506572426c6f636b3a2063616c63756c6174696e6720626f72726f7752617465206661696c6564ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef737570706c7952617465506572426c6f636b3a2063616c63756c6174696e67206f6e654d696e757352657365727665466163746f72206661696c656465786368616e67655261746553746f7265643a2065786368616e67655261746553746f726564496e7465726e616c206661696c65646f6e65206f662072656465656d546f6b656e73496e206f722072656465656d416d6f756e74496e206d757374206265207a65726f72656475636520726573657276657320756e657870656374656420756e646572666c6f77a265627a7a72315820341daf9adf4d7120cf423a6b3b1aa4cb48b45d285bf266f82cf92af70cedc13f64736f6c634300050c0032",
  "sourceMap": "207:8920:0:-;;;831:522;8:9:-1;5:2;;;30:1;27;20:12;5:2;831:522:0;;;;;;;;;;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;831:522:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19:11:-1;11:20;;8:2;;;44:1;41;34:12;8:2;62:21;;;;123:4;114:14;;138:31;;;135:2;;;182:1;179;172:12;135:2;213:10;;261:11;244:29;;285:43;;;282:58;-1:-1;233:115;230:2;;;361:1;358;351:12;230:2;372:25;;-1:-1;831:522:0;;420:4:-1;411:14;;;;831:522:0;;;;;411:14:-1;831:522:0;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;831:522:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19:11:-1;14:3;11:20;8:2;;;44:1;41;34:12;8:2;62:21;;;;123:4;114:14;;138:31;;;135:2;;;182:1;179;172:12;135:2;213:10;;261:11;244:29;;285:43;;;282:58;-1:-1;233:115;230:2;;;361:1;358;351:12;230:2;372:25;;-1:-1;831:522:0;;420:4:-1;411:14;;;;831:522:0;;;;;411:14:-1;831:522:0;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;831:522:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;831:522:0;;;;;575:1:10;559:13;:17;6258:5:2;:18;;-1:-1:-1;;;;;;6258:18:2;6266:10;6258:18;;;6324:27;:58;;;831:522:0;-1:-1:-1;1114:12:0;;-1:-1:-1;1128:18:0;1148:28;1178:5;1185:7;831:522;6400:31:2;6392:92;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6526:11;6540:29;6556:12;-1:-1:-1;;;;;6540:15:2;:29;:::i;:::-;6526:43;-1:-1:-1;6587:30:2;;6579:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6785:16;-1:-1:-1;;;;;6785:14:2;:16;:::i;:::-;6764:18;:37;448:4:8;6811:11:2;:25;6933:46;6960:18;-1:-1:-1;;;;;6933:26:2;:46;:::i;:::-;6927:52;-1:-1:-1;6997:30:2;;6989:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7077:12;;;;:4;;:12;;;;;:::i;:::-;-1:-1:-1;7099:16:2;;;;:6;;:16;;;;;:::i;:::-;-1:-1:-1;;7125:8:2;:20;-1:-1:-1;;1241:10:0;:24;;-1:-1:-1;;;;;;1241:24:0;-1:-1:-1;;;;;1241:24:0;;;;;;;;;;;1275:40;;;;;;;;1290:10;;;;;-1:-1:-1;1275:38:0;;-1:-1:-1;1275:40:0;;;;;-1:-1:-1;1275:40:0;;;;;;;;1290:10;1275:40;;;5:2:-1;;;;30:1;27;20:12;5:2;1275:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1275:40:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;207:8920:0;;-1:-1:-1;;;;;;;;207:8920:0;61328:724:2;61476:5;;61406:7;;-1:-1:-1;;;;;61476:5:2;61462:10;:19;61458:122;;61504:65;61509:18;61529:39;-1:-1:-1;;;;;61504:4:2;:65;:::i;:::-;61497:72;;;;61458:122;61628:11;;61723:30;;;;;;;;-1:-1:-1;;;;;61628:11:2;;;;61723:28;;;;;:30;;;;;;;;;;;;;;:28;:30;;;5:2:-1;;;;30:1;27;20:12;5:2;61723:30:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;61723:30:2;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;61723:30:2;61715:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;61851:11;:28;;-1:-1:-1;;;;;;61851:28:2;-1:-1:-1;;;;;61851:28:2;;;;;;;;;61958:46;;;;;;;;;;;;;;;;;;;;;;;;;;;62030:14;62022:23;62015:30;;;61328:724;;;;:::o;14028:94::-;14103:12;14028:94;;:::o;68669:1328::-;68965:5;;68763:7;;;;-1:-1:-1;;;;;68965:5:2;68951:10;:19;68947:130;;68993:73;68998:18;69018:47;-1:-1:-1;;;;;68993:4:2;:73;:::i;:::-;68986:80;;;;;68947:130;69200:16;-1:-1:-1;;;;;69200:14:2;:16;:::i;:::-;69178:18;;:38;69174:205;;69291:77;69296:22;69320:47;-1:-1:-1;;;;;69291:4:2;:77;:::i;69174:205::-;69470:17;;;;;;;;;-1:-1:-1;;;;;69470:17:2;69447:40;;69587:20;-1:-1:-1;;;;;69587:40:2;;:42;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;69587:42:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;69587:42:2;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;69587:42:2;69579:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;69736:17;:40;;-1:-1:-1;;;;;;69736:40:2;-1:-1:-1;;;;;69736:40:2;;;;;;;;;69879:70;;;;;;;;;;;;;;;;;;;;;;;;;;;69975:14;69967:23;;7106:161:7;7167:7;7191:39;7207:3;7199:12;;;;;;;;7221:4;7213:13;;;;;;;;7191:39;;;;;;;;;;;;;7228:1;7191:39;;;;;;;;;;;;;7256:3;7248:12;;;;;;;;7241:19;7106:161;-1:-1:-1;;;7106:161:7:o;207:8920:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;207:8920:0;;;-1:-1:-1;207:8920:0;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;",
  "deployedSourceMap": "207:8920:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;207:8920:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;606:18:2;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;606:18:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11266:232;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;11266:232:2;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;3366:125:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;3366:125:0;;:::i;:::-;;;;;;;;;;;;;;;;1843:36:2;;;:::i;17086:227::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17086:227:2;-1:-1:-1;;;;;17086:227:2;;:::i;2469:26::-;;;:::i;19891:263::-;;;:::i;10610:196::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;10610:196:2;;;;;;;;;;;;;;;;;:::i;3771:165:0:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;3771:165:0;;;;;;;;:::i;1286:35:2:-;;;:::i;:::-;;;;-1:-1:-1;;;;;1286:35:2;;;;;;;;;;;;;;792:23;;;:::i;12502:320::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;12502:320:2;-1:-1:-1;;;;;12502:320:2;;:::i;21697:89::-;;;:::i;61328:724::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;61328:724:2;-1:-1:-1;;;;;61328:724:2;;:::i;2237:27::-;;;:::i;1407:39::-;;;:::i;64481:575::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;64481:575:2;;:::i;1709:42::-;;;:::i;1964:33::-;;;:::i;303:25:0:-;;;:::i;12144:110:2:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;12144:110:2;-1:-1:-1;;;;;12144:110:2;;:::i;16607:195::-;;;:::i;2650:137:0:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2650:137:0;;:::i;2365:28:2:-;;;:::i;697:20::-;;;:::i;17515:289::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17515:289:2;-1:-1:-1;;;;;17515:289:2;;:::i;1733:109:0:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1733:109:0;;:::i;22403:4337:2:-;;;:::i;10126:186::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;10126:186:2;;;;;;;;:::i;2104:26::-;;;:::i;14855:1612::-;;;:::i;56839:2099::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;56839:2099:2;;;;;;;;;;;;;;;;;:::i;59474:637::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;59474:637:2;-1:-1:-1;;;;;59474:637:2;;:::i;19447:201::-;;;:::i;13160:715::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;13160:715:2;-1:-1:-1;;;;;13160:715:2;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3048:117:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;3048:117:0;;:::i;2185:::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2185:117:0;;:::i;11820:141:2:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;11820:141:2;;;;;;;;;;:::i;60382:728::-;;;:::i;67713:634::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;67713:634:2;-1:-1:-1;;;;;67713:634:2;;:::i;1543:42::-;;;:::i;4408:224:0:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;4408:224:0;;;;;;;;;;;;;;;;;:::i;1180:28:2:-;;;:::i;14292:393::-;;;:::i;62348:611::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;62348:611:2;;:::i;499:36::-;;;:::i;606:18::-;;;;;;;;;;;;;;;-1:-1:-1;;606:18:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;11266:232::-;11364:10;11334:4;11384:23;;;:18;:23;;;;;;;;-1:-1:-1;;;;;11384:32:2;;;;;;;;;;;:41;;;11440:30;;;;;;;11334:4;;11364:10;11384:32;;11364:10;;11440:30;;;;;;;;;;;11487:4;11480:11;;;11266:232;;;;;:::o;3366:125:0:-;3426:7;3452:32;3472:11;3452:19;:32::i;:::-;3445:39;;3366:125;;;;:::o;1843:36:2:-;;;;:::o;17086:227::-;17164:7;992:18:10;;1009:1;992:18;;;;17164:7:2;17191:16;:14;:16::i;:::-;:43;17183:78;;;;;-1:-1:-1;;;17183:78:2;;;;;;;;;;;;-1:-1:-1;;;17183:78:2;;;;;;;;;;;;;;;17278:28;17298:7;17278:19;:28::i;:::-;17271:35;;1066:1:10;1101:13;;1085:12;:29;1077:52;;;;;-1:-1:-1;;;1077:52:10;;;;;;;;;;;;-1:-1:-1;;;1077:52:10;;;;;;;;;;;;;;;17086:227:2;;;;:::o;2469:26::-;;;;:::o;19891:263::-;19942:7;19962:13;19977:14;19995:28;:26;:28::i;:::-;19961:62;;-1:-1:-1;19961:62:2;-1:-1:-1;20048:18:2;20041:3;:25;;;;;;;;;20033:91;;;;-1:-1:-1;;;20033:91:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20141:6;-1:-1:-1;;19891:263:2;;:::o;10610:196::-;10705:4;992:18:10;;1009:1;992:18;;;;10705:4:2;10728:44;10743:10;10755:3;10760;10765:6;10728:14;:44::i;:::-;:71;10721:78;;1066:1:10;1101:13;;1085:12;:29;1077:52;;;;;-1:-1:-1;;;1077:52:10;;;;;;;;;;;;-1:-1:-1;;;1077:52:10;;;;;;;;;;;;;;;10610:196:2;;;;;;:::o;3771:165:0:-;3855:7;3881:48;3907:8;3917:11;3881:25;:48::i;:::-;3874:55;3771:165;-1:-1:-1;;;3771:165:0:o;1286:35:2:-;;;-1:-1:-1;;;;;1286:35:2;;:::o;792:23::-;;;;:::o;12502:320::-;12564:7;12583:23;;:::i;:::-;12609:38;;;;;;;;12624:21;:19;:21::i;:::-;12609:38;;-1:-1:-1;;;;;12725:20:2;;12658:14;12725:20;;;:13;:20;;;;;;12583:64;;-1:-1:-1;12658:14:2;;;12693:53;;12583:64;;12693:17;:53::i;:::-;12657:89;;-1:-1:-1;12657:89:2;-1:-1:-1;12772:18:2;12764:4;:26;;;;;;;;;12756:35;;;;;;12808:7;12502:320;-1:-1:-1;;;;12502:320:2:o;21697:89::-;21739:7;21765:14;:12;:14::i;:::-;21758:21;;21697:89;:::o;61328:724::-;61476:5;;61406:7;;-1:-1:-1;;;;;61476:5:2;61462:10;:19;61458:122;;61504:65;61509:18;61529:39;61504:4;:65::i;:::-;61497:72;;;;61458:122;61628:11;;61723:30;;;-1:-1:-1;;;61723:30:2;;;;-1:-1:-1;;;;;61628:11:2;;;;61723:28;;;;;:30;;;;;;;;;;;;;;:28;:30;;;5:2:-1;;;;30:1;27;20:12;5:2;61723:30:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;61723:30:2;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;61723:30:2;61715:71;;;;;-1:-1:-1;;;61715:71:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;61851:11;:28;;-1:-1:-1;;;;;;61851:28:2;-1:-1:-1;;;;;61851:28:2;;;;;;;;;61958:46;;;;;;;;;;;;;;;;;;;;;;;;;;;62030:14;62015:30;61328:724;-1:-1:-1;;;61328:724:2:o;2237:27::-;;;;:::o;1407:39::-;;;-1:-1:-1;;;;;1407:39:2;;:::o;64481:575::-;64559:7;992:18:10;;1009:1;992:18;;;;64559:7:2;64594:16;:14;:16::i;:::-;64578:32;-1:-1:-1;64624:32:2;;64620:277;;64816:70;64827:5;64821:12;;;;;;;;64835:50;64816:4;:70::i;:::-;64809:77;;;;;64620:277;65015:34;65036:12;65015:20;:34::i;:::-;65008:41;;;1101:13:10;;1085:12;:29;1077:52;;;;;-1:-1:-1;;;1077:52:10;;;;;;;;;;;;-1:-1:-1;;;1077:52:10;;;;;;;;;;;;;;1709:42:2;;;;:::o;1964:33::-;;;;:::o;303:25:0:-;;;-1:-1:-1;;;;;303:25:0;;:::o;12144:110:2:-;-1:-1:-1;;;;;12227:20:2;12201:7;12227:20;;;:13;:20;;;;;;;12144:110::o;16607:195::-;16669:7;992:18:10;;1009:1;992:18;;;;16669:7:2;16696:16;:14;:16::i;:::-;:43;16688:78;;;;;-1:-1:-1;;;16688:78:2;;;;;;;;;;;;-1:-1:-1;;;16688:78:2;;;;;;;;;;;;;;;16783:12;;16776:19;;1101:13:10;;1085:12;:29;1077:52;;;;;-1:-1:-1;;;1077:52:10;;;;;;;;;;;;-1:-1:-1;;;1077:52:10;;;;;;;;;;;;;;;16607:195:2;;:::o;2650:137:0:-;2716:7;2742:38;2767:12;2742:24;:38::i;2365:28:2:-;;;;:::o;697:20::-;;;;;;;;;;;;;;-1:-1:-1;;697:20:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17515:289;17582:7;17602:13;17617:14;17635:36;17663:7;17635:27;:36::i;:::-;17601:70;;-1:-1:-1;17601:70:2;-1:-1:-1;17696:18:2;17689:3;:25;;;;;;;;;17681:93;;;;-1:-1:-1;;;17681:93:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1733:109:0;1785:7;1811:24;1824:10;1811:12;:24::i;22403:4337:2:-;22445:7;22464:35;;:::i;:::-;22611:17;;-1:-1:-1;;;;;22611:17:2;:31;22656:14;:12;:14::i;:::-;22684:12;;22710:13;;22611:122;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22611:122:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22611:122:2;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;22611:122:2;;;;;;;;22584:23;;22567:166;;;22568:14;;;22567:166;956:4;-1:-1:-1;22751:48:2;22743:89;;;;;-1:-1:-1;;;22743:89:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;22846:14;;;;:19;22842:270;;22904:197;22936:31;22989:58;23069:4;:14;;;22904:10;:197::i;:::-;22881:220;;;;;22842:270;23196:16;:14;:16::i;:::-;23170:23;;;:42;;;23366:18;;23333:52;;23170:42;23333:7;:52::i;:::-;23314:15;;;23299:86;;;23300:4;23299:86;;;;;;;;;;;;;;;;;;;-1:-1:-1;23418:18:2;;-1:-1:-1;23402:12:2;;:34;;;;;;;;;23395:42;;;;24026:102;24049:40;;;;;;;;24064:4;:23;;;24049:40;;;24103:4;:15;;;24026:9;:102::i;:::-;23997:25;;;23982:146;;;23983:4;23982:146;;;;;;;;;;;;;;;;;;;-1:-1:-1;24158:18:2;;-1:-1:-1;24142:12:2;;:34;;;;;;;;;24138:288;;24215:200;24247:16;24285:69;24384:4;:12;;;24376:21;;;;;;;;24215:10;:200::i;24138:288::-;24479:58;24497:4;:25;;;24524:12;;24479:17;:58::i;:::-;24451:24;;;24436:101;;;24437:4;24436:101;;;;;;;;;;;;;;;;;;;-1:-1:-1;24567:18:2;;-1:-1:-1;24551:12:2;;:34;;;;;;;;;24547:286;;24624:198;24656:16;24694:67;24791:4;:12;;;24783:21;;;;;;;24547:286;24882:47;24890:4;:24;;;24916:12;;24882:7;:47::i;:::-;24858:20;;;24843:86;;;24844:4;24843:86;;;;;;;;;;;;;;;;;;;-1:-1:-1;24959:18:2;;-1:-1:-1;24943:12:2;;:34;;;;;;;;;24939:283;;25016:195;25048:16;25086:64;25180:4;:12;;;25172:21;;;;;;;24939:283;25272:151;25310:38;;;;;;;;25325:21;;25310:38;;;25362:4;:24;;;25400:13;;25272:24;:151::i;:::-;25247:21;;;25232:191;;;25233:4;25232:191;;;;;;;;;;;;;;;;;;;-1:-1:-1;25453:18:2;;-1:-1:-1;25437:12:2;;:34;;;;;;;;;25433:284;;25510:196;25542:16;25580:65;25675:4;:12;;;25667:21;;;;;;;25433:284;25765:123;25803:4;:25;;;25842:11;;25867;;25765:24;:123::i;:::-;25742:19;;;25727:161;;;25728:4;25727:161;;;;;;;;;;;;;;;;;;;-1:-1:-1;25918:18:2;;-1:-1:-1;25902:12:2;;:34;;;;;;;;;25898:282;;25975:194;26007:16;26045:63;26138:4;:12;;;26130:21;;;;;;;25898:282;26397:23;;;;;26376:18;:44;26444:19;;;;26430:11;:33;;;26488:20;;;;26473:12;:35;;;26534:21;;;;26518:13;:37;26632:24;;;;26617:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26718:14;26703:30;;;22403:4337;:::o;10126:186::-;10204:4;992:18:10;;1009:1;992:18;;;;10204:4:2;10227:51;10242:10;10254;10266:3;10271:6;10227:14;:51::i;:::-;:78;10220:85;;1066:1:10;1101:13;;1085:12;:29;1077:52;;;;;-1:-1:-1;;;1077:52:10;;;;;;;;;;;;-1:-1:-1;;;1077:52:10;;;;;;;;;;;;;;;10126:186:2;;;;;:::o;2104:26::-;;;;:::o;14855:1612::-;14908:7;15156:28;15187:20;:18;:20::i;:::-;15261:17;;15156:51;;-1:-1:-1;15219:10:2;;;;-1:-1:-1;;;;;15261:17:2;:31;15306:14;:12;:14::i;:::-;15334:12;;15360:13;;15261:122;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15261:122:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15261:122:2;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;15261:122:2;;;;;;;;;-1:-1:-1;15261:122:2;-1:-1:-1;15401:7:2;;15393:69;;;;-1:-1:-1;;;15393:69:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15489:12;15503:21;;:::i;:::-;15528:61;15538:37;;;;;;;;15553:20;15538:37;;;15577:11;;15528:9;:61::i;:::-;15488:101;;-1:-1:-1;15488:101:2;-1:-1:-1;15613:18:2;15607:2;:24;;;;;;;;;15599:86;;;;-1:-1:-1;;;15599:86:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15697:12;15711:21;;:::i;:::-;15736:40;15751:12;;15765:10;15736:14;:40::i;:::-;15696:80;;-1:-1:-1;15696:80:2;-1:-1:-1;15800:18:2;15794:2;:24;;;;;;;;;15786:86;;;;-1:-1:-1;;;15786:86:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15884:12;15898:32;;:::i;:::-;15934:110;15954:28;;;;;;;;448:4:8;15954:28:2;;;15996:38;;;;;;;;16011:21;;15996:38;;;15934:6;:110::i;:::-;15883:161;;-1:-1:-1;15883:161:2;-1:-1:-1;16068:18:2;16062:2;:24;;;;;;;;;16054:97;;;;-1:-1:-1;;;16054:97:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16163:12;16177:21;;:::i;:::-;16202:125;16223:35;;;;;;;;16238:18;16223:35;;;16272:21;16307:10;16202:7;:125::i;:::-;16162:165;;-1:-1:-1;16162:165:2;-1:-1:-1;16351:18:2;16345:2;:24;;;;;;;;;16337:86;;;;-1:-1:-1;;;16337:86:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16441:19;;-1:-1:-1;;;;;;;;;;;14855:1612:2;:::o;56839:2099::-;56944:7;992:18:10;;1009:1;992:18;;;;57021:11:2;;:86;;;-1:-1:-1;;;57021:86:2;;57054:4;57021:86;;;;57061:10;57021:86;;;;-1:-1:-1;;;;;57021:86:2;;;;;;;;;;;;;;;;;;;;;;56944:7;;57021:11;;;;;:24;;:86;;;;;;;;;;;;;;;56944:7;57021:11;:86;;;5:2:-1;;;;30:1;27;20:12;5:2;57021:86:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;57021:86:2;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;57021:86:2;;-1:-1:-1;57121:12:2;;57117:149;;57156:99;57167:27;57196:49;57247:7;57156:10;:99::i;:::-;57149:106;;;;;57117:149;57336:10;-1:-1:-1;;;;;57324:22:2;:8;-1:-1:-1;;;;;57324:22:2;;57320:144;;;57369:84;57374:26;57402:50;57369:4;:84::i;57320:144::-;-1:-1:-1;;;;;57883:23:2;;57474:17;57883:23;;;:13;:23;;;;;;57474:17;;;;57875:45;;57908:11;57875:7;:45::i;:::-;57844:76;;-1:-1:-1;57844:76:2;-1:-1:-1;57945:18:2;57934:7;:29;;;;;;;;;57930:167;;57986:100;57997:16;58015:52;58077:7;58069:16;;;;;;;57986:100;57979:107;;;;;;;;57930:167;-1:-1:-1;;;;;58148:25:2;;;;;;:13;:25;;;;;;58140:47;;58175:11;58140:7;:47::i;:::-;58107:80;;-1:-1:-1;58107:80:2;-1:-1:-1;58212:18:2;58201:7;:29;;;;;;;;;58197:167;;58253:100;58264:16;58282:52;58344:7;58336:16;;;;;;;58197:167;-1:-1:-1;;;;;58560:23:2;;;;;;;:13;:23;;;;;;;;:43;;;58613:25;;;;;;;;;;:47;;;58712:43;;;;;;;58613:25;;-1:-1:-1;;;;;;;;;;;58712:43:2;;;;;;;;;;58805:11;;:85;;;-1:-1:-1;;;58805:85:2;;58837:4;58805:85;;;;58844:10;58805:85;;;;-1:-1:-1;;;;;58805:85:2;;;;;;;;;;;;;;;;;;;;;;:11;;;;;:23;;:85;;;;;:11;;:85;;;;;;;:11;;:85;;;5:2:-1;;;;30:1;27;20:12;5:2;58805:85:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;58916:14:2;;-1:-1:-1;58908:23:2;;-1:-1:-1;;58908:23:2;;58901:30;;;;;;1101:13:10;;1085:12;:29;1077:52;;;;;-1:-1:-1;;;1077:52:10;;;;;;;;;;;;-1:-1:-1;;;1077:52:10;;;;;;;;;;;;;;59474:637:2;59620:5;;59551:7;;-1:-1:-1;;;;;59620:5:2;59606:10;:19;59602:124;;59648:67;59653:18;59673:41;59648:4;:67::i;59602:124::-;59822:12;;;-1:-1:-1;;;;;59902:30:2;;;-1:-1:-1;;;;;;59902:30:2;;;;;;;60014:49;;;59822:12;;;;60014:49;;;;;;;;;;;;;;;;;;;;;;;60089:14;60081:23;;19447:201;19507:7;992:18:10;;1009:1;992:18;;;;19507:7:2;19534:16;:14;:16::i;:::-;:43;19526:78;;;;;-1:-1:-1;;;19526:78:2;;;;;;;;;;;;-1:-1:-1;;;19526:78:2;;;;;;;;;;;;;;;19621:20;:18;:20::i;:::-;19614:27;;1101:13:10;;1085:12;:29;1077:52;;;;;-1:-1:-1;;;1077:52:10;;;;;;;;;;;;-1:-1:-1;;;1077:52:10;;;;;;;;;;;;;;13160:715:2;-1:-1:-1;;;;;13298:22:2;;13228:7;13298:22;;;:13;:22;;;;;;13228:7;;;;;;;;;13449:36;13312:7;13449:27;:36::i;:::-;13425:60;-1:-1:-1;13425:60:2;-1:-1:-1;13507:18:2;13499:4;:26;;;;;;;;;13495:100;;13557:16;13549:25;13541:43;-1:-1:-1;13576:1:2;;-1:-1:-1;13576:1:2;;-1:-1:-1;13576:1:2;;-1:-1:-1;13541:43:2;;-1:-1:-1;;;;13541:43:2;13495:100;13636:28;:26;:28::i;:::-;13605:59;-1:-1:-1;13605:59:2;-1:-1:-1;13686:18:2;13678:4;:26;;;;;;;;;13674:100;;13736:16;13728:25;;13674:100;-1:-1:-1;13800:14:2;;-1:-1:-1;13817:13:2;;-1:-1:-1;13832:13:2;-1:-1:-1;13832:13:2;-1:-1:-1;13160:715:2;;;;;;:::o;3048:117:0:-;3104:7;3130:28;3145:12;3130:14;:28::i;2185:117::-;2241:7;2267:28;2282:12;2267:14;:28::i;11820:141:2:-;-1:-1:-1;;;;;11920:25:2;;;11894:7;11920:25;;;:18;:25;;;;;;;;:34;;;;;;;;;;;;;11820:141::o;60382:728::-;60533:12;;60424:7;;-1:-1:-1;;;;;60533:12:2;60519:10;:26;;;:54;;-1:-1:-1;60549:10:2;:24;60519:54;60515:162;;;60596:70;60601:18;60621:44;60596:4;:70::i;:::-;60589:77;;;;60515:162;60758:5;;;60799:12;;;-1:-1:-1;;;;;60799:12:2;;;-1:-1:-1;;;;;;60869:20:2;;;;;;;;;60935:25;;;;;;60976;;;60758:5;;;60976:25;;;60995:5;;;;60976:25;;;;;;60799:12;;60976:25;;;;;;;;;61049:12;;61016:46;;;-1:-1:-1;;;;;61016:46:2;;;;;61049:12;;;61016:46;;;;;;;;;;;;;;;;61088:14;61073:30;;;;60382:728;:::o;67713:634::-;67800:7;67819:13;67835:16;:14;:16::i;:::-;67819:32;-1:-1:-1;67865:32:2;;67861:298;;68070:78;68081:5;68075:12;;;;;;;;68089:58;68070:4;:78::i;:::-;68063:85;;;;;67861:298;68292:48;68319:20;68292:26;:48::i;1543:42::-;;;-1:-1:-1;;;;;1543:42:2;;:::o;4408:224:0:-;4531:7;4561:64;4585:8;4595:11;4608:16;4561:23;:64::i;1180:28:2:-;;;-1:-1:-1;;;;;1180:28:2;;:::o;14292:393::-;14414:17;;14345:7;;;;;;-1:-1:-1;;;;;14414:17:2;:31;14459:14;:12;:14::i;:::-;14487:12;;14513:13;;14414:122;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14414:122:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14414:122:2;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;14414:122:2;;;;;;;;;-1:-1:-1;14414:122:2;-1:-1:-1;14554:14:2;;14546:82;;;;-1:-1:-1;;;14546:82:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;62348:611;62440:7;992:18:10;;1009:1;992:18;;;;62440:7:2;62475:16;:14;:16::i;:::-;62459:32;-1:-1:-1;62505:32:2;;62501:286;;62703:73;62714:5;62708:12;;;;;;;;62722:53;62703:4;:73::i;62501:286::-;62904:48;62927:24;62904:22;:48::i;499:36::-;531:4;499:36;:::o;44722:565::-;44803:7;992:18:10;;1009:1;992:18;;;;44803:7:2;44838:16;:14;:16::i;:::-;44822:32;-1:-1:-1;44868:32:2;;44864:255;;45041:67;45052:5;45046:12;;;;;;;;45060:47;45041:4;:67::i;44864:255::-;45227:53;45244:10;45256;45268:11;45227:16;:53::i;20411:1122::-;20472:9;20483:7;20506:11;;20521:1;20506:16;20502:1025;;;-1:-1:-1;;20694:27:2;;20674:18;;20666:56;;20502:1025;20898:17;20918:14;:12;:14::i;:::-;20898:34;;20946:36;20996:23;;:::i;:::-;21033:17;21107:54;21122:9;21133:12;;21147:13;;21107:14;:54::i;:::-;21065:96;-1:-1:-1;21065:96:2;-1:-1:-1;21190:18:2;21179:7;:29;;;;;;;;;21175:87;;21236:7;-1:-1:-1;21245:1:2;;-1:-1:-1;21228:19:2;;-1:-1:-1;;;21228:19:2;21175:87;21302:49;21309:28;21339:11;;21302:6;:49::i;:::-;21276:75;-1:-1:-1;21276:75:2;-1:-1:-1;21380:18:2;21369:7;:29;;;;;;;;;21365:87;;21426:7;-1:-1:-1;21435:1:2;;-1:-1:-1;21418:19:2;;-1:-1:-1;;;21418:19:2;21365:87;-1:-1:-1;21494:21:2;21474:18;;-1:-1:-1;21494:21:2;-1:-1:-1;21466:50:2;;-1:-1:-1;;21466:50:2;20502:1025;20411:1122;;:::o;7604:2269::-;7785:11;;:60;;;-1:-1:-1;;;7785:60:2;;7821:4;7785:60;;;;-1:-1:-1;;;;;7785:60:2;;;;;;;;;;;;;;;;;;;;;;7705:7;;;;7785:11;;:27;;:60;;;;;;;;;;;;;;7705:7;7785:11;:60;;;5:2:-1;;;;30:1;27;20:12;5:2;7785:60:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;7785:60:2;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;7785:60:2;;-1:-1:-1;7859:12:2;;7855:142;;7894:92;7905:27;7934:42;7978:7;7894:10;:92::i;:::-;7887:99;;;;;7855:142;8060:3;-1:-1:-1;;;;;8053:10:2;:3;-1:-1:-1;;;;;8053:10:2;;8049:103;;;8086:55;8091:15;8108:32;8086:4;:55::i;8049:103::-;8226:25;-1:-1:-1;;;;;8269:14:2;;;;;;;8265:159;;;-1:-1:-1;;;8265:159:2;;;-1:-1:-1;;;;;;8381:23:2;;;;;;;:18;:23;;;;;;;;:32;;;;;;;;;;8265:159;8499:17;8526:20;8556;8586;8643:34;8651:17;8670:6;8643:7;:34::i;:::-;8617:60;;-1:-1:-1;8617:60:2;-1:-1:-1;8702:18:2;8691:7;:29;;;;;;;;;8687:123;;8743:56;8748:16;8766:32;8743:4;:56::i;:::-;8736:63;;;;;;;;;;8687:123;-1:-1:-1;;;;;8854:18:2;;;;;;:13;:18;;;;;;8846:35;;8874:6;8846:7;:35::i;:::-;8820:61;;-1:-1:-1;8820:61:2;-1:-1:-1;8906:18:2;8895:7;:29;;;;;;;;;8891:122;;8947:55;8952:16;8970:31;8947:4;:55::i;8891:122::-;-1:-1:-1;;;;;9057:18:2;;;;;;:13;:18;;;;;;9049:35;;9077:6;9049:7;:35::i;:::-;9023:61;;-1:-1:-1;9023:61:2;-1:-1:-1;9109:18:2;9098:7;:29;;;;;;;;;9094:120;;9150:53;9155:16;9173:29;9150:4;:53::i;9094:120::-;-1:-1:-1;;;;;9341:18:2;;;;;;;:13;:18;;;;;;:33;;;9384:18;;;;;;:33;;;-1:-1:-1;;9487:32:2;;9483:110;;-1:-1:-1;;;;;9535:23:2;;;;;;;:18;:23;;;;;;;;:32;;;;;;;;;:47;;;9483:110;9661:3;-1:-1:-1;;;;;9647:26:2;9656:3;-1:-1:-1;;;;;9647:26:2;-1:-1:-1;;;;;;;;;;;9666:6:2;9647:26;;;;;;;;;;;;;;;;;;9766:11;;:59;;;-1:-1:-1;;;9766:59:2;;9801:4;9766:59;;;;-1:-1:-1;;;;;9766:59:2;;;;;;;;;;;;;;;;;;;;;;:11;;;;;:26;;:59;;;;;:11;;:59;;;;;;;:11;;:59;;;5:2:-1;;;;30:1;27;20:12;5:2;9766:59:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;9851:14:2;;-1:-1:-1;9843:23:2;;-1:-1:-1;;9843:23:2;;9836:30;7604:2269;-1:-1:-1;;;;;;;;;;;7604:2269:2:o;45567:587::-;45672:7;992:18:10;;1009:1;992:18;;;;45672:7:2;45707:16;:14;:16::i;:::-;45691:32;-1:-1:-1;45737:32:2;;45733:255;;45910:67;45921:5;45915:12;;;;;;;;45929:47;45910:4;:67::i;:::-;45903:74;;;;;45733:255;46096:51;46113:10;46125:8;46135:11;46096:16;:51::i;:::-;46089:58;;;1101:13:10;;1085:12;:29;1077:52;;;;;-1:-1:-1;;;1077:52:10;;;;;;;;;;;;-1:-1:-1;;;1077:52:10;;;;;;;;;;;;;;2484:312:8;2564:9;2575:7;2595:13;2610:18;;:::i;:::-;2632:20;2642:1;2645:6;2632:9;:20::i;:::-;2594:58;;-1:-1:-1;2594:58:8;-1:-1:-1;2673:18:8;2666:3;:25;;;;;;;;;2662:71;;-1:-1:-1;2715:3:8;-1:-1:-1;2720:1:8;;-1:-1:-1;2707:15:8;;2662:71;2751:18;2771:17;2780:7;2771:8;:17::i;:::-;2743:46;;;;;;2484:312;;;;;;:::o;4891:169:0:-;4995:10;;5023:30;;;-1:-1:-1;;;5023:30:0;;5047:4;5023:30;;;;;;4938:7;;-1:-1:-1;;;;;4995:10:0;;;;5023:15;;:30;;;;;;;;;;;;;;;4995:10;5023:30;;;5:2:-1;;;;30:1;27;20:12;5:2;5023:30:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;5023:30:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5023:30:0;;-1:-1:-1;;4891:169:0;:::o;7106:161:7:-;7167:7;7191:39;7207:3;7199:12;;;;;;;;7221:4;7213:13;;;;;;;;7191:39;;;;;;;;;;;;;7228:1;7191:39;;;;;;;;;;;;;7256:3;7248:12;;;;;;;65325:2027:2;65559:5;;65395:7;;;;;;-1:-1:-1;;;;;65559:5:2;65545:10;:19;65541:122;;65587:65;65592:18;65612:39;65587:4;:65::i;:::-;65580:72;;;;;;65541:122;65786:16;:14;:16::i;:::-;65764:18;;:38;65760:197;;65877:69;65882:22;65906:39;65877:4;:69::i;65760:197::-;66060:12;66043:14;:12;:14::i;:::-;:29;66039:150;;;66095:83;66100:29;66131:46;66095:4;:83::i;66039:150::-;66434:13;;66419:12;:28;66415:127;;;66470:61;66475:15;66492:38;66470:4;:61::i;66415:127::-;-1:-1:-1;66688:13:2;;:28;;;;66822:33;;;66814:82;;;;-1:-1:-1;;;66814:82:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;66967:13;:32;;;67083:5;;67069:34;;-1:-1:-1;;;;;67083:5:2;67090:12;67069:13;:34::i;:::-;67063:40;-1:-1:-1;67180:14:2;67173:3;:21;;;;;;;;;67165:69;;;;-1:-1:-1;;;67165:69:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;67266:5;;67250:54;;;-1:-1:-1;;;;;67266:5:2;;;67250:54;;;;;;;;;;;;;;;;;;;;;;;;67330:14;67315:30;65325:2027;-1:-1:-1;;;;65325:2027:2:o;33292:541::-;33379:7;992:18:10;;1009:1;992:18;;;;33379:7:2;33414:16;:14;:16::i;:::-;33398:32;-1:-1:-1;33444:32:2;;33440:249;;33617:61;33628:5;33622:12;;;;;;;;33636:41;33617:4;:61::i;33440:249::-;33786:40;33798:10;33810:1;33813:12;33786:11;:40::i;18051:1247::-;-1:-1:-1;;;;;18402:23:2;;18128:9;18402:23;;;:14;:23;;;;;18626:24;;18128:9;;;;;;;;18622:90;;-1:-1:-1;18679:18:2;;-1:-1:-1;18679:18:2;;-1:-1:-1;18671:30:2;;-1:-1:-1;;;18671:30:2;18622:90;18934:46;18942:14;:24;;;18968:11;;18934:7;:46::i;:::-;18901:79;;-1:-1:-1;18901:79:2;-1:-1:-1;19005:18:2;18994:7;:29;;;;;;;;;18990:79;;-1:-1:-1;19047:7:2;;-1:-1:-1;19056:1:2;;-1:-1:-1;19039:19:2;;-1:-1:-1;;19039:19:2;18990:79;19099:58;19107:19;19128:14;:28;;;19099:7;:58::i;:::-;19079:78;;-1:-1:-1;19079:78:2;-1:-1:-1;19182:18:2;19171:7;:29;;;;;;;;;19167:79;;-1:-1:-1;19224:7:2;;-1:-1:-1;19233:1:2;;-1:-1:-1;19216:19:2;;-1:-1:-1;;19216:19:2;19167:79;-1:-1:-1;19264:18:2;;-1:-1:-1;19284:6:2;-1:-1:-1;;;18051:1247:2;;;;:::o;27090:540::-;27163:7;992:18:10;;1009:1;992:18;;;;27163:7:2;27198:16;:14;:16::i;:::-;27182:32;-1:-1:-1;27228:32:2;;27224:247;;27401:59;27412:5;27406:12;;;;;;;;27420:39;27401:4;:59::i;27224:247::-;27590:33;27600:10;27612;27590:9;:33::i;7385:198:7:-;7473:7;7497:49;7513:3;7505:12;;;;;;;;7527:4;7519:13;;;;;;;;7497:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;7572:3;7564:12;;;;;;;14028:94:2;14103:12;14028:94;:::o;1284:239:3:-;1346:9;1357:7;1385:1;1380;:6;1376:141;;-1:-1:-1;1410:18:3;;-1:-1:-1;1430:5:3;;;1402:34;;1376:141;-1:-1:-1;1475:27:3;;-1:-1:-1;1504:1:3;1467:39;;2024:352:8;2096:9;2107:10;;:::i;:::-;2130:14;2146:22;2172:27;2180:1;:10;;;2192:6;2172:7;:27::i;:::-;2129:70;;-1:-1:-1;2129:70:8;-1:-1:-1;2221:18:8;2213:4;:26;;;;;;;;;2209:90;;-1:-1:-1;2269:18:8;;;;;;;;;-1:-1:-1;2269:18:8;;2263:4;;-1:-1:-1;2269:18:8;-1:-1:-1;2255:33:8;;2209:90;2337:31;;;;;;;;;;;;-1:-1:-1;;2337:31:8;;-1:-1:-1;2024:352:8;-1:-1:-1;;;;2024:352:8:o;1603:262:3:-;1665:9;;1707:5;;;1727:6;;;1723:136;;1757:18;;-1:-1:-1;1777:1:3;-1:-1:-1;1749:30:3;;1723:136;-1:-1:-1;1818:26:3;;-1:-1:-1;1846:1:3;;-1:-1:-1;1810:38:3;;2936:358:8;3063:9;3074:7;3098:13;3113:18;;:::i;:::-;3135:20;3145:1;3148:6;3135:9;:20::i;:::-;3097:58;;-1:-1:-1;3097:58:8;-1:-1:-1;3176:18:8;3169:3;:25;;;;;;;;;3165:71;;-1:-1:-1;3218:3:8;-1:-1:-1;3223:1:8;;-1:-1:-1;3210:15:8;;3165:71;3253:34;3261:17;3270:7;3261:8;:17::i;:::-;3280:6;3253:7;:34::i;:::-;3246:41;;;;;;2936:358;;;;;;;:::o;3814:611::-;3897:9;3908:10;;:::i;:::-;4205:14;4221:17;4242:25;448:4;4260:6;4242:7;:25::i;:::-;4204:63;;-1:-1:-1;4204:63:8;-1:-1:-1;4289:18:8;4281:4;:26;;;;;;;;;4277:90;;-1:-1:-1;4337:18:8;;;;;;;;;-1:-1:-1;4337:18:8;;4331:4;;-1:-1:-1;4337:18:8;-1:-1:-1;4323:33:8;;4277:90;4383:35;4390:9;4401:7;:16;;;4383:6;:35::i;1716:224::-;1783:9;1794:10;;:::i;:::-;1817:15;1834:14;1852:31;1860:1;:10;;;1872:1;:10;;;1852:7;:31::i;:::-;1909:23;;;;;;;;;;;;1816:67;;1909:23;;-1:-1:-1;1716:224:8;-1:-1:-1;;;;;1716:224:8:o;6445:278::-;6527:9;6538:10;;:::i;:::-;6561:13;6576;;:::i;:::-;6593:12;6600:1;6603;6593:6;:12::i;:::-;6560:45;;-1:-1:-1;6560:45:8;-1:-1:-1;6626:18:8;6619:3;:25;;;;;;;;;6615:72;;6668:3;;-1:-1:-1;6673:2:8;-1:-1:-1;6660:16:8;;6615:72;6703:13;6710:2;6714:1;6703:6;:13::i;40146:528:2:-;40223:7;992:18:10;;1009:1;992:18;;;;40223:7:2;40258:16;:14;:16::i;:::-;40242:32;-1:-1:-1;40288:32:2;;40284:249;;40461:61;40472:5;40466:12;;;;;;;;40480:41;40461:4;:61::i;40284:249::-;40630:37;40642:10;40654:12;40630:11;:37::i;32413:531::-;32490:7;992:18:10;;1009:1;992:18;;;;32490:7:2;32525:16;:14;:16::i;:::-;32509:32;-1:-1:-1;32555:32:2;;32551:249;;32728:61;32739:5;32733:12;;;;;;;32551:249;32897:40;32909:10;32921:12;32935:1;32897:11;:40::i;68669:1328::-;68965:5;;68763:7;;;;-1:-1:-1;;;;;68965:5:2;68951:10;:19;68947:130;;68993:73;68998:18;69018:47;68993:4;:73::i;68947:130::-;69200:16;:14;:16::i;:::-;69178:18;;:38;69174:205;;69291:77;69296:22;69320:47;69291:4;:77::i;69174:205::-;69470:17;;;;;;;;;-1:-1:-1;;;;;69470:17:2;69447:40;;69587:20;-1:-1:-1;;;;;69587:40:2;;:42;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;69587:42:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;69587:42:2;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;69587:42:2;69579:83;;;;;-1:-1:-1;;;69579:83:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;69736:17;:40;;-1:-1:-1;;;;;;69736:40:2;-1:-1:-1;;;;;69736:40:2;;;;;;;;;69879:70;;;;;;;;;;;;;;;;;;;;;;;;;;;69975:14;69967:23;;51268:997;51420:7;992:18:10;;1009:1;992:18;;;;51420:7:2;51459:16;:14;:16::i;:::-;51443:32;-1:-1:-1;51489:32:2;;51485:264;;51667:71;51678:5;51672:12;;;;;;;;51686:51;51667:4;:71::i;51485:264::-;51767:16;-1:-1:-1;;;;;51767:31:2;;:33;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;51767:33:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;51767:33:2;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;51767:33:2;;-1:-1:-1;51814:32:2;;51810:268;;51992:75;52003:5;51997:12;;;;;;;;52011:55;51992:4;:75::i;51810:268::-;52185:73;52206:10;52218:8;52228:11;52241:16;52185:20;:73::i;:::-;52178:80;;;1101:13:10;;1085:12;:29;1077:52;;;;;-1:-1:-1;;;1077:52:10;;;;;;;;;;;;-1:-1:-1;;;1077:52:10;;;;;;;;;;;;;;63220:1015:2;63374:5;;63304:7;;-1:-1:-1;;;;;63374:5:2;63360:10;:19;63356:125;;63402:68;63407:18;63427:42;63402:4;:68::i;63356:125::-;63585:16;:14;:16::i;:::-;63563:18;;:38;63559:200;;63676:72;63681:22;63705:42;63676:4;:72::i;63559:200::-;1106:4;63828:24;:51;63824:155;;;63902:66;63907:15;63924:43;63902:4;:66::i;63824:155::-;64024:21;;;64055:48;;;;64119:68;;;;;;;;;;;;;;;;;;;;;;;;;64213:14;64205:23;;46777:4019;46958:11;;:75;;;-1:-1:-1;;;46958:75:2;;46997:4;46958:75;;;;-1:-1:-1;;;;;46958:75:2;;;;;;;;;;;;;;;;;;;;;;46875:7;;;;46958:11;;:30;;:75;;;;;;;;;;;;;;46875:7;46958:11;:75;;;5:2:-1;;;;30:1;27;20:12;5:2;46958:75:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;46958:75:2;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;46958:75:2;;-1:-1:-1;47047:12:2;;47043:146;;47082:96;47093:27;47122:46;47170:7;47082:10;:96::i;:::-;47075:103;;;;;47043:146;47296:16;:14;:16::i;:::-;47274:18;;:38;47270:146;;47335:70;47340:22;47364:40;47335:4;:70::i;47270:146::-;47426:32;;:::i;:::-;-1:-1:-1;;;;;47569:24:2;;;;;;:14;:24;;;;;:38;;;47548:18;;;:59;47735:37;47584:8;47735:27;:37::i;:::-;47712:19;;;47697:75;;;47698:12;;;47697:75;;;;;;;;;;;;;;;;;;;-1:-1:-1;47802:18:2;;-1:-1:-1;47786:4:2;:12;;;:34;;;;;;;;;47782:282;;47859:194;47891:16;47929:63;48022:4;:12;;;48014:21;;;;;;;47859:194;47836:217;;;;;;47782:282;-1:-1:-1;;48143:11:2;:26;48139:156;;;48204:19;;;;48185:16;;;:38;48139:156;;;48254:16;;;:30;;;48139:156;48360:40;48376:5;48383:4;:16;;;48360:15;:40::i;:::-;48349:4;;:51;;;;;;;;;;;;;;;;;;;;-1:-1:-1;48426:14:2;48414:8;;:26;;;;;;;;;48410:129;;48468:8;;48463:65;;48478:49;48463:4;:65::i;48410:129::-;48821:46;48829:4;:19;;;48850:4;:16;;;48821:7;:46::i;:::-;48795:22;;;48780:87;;;48781:12;;;48780:87;;;;;;;;;;;;;;;;;;;-1:-1:-1;48897:18:2;;-1:-1:-1;48881:4:2;:12;;;:34;;;;;;;;;48877:289;;48954:201;48986:16;49024:70;49124:4;:12;;;49116:21;;;;;;;48877:289;49215:39;49223:12;;49237:4;:16;;;49215:7;:39::i;:::-;49191:20;;;49176:78;;;49177:12;;;49176:78;;;;;;;;;;;;;;;;;;;-1:-1:-1;49284:18:2;;-1:-1:-1;49268:4:2;:12;;;:34;;;;;;;;;49264:280;;49341:192;49373:16;49411:61;49502:4;:12;;;49494:21;;;;;;;49264:280;50086:37;50099:5;50106:4;:16;;;50086:12;:37::i;:::-;50075:4;;:48;;;;;;;;;;;;;;;;;;;;-1:-1:-1;50153:14:2;50141:8;;:26;;;;;;;;;50133:70;;;;;-1:-1:-1;;;50133:70:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;50320:22;;;;;;-1:-1:-1;;;;;50283:24:2;;;;;;;:14;:24;;;;;;;;;:59;;;50393:11;;50352:38;;;;:52;;;;50429:20;;;;50414:12;:35;;;50536:16;;;;50554:22;;50507:92;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50649:11;;50711:16;;;;;50729:18;;;;50649:99;;-1:-1:-1;;;50649:99:2;;50687:4;50649:99;;;;-1:-1:-1;;;;;50649:99:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:11;;;:29;;:99;;;;;:11;;:99;;;;;;;;:11;;:99;;;5:2:-1;;;;30:1;27;20:12;5:2;50649:99:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;50774:14:2;;-1:-1:-1;50766:23:2;;-1:-1:-1;;50766:23:2;;50759:30;46777:4019;-1:-1:-1;;;;;;46777:4019:2:o;1929:278:3:-;2009:9;2020:7;2040:14;2056:11;2071:13;2079:1;2082;2071:7;:13::i;:::-;2039:45;;-1:-1:-1;2039:45:3;-1:-1:-1;2107:18:3;2099:4;:26;;;;;;;;;2095:73;;-1:-1:-1;2149:4:3;-1:-1:-1;2155:1:3;;-1:-1:-1;2141:16:3;;2095:73;2185:15;2193:3;2198:1;2185:7;:15::i;800:515:8:-;867:9;878:10;;:::i;:::-;901:14;917:23;944:22;952:3;448:4;944:7;:22::i;:::-;900:66;;-1:-1:-1;900:66:8;-1:-1:-1;988:18:8;980:4;:26;;;;;;;;;976:90;;-1:-1:-1;1036:18:8;;;;;;;;;-1:-1:-1;1036:18:8;;1030:4;;-1:-1:-1;1036:18:8;-1:-1:-1;1022:33:8;;976:90;1077:14;1093:16;1113:31;1121:15;1138:5;1113:7;:31::i;:::-;1076:68;;-1:-1:-1;1076:68:8;-1:-1:-1;1166:18:8;1158:4;:26;;;;;;;;;1154:90;;-1:-1:-1;1214:18:8;;;;;;;;;-1:-1:-1;1214:18:8;;1208:4;;-1:-1:-1;1214:18:8;-1:-1:-1;1200:33:8;;-1:-1:-1;;1200:33:8;1154:90;1282:25;;;;;;;;;;;;-1:-1:-1;;1282:25:8;;-1:-1:-1;800:515:8;-1:-1:-1;;;;;;800:515:8:o;7251:213::-;7434:12;448:4;7434:23;;;7251:213::o;8117:1008:0:-;8271:10;;8314:26;;;-1:-1:-1;;;8314:26:0;;-1:-1:-1;;;;;8314:26:0;;;;;;;;;;;;;;;8194:5;;8271:10;;;;;8194:5;;8271:10;;8314:14;;:26;;;;;8194:5;;8314:26;;;;;;;;8194:5;8271:10;8314:26;;;5:2:-1;;;;30:1;27;20:12;5:2;8314:26:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;8314:26:0;;;;8445:14;8481:1;8476:138;;;;8636:2;8631:207;;;;8971:1;8968;8961:12;8476:138;-1:-1:-1;;8568:6:0;-1:-1:-1;8476:138:0;;8631:207;8732:2;8729:1;8726;8711:24;8772:1;8766:8;8756:18;;8438:553;;9016:6;9011:76;;9045:31;9038:38;;;;;;9011:76;-1:-1:-1;9104:14:0;;8117:1008;-1:-1:-1;;;;8117:1008:0:o;34691:5194:2:-;34820:7;34851:19;;;:42;;-1:-1:-1;34874:19:2;;34851:42;34843:107;;;;-1:-1:-1;;;34843:107:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34961:27;;:::i;:::-;35102:28;:26;:28::i;:::-;35073:25;;;35058:72;;;35059:12;;;35058:72;;;;;;;;;;;;;;;;;;;-1:-1:-1;35160:18:2;;-1:-1:-1;35144:4:2;:12;;;:34;;;;;;;;;35140:169;;35201:97;35212:16;35230:44;35284:4;:12;;;35276:21;;;;;;;35140:169;35360:18;;35356:1591;;35630:17;;;:34;;;35750:42;;;;;;;;35765:25;;;;35750:42;;35715:123;;35650:14;35715:17;:123::i;:::-;35694:17;;;35679:159;;;35680:12;;;35679:159;;;;;;;;;;;;;;;;;;;-1:-1:-1;35872:18:2;;-1:-1:-1;35856:4:2;:12;;;:34;;;;;;;;;35852:300;;35937:200;35973:16;36015:53;36102:4;:12;;;36094:21;;;;;;;35852:300;35356:1591;;;36446:128;36486:14;36518:42;;;;;;;;36533:4;:25;;;36518:42;;;36446:22;:128::i;:::-;36425:17;;;36410:164;;;36411:12;;;36410:164;;;;;;;;;;;;;;;;;;;-1:-1:-1;36608:18:2;;-1:-1:-1;36592:4:2;:12;;;:34;;;;;;;;;36588:300;;36673:200;36709:16;36751:53;36838:4;:12;;;36830:21;;;;;;;36588:300;36902:17;;;:34;;;35356:1591;37016:11;;37067:17;;;;37016:69;;;-1:-1:-1;;;37016:69:2;;37050:4;37016:69;;;;-1:-1:-1;;;;;37016:69:2;;;;;;;;;;;;;;;;36998:15;;37016:11;;;;;:25;;:69;;;;;;;;;;;;;;;36998:15;37016:11;:69;;;5:2:-1;;;;30:1;27;20:12;5:2;37016:69:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;37016:69:2;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;37016:69:2;;-1:-1:-1;37099:12:2;;37095:140;;37134:90;37145:27;37174:40;37216:7;37134:10;:90::i;37095:140::-;37342:16;:14;:16::i;:::-;37320:18;;:38;37316:140;;37381:64;37386:22;37410:34;37381:4;:64::i;37316:140::-;37744:39;37752:11;;37765:4;:17;;;37744:7;:39::i;:::-;37721:19;;;37706:77;;;37707:12;;;37706:77;;;;;;;;;;;;;;;;;;;-1:-1:-1;37813:18:2;;-1:-1:-1;37797:4:2;:12;;;:34;;;;;;;;;37793:273;;37870:185;37902:16;37940:54;38024:4;:12;;;38016:21;;;;;;;37793:273;-1:-1:-1;;;;;38124:23:2;;;;;;:13;:23;;;;;;38149:17;;;;38116:51;;38124:23;38116:7;:51::i;:::-;38091:21;;;38076:91;;;38077:12;;;38076:91;;;;;;;;;;;;;;;;;;;-1:-1:-1;38197:18:2;;-1:-1:-1;38181:4:2;:12;;;:34;;;;;;;;;38177:276;;38254:188;38286:16;38324:57;38411:4;:12;;;38403:21;;;;;;;38177:276;38548:4;:17;;;38531:14;:12;:14::i;:::-;:34;38527:153;;;38588:81;38593:29;38624:44;38588:4;:81::i;38527:153::-;39221:42;39235:8;39245:4;:17;;;39221:13;:42::i;:::-;39210:4;;:53;;;;;;;;;;;;;;;;;;;;-1:-1:-1;39293:14:2;39281:8;;:26;;;;;;;;;39273:65;;;;;-1:-1:-1;;;39273:65:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;39428:19;;;;39414:11;:33;39483:21;;;;-1:-1:-1;;;;;39457:23:2;;;;;;:13;:23;;;;;;;;;:47;;;;39613:17;;;;39579:52;;;;;;;39606:4;;-1:-1:-1;;;;;;;;;;;39579:52:2;;;;;;;39663:17;;;;39682;;;;;39646:54;;;-1:-1:-1;;;;;39646:54:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39750:11;;39800:17;;;;39819;;;;39750:87;;;-1:-1:-1;;;39750:87:2;;39783:4;39750:87;;;;-1:-1:-1;;;;;39750:87:2;;;;;;;;;;;;;;;;;;;;;;:11;;;;;:24;;:87;;;;;:11;;:87;;;;;;;:11;;:87;;;5:2:-1;;;;30:1;27;20:12;503:343:3;565:9;;599:6;595:67;;-1:-1:-1;629:18:3;;-1:-1:-1;629:18:3;621:30;;595:67;684:5;;;688:1;684;:5;:1;704:5;;;;;:10;700:140;;-1:-1:-1;738:26:3;;-1:-1:-1;766:1:3;;-1:-1:-1;730:38:3;;700:140;807:18;;-1:-1:-1;827:1:3;-1:-1:-1;799:30:3;;936:218;998:9;;1032:6;1028:75;;-1:-1:-1;1062:26:3;;-1:-1:-1;1090:1:3;1054:38;;1028:75;1121:18;1145:1;1141;:5;;;;;;1113:34;;;;936:218;;;;;:::o;28262:3808:2:-;28411:11;;:58;;;-1:-1:-1;;;28411:58:2;;28443:4;28411:58;;;;-1:-1:-1;;;;;28411:58:2;;;;;;;;;;;;;;;28335:7;;;;28411:11;;:23;;:58;;;;;;;;;;;;;;28335:7;28411:11;:58;;;5:2:-1;;;;30:1;27;20:12;5:2;28411:58:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;28411:58:2;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;28411:58:2;;-1:-1:-1;28483:12:2;;28479:138;;28518:88;28529:27;28558:38;28598:7;28518:10;:88::i;:::-;28511:95;;;;;28479:138;28724:16;:14;:16::i;:::-;28702:18;;:38;28698:138;;28763:62;28768:22;28792:32;28763:4;:62::i;28698:138::-;28846:25;;:::i;:::-;28937:35;28953:6;28961:10;28937:15;:35::i;:::-;28926:4;;:46;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28998:14:2;28986:8;;:26;;;;;;;;;28982:121;;29040:8;;29035:57;;29050:41;29035:4;:57::i;:::-;29028:64;;;;;;28982:121;29325:28;:26;:28::i;:::-;29296:25;;;29281:72;;;29282:12;;;29281:72;;;;;;;;;;;;;;;;;;;-1:-1:-1;29383:18:2;;-1:-1:-1;29367:4:2;:12;;;:34;;;;;;;;;29363:167;;29424:95;29435:16;29453:42;29505:4;:12;;;29497:21;;;;;;;29363:167;29574:112;29610:10;29634:42;;;;;;;;29649:4;:25;;;29634:42;;;29574:22;:112::i;:::-;29555:15;;;29540:146;;;29541:12;;;29540:146;;;;;;;;;;;;;;;;;;;-1:-1:-1;29716:18:2;;-1:-1:-1;29700:4:2;:12;;;:34;;;;;;;;;29696:169;;29757:97;29768:16;29786:44;29840:4;:12;;;29832:21;;;;;;;29696:169;30161:37;30169:11;;30182:4;:15;;;30161:7;:37::i;:::-;30138:19;;;30123:75;;;30124:12;;;30123:75;;;;;;;;;;;;;;;;;;;-1:-1:-1;30228:18:2;;-1:-1:-1;30212:4:2;:12;;;:34;;;;;;;;;30208:271;;30285:183;30317:16;30355:52;30437:4;:12;;;30429:21;;;;;;;30208:271;-1:-1:-1;;;;;30537:21:2;;;;;;:13;:21;;;;;;30560:15;;;;30529:47;;30537:21;30529:7;:47::i;:::-;30504:21;;;30489:87;;;30490:12;;;30489:87;;;;;;;;;;;;;;;;;;;-1:-1:-1;30606:18:2;;-1:-1:-1;30590:4:2;:12;;;:34;;;;;;;;;30586:274;;30663:186;30695:16;30733:55;30818:4;:12;;;30810:21;;;;;;;30586:274;31401:32;31414:6;31422:10;31401:12;:32::i;:::-;31390:4;;:43;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31459:14:2;31447:8;;:26;;;;;;;;;31443:115;;31501:8;;31496:51;;31511:35;31496:4;:51::i;31443:115::-;31647:19;;;;31633:11;:33;31700:21;;;;-1:-1:-1;;;;;31676:21:2;;;;;;:13;:21;;;;;;;;;:45;;;;31819:15;;;;;31794:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31882:15;;;;31850:48;;;;;;;-1:-1:-1;;;;;31850:48:2;;;31867:4;;-1:-1:-1;;;;;;;;;;;31850:48:2;;;;;;;;31948:11;;32006:15;;;;31948:74;;;-1:-1:-1;;;31948:74:2;;31979:4;31948:74;;;;-1:-1:-1;;;;;31948:74:2;;;;;;;;;;;;;;;;;;;;;;:11;;;;;:22;;:74;;;;;:11;;:74;;;;;;;:11;;:74;;;5:2:-1;;;;30:1;27;20:12;5:2;31948:74:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;32048:14:2;;-1:-1:-1;32040:23:2;;-1:-1:-1;;32040:23:2;;32033:30;28262:3808;-1:-1:-1;;;;;28262:3808:2:o;4959:1124:8:-;5026:9;5037:10;;:::i;:::-;5060:14;5076:27;5107:31;5115:1;:10;;;5127:1;:10;;;5107:7;:31::i;:::-;5059:79;;-1:-1:-1;5059:79:8;-1:-1:-1;5160:18:8;5152:4;:26;;;;;;;;;5148:90;;-1:-1:-1;5208:18:8;;;;;;;;;-1:-1:-1;5208:18:8;;5202:4;;-1:-1:-1;5208:18:8;-1:-1:-1;5194:33:8;;5148:90;5550:14;;5610:42;490:12;5632:19;5610:7;:42::i;:::-;5549:103;;-1:-1:-1;5549:103:8;-1:-1:-1;5674:18:8;5666:4;:26;;;;;;;;;5662:90;;-1:-1:-1;5722:18:8;;;;;;;;;-1:-1:-1;5722:18:8;;5716:4;;-1:-1:-1;5722:18:8;-1:-1:-1;5708:33:8;;-1:-1:-1;;5708:33:8;5662:90;5763:14;5779:15;5798:51;5806:32;448:4;5798:7;:51::i;:::-;5762:87;;-1:-1:-1;5762:87:8;-1:-1:-1;5993:18:8;5985:4;:26;;;;;;;;;5978:34;;;;6051:24;;;;;;;;;;;;-1:-1:-1;;6051:24:8;;-1:-1:-1;4959:1124:8;-1:-1:-1;;;;;;;;4959:1124:8:o;41115:3406:2:-;41280:11;;:64;;;-1:-1:-1;;;41280:64:2;;41314:4;41280:64;;;;-1:-1:-1;;;;;41280:64:2;;;;;;;;;;;;;;;41202:7;;;;41280:11;;:25;;:64;;;;;;;;;;;;;;41202:7;41280:11;:64;;;5:2:-1;;;;30:1;27;20:12;5:2;41280:64:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;41280:64:2;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;41280:64:2;;-1:-1:-1;41358:12:2;;41354:140;;41393:90;41404:27;41433:40;41475:7;41393:10;:90::i;41354:140::-;41601:16;:14;:16::i;:::-;41579:18;;:38;41575:140;;41640:64;41645:22;41669:34;41640:4;:64::i;41575:140::-;41821:12;41804:14;:12;:14::i;:::-;:29;41800:141;;;41856:74;41861:29;41892:37;41856:4;:74::i;41800:141::-;41951:27;;:::i;:::-;42259:37;42287:8;42259:27;:37::i;:::-;42236:19;;;42221:75;;;42222:12;;;42221:75;;;;;;;;;;;;;;;;;;;-1:-1:-1;42326:18:2;;-1:-1:-1;42310:4:2;:12;;;:34;;;;;;;;;42306:276;;42383:188;42415:16;42453:57;42540:4;:12;;;42532:21;;;;;;;42306:276;42633:42;42641:4;:19;;;42662:12;42633:7;:42::i;:::-;42607:22;;;42592:83;;;42593:12;;;42592:83;;;;;;;;;;;;;;;;;;;-1:-1:-1;42705:18:2;;-1:-1:-1;42689:4:2;:12;;;:34;;;;;;;;;42685:283;;42762:195;42794:16;42832:64;42926:4;:12;;;42918:21;;;;;;;42685:283;43017:35;43025:12;;43039;43017:7;:35::i;:::-;42993:20;;;42978:74;;;42979:12;;;42978:74;;;;;;;;;;;;;;;;;;;-1:-1:-1;43082:18:2;;-1:-1:-1;43066:4:2;:12;;;:34;;;;;;;;;43062:274;;43139:186;43171:16;43209:55;43294:4;:12;;;43286:21;;;;;;;43062:274;43873:37;43887:8;43897:12;43873:13;:37::i;:::-;43862:4;;:48;;;;;;;;;;;;;;;;;;;;-1:-1:-1;43940:14:2;43928:8;;:26;;;;;;;;;43920:65;;;;;-1:-1:-1;;;43920:65:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;44102:22;;;;;;-1:-1:-1;;;;;44065:24:2;;;;;;:14;:24;;;;;;;;;:59;;;44175:11;;44134:38;;;;:52;;;;44211:20;;;;;44196:12;:35;;;44315:22;;44284:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44410:11;;:63;;;-1:-1:-1;;;44410:63:2;;44443:4;44410:63;;;;-1:-1:-1;;;;;44410:63:2;;;;;;;;;;;;;;;:11;;;;;:24;;:63;;;;;:11;;:63;;;;;;;:11;;:63;;;5:2:-1;;;;30:1;27;20:12;52821:3468:2;53054:11;;:181;;;-1:-1:-1;;;53054:181:2;;53110:4;53054:181;;;;-1:-1:-1;;;;;53054:181:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52969:7;;;;53054:11;;:34;;:181;;;;;;;;;;;;;;52969:7;53054:11;:181;;;5:2:-1;;;;30:1;27;20:12;5:2;53054:181:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;53054:181:2;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;53054:181:2;;-1:-1:-1;53249:12:2;;53245:143;;53284:93;53295:27;53324:43;53369:7;53284:10;:93::i;53245:143::-;53495:16;:14;:16::i;:::-;53473:18;;:38;53469:143;;53534:67;53539:22;53563:37;53534:4;:67::i;53469:143::-;53755:16;:14;:16::i;:::-;53714;-1:-1:-1;;;;;53714:35:2;;:37;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;53714:37:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;53714:37:2;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;53714:37:2;:57;53710:173;;53794:78;53799:22;53823:48;53794:4;:78::i;53710:173::-;53953:10;-1:-1:-1;;;;;53941:22:2;:8;-1:-1:-1;;;;;53941:22:2;;53937:138;;;53986:78;53991:26;54019:44;53986:4;:78::i;53937:138::-;54127:16;54123:140;;54166:86;54171:36;54209:42;54166:4;:86::i;54123:140::-;-1:-1:-1;;54316:11:2;:26;54312:154;;;54365:90;54370:36;54408:46;54365:4;:90::i;54312:154::-;54605:11;;:142;;;-1:-1:-1;;;54605:142:2;;54668:4;54605:142;;;;-1:-1:-1;;;;;54605:142:2;;;;;;;;;;;;;;;54556:24;;;;54605:11;;;:41;;:142;;;;;;;;;;;;:11;:142;;;5:2:-1;;;;30:1;27;20:12;5:2;54605:142:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;54605:142:2;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;54605:142:2;;;;;;;;;-1:-1:-1;54605:142:2;-1:-1:-1;54761:21:2;;54757:283;;54821:208;54853:35;54910:63;54995:16;54821:10;:208::i;:::-;54798:231;;;;;;;54757:283;55138:16;-1:-1:-1;;;;;55138:26:2;;55165:8;55138:36;;;;;;;;;;;;;-1:-1:-1;;;;;55138:36:2;-1:-1:-1;;;;;55138:36:2;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;55138:36:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;55138:36:2;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;55138:36:2;55124:50;;55120:164;;;55197:76;55202:32;55236:36;55197:4;:76::i;55120:164::-;55334:24;55361:51;55378:10;55390:8;55400:11;55361:16;:51::i;:::-;55334:78;-1:-1:-1;55426:43:2;;55422:159;;55492:78;55503:16;55497:23;;;;;;;;55522:47;55492:4;:78::i;:::-;55485:85;;;;;;;;55422:159;55697:57;;;-1:-1:-1;;;55697:57:2;;-1:-1:-1;;;;;55697:57:2;;;;;;;;;;;;;;;;;;;;;;55676:18;;55697:22;;;;;:57;;;;;;;;;;;;;;55676:18;55697:22;:57;;;5:2:-1;;;;30:1;27;20:12;5:2;55697:57:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;55697:57:2;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;55697:57:2;;-1:-1:-1;55772:37:2;;55764:70;;;;;-1:-1:-1;;;55764:70:2;;;;;;;;;;;;-1:-1:-1;;;55764:70:2;;;;;;;;;;;;;;;55896:90;;;-1:-1:-1;;;;;55896:90:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;56036:11;;:205;;;-1:-1:-1;;;56036:205:2;;56091:4;56036:205;;;;-1:-1:-1;;;;;56036:205:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:11;;;;;:33;;:205;;;;;:11;;:205;;;;;;;:11;;:205;;;5:2:-1;;;;30:1;27;20:12;5:2;56036:205:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;56267:14:2;;-1:-1:-1;56259:23:2;;-1:-1:-1;;56259:23:2;;56252:30;52821:3468;-1:-1:-1;;;;;;;;;;52821:3468:2:o;5289:420:0:-;5422:10;;5448:36;;;-1:-1:-1;;;5448:36:0;;-1:-1:-1;;;;;5448:36:0;;;;;;;5478:4;5448:36;;;;;;5367:5;;5422:10;;;;;5487:6;;5422:10;;5448:15;;:36;;;;;;;;;;;;;;;5422:10;5448:36;;;5:2:-1;;;;30:1;27;20:12;5:2;5448:36:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;5448:36:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5448:36:0;:45;5444:117;;;5516:34;5509:41;;;;;5444:117;5599:6;5575:5;-1:-1:-1;;;;;5575:15:0;;5591:4;5575:21;;;;;;;;;;;;;-1:-1:-1;;;;;5575:21:0;-1:-1:-1;;;;;5575:21:0;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5575:21:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;5575:21:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5575:21:0;:30;5571:100;;;5628:32;5621:39;;;;;5571:100;-1:-1:-1;5688:14:0;;5289:420;-1:-1:-1;;;5289:420:0:o;6404:1021::-;6551:10;;6594:47;;;-1:-1:-1;;;6594:47:0;;-1:-1:-1;;;;;6594:47:0;;;;;;;6627:4;6594:47;;;;;;;;;;;;6474:5;;6551:10;;;;;6474:5;;6551:10;;6594:18;;:47;;;;;6474:5;;6594:47;;;;;;;;6474:5;6551:10;6594:47;;;5:2:-1;;;;30:1;27;20:12;5:2;6594:47:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;6594:47:0;;;;6746:14;6782:1;6777:138;;;;6937:2;6932:207;;;;7272:1;7269;7262:12;6777:138;-1:-1:-1;;6869:6:0;-1:-1:-1;6777:138:0;;6932:207;7033:2;7030:1;7027;7012:24;7073:1;7067:8;7057:18;;6739:553;;7317:6;7312:75;;7346:30;7339:37;;;;;;4531:336:8;4622:9;4633:7;4653:13;4668:19;;:::i;:::-;4691:31;4706:6;4714:7;4691:14;:31::i;207:8920:0:-;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;-1:-1:-1;207:8920:0;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;-1:-1:-1;207:8920:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;-1:-1:-1;207:8920:0;;;;;;;;;;;;;;;;;;-1:-1:-1;207:8920:0;;;;;;;;;;;;;;;;;;;;;;;;:::o",
  "source": "pragma solidity ^0.5.8;\n\nimport \"./EIP20NonStandardInterface.sol\";\nimport \"./CToken.sol\";\n\n/**\n * @title Compound's CErc20 Contract\n * @notice CTokens which wrap an EIP-20 underlying\n * @author Compound\n */\ncontract CErc20 is CToken {\n    /**\n     * @notice Underlying asset for this CToken\n     */\n    address public underlying;\n\n    /**\n     * @notice Construct a new money market\n     * @param underlying_ The address of the underlying asset\n     * @param comptroller_ The address of the Comptroller\n     * @param interestRateModel_ The address of the interest rate model\n     * @param initialExchangeRateMantissa_ The initial exchange rate, scaled by 1e18\n     * @param name_ ERC-20 name of this token\n     * @param symbol_ ERC-20 symbol of this token\n     * @param decimals_ ERC-20 decimal precision of this token\n     */\n    constructor(\n        address underlying_,\n        ComptrollerInterface comptroller_,\n        InterestRateModel interestRateModel_,\n        uint256 initialExchangeRateMantissa_,\n        string memory name_,\n        string memory symbol_,\n        uint256 decimals_\n    ) public CToken(comptroller_, interestRateModel_, initialExchangeRateMantissa_, name_, symbol_, decimals_) {\n        // Set underlying\n        underlying = underlying_;\n        EIP20Interface(underlying).totalSupply(); // Sanity check the underlying\n    }\n\n    /*** User Interface ***/\n\n    /**\n     * @notice Sender supplies assets into the market and receives cTokens in exchange\n     * @dev Accrues interest whether or not the operation succeeds, unless reverted\n     * @param mintAmount The amount of the underlying asset to supply\n     * @return uint 0=success, otherwise a failure (see ErrorReporter.sol for details)\n     */\n    function mint(uint256 mintAmount) external returns (uint256) {\n        return mintInternal(mintAmount);\n    }\n\n    /**\n     * @notice Sender redeems cTokens in exchange for the underlying asset\n     * @dev Accrues interest whether or not the operation succeeds, unless reverted\n     * @param redeemTokens The number of cTokens to redeem into underlying\n     * @return uint 0=success, otherwise a failure (see ErrorReporter.sol for details)\n     */\n    function redeem(uint256 redeemTokens) external returns (uint256) {\n        return redeemInternal(redeemTokens);\n    }\n\n    /**\n     * @notice Sender redeems cTokens in exchange for a specified amount of underlying asset\n     * @dev Accrues interest whether or not the operation succeeds, unless reverted\n     * @param redeemAmount The amount of underlying to redeem\n     * @return uint 0=success, otherwise a failure (see ErrorReporter.sol for details)\n     */\n    function redeemUnderlying(uint256 redeemAmount) external returns (uint256) {\n        return redeemUnderlyingInternal(redeemAmount);\n    }\n\n    /**\n      * @notice Sender borrows assets from the protocol to their own address\n      * @param borrowAmount The amount of the underlying asset to borrow\n      * @return uint 0=success, otherwise a failure (see ErrorReporter.sol for details)\n      */\n    function borrow(uint256 borrowAmount) external returns (uint256) {\n        return borrowInternal(borrowAmount);\n    }\n\n    /**\n     * @notice Sender repays their own borrow\n     * @param repayAmount The amount to repay\n     * @return uint 0=success, otherwise a failure (see ErrorReporter.sol for details)\n     */\n    function repayBorrow(uint256 repayAmount) external returns (uint256) {\n        return repayBorrowInternal(repayAmount);\n    }\n\n    /**\n     * @notice Sender repays a borrow belonging to borrower\n     * @param borrower the account with the debt being payed off\n     * @param repayAmount The amount to repay\n     * @return uint 0=success, otherwise a failure (see ErrorReporter.sol for details)\n     */\n    function repayBorrowBehalf(address borrower, uint256 repayAmount) external returns (uint256) {\n        return repayBorrowBehalfInternal(borrower, repayAmount);\n    }\n\n    /**\n     * @notice The sender liquidates the borrowers collateral.\n     *  The collateral seized is transferred to the liquidator.\n     * @param borrower The borrower of this cToken to be liquidated\n     * @param cTokenCollateral The market in which to seize collateral from the borrower\n     * @param repayAmount The amount of the underlying borrowed asset to repay\n     * @return uint 0=success, otherwise a failure (see ErrorReporter.sol for details)\n     */\n    function liquidateBorrow(address borrower, uint256 repayAmount, CToken cTokenCollateral)\n        external\n        returns (uint256)\n    {\n        return liquidateBorrowInternal(borrower, repayAmount, cTokenCollateral);\n    }\n\n    /*** Safe Token ***/\n\n    /**\n     * @notice Gets balance of this contract in terms of the underlying\n     * @dev This excludes the value of the current message, if any\n     * @return The quantity of underlying tokens owned by this contract\n     */\n    function getCashPrior() internal view returns (uint256) {\n        EIP20Interface token = EIP20Interface(underlying);\n        return token.balanceOf(address(this));\n    }\n\n    /**\n     * @dev Checks whether or not there is sufficient allowance for this contract to move amount from `from` and\n     *      whether or not `from` has a balance of at least `amount`. Does NOT do a transfer.\n     */\n    function checkTransferIn(address from, uint256 amount) internal view returns (Error) {\n        EIP20Interface token = EIP20Interface(underlying);\n\n        if (token.allowance(from, address(this)) < amount) {\n            return Error.TOKEN_INSUFFICIENT_ALLOWANCE;\n        }\n\n        if (token.balanceOf(from) < amount) {\n            return Error.TOKEN_INSUFFICIENT_BALANCE;\n        }\n\n        return Error.NO_ERROR;\n    }\n\n    /**\n     * @dev Similar to EIP20 transfer, except it handles a False result from `transferFrom` and returns an explanatory\n     *      error code rather than reverting.  If caller has not called `checkTransferIn`, this may revert due to\n     *      insufficient balance or insufficient allowance. If caller has called `checkTransferIn` prior to this call,\n     *      and it returned Error.NO_ERROR, this should not revert in normal conditions.\n     *\n     *      Note: This wrapper safely handles non-standard ERC-20 tokens that do not return a value.\n     *            See here: https://medium.com/coinmonks/missing-return-value-bug-at-least-130-tokens-affected-d67bf08521ca\n     */\n    function doTransferIn(address from, uint256 amount) internal returns (Error) {\n        EIP20NonStandardInterface token = EIP20NonStandardInterface(underlying);\n        bool result;\n\n        token.transferFrom(from, address(this), amount);\n\n        // solium-disable-next-line security/no-inline-assembly\n        assembly {\n            switch returndatasize\n                case 0 {\n                    // This is a non-standard ERC-20\n                    result := not(0) // set result to true\n                }\n                case 32 {\n                    // This is a complaint ERC-20\n                    returndatacopy(0, 0, 32)\n                    result := mload(0) // Set `result = returndata` of external call\n                }\n                default {\n                    // This is an excessively non-compliant ERC-20, revert.\n                    revert(0, 0)\n                }\n        }\n\n        if (!result) {\n            return Error.TOKEN_TRANSFER_IN_FAILED;\n        }\n\n        return Error.NO_ERROR;\n    }\n\n    /**\n     * @dev Similar to EIP20 transfer, except it handles a False result from `transfer` and returns an explanatory\n     *      error code rather than reverting. If caller has not called checked protocol's balance, this may revert due to\n     *      insufficient cash held in this contract. If caller has checked protocol's balance prior to this call, and verified\n     *      it is >= amount, this should not revert in normal conditions.\n     *\n     *      Note: This wrapper safely handles non-standard ERC-20 tokens that do not return a value.\n     *            See here: https://medium.com/coinmonks/missing-return-value-bug-at-least-130-tokens-affected-d67bf08521ca\n     */\n    function doTransferOut(address payable to, uint256 amount) internal returns (Error) {\n        EIP20NonStandardInterface token = EIP20NonStandardInterface(underlying);\n        bool result;\n\n        token.transfer(to, amount);\n\n        // solium-disable-next-line security/no-inline-assembly\n        assembly {\n            switch returndatasize\n                case 0 {\n                    // This is a non-standard ERC-20\n                    result := not(0) // set result to true\n                }\n                case 32 {\n                    // This is a complaint ERC-20\n                    returndatacopy(0, 0, 32)\n                    result := mload(0) // Set `result = returndata` of external call\n                }\n                default {\n                    // This is an excessively non-compliant ERC-20, revert.\n                    revert(0, 0)\n                }\n        }\n\n        if (!result) {\n            return Error.TOKEN_TRANSFER_OUT_FAILED;\n        }\n\n        return Error.NO_ERROR;\n    }\n}\n",
  "sourcePath": "/home/runner/work/rtoken-contracts/rtoken-contracts/packages/contracts/compound/contracts/CErc20.sol",
  "ast": {
    "absolutePath": "/home/runner/work/rtoken-contracts/rtoken-contracts/packages/contracts/compound/contracts/CErc20.sol",
    "exportedSymbols": {
      "CErc20": [
        277
      ]
    },
    "id": 278,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 1,
        "literals": [
          "solidity",
          "^",
          "0.5",
          ".8"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:0"
      },
      {
        "absolutePath": "/home/runner/work/rtoken-contracts/rtoken-contracts/packages/contracts/compound/contracts/EIP20NonStandardInterface.sol",
        "file": "./EIP20NonStandardInterface.sol",
        "id": 2,
        "nodeType": "ImportDirective",
        "scope": 278,
        "sourceUnit": 4951,
        "src": "25:41:0",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/runner/work/rtoken-contracts/rtoken-contracts/packages/contracts/compound/contracts/CToken.sol",
        "file": "./CToken.sol",
        "id": 3,
        "nodeType": "ImportDirective",
        "scope": 278,
        "sourceUnit": 4423,
        "src": "67:22:0",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 4,
              "name": "CToken",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 4422,
              "src": "226:6:0",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_CToken_$4422",
                "typeString": "contract CToken"
              }
            },
            "id": 5,
            "nodeType": "InheritanceSpecifier",
            "src": "226:6:0"
          }
        ],
        "contractDependencies": [
          4422,
          4607,
          4885,
          5207,
          5798,
          5851
        ],
        "contractKind": "contract",
        "documentation": "@title Compound's CErc20 Contract\n@notice CTokens which wrap an EIP-20 underlying\n@author Compound",
        "fullyImplemented": true,
        "id": 277,
        "linearizedBaseContracts": [
          277,
          4422,
          5851,
          5207,
          5798,
          4607,
          4885
        ],
        "name": "CErc20",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "constant": false,
            "id": 7,
            "name": "underlying",
            "nodeType": "VariableDeclaration",
            "scope": 277,
            "src": "303:25:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 6,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "303:7:0",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 42,
              "nodeType": "Block",
              "src": "1205:148:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 34,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 32,
                      "name": "underlying",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7,
                      "src": "1241:10:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 33,
                      "name": "underlying_",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9,
                      "src": "1254:11:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "1241:24:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 35,
                  "nodeType": "ExpressionStatement",
                  "src": "1241:24:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 37,
                            "name": "underlying",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7,
                            "src": "1290:10:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 36,
                          "name": "EIP20Interface",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4885,
                          "src": "1275:14:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_EIP20Interface_$4885_$",
                            "typeString": "type(contract EIP20Interface)"
                          }
                        },
                        "id": 38,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1275:26:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_EIP20Interface_$4885",
                          "typeString": "contract EIP20Interface"
                        }
                      },
                      "id": 39,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "totalSupply",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 4823,
                      "src": "1275:38:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$",
                        "typeString": "function () view external returns (uint256)"
                      }
                    },
                    "id": 40,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1275:40:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 41,
                  "nodeType": "ExpressionStatement",
                  "src": "1275:40:0"
                }
              ]
            },
            "documentation": "@notice Construct a new money market\n@param underlying_ The address of the underlying asset\n@param comptroller_ The address of the Comptroller\n@param interestRateModel_ The address of the interest rate model\n@param initialExchangeRateMantissa_ The initial exchange rate, scaled by 1e18\n@param name_ ERC-20 name of this token\n@param symbol_ ERC-20 symbol of this token\n@param decimals_ ERC-20 decimal precision of this token",
            "id": 43,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 24,
                    "name": "comptroller_",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 11,
                    "src": "1114:12:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ComptrollerInterface_$4816",
                      "typeString": "contract ComptrollerInterface"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 25,
                    "name": "interestRateModel_",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 13,
                    "src": "1128:18:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_InterestRateModel_$5819",
                      "typeString": "contract InterestRateModel"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 26,
                    "name": "initialExchangeRateMantissa_",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 15,
                    "src": "1148:28:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 27,
                    "name": "name_",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 17,
                    "src": "1178:5:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_memory_ptr",
                      "typeString": "string memory"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 28,
                    "name": "symbol_",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 19,
                    "src": "1185:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_memory_ptr",
                      "typeString": "string memory"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 29,
                    "name": "decimals_",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 21,
                    "src": "1194:9:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                ],
                "id": 30,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 23,
                  "name": "CToken",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 4422,
                  "src": "1107:6:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_type$_t_contract$_CToken_$4422_$",
                    "typeString": "type(contract CToken)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "1107:97:0"
              }
            ],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 22,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9,
                  "name": "underlying_",
                  "nodeType": "VariableDeclaration",
                  "scope": 43,
                  "src": "852:19:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "852:7:0",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 11,
                  "name": "comptroller_",
                  "nodeType": "VariableDeclaration",
                  "scope": 43,
                  "src": "881:33:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ComptrollerInterface_$4816",
                    "typeString": "contract ComptrollerInterface"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 10,
                    "name": "ComptrollerInterface",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 4816,
                    "src": "881:20:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ComptrollerInterface_$4816",
                      "typeString": "contract ComptrollerInterface"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13,
                  "name": "interestRateModel_",
                  "nodeType": "VariableDeclaration",
                  "scope": 43,
                  "src": "924:36:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_InterestRateModel_$5819",
                    "typeString": "contract InterestRateModel"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 12,
                    "name": "InterestRateModel",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 5819,
                    "src": "924:17:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_InterestRateModel_$5819",
                      "typeString": "contract InterestRateModel"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 15,
                  "name": "initialExchangeRateMantissa_",
                  "nodeType": "VariableDeclaration",
                  "scope": 43,
                  "src": "970:36:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 14,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "970:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17,
                  "name": "name_",
                  "nodeType": "VariableDeclaration",
                  "scope": 43,
                  "src": "1016:19:0",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 16,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1016:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 19,
                  "name": "symbol_",
                  "nodeType": "VariableDeclaration",
                  "scope": 43,
                  "src": "1045:21:0",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 18,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1045:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 21,
                  "name": "decimals_",
                  "nodeType": "VariableDeclaration",
                  "scope": 43,
                  "src": "1076:17:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 20,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1076:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "842:257:0"
            },
            "returnParameters": {
              "id": 31,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1205:0:0"
            },
            "scope": 277,
            "src": "831:522:0",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 54,
              "nodeType": "Block",
              "src": "1794:48:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 51,
                        "name": "mintAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 45,
                        "src": "1824:10:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 50,
                      "name": "mintInternal",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2150,
                      "src": "1811:12:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256) returns (uint256)"
                      }
                    },
                    "id": 52,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1811:24:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 49,
                  "id": 53,
                  "nodeType": "Return",
                  "src": "1804:31:0"
                }
              ]
            },
            "documentation": "@notice Sender supplies assets into the market and receives cTokens in exchange\n@dev Accrues interest whether or not the operation succeeds, unless reverted\n@param mintAmount The amount of the underlying asset to supply\n@return uint 0=success, otherwise a failure (see ErrorReporter.sol for details)",
            "id": 55,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "mint",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 46,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 45,
                  "name": "mintAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 55,
                  "src": "1747:18:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 44,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1747:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1746:20:0"
            },
            "returnParameters": {
              "id": 49,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 48,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 55,
                  "src": "1785:7:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 47,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1785:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1784:9:0"
            },
            "scope": 277,
            "src": "1733:109:0",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 66,
              "nodeType": "Block",
              "src": "2250:52:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 63,
                        "name": "redeemTokens",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 57,
                        "src": "2282:12:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 62,
                      "name": "redeemInternal",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2467,
                      "src": "2267:14:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256) returns (uint256)"
                      }
                    },
                    "id": 64,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2267:28:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 61,
                  "id": 65,
                  "nodeType": "Return",
                  "src": "2260:35:0"
                }
              ]
            },
            "documentation": "@notice Sender redeems cTokens in exchange for the underlying asset\n@dev Accrues interest whether or not the operation succeeds, unless reverted\n@param redeemTokens The number of cTokens to redeem into underlying\n@return uint 0=success, otherwise a failure (see ErrorReporter.sol for details)",
            "id": 67,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "redeem",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 58,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 57,
                  "name": "redeemTokens",
                  "nodeType": "VariableDeclaration",
                  "scope": 67,
                  "src": "2201:20:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 56,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2201:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2200:22:0"
            },
            "returnParameters": {
              "id": 61,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 60,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 67,
                  "src": "2241:7:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 59,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2241:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2240:9:0"
            },
            "scope": 277,
            "src": "2185:117:0",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 78,
              "nodeType": "Block",
              "src": "2725:62:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 75,
                        "name": "redeemAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 69,
                        "src": "2767:12:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 74,
                      "name": "redeemUnderlyingInternal",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2505,
                      "src": "2742:24:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256) returns (uint256)"
                      }
                    },
                    "id": 76,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2742:38:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 73,
                  "id": 77,
                  "nodeType": "Return",
                  "src": "2735:45:0"
                }
              ]
            },
            "documentation": "@notice Sender redeems cTokens in exchange for a specified amount of underlying asset\n@dev Accrues interest whether or not the operation succeeds, unless reverted\n@param redeemAmount The amount of underlying to redeem\n@return uint 0=success, otherwise a failure (see ErrorReporter.sol for details)",
            "id": 79,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "redeemUnderlying",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 70,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 69,
                  "name": "redeemAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 79,
                  "src": "2676:20:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 68,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2676:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2675:22:0"
            },
            "returnParameters": {
              "id": 73,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 72,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 79,
                  "src": "2716:7:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 71,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2716:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2715:9:0"
            },
            "scope": 277,
            "src": "2650:137:0",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 90,
              "nodeType": "Block",
              "src": "3113:52:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 87,
                        "name": "borrowAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 81,
                        "src": "3145:12:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 86,
                      "name": "borrowInternal",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2877,
                      "src": "3130:14:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256) returns (uint256)"
                      }
                    },
                    "id": 88,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3130:28:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 85,
                  "id": 89,
                  "nodeType": "Return",
                  "src": "3123:35:0"
                }
              ]
            },
            "documentation": "@notice Sender borrows assets from the protocol to their own address\n@param borrowAmount The amount of the underlying asset to borrow\n@return uint 0=success, otherwise a failure (see ErrorReporter.sol for details)",
            "id": 91,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "borrow",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 82,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 81,
                  "name": "borrowAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 91,
                  "src": "3064:20:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 80,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3064:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3063:22:0"
            },
            "returnParameters": {
              "id": 85,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 84,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 91,
                  "src": "3104:7:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 83,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3104:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3103:9:0"
            },
            "scope": 277,
            "src": "3048:117:0",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 102,
              "nodeType": "Block",
              "src": "3435:56:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 99,
                        "name": "repayAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 93,
                        "src": "3472:11:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 98,
                      "name": "repayBorrowInternal",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3142,
                      "src": "3452:19:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256) returns (uint256)"
                      }
                    },
                    "id": 100,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3452:32:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 97,
                  "id": 101,
                  "nodeType": "Return",
                  "src": "3445:39:0"
                }
              ]
            },
            "documentation": "@notice Sender repays their own borrow\n@param repayAmount The amount to repay\n@return uint 0=success, otherwise a failure (see ErrorReporter.sol for details)",
            "id": 103,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "repayBorrow",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 94,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 93,
                  "name": "repayAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 103,
                  "src": "3387:19:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 92,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3387:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3386:21:0"
            },
            "returnParameters": {
              "id": 97,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 96,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 103,
                  "src": "3426:7:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 95,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3426:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3425:9:0"
            },
            "scope": 277,
            "src": "3366:125:0",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 117,
              "nodeType": "Block",
              "src": "3864:72:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 113,
                        "name": "borrower",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 105,
                        "src": "3907:8:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 114,
                        "name": "repayAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 107,
                        "src": "3917:11:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 112,
                      "name": "repayBorrowBehalfInternal",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3182,
                      "src": "3881:25:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (address,uint256) returns (uint256)"
                      }
                    },
                    "id": 115,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3881:48:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 111,
                  "id": 116,
                  "nodeType": "Return",
                  "src": "3874:55:0"
                }
              ]
            },
            "documentation": "@notice Sender repays a borrow belonging to borrower\n@param borrower the account with the debt being payed off\n@param repayAmount The amount to repay\n@return uint 0=success, otherwise a failure (see ErrorReporter.sol for details)",
            "id": 118,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "repayBorrowBehalf",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 108,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 105,
                  "name": "borrower",
                  "nodeType": "VariableDeclaration",
                  "scope": 118,
                  "src": "3798:16:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 104,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3798:7:0",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 107,
                  "name": "repayAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 118,
                  "src": "3816:19:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 106,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3816:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3797:39:0"
            },
            "returnParameters": {
              "id": 111,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 110,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 118,
                  "src": "3855:7:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 109,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3855:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3854:9:0"
            },
            "scope": 277,
            "src": "3771:165:0",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 135,
              "nodeType": "Block",
              "src": "4544:88:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 130,
                        "name": "borrower",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 120,
                        "src": "4585:8:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 131,
                        "name": "repayAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 122,
                        "src": "4595:11:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 132,
                        "name": "cTokenCollateral",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 124,
                        "src": "4608:16:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_CToken_$4422",
                          "typeString": "contract CToken"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_contract$_CToken_$4422",
                          "typeString": "contract CToken"
                        }
                      ],
                      "id": 129,
                      "name": "liquidateBorrowInternal",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3531,
                      "src": "4561:23:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_contract$_CToken_$4422_$returns$_t_uint256_$",
                        "typeString": "function (address,uint256,contract CToken) returns (uint256)"
                      }
                    },
                    "id": 133,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4561:64:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 128,
                  "id": 134,
                  "nodeType": "Return",
                  "src": "4554:71:0"
                }
              ]
            },
            "documentation": "@notice The sender liquidates the borrowers collateral.\n The collateral seized is transferred to the liquidator.\n@param borrower The borrower of this cToken to be liquidated\n@param cTokenCollateral The market in which to seize collateral from the borrower\n@param repayAmount The amount of the underlying borrowed asset to repay\n@return uint 0=success, otherwise a failure (see ErrorReporter.sol for details)",
            "id": 136,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "liquidateBorrow",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 125,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 120,
                  "name": "borrower",
                  "nodeType": "VariableDeclaration",
                  "scope": 136,
                  "src": "4433:16:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 119,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4433:7:0",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 122,
                  "name": "repayAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 136,
                  "src": "4451:19:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 121,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4451:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 124,
                  "name": "cTokenCollateral",
                  "nodeType": "VariableDeclaration",
                  "scope": 136,
                  "src": "4472:23:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_CToken_$4422",
                    "typeString": "contract CToken"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 123,
                    "name": "CToken",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 4422,
                    "src": "4472:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_CToken_$4422",
                      "typeString": "contract CToken"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4432:64:0"
            },
            "returnParameters": {
              "id": 128,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 127,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 136,
                  "src": "4531:7:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 126,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4531:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4530:9:0"
            },
            "scope": 277,
            "src": "4408:224:0",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 154,
              "nodeType": "Block",
              "src": "4947:113:0",
              "statements": [
                {
                  "assignments": [
                    142
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 142,
                      "name": "token",
                      "nodeType": "VariableDeclaration",
                      "scope": 154,
                      "src": "4957:20:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_EIP20Interface_$4885",
                        "typeString": "contract EIP20Interface"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 141,
                        "name": "EIP20Interface",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 4885,
                        "src": "4957:14:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_EIP20Interface_$4885",
                          "typeString": "contract EIP20Interface"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 146,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 144,
                        "name": "underlying",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7,
                        "src": "4995:10:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 143,
                      "name": "EIP20Interface",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4885,
                      "src": "4980:14:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_EIP20Interface_$4885_$",
                        "typeString": "type(contract EIP20Interface)"
                      }
                    },
                    "id": 145,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4980:26:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_EIP20Interface_$4885",
                      "typeString": "contract EIP20Interface"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4957:49:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 150,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11519,
                            "src": "5047:4:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_CErc20_$277",
                              "typeString": "contract CErc20"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_CErc20_$277",
                              "typeString": "contract CErc20"
                            }
                          ],
                          "id": 149,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "5039:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 151,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5039:13:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 147,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 142,
                        "src": "5023:5:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_EIP20Interface_$4885",
                          "typeString": "contract EIP20Interface"
                        }
                      },
                      "id": 148,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "balanceOf",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 4830,
                      "src": "5023:15:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                        "typeString": "function (address) view external returns (uint256)"
                      }
                    },
                    "id": 152,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5023:30:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 140,
                  "id": 153,
                  "nodeType": "Return",
                  "src": "5016:37:0"
                }
              ]
            },
            "documentation": "@notice Gets balance of this contract in terms of the underlying\n@dev This excludes the value of the current message, if any\n@return The quantity of underlying tokens owned by this contract",
            "id": 155,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getCashPrior",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 137,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4912:2:0"
            },
            "returnParameters": {
              "id": 140,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 139,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 155,
                  "src": "4938:7:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 138,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4938:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4937:9:0"
            },
            "scope": 277,
            "src": "4891:169:0",
            "stateMutability": "view",
            "superFunction": 4394,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 198,
              "nodeType": "Block",
              "src": "5374:335:0",
              "statements": [
                {
                  "assignments": [
                    165
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 165,
                      "name": "token",
                      "nodeType": "VariableDeclaration",
                      "scope": 198,
                      "src": "5384:20:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_EIP20Interface_$4885",
                        "typeString": "contract EIP20Interface"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 164,
                        "name": "EIP20Interface",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 4885,
                        "src": "5384:14:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_EIP20Interface_$4885",
                          "typeString": "contract EIP20Interface"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 169,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 167,
                        "name": "underlying",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7,
                        "src": "5422:10:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 166,
                      "name": "EIP20Interface",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4885,
                      "src": "5407:14:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_EIP20Interface_$4885_$",
                        "typeString": "type(contract EIP20Interface)"
                      }
                    },
                    "id": 168,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5407:26:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_EIP20Interface_$4885",
                      "typeString": "contract EIP20Interface"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5384:49:0"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 178,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 172,
                          "name": "from",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 157,
                          "src": "5464:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 174,
                              "name": "this",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 11519,
                              "src": "5478:4:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_CErc20_$277",
                                "typeString": "contract CErc20"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_CErc20_$277",
                                "typeString": "contract CErc20"
                              }
                            ],
                            "id": 173,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "5470:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 175,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5470:13:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 170,
                          "name": "token",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 165,
                          "src": "5448:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_EIP20Interface_$4885",
                            "typeString": "contract EIP20Interface"
                          }
                        },
                        "id": 171,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "allowance",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 4868,
                        "src": "5448:15:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$",
                          "typeString": "function (address,address) view external returns (uint256)"
                        }
                      },
                      "id": 176,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "5448:36:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 177,
                      "name": "amount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 159,
                      "src": "5487:6:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "5448:45:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 183,
                  "nodeType": "IfStatement",
                  "src": "5444:117:0",
                  "trueBody": {
                    "id": 182,
                    "nodeType": "Block",
                    "src": "5495:66:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 179,
                            "name": "Error",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5069,
                            "src": "5516:5:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                              "typeString": "type(enum TokenErrorReporter.Error)"
                            }
                          },
                          "id": 180,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "TOKEN_INSUFFICIENT_ALLOWANCE",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "5516:34:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_Error_$5069",
                            "typeString": "enum TokenErrorReporter.Error"
                          }
                        },
                        "functionReturnParameters": 163,
                        "id": 181,
                        "nodeType": "Return",
                        "src": "5509:41:0"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 189,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 186,
                          "name": "from",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 157,
                          "src": "5591:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 184,
                          "name": "token",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 165,
                          "src": "5575:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_EIP20Interface_$4885",
                            "typeString": "contract EIP20Interface"
                          }
                        },
                        "id": 185,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "balanceOf",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 4830,
                        "src": "5575:15:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                          "typeString": "function (address) view external returns (uint256)"
                        }
                      },
                      "id": 187,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "5575:21:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 188,
                      "name": "amount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 159,
                      "src": "5599:6:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "5575:30:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 194,
                  "nodeType": "IfStatement",
                  "src": "5571:100:0",
                  "trueBody": {
                    "id": 193,
                    "nodeType": "Block",
                    "src": "5607:64:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 190,
                            "name": "Error",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5069,
                            "src": "5628:5:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                              "typeString": "type(enum TokenErrorReporter.Error)"
                            }
                          },
                          "id": 191,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "TOKEN_INSUFFICIENT_BALANCE",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "5628:32:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_Error_$5069",
                            "typeString": "enum TokenErrorReporter.Error"
                          }
                        },
                        "functionReturnParameters": 163,
                        "id": 192,
                        "nodeType": "Return",
                        "src": "5621:39:0"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 195,
                      "name": "Error",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5069,
                      "src": "5688:5:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                        "typeString": "type(enum TokenErrorReporter.Error)"
                      }
                    },
                    "id": 196,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "memberName": "NO_ERROR",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": null,
                    "src": "5688:14:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_Error_$5069",
                      "typeString": "enum TokenErrorReporter.Error"
                    }
                  },
                  "functionReturnParameters": 163,
                  "id": 197,
                  "nodeType": "Return",
                  "src": "5681:21:0"
                }
              ]
            },
            "documentation": "@dev Checks whether or not there is sufficient allowance for this contract to move amount from `from` and\n     whether or not `from` has a balance of at least `amount`. Does NOT do a transfer.",
            "id": 199,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "checkTransferIn",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 160,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 157,
                  "name": "from",
                  "nodeType": "VariableDeclaration",
                  "scope": 199,
                  "src": "5314:12:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 156,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5314:7:0",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 159,
                  "name": "amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 199,
                  "src": "5328:14:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 158,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5328:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5313:30:0"
            },
            "returnParameters": {
              "id": 163,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 162,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 199,
                  "src": "5367:5:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_enum$_Error_$5069",
                    "typeString": "enum TokenErrorReporter.Error"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 161,
                    "name": "Error",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 5069,
                    "src": "5367:5:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_Error_$5069",
                      "typeString": "enum TokenErrorReporter.Error"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5366:7:0"
            },
            "scope": 277,
            "src": "5289:420:0",
            "stateMutability": "view",
            "superFunction": 4403,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 238,
              "nodeType": "Block",
              "src": "6481:944:0",
              "statements": [
                {
                  "assignments": [
                    209
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 209,
                      "name": "token",
                      "nodeType": "VariableDeclaration",
                      "scope": 238,
                      "src": "6491:31:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_EIP20NonStandardInterface_$4950",
                        "typeString": "contract EIP20NonStandardInterface"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 208,
                        "name": "EIP20NonStandardInterface",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 4950,
                        "src": "6491:25:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_EIP20NonStandardInterface_$4950",
                          "typeString": "contract EIP20NonStandardInterface"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 213,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 211,
                        "name": "underlying",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7,
                        "src": "6551:10:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 210,
                      "name": "EIP20NonStandardInterface",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4950,
                      "src": "6525:25:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_EIP20NonStandardInterface_$4950_$",
                        "typeString": "type(contract EIP20NonStandardInterface)"
                      }
                    },
                    "id": 212,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6525:37:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_EIP20NonStandardInterface_$4950",
                      "typeString": "contract EIP20NonStandardInterface"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6491:71:0"
                },
                {
                  "assignments": [
                    215
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 215,
                      "name": "result",
                      "nodeType": "VariableDeclaration",
                      "scope": 238,
                      "src": "6572:11:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 214,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "6572:4:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 216,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6572:11:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 220,
                        "name": "from",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 201,
                        "src": "6613:4:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 222,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11519,
                            "src": "6627:4:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_CErc20_$277",
                              "typeString": "contract CErc20"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_CErc20_$277",
                              "typeString": "contract CErc20"
                            }
                          ],
                          "id": 221,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "6619:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 223,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "6619:13:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 224,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 203,
                        "src": "6634:6:0",
                        "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,
                        "id": 217,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 209,
                        "src": "6594:5:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_EIP20NonStandardInterface_$4950",
                          "typeString": "contract EIP20NonStandardInterface"
                        }
                      },
                      "id": 219,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "transferFrom",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 4915,
                      "src": "6594:18:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256) external"
                      }
                    },
                    "id": 225,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6594:47:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 226,
                  "nodeType": "ExpressionStatement",
                  "src": "6594:47:0"
                },
                {
                  "externalReferences": [
                    {
                      "result": {
                        "declaration": 215,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "6859:6:0",
                        "valueSize": 1
                      }
                    },
                    {
                      "result": {
                        "declaration": 215,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "7057:6:0",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 227,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    switch returndatasize()\n    case 0 { result := not(0) }\n    case 32 {\n        returndatacopy(0, 0, 32)\n        result := mload(0)\n    }\n    default { revert(0, 0) }\n}",
                  "src": "6716:586:0"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "id": 229,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "!",
                    "prefix": true,
                    "src": "7316:7:0",
                    "subExpression": {
                      "argumentTypes": null,
                      "id": 228,
                      "name": "result",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 215,
                      "src": "7317:6:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 234,
                  "nodeType": "IfStatement",
                  "src": "7312:75:0",
                  "trueBody": {
                    "id": 233,
                    "nodeType": "Block",
                    "src": "7325:62:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 230,
                            "name": "Error",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5069,
                            "src": "7346:5:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                              "typeString": "type(enum TokenErrorReporter.Error)"
                            }
                          },
                          "id": 231,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "TOKEN_TRANSFER_IN_FAILED",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "7346:30:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_Error_$5069",
                            "typeString": "enum TokenErrorReporter.Error"
                          }
                        },
                        "functionReturnParameters": 207,
                        "id": 232,
                        "nodeType": "Return",
                        "src": "7339:37:0"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 235,
                      "name": "Error",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5069,
                      "src": "7404:5:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                        "typeString": "type(enum TokenErrorReporter.Error)"
                      }
                    },
                    "id": 236,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "memberName": "NO_ERROR",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": null,
                    "src": "7404:14:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_Error_$5069",
                      "typeString": "enum TokenErrorReporter.Error"
                    }
                  },
                  "functionReturnParameters": 207,
                  "id": 237,
                  "nodeType": "Return",
                  "src": "7397:21:0"
                }
              ]
            },
            "documentation": "@dev Similar to EIP20 transfer, except it handles a False result from `transferFrom` and returns an explanatory\n     error code rather than reverting.  If caller has not called `checkTransferIn`, this may revert due to\n     insufficient balance or insufficient allowance. If caller has called `checkTransferIn` prior to this call,\n     and it returned Error.NO_ERROR, this should not revert in normal conditions.\n     *      Note: This wrapper safely handles non-standard ERC-20 tokens that do not return a value.\n           See here: https://medium.com/coinmonks/missing-return-value-bug-at-least-130-tokens-affected-d67bf08521ca",
            "id": 239,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "doTransferIn",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 204,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 201,
                  "name": "from",
                  "nodeType": "VariableDeclaration",
                  "scope": 239,
                  "src": "6426:12:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 200,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6426:7:0",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 203,
                  "name": "amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 239,
                  "src": "6440:14:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 202,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6440:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6425:30:0"
            },
            "returnParameters": {
              "id": 207,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 206,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 239,
                  "src": "6474:5:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_enum$_Error_$5069",
                    "typeString": "enum TokenErrorReporter.Error"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 205,
                    "name": "Error",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 5069,
                    "src": "6474:5:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_Error_$5069",
                      "typeString": "enum TokenErrorReporter.Error"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6473:7:0"
            },
            "scope": 277,
            "src": "6404:1021:0",
            "stateMutability": "nonpayable",
            "superFunction": 4412,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 275,
              "nodeType": "Block",
              "src": "8201:924:0",
              "statements": [
                {
                  "assignments": [
                    249
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 249,
                      "name": "token",
                      "nodeType": "VariableDeclaration",
                      "scope": 275,
                      "src": "8211:31:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_EIP20NonStandardInterface_$4950",
                        "typeString": "contract EIP20NonStandardInterface"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 248,
                        "name": "EIP20NonStandardInterface",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 4950,
                        "src": "8211:25:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_EIP20NonStandardInterface_$4950",
                          "typeString": "contract EIP20NonStandardInterface"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 253,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 251,
                        "name": "underlying",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7,
                        "src": "8271:10:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 250,
                      "name": "EIP20NonStandardInterface",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4950,
                      "src": "8245:25:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_EIP20NonStandardInterface_$4950_$",
                        "typeString": "type(contract EIP20NonStandardInterface)"
                      }
                    },
                    "id": 252,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8245:37:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_EIP20NonStandardInterface_$4950",
                      "typeString": "contract EIP20NonStandardInterface"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "8211:71:0"
                },
                {
                  "assignments": [
                    255
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 255,
                      "name": "result",
                      "nodeType": "VariableDeclaration",
                      "scope": 275,
                      "src": "8292:11:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 254,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "8292:4:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 256,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "8292:11:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 260,
                        "name": "to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 241,
                        "src": "8329:2:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 261,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 243,
                        "src": "8333:6:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 257,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 249,
                        "src": "8314:5:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_EIP20NonStandardInterface_$4950",
                          "typeString": "contract EIP20NonStandardInterface"
                        }
                      },
                      "id": 259,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "transfer",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 4906,
                      "src": "8314:14:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256) external"
                      }
                    },
                    "id": 262,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8314:26:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 263,
                  "nodeType": "ExpressionStatement",
                  "src": "8314:26:0"
                },
                {
                  "externalReferences": [
                    {
                      "result": {
                        "declaration": 255,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "8558:6:0",
                        "valueSize": 1
                      }
                    },
                    {
                      "result": {
                        "declaration": 255,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "8756:6:0",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 264,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    switch returndatasize()\n    case 0 { result := not(0) }\n    case 32 {\n        returndatacopy(0, 0, 32)\n        result := mload(0)\n    }\n    default { revert(0, 0) }\n}",
                  "src": "8415:586:0"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "id": 266,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "!",
                    "prefix": true,
                    "src": "9015:7:0",
                    "subExpression": {
                      "argumentTypes": null,
                      "id": 265,
                      "name": "result",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 255,
                      "src": "9016:6:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 271,
                  "nodeType": "IfStatement",
                  "src": "9011:76:0",
                  "trueBody": {
                    "id": 270,
                    "nodeType": "Block",
                    "src": "9024:63:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 267,
                            "name": "Error",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5069,
                            "src": "9045:5:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                              "typeString": "type(enum TokenErrorReporter.Error)"
                            }
                          },
                          "id": 268,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "TOKEN_TRANSFER_OUT_FAILED",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "9045:31:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_Error_$5069",
                            "typeString": "enum TokenErrorReporter.Error"
                          }
                        },
                        "functionReturnParameters": 247,
                        "id": 269,
                        "nodeType": "Return",
                        "src": "9038:38:0"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 272,
                      "name": "Error",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5069,
                      "src": "9104:5:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                        "typeString": "type(enum TokenErrorReporter.Error)"
                      }
                    },
                    "id": 273,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "memberName": "NO_ERROR",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": null,
                    "src": "9104:14:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_Error_$5069",
                      "typeString": "enum TokenErrorReporter.Error"
                    }
                  },
                  "functionReturnParameters": 247,
                  "id": 274,
                  "nodeType": "Return",
                  "src": "9097:21:0"
                }
              ]
            },
            "documentation": "@dev Similar to EIP20 transfer, except it handles a False result from `transfer` and returns an explanatory\n     error code rather than reverting. If caller has not called checked protocol's balance, this may revert due to\n     insufficient cash held in this contract. If caller has checked protocol's balance prior to this call, and verified\n     it is >= amount, this should not revert in normal conditions.\n     *      Note: This wrapper safely handles non-standard ERC-20 tokens that do not return a value.\n           See here: https://medium.com/coinmonks/missing-return-value-bug-at-least-130-tokens-affected-d67bf08521ca",
            "id": 276,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "doTransferOut",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 244,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 241,
                  "name": "to",
                  "nodeType": "VariableDeclaration",
                  "scope": 276,
                  "src": "8140:18:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address_payable",
                    "typeString": "address payable"
                  },
                  "typeName": {
                    "id": 240,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "8140:15:0",
                    "stateMutability": "payable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 243,
                  "name": "amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 276,
                  "src": "8160:14:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 242,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8160:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8139:36:0"
            },
            "returnParameters": {
              "id": 247,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 246,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 276,
                  "src": "8194:5:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_enum$_Error_$5069",
                    "typeString": "enum TokenErrorReporter.Error"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 245,
                    "name": "Error",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 5069,
                    "src": "8194:5:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_Error_$5069",
                      "typeString": "enum TokenErrorReporter.Error"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8193:7:0"
            },
            "scope": 277,
            "src": "8117:1008:0",
            "stateMutability": "nonpayable",
            "superFunction": 4421,
            "visibility": "internal"
          }
        ],
        "scope": 278,
        "src": "207:8920:0"
      }
    ],
    "src": "0:9128:0"
  },
  "legacyAST": {
    "absolutePath": "/home/runner/work/rtoken-contracts/rtoken-contracts/packages/contracts/compound/contracts/CErc20.sol",
    "exportedSymbols": {
      "CErc20": [
        277
      ]
    },
    "id": 278,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 1,
        "literals": [
          "solidity",
          "^",
          "0.5",
          ".8"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:0"
      },
      {
        "absolutePath": "/home/runner/work/rtoken-contracts/rtoken-contracts/packages/contracts/compound/contracts/EIP20NonStandardInterface.sol",
        "file": "./EIP20NonStandardInterface.sol",
        "id": 2,
        "nodeType": "ImportDirective",
        "scope": 278,
        "sourceUnit": 4951,
        "src": "25:41:0",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/runner/work/rtoken-contracts/rtoken-contracts/packages/contracts/compound/contracts/CToken.sol",
        "file": "./CToken.sol",
        "id": 3,
        "nodeType": "ImportDirective",
        "scope": 278,
        "sourceUnit": 4423,
        "src": "67:22:0",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 4,
              "name": "CToken",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 4422,
              "src": "226:6:0",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_CToken_$4422",
                "typeString": "contract CToken"
              }
            },
            "id": 5,
            "nodeType": "InheritanceSpecifier",
            "src": "226:6:0"
          }
        ],
        "contractDependencies": [
          4422,
          4607,
          4885,
          5207,
          5798,
          5851
        ],
        "contractKind": "contract",
        "documentation": "@title Compound's CErc20 Contract\n@notice CTokens which wrap an EIP-20 underlying\n@author Compound",
        "fullyImplemented": true,
        "id": 277,
        "linearizedBaseContracts": [
          277,
          4422,
          5851,
          5207,
          5798,
          4607,
          4885
        ],
        "name": "CErc20",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "constant": false,
            "id": 7,
            "name": "underlying",
            "nodeType": "VariableDeclaration",
            "scope": 277,
            "src": "303:25:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 6,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "303:7:0",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 42,
              "nodeType": "Block",
              "src": "1205:148:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 34,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 32,
                      "name": "underlying",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7,
                      "src": "1241:10:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 33,
                      "name": "underlying_",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9,
                      "src": "1254:11:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "1241:24:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 35,
                  "nodeType": "ExpressionStatement",
                  "src": "1241:24:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 37,
                            "name": "underlying",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7,
                            "src": "1290:10:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 36,
                          "name": "EIP20Interface",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4885,
                          "src": "1275:14:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_EIP20Interface_$4885_$",
                            "typeString": "type(contract EIP20Interface)"
                          }
                        },
                        "id": 38,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1275:26:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_EIP20Interface_$4885",
                          "typeString": "contract EIP20Interface"
                        }
                      },
                      "id": 39,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "totalSupply",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 4823,
                      "src": "1275:38:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$",
                        "typeString": "function () view external returns (uint256)"
                      }
                    },
                    "id": 40,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1275:40:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 41,
                  "nodeType": "ExpressionStatement",
                  "src": "1275:40:0"
                }
              ]
            },
            "documentation": "@notice Construct a new money market\n@param underlying_ The address of the underlying asset\n@param comptroller_ The address of the Comptroller\n@param interestRateModel_ The address of the interest rate model\n@param initialExchangeRateMantissa_ The initial exchange rate, scaled by 1e18\n@param name_ ERC-20 name of this token\n@param symbol_ ERC-20 symbol of this token\n@param decimals_ ERC-20 decimal precision of this token",
            "id": 43,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 24,
                    "name": "comptroller_",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 11,
                    "src": "1114:12:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ComptrollerInterface_$4816",
                      "typeString": "contract ComptrollerInterface"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 25,
                    "name": "interestRateModel_",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 13,
                    "src": "1128:18:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_InterestRateModel_$5819",
                      "typeString": "contract InterestRateModel"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 26,
                    "name": "initialExchangeRateMantissa_",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 15,
                    "src": "1148:28:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 27,
                    "name": "name_",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 17,
                    "src": "1178:5:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_memory_ptr",
                      "typeString": "string memory"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 28,
                    "name": "symbol_",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 19,
                    "src": "1185:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_memory_ptr",
                      "typeString": "string memory"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 29,
                    "name": "decimals_",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 21,
                    "src": "1194:9:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                ],
                "id": 30,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 23,
                  "name": "CToken",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 4422,
                  "src": "1107:6:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_type$_t_contract$_CToken_$4422_$",
                    "typeString": "type(contract CToken)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "1107:97:0"
              }
            ],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 22,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9,
                  "name": "underlying_",
                  "nodeType": "VariableDeclaration",
                  "scope": 43,
                  "src": "852:19:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "852:7:0",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 11,
                  "name": "comptroller_",
                  "nodeType": "VariableDeclaration",
                  "scope": 43,
                  "src": "881:33:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ComptrollerInterface_$4816",
                    "typeString": "contract ComptrollerInterface"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 10,
                    "name": "ComptrollerInterface",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 4816,
                    "src": "881:20:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ComptrollerInterface_$4816",
                      "typeString": "contract ComptrollerInterface"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13,
                  "name": "interestRateModel_",
                  "nodeType": "VariableDeclaration",
                  "scope": 43,
                  "src": "924:36:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_InterestRateModel_$5819",
                    "typeString": "contract InterestRateModel"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 12,
                    "name": "InterestRateModel",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 5819,
                    "src": "924:17:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_InterestRateModel_$5819",
                      "typeString": "contract InterestRateModel"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 15,
                  "name": "initialExchangeRateMantissa_",
                  "nodeType": "VariableDeclaration",
                  "scope": 43,
                  "src": "970:36:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 14,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "970:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17,
                  "name": "name_",
                  "nodeType": "VariableDeclaration",
                  "scope": 43,
                  "src": "1016:19:0",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 16,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1016:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 19,
                  "name": "symbol_",
                  "nodeType": "VariableDeclaration",
                  "scope": 43,
                  "src": "1045:21:0",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 18,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1045:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 21,
                  "name": "decimals_",
                  "nodeType": "VariableDeclaration",
                  "scope": 43,
                  "src": "1076:17:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 20,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1076:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "842:257:0"
            },
            "returnParameters": {
              "id": 31,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1205:0:0"
            },
            "scope": 277,
            "src": "831:522:0",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 54,
              "nodeType": "Block",
              "src": "1794:48:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 51,
                        "name": "mintAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 45,
                        "src": "1824:10:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 50,
                      "name": "mintInternal",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2150,
                      "src": "1811:12:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256) returns (uint256)"
                      }
                    },
                    "id": 52,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1811:24:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 49,
                  "id": 53,
                  "nodeType": "Return",
                  "src": "1804:31:0"
                }
              ]
            },
            "documentation": "@notice Sender supplies assets into the market and receives cTokens in exchange\n@dev Accrues interest whether or not the operation succeeds, unless reverted\n@param mintAmount The amount of the underlying asset to supply\n@return uint 0=success, otherwise a failure (see ErrorReporter.sol for details)",
            "id": 55,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "mint",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 46,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 45,
                  "name": "mintAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 55,
                  "src": "1747:18:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 44,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1747:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1746:20:0"
            },
            "returnParameters": {
              "id": 49,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 48,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 55,
                  "src": "1785:7:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 47,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1785:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1784:9:0"
            },
            "scope": 277,
            "src": "1733:109:0",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 66,
              "nodeType": "Block",
              "src": "2250:52:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 63,
                        "name": "redeemTokens",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 57,
                        "src": "2282:12:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 62,
                      "name": "redeemInternal",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2467,
                      "src": "2267:14:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256) returns (uint256)"
                      }
                    },
                    "id": 64,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2267:28:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 61,
                  "id": 65,
                  "nodeType": "Return",
                  "src": "2260:35:0"
                }
              ]
            },
            "documentation": "@notice Sender redeems cTokens in exchange for the underlying asset\n@dev Accrues interest whether or not the operation succeeds, unless reverted\n@param redeemTokens The number of cTokens to redeem into underlying\n@return uint 0=success, otherwise a failure (see ErrorReporter.sol for details)",
            "id": 67,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "redeem",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 58,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 57,
                  "name": "redeemTokens",
                  "nodeType": "VariableDeclaration",
                  "scope": 67,
                  "src": "2201:20:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 56,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2201:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2200:22:0"
            },
            "returnParameters": {
              "id": 61,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 60,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 67,
                  "src": "2241:7:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 59,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2241:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2240:9:0"
            },
            "scope": 277,
            "src": "2185:117:0",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 78,
              "nodeType": "Block",
              "src": "2725:62:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 75,
                        "name": "redeemAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 69,
                        "src": "2767:12:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 74,
                      "name": "redeemUnderlyingInternal",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2505,
                      "src": "2742:24:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256) returns (uint256)"
                      }
                    },
                    "id": 76,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2742:38:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 73,
                  "id": 77,
                  "nodeType": "Return",
                  "src": "2735:45:0"
                }
              ]
            },
            "documentation": "@notice Sender redeems cTokens in exchange for a specified amount of underlying asset\n@dev Accrues interest whether or not the operation succeeds, unless reverted\n@param redeemAmount The amount of underlying to redeem\n@return uint 0=success, otherwise a failure (see ErrorReporter.sol for details)",
            "id": 79,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "redeemUnderlying",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 70,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 69,
                  "name": "redeemAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 79,
                  "src": "2676:20:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 68,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2676:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2675:22:0"
            },
            "returnParameters": {
              "id": 73,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 72,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 79,
                  "src": "2716:7:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 71,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2716:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2715:9:0"
            },
            "scope": 277,
            "src": "2650:137:0",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 90,
              "nodeType": "Block",
              "src": "3113:52:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 87,
                        "name": "borrowAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 81,
                        "src": "3145:12:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 86,
                      "name": "borrowInternal",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2877,
                      "src": "3130:14:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256) returns (uint256)"
                      }
                    },
                    "id": 88,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3130:28:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 85,
                  "id": 89,
                  "nodeType": "Return",
                  "src": "3123:35:0"
                }
              ]
            },
            "documentation": "@notice Sender borrows assets from the protocol to their own address\n@param borrowAmount The amount of the underlying asset to borrow\n@return uint 0=success, otherwise a failure (see ErrorReporter.sol for details)",
            "id": 91,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "borrow",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 82,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 81,
                  "name": "borrowAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 91,
                  "src": "3064:20:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 80,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3064:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3063:22:0"
            },
            "returnParameters": {
              "id": 85,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 84,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 91,
                  "src": "3104:7:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 83,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3104:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3103:9:0"
            },
            "scope": 277,
            "src": "3048:117:0",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 102,
              "nodeType": "Block",
              "src": "3435:56:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 99,
                        "name": "repayAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 93,
                        "src": "3472:11:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 98,
                      "name": "repayBorrowInternal",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3142,
                      "src": "3452:19:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256) returns (uint256)"
                      }
                    },
                    "id": 100,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3452:32:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 97,
                  "id": 101,
                  "nodeType": "Return",
                  "src": "3445:39:0"
                }
              ]
            },
            "documentation": "@notice Sender repays their own borrow\n@param repayAmount The amount to repay\n@return uint 0=success, otherwise a failure (see ErrorReporter.sol for details)",
            "id": 103,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "repayBorrow",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 94,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 93,
                  "name": "repayAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 103,
                  "src": "3387:19:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 92,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3387:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3386:21:0"
            },
            "returnParameters": {
              "id": 97,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 96,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 103,
                  "src": "3426:7:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 95,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3426:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3425:9:0"
            },
            "scope": 277,
            "src": "3366:125:0",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 117,
              "nodeType": "Block",
              "src": "3864:72:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 113,
                        "name": "borrower",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 105,
                        "src": "3907:8:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 114,
                        "name": "repayAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 107,
                        "src": "3917:11:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 112,
                      "name": "repayBorrowBehalfInternal",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3182,
                      "src": "3881:25:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (address,uint256) returns (uint256)"
                      }
                    },
                    "id": 115,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3881:48:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 111,
                  "id": 116,
                  "nodeType": "Return",
                  "src": "3874:55:0"
                }
              ]
            },
            "documentation": "@notice Sender repays a borrow belonging to borrower\n@param borrower the account with the debt being payed off\n@param repayAmount The amount to repay\n@return uint 0=success, otherwise a failure (see ErrorReporter.sol for details)",
            "id": 118,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "repayBorrowBehalf",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 108,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 105,
                  "name": "borrower",
                  "nodeType": "VariableDeclaration",
                  "scope": 118,
                  "src": "3798:16:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 104,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3798:7:0",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 107,
                  "name": "repayAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 118,
                  "src": "3816:19:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 106,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3816:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3797:39:0"
            },
            "returnParameters": {
              "id": 111,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 110,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 118,
                  "src": "3855:7:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 109,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3855:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3854:9:0"
            },
            "scope": 277,
            "src": "3771:165:0",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 135,
              "nodeType": "Block",
              "src": "4544:88:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 130,
                        "name": "borrower",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 120,
                        "src": "4585:8:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 131,
                        "name": "repayAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 122,
                        "src": "4595:11:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 132,
                        "name": "cTokenCollateral",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 124,
                        "src": "4608:16:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_CToken_$4422",
                          "typeString": "contract CToken"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_contract$_CToken_$4422",
                          "typeString": "contract CToken"
                        }
                      ],
                      "id": 129,
                      "name": "liquidateBorrowInternal",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3531,
                      "src": "4561:23:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_contract$_CToken_$4422_$returns$_t_uint256_$",
                        "typeString": "function (address,uint256,contract CToken) returns (uint256)"
                      }
                    },
                    "id": 133,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4561:64:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 128,
                  "id": 134,
                  "nodeType": "Return",
                  "src": "4554:71:0"
                }
              ]
            },
            "documentation": "@notice The sender liquidates the borrowers collateral.\n The collateral seized is transferred to the liquidator.\n@param borrower The borrower of this cToken to be liquidated\n@param cTokenCollateral The market in which to seize collateral from the borrower\n@param repayAmount The amount of the underlying borrowed asset to repay\n@return uint 0=success, otherwise a failure (see ErrorReporter.sol for details)",
            "id": 136,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "liquidateBorrow",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 125,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 120,
                  "name": "borrower",
                  "nodeType": "VariableDeclaration",
                  "scope": 136,
                  "src": "4433:16:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 119,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4433:7:0",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 122,
                  "name": "repayAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 136,
                  "src": "4451:19:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 121,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4451:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 124,
                  "name": "cTokenCollateral",
                  "nodeType": "VariableDeclaration",
                  "scope": 136,
                  "src": "4472:23:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_CToken_$4422",
                    "typeString": "contract CToken"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 123,
                    "name": "CToken",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 4422,
                    "src": "4472:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_CToken_$4422",
                      "typeString": "contract CToken"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4432:64:0"
            },
            "returnParameters": {
              "id": 128,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 127,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 136,
                  "src": "4531:7:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 126,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4531:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4530:9:0"
            },
            "scope": 277,
            "src": "4408:224:0",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 154,
              "nodeType": "Block",
              "src": "4947:113:0",
              "statements": [
                {
                  "assignments": [
                    142
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 142,
                      "name": "token",
                      "nodeType": "VariableDeclaration",
                      "scope": 154,
                      "src": "4957:20:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_EIP20Interface_$4885",
                        "typeString": "contract EIP20Interface"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 141,
                        "name": "EIP20Interface",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 4885,
                        "src": "4957:14:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_EIP20Interface_$4885",
                          "typeString": "contract EIP20Interface"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 146,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 144,
                        "name": "underlying",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7,
                        "src": "4995:10:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 143,
                      "name": "EIP20Interface",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4885,
                      "src": "4980:14:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_EIP20Interface_$4885_$",
                        "typeString": "type(contract EIP20Interface)"
                      }
                    },
                    "id": 145,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4980:26:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_EIP20Interface_$4885",
                      "typeString": "contract EIP20Interface"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4957:49:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 150,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11519,
                            "src": "5047:4:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_CErc20_$277",
                              "typeString": "contract CErc20"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_CErc20_$277",
                              "typeString": "contract CErc20"
                            }
                          ],
                          "id": 149,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "5039:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 151,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5039:13:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 147,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 142,
                        "src": "5023:5:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_EIP20Interface_$4885",
                          "typeString": "contract EIP20Interface"
                        }
                      },
                      "id": 148,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "balanceOf",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 4830,
                      "src": "5023:15:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                        "typeString": "function (address) view external returns (uint256)"
                      }
                    },
                    "id": 152,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5023:30:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 140,
                  "id": 153,
                  "nodeType": "Return",
                  "src": "5016:37:0"
                }
              ]
            },
            "documentation": "@notice Gets balance of this contract in terms of the underlying\n@dev This excludes the value of the current message, if any\n@return The quantity of underlying tokens owned by this contract",
            "id": 155,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getCashPrior",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 137,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4912:2:0"
            },
            "returnParameters": {
              "id": 140,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 139,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 155,
                  "src": "4938:7:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 138,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4938:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4937:9:0"
            },
            "scope": 277,
            "src": "4891:169:0",
            "stateMutability": "view",
            "superFunction": 4394,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 198,
              "nodeType": "Block",
              "src": "5374:335:0",
              "statements": [
                {
                  "assignments": [
                    165
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 165,
                      "name": "token",
                      "nodeType": "VariableDeclaration",
                      "scope": 198,
                      "src": "5384:20:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_EIP20Interface_$4885",
                        "typeString": "contract EIP20Interface"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 164,
                        "name": "EIP20Interface",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 4885,
                        "src": "5384:14:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_EIP20Interface_$4885",
                          "typeString": "contract EIP20Interface"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 169,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 167,
                        "name": "underlying",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7,
                        "src": "5422:10:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 166,
                      "name": "EIP20Interface",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4885,
                      "src": "5407:14:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_EIP20Interface_$4885_$",
                        "typeString": "type(contract EIP20Interface)"
                      }
                    },
                    "id": 168,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5407:26:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_EIP20Interface_$4885",
                      "typeString": "contract EIP20Interface"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5384:49:0"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 178,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 172,
                          "name": "from",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 157,
                          "src": "5464:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 174,
                              "name": "this",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 11519,
                              "src": "5478:4:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_CErc20_$277",
                                "typeString": "contract CErc20"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_CErc20_$277",
                                "typeString": "contract CErc20"
                              }
                            ],
                            "id": 173,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "5470:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 175,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5470:13:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 170,
                          "name": "token",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 165,
                          "src": "5448:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_EIP20Interface_$4885",
                            "typeString": "contract EIP20Interface"
                          }
                        },
                        "id": 171,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "allowance",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 4868,
                        "src": "5448:15:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$",
                          "typeString": "function (address,address) view external returns (uint256)"
                        }
                      },
                      "id": 176,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "5448:36:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 177,
                      "name": "amount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 159,
                      "src": "5487:6:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "5448:45:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 183,
                  "nodeType": "IfStatement",
                  "src": "5444:117:0",
                  "trueBody": {
                    "id": 182,
                    "nodeType": "Block",
                    "src": "5495:66:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 179,
                            "name": "Error",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5069,
                            "src": "5516:5:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                              "typeString": "type(enum TokenErrorReporter.Error)"
                            }
                          },
                          "id": 180,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "TOKEN_INSUFFICIENT_ALLOWANCE",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "5516:34:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_Error_$5069",
                            "typeString": "enum TokenErrorReporter.Error"
                          }
                        },
                        "functionReturnParameters": 163,
                        "id": 181,
                        "nodeType": "Return",
                        "src": "5509:41:0"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 189,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 186,
                          "name": "from",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 157,
                          "src": "5591:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 184,
                          "name": "token",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 165,
                          "src": "5575:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_EIP20Interface_$4885",
                            "typeString": "contract EIP20Interface"
                          }
                        },
                        "id": 185,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "balanceOf",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 4830,
                        "src": "5575:15:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                          "typeString": "function (address) view external returns (uint256)"
                        }
                      },
                      "id": 187,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "5575:21:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 188,
                      "name": "amount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 159,
                      "src": "5599:6:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "5575:30:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 194,
                  "nodeType": "IfStatement",
                  "src": "5571:100:0",
                  "trueBody": {
                    "id": 193,
                    "nodeType": "Block",
                    "src": "5607:64:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 190,
                            "name": "Error",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5069,
                            "src": "5628:5:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                              "typeString": "type(enum TokenErrorReporter.Error)"
                            }
                          },
                          "id": 191,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "TOKEN_INSUFFICIENT_BALANCE",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "5628:32:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_Error_$5069",
                            "typeString": "enum TokenErrorReporter.Error"
                          }
                        },
                        "functionReturnParameters": 163,
                        "id": 192,
                        "nodeType": "Return",
                        "src": "5621:39:0"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 195,
                      "name": "Error",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5069,
                      "src": "5688:5:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                        "typeString": "type(enum TokenErrorReporter.Error)"
                      }
                    },
                    "id": 196,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "memberName": "NO_ERROR",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": null,
                    "src": "5688:14:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_Error_$5069",
                      "typeString": "enum TokenErrorReporter.Error"
                    }
                  },
                  "functionReturnParameters": 163,
                  "id": 197,
                  "nodeType": "Return",
                  "src": "5681:21:0"
                }
              ]
            },
            "documentation": "@dev Checks whether or not there is sufficient allowance for this contract to move amount from `from` and\n     whether or not `from` has a balance of at least `amount`. Does NOT do a transfer.",
            "id": 199,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "checkTransferIn",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 160,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 157,
                  "name": "from",
                  "nodeType": "VariableDeclaration",
                  "scope": 199,
                  "src": "5314:12:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 156,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5314:7:0",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 159,
                  "name": "amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 199,
                  "src": "5328:14:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 158,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5328:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5313:30:0"
            },
            "returnParameters": {
              "id": 163,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 162,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 199,
                  "src": "5367:5:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_enum$_Error_$5069",
                    "typeString": "enum TokenErrorReporter.Error"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 161,
                    "name": "Error",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 5069,
                    "src": "5367:5:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_Error_$5069",
                      "typeString": "enum TokenErrorReporter.Error"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5366:7:0"
            },
            "scope": 277,
            "src": "5289:420:0",
            "stateMutability": "view",
            "superFunction": 4403,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 238,
              "nodeType": "Block",
              "src": "6481:944:0",
              "statements": [
                {
                  "assignments": [
                    209
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 209,
                      "name": "token",
                      "nodeType": "VariableDeclaration",
                      "scope": 238,
                      "src": "6491:31:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_EIP20NonStandardInterface_$4950",
                        "typeString": "contract EIP20NonStandardInterface"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 208,
                        "name": "EIP20NonStandardInterface",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 4950,
                        "src": "6491:25:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_EIP20NonStandardInterface_$4950",
                          "typeString": "contract EIP20NonStandardInterface"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 213,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 211,
                        "name": "underlying",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7,
                        "src": "6551:10:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 210,
                      "name": "EIP20NonStandardInterface",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4950,
                      "src": "6525:25:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_EIP20NonStandardInterface_$4950_$",
                        "typeString": "type(contract EIP20NonStandardInterface)"
                      }
                    },
                    "id": 212,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6525:37:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_EIP20NonStandardInterface_$4950",
                      "typeString": "contract EIP20NonStandardInterface"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6491:71:0"
                },
                {
                  "assignments": [
                    215
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 215,
                      "name": "result",
                      "nodeType": "VariableDeclaration",
                      "scope": 238,
                      "src": "6572:11:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 214,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "6572:4:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 216,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6572:11:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 220,
                        "name": "from",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 201,
                        "src": "6613:4:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 222,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11519,
                            "src": "6627:4:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_CErc20_$277",
                              "typeString": "contract CErc20"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_CErc20_$277",
                              "typeString": "contract CErc20"
                            }
                          ],
                          "id": 221,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "6619:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 223,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "6619:13:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 224,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 203,
                        "src": "6634:6:0",
                        "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,
                        "id": 217,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 209,
                        "src": "6594:5:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_EIP20NonStandardInterface_$4950",
                          "typeString": "contract EIP20NonStandardInterface"
                        }
                      },
                      "id": 219,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "transferFrom",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 4915,
                      "src": "6594:18:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256) external"
                      }
                    },
                    "id": 225,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6594:47:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 226,
                  "nodeType": "ExpressionStatement",
                  "src": "6594:47:0"
                },
                {
                  "externalReferences": [
                    {
                      "result": {
                        "declaration": 215,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "6859:6:0",
                        "valueSize": 1
                      }
                    },
                    {
                      "result": {
                        "declaration": 215,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "7057:6:0",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 227,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    switch returndatasize()\n    case 0 { result := not(0) }\n    case 32 {\n        returndatacopy(0, 0, 32)\n        result := mload(0)\n    }\n    default { revert(0, 0) }\n}",
                  "src": "6716:586:0"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "id": 229,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "!",
                    "prefix": true,
                    "src": "7316:7:0",
                    "subExpression": {
                      "argumentTypes": null,
                      "id": 228,
                      "name": "result",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 215,
                      "src": "7317:6:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 234,
                  "nodeType": "IfStatement",
                  "src": "7312:75:0",
                  "trueBody": {
                    "id": 233,
                    "nodeType": "Block",
                    "src": "7325:62:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 230,
                            "name": "Error",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5069,
                            "src": "7346:5:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                              "typeString": "type(enum TokenErrorReporter.Error)"
                            }
                          },
                          "id": 231,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "TOKEN_TRANSFER_IN_FAILED",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "7346:30:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_Error_$5069",
                            "typeString": "enum TokenErrorReporter.Error"
                          }
                        },
                        "functionReturnParameters": 207,
                        "id": 232,
                        "nodeType": "Return",
                        "src": "7339:37:0"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 235,
                      "name": "Error",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5069,
                      "src": "7404:5:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                        "typeString": "type(enum TokenErrorReporter.Error)"
                      }
                    },
                    "id": 236,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "memberName": "NO_ERROR",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": null,
                    "src": "7404:14:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_Error_$5069",
                      "typeString": "enum TokenErrorReporter.Error"
                    }
                  },
                  "functionReturnParameters": 207,
                  "id": 237,
                  "nodeType": "Return",
                  "src": "7397:21:0"
                }
              ]
            },
            "documentation": "@dev Similar to EIP20 transfer, except it handles a False result from `transferFrom` and returns an explanatory\n     error code rather than reverting.  If caller has not called `checkTransferIn`, this may revert due to\n     insufficient balance or insufficient allowance. If caller has called `checkTransferIn` prior to this call,\n     and it returned Error.NO_ERROR, this should not revert in normal conditions.\n     *      Note: This wrapper safely handles non-standard ERC-20 tokens that do not return a value.\n           See here: https://medium.com/coinmonks/missing-return-value-bug-at-least-130-tokens-affected-d67bf08521ca",
            "id": 239,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "doTransferIn",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 204,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 201,
                  "name": "from",
                  "nodeType": "VariableDeclaration",
                  "scope": 239,
                  "src": "6426:12:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 200,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6426:7:0",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 203,
                  "name": "amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 239,
                  "src": "6440:14:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 202,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6440:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6425:30:0"
            },
            "returnParameters": {
              "id": 207,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 206,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 239,
                  "src": "6474:5:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_enum$_Error_$5069",
                    "typeString": "enum TokenErrorReporter.Error"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 205,
                    "name": "Error",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 5069,
                    "src": "6474:5:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_Error_$5069",
                      "typeString": "enum TokenErrorReporter.Error"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6473:7:0"
            },
            "scope": 277,
            "src": "6404:1021:0",
            "stateMutability": "nonpayable",
            "superFunction": 4412,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 275,
              "nodeType": "Block",
              "src": "8201:924:0",
              "statements": [
                {
                  "assignments": [
                    249
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 249,
                      "name": "token",
                      "nodeType": "VariableDeclaration",
                      "scope": 275,
                      "src": "8211:31:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_EIP20NonStandardInterface_$4950",
                        "typeString": "contract EIP20NonStandardInterface"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 248,
                        "name": "EIP20NonStandardInterface",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 4950,
                        "src": "8211:25:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_EIP20NonStandardInterface_$4950",
                          "typeString": "contract EIP20NonStandardInterface"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 253,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 251,
                        "name": "underlying",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7,
                        "src": "8271:10:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 250,
                      "name": "EIP20NonStandardInterface",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4950,
                      "src": "8245:25:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_EIP20NonStandardInterface_$4950_$",
                        "typeString": "type(contract EIP20NonStandardInterface)"
                      }
                    },
                    "id": 252,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8245:37:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_EIP20NonStandardInterface_$4950",
                      "typeString": "contract EIP20NonStandardInterface"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "8211:71:0"
                },
                {
                  "assignments": [
                    255
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 255,
                      "name": "result",
                      "nodeType": "VariableDeclaration",
                      "scope": 275,
                      "src": "8292:11:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 254,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "8292:4:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 256,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "8292:11:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 260,
                        "name": "to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 241,
                        "src": "8329:2:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 261,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 243,
                        "src": "8333:6:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 257,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 249,
                        "src": "8314:5:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_EIP20NonStandardInterface_$4950",
                          "typeString": "contract EIP20NonStandardInterface"
                        }
                      },
                      "id": 259,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "transfer",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 4906,
                      "src": "8314:14:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256) external"
                      }
                    },
                    "id": 262,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8314:26:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 263,
                  "nodeType": "ExpressionStatement",
                  "src": "8314:26:0"
                },
                {
                  "externalReferences": [
                    {
                      "result": {
                        "declaration": 255,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "8558:6:0",
                        "valueSize": 1
                      }
                    },
                    {
                      "result": {
                        "declaration": 255,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "8756:6:0",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 264,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    switch returndatasize()\n    case 0 { result := not(0) }\n    case 32 {\n        returndatacopy(0, 0, 32)\n        result := mload(0)\n    }\n    default { revert(0, 0) }\n}",
                  "src": "8415:586:0"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "id": 266,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "!",
                    "prefix": true,
                    "src": "9015:7:0",
                    "subExpression": {
                      "argumentTypes": null,
                      "id": 265,
                      "name": "result",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 255,
                      "src": "9016:6:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 271,
                  "nodeType": "IfStatement",
                  "src": "9011:76:0",
                  "trueBody": {
                    "id": 270,
                    "nodeType": "Block",
                    "src": "9024:63:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 267,
                            "name": "Error",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5069,
                            "src": "9045:5:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                              "typeString": "type(enum TokenErrorReporter.Error)"
                            }
                          },
                          "id": 268,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "TOKEN_TRANSFER_OUT_FAILED",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "9045:31:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_Error_$5069",
                            "typeString": "enum TokenErrorReporter.Error"
                          }
                        },
                        "functionReturnParameters": 247,
                        "id": 269,
                        "nodeType": "Return",
                        "src": "9038:38:0"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 272,
                      "name": "Error",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5069,
                      "src": "9104:5:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                        "typeString": "type(enum TokenErrorReporter.Error)"
                      }
                    },
                    "id": 273,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "memberName": "NO_ERROR",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": null,
                    "src": "9104:14:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_Error_$5069",
                      "typeString": "enum TokenErrorReporter.Error"
                    }
                  },
                  "functionReturnParameters": 247,
                  "id": 274,
                  "nodeType": "Return",
                  "src": "9097:21:0"
                }
              ]
            },
            "documentation": "@dev Similar to EIP20 transfer, except it handles a False result from `transfer` and returns an explanatory\n     error code rather than reverting. If caller has not called checked protocol's balance, this may revert due to\n     insufficient cash held in this contract. If caller has checked protocol's balance prior to this call, and verified\n     it is >= amount, this should not revert in normal conditions.\n     *      Note: This wrapper safely handles non-standard ERC-20 tokens that do not return a value.\n           See here: https://medium.com/coinmonks/missing-return-value-bug-at-least-130-tokens-affected-d67bf08521ca",
            "id": 276,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "doTransferOut",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 244,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 241,
                  "name": "to",
                  "nodeType": "VariableDeclaration",
                  "scope": 276,
                  "src": "8140:18:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address_payable",
                    "typeString": "address payable"
                  },
                  "typeName": {
                    "id": 240,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "8140:15:0",
                    "stateMutability": "payable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 243,
                  "name": "amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 276,
                  "src": "8160:14:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 242,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8160:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8139:36:0"
            },
            "returnParameters": {
              "id": 247,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 246,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 276,
                  "src": "8194:5:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_enum$_Error_$5069",
                    "typeString": "enum TokenErrorReporter.Error"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 245,
                    "name": "Error",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 5069,
                    "src": "8194:5:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_Error_$5069",
                      "typeString": "enum TokenErrorReporter.Error"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8193:7:0"
            },
            "scope": 277,
            "src": "8117:1008:0",
            "stateMutability": "nonpayable",
            "superFunction": 4421,
            "visibility": "internal"
          }
        ],
        "scope": 278,
        "src": "207:8920:0"
      }
    ],
    "src": "0:9128:0"
  },
  "compiler": {
    "name": "solc",
    "version": "0.5.12+commit.7709ece9.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.0.21",
  "updatedAt": "2020-04-22T17:31:54.447Z",
  "devdoc": {
    "author": "Compound",
    "methods": {
      "_acceptAdmin()": {
        "details": "Admin function for pending admin to accept role and update admin",
        "return": "uint 0=success, otherwise a failure (see ErrorReporter.sol for details)"
      },
      "_reduceReserves(uint256)": {
        "params": {
          "reduceAmount": "Amount of reduction to reserves"
        },
        "return": "uint 0=success, otherwise a failure (see ErrorReporter.sol for details)"
      },
      "_setComptroller(address)": {
        "details": "Admin function to set a new comptroller",
        "return": "uint 0=success, otherwise a failure (see ErrorReporter.sol for details)"
      },
      "_setInterestRateModel(address)": {
        "details": "Admin function to accrue interest and update the interest rate model",
        "params": {
          "newInterestRateModel": "the new interest rate model to use"
        },
        "return": "uint 0=success, otherwise a failure (see ErrorReporter.sol for details)"
      },
      "_setPendingAdmin(address)": {
        "details": "Admin function to begin change of admin. The newPendingAdmin must call `_acceptAdmin` to finalize the transfer.",
        "params": {
          "newPendingAdmin": "New pending admin."
        },
        "return": "uint 0=success, otherwise a failure (see ErrorReporter.sol for details)      * TODO: Should we add a second arg to verify, like a checksum of `newAdmin` address?"
      },
      "_setReserveFactor(uint256)": {
        "details": "Admin function to accrue interest and set a new reserve factor",
        "return": "uint 0=success, otherwise a failure (see ErrorReporter.sol for details)"
      },
      "accrueInterest()": {
        "details": "This calculates interest accrued from the last checkpointed block     up to the current block and writes new checkpoint to storage."
      },
      "allowance(address,address)": {
        "params": {
          "owner": "The address of the account which owns the tokens to be spent",
          "spender": "The address of the account which may transfer tokens"
        },
        "return": "The number of tokens allowed to be spent (-1 means infinite)"
      },
      "approve(address,uint256)": {
        "details": "This will overwrite the approval amount for `spender` and is subject to issues noted [here](https://eips.ethereum.org/EIPS/eip-20#approve)",
        "params": {
          "amount": "The number of tokens that are approved (-1 means infinite)",
          "spender": "The address of the account which may transfer tokens"
        },
        "return": "Whether or not the approval succeeded"
      },
      "balanceOf(address)": {
        "params": {
          "owner": "The address of the account to query"
        },
        "return": "The number of tokens owned by `owner`"
      },
      "balanceOfUnderlying(address)": {
        "details": "This also accrues interest in a transaction",
        "params": {
          "owner": "The address of the account to query"
        },
        "return": "The amount of underlying owned by `owner`"
      },
      "borrow(uint256)": {
        "params": {
          "borrowAmount": "The amount of the underlying asset to borrow"
        },
        "return": "uint 0=success, otherwise a failure (see ErrorReporter.sol for details)"
      },
      "borrowBalanceCurrent(address)": {
        "params": {
          "account": "The address whose balance should be calculated after updating borrowIndex"
        },
        "return": "The calculated balance"
      },
      "borrowBalanceStored(address)": {
        "params": {
          "account": "The address whose balance should be calculated"
        },
        "return": "The calculated balance"
      },
      "borrowRatePerBlock()": {
        "return": "The borrow interest rate per block, scaled by 1e18"
      },
      "constructor": {
        "params": {
          "comptroller_": "The address of the Comptroller",
          "decimals_": "ERC-20 decimal precision of this token",
          "initialExchangeRateMantissa_": "The initial exchange rate, scaled by 1e18",
          "interestRateModel_": "The address of the interest rate model",
          "name_": "ERC-20 name of this token",
          "symbol_": "ERC-20 symbol of this token",
          "underlying_": "The address of the underlying asset"
        }
      },
      "exchangeRateCurrent()": {
        "return": "Calculated exchange rate scaled by 1e18"
      },
      "exchangeRateStored()": {
        "details": "This function does not accrue interest before calculating the exchange rate",
        "return": "Calculated exchange rate scaled by 1e18"
      },
      "getAccountSnapshot(address)": {
        "details": "This is used by comptroller to more efficiently perform liquidity checks.",
        "params": {
          "account": "Address of the account to snapshot"
        },
        "return": "(possible error, token balance, borrow balance, exchange rate mantissa)"
      },
      "getCash()": {
        "return": "The quantity of underlying asset owned by this contract"
      },
      "liquidateBorrow(address,uint256,address)": {
        "params": {
          "borrower": "The borrower of this cToken to be liquidated",
          "cTokenCollateral": "The market in which to seize collateral from the borrower",
          "repayAmount": "The amount of the underlying borrowed asset to repay"
        },
        "return": "uint 0=success, otherwise a failure (see ErrorReporter.sol for details)"
      },
      "mint(uint256)": {
        "details": "Accrues interest whether or not the operation succeeds, unless reverted",
        "params": {
          "mintAmount": "The amount of the underlying asset to supply"
        },
        "return": "uint 0=success, otherwise a failure (see ErrorReporter.sol for details)"
      },
      "redeem(uint256)": {
        "details": "Accrues interest whether or not the operation succeeds, unless reverted",
        "params": {
          "redeemTokens": "The number of cTokens to redeem into underlying"
        },
        "return": "uint 0=success, otherwise a failure (see ErrorReporter.sol for details)"
      },
      "redeemUnderlying(uint256)": {
        "details": "Accrues interest whether or not the operation succeeds, unless reverted",
        "params": {
          "redeemAmount": "The amount of underlying to redeem"
        },
        "return": "uint 0=success, otherwise a failure (see ErrorReporter.sol for details)"
      },
      "repayBorrow(uint256)": {
        "params": {
          "repayAmount": "The amount to repay"
        },
        "return": "uint 0=success, otherwise a failure (see ErrorReporter.sol for details)"
      },
      "repayBorrowBehalf(address,uint256)": {
        "params": {
          "borrower": "the account with the debt being payed off",
          "repayAmount": "The amount to repay"
        },
        "return": "uint 0=success, otherwise a failure (see ErrorReporter.sol for details)"
      },
      "seize(address,address,uint256)": {
        "details": "Will fail unless called by another cToken during the process of liquidation. Its absolutely critical to use msg.sender as the borrowed cToken and not a parameter.",
        "params": {
          "borrower": "The account having collateral seized",
          "liquidator": "The account receiving seized collateral",
          "seizeTokens": "The number of cTokens to seize"
        },
        "return": "uint 0=success, otherwise a failure (see ErrorReporter.sol for details)"
      },
      "supplyRatePerBlock()": {
        "return": "The supply interest rate per block, scaled by 1e18"
      },
      "totalBorrowsCurrent()": {
        "return": "The total borrows with interest"
      },
      "transfer(address,uint256)": {
        "params": {
          "amount": "The number of tokens to transfer",
          "dst": "The address of the destination account"
        },
        "return": "Whether or not the transfer succeeded"
      },
      "transferFrom(address,address,uint256)": {
        "params": {
          "amount": "The number of tokens to transfer",
          "dst": "The address of the destination account",
          "src": "The address of the source account"
        },
        "return": "Whether or not the transfer succeeded"
      }
    },
    "title": "Compound's CErc20 Contract"
  },
  "userdoc": {
    "methods": {
      "_acceptAdmin()": {
        "notice": "Accepts transfer of admin rights. msg.sender must be pendingAdmin"
      },
      "_reduceReserves(uint256)": {
        "notice": "Accrues interest and reduces reserves by transferring to admin"
      },
      "_setComptroller(address)": {
        "notice": "Sets a new comptroller for the market"
      },
      "_setInterestRateModel(address)": {
        "notice": "accrues interest and updates the interest rate model using _setInterestRateModelFresh"
      },
      "_setPendingAdmin(address)": {
        "notice": "Begins transfer of admin rights. The newPendingAdmin must call `_acceptAdmin` to finalize the transfer."
      },
      "_setReserveFactor(uint256)": {
        "notice": "accrues interest and sets a new reserve factor for the protocol using _setReserveFactorFresh"
      },
      "accrueInterest()": {
        "notice": "Applies accrued interest to total borrows and reserves."
      },
      "allowance(address,address)": {
        "notice": "Get the current allowance from `owner` for `spender`"
      },
      "approve(address,uint256)": {
        "notice": "Approve `spender` to transfer up to `amount` from `src`"
      },
      "balanceOf(address)": {
        "notice": "Get the token balance of the `owner`"
      },
      "balanceOfUnderlying(address)": {
        "notice": "Get the underlying balance of the `owner`"
      },
      "borrow(uint256)": {
        "notice": "Sender borrows assets from the protocol to their own address"
      },
      "borrowBalanceCurrent(address)": {
        "notice": "Accrue interest to updated borrowIndex and then calculate account's borrow balance using the updated borrowIndex"
      },
      "borrowBalanceStored(address)": {
        "notice": "Return the borrow balance of account based on stored data"
      },
      "borrowRatePerBlock()": {
        "notice": "Returns the current per-block borrow interest rate for this cToken"
      },
      "constructor": "Construct a new money market",
      "exchangeRateCurrent()": {
        "notice": "Accrue interest then return the up-to-date exchange rate"
      },
      "exchangeRateStored()": {
        "notice": "Calculates the exchange rate from the underlying to the CToken"
      },
      "getAccountSnapshot(address)": {
        "notice": "Get a snapshot of the account's balances, and the cached exchange rate"
      },
      "getCash()": {
        "notice": "Get cash balance of this cToken in the underlying asset"
      },
      "liquidateBorrow(address,uint256,address)": {
        "notice": "The sender liquidates the borrowers collateral. The collateral seized is transferred to the liquidator."
      },
      "mint(uint256)": {
        "notice": "Sender supplies assets into the market and receives cTokens in exchange"
      },
      "redeem(uint256)": {
        "notice": "Sender redeems cTokens in exchange for the underlying asset"
      },
      "redeemUnderlying(uint256)": {
        "notice": "Sender redeems cTokens in exchange for a specified amount of underlying asset"
      },
      "repayBorrow(uint256)": {
        "notice": "Sender repays their own borrow"
      },
      "repayBorrowBehalf(address,uint256)": {
        "notice": "Sender repays a borrow belonging to borrower"
      },
      "seize(address,address,uint256)": {
        "notice": "Transfers collateral tokens (this market) to the liquidator."
      },
      "supplyRatePerBlock()": {
        "notice": "Returns the current per-block supply interest rate for this cToken"
      },
      "totalBorrowsCurrent()": {
        "notice": "Returns the current total borrows plus accrued interest"
      },
      "transfer(address,uint256)": {
        "notice": "Transfer `amount` tokens from `msg.sender` to `dst`"
      },
      "transferFrom(address,address,uint256)": {
        "notice": "Transfer `amount` tokens from `src` to `dst`"
      }
    },
    "notice": "CTokens which wrap an EIP-20 underlying"
  }
}