Contract 0xAE8F37F0e8AD690486bFA2495113d7E94B7a7Ba6

 
Txn Hash Method
Block
From
To
Value
0x25971e4767c0bcdd95b8d95f137759147117c4a988feac5af452726b894a395cSet_new_Modifier96560152020-03-12 9:46:34467 days 11 hrs agoyearn: Deployer IN  0xae8f37f0e8ad690486bfa2495113d7e94b7a7ba60 Ether0.00102234737
0xb3cda296ab4d88058c5d3705be2b133133f92502a57d313405088184cc4e2c01Set_new_blocks P...96307592020-03-08 12:23:39471 days 8 hrs agoyearn: Deployer IN  0xae8f37f0e8ad690486bfa2495113d7e94b7a7ba60 Ether0.0002212328
0xc6de802b01c94f4d93b6fe03df160392546b6c9d8797cd6c1940681e5cde96f1Set_new_blocks P...96307412020-03-08 12:19:38471 days 8 hrs agoyearn: Deployer IN  0xae8f37f0e8ad690486bfa2495113d7e94b7a7ba60 Ether0.000221048
0x2e5b953a8af125aaa77140541d4a3986d173d9c40edbdd74975c1ea1a2f94a4cSet_new_blocks P...96299582020-03-08 9:23:10471 days 11 hrs agoyearn: Deployer IN  0xae8f37f0e8ad690486bfa2495113d7e94b7a7ba60 Ether0.0001659246
0xe2095ff127cb48022f4c937bc90752772833d08e991aa18c5286f3e09c944512Set_new_blocks P...96299512020-03-08 9:20:44471 days 11 hrs agoyearn: Deployer IN  0xae8f37f0e8ad690486bfa2495113d7e94b7a7ba60 Ether0.000221048
0x37652c03e7c9711cd967d99b8c10c787a04f78f0af7f6acc47a915f73cd3813dSet_new_blocks P...96103412020-03-05 9:09:50474 days 11 hrs agoyearn: Deployer IN  0xae8f37f0e8ad690486bfa2495113d7e94b7a7ba60 Ether0.0002212328
0x612748bc7b64f622aa95c310eb769aa5a5499a902037158592321ecb20a48f9dSet_new_blocks P...96103282020-03-05 9:06:27474 days 11 hrs agoyearn: Deployer IN  0xae8f37f0e8ad690486bfa2495113d7e94b7a7ba60 Ether0.000221048
0x0de5e17e22d967700e7f9ebffde1897eec96ca023b57eb34544a3044ed4fedb1Set_new_blocks P...96052402020-03-04 14:31:27475 days 6 hrs agoyearn: Deployer IN  0xae8f37f0e8ad690486bfa2495113d7e94b7a7ba60 Ether0.0002212328
0x3d690be2e268d40aca39c0975da0517a52ecdf3a77cfe490f3f8866c21c80955Set_new_Modifier96052212020-03-04 14:28:12475 days 6 hrs agoyearn: Deployer IN  0xae8f37f0e8ad690486bfa2495113d7e94b7a7ba60 Ether0.0002210488
0x4afeb55787f030360f249c462c4e8b8ab423626bb140ff84ae51a92639173e83Set_new_blocks P...96052112020-03-04 14:25:04475 days 6 hrs agoyearn: Deployer IN  0xae8f37f0e8ad690486bfa2495113d7e94b7a7ba60 Ether0.0002212328
0xc7844191b5dbcfe4e9f4d684b8479bcaf13e1dbb813e4d6f8ba0236d62a8694aSet_new_blocks P...96052032020-03-04 14:23:48475 days 6 hrs agoyearn: Deployer IN  0xae8f37f0e8ad690486bfa2495113d7e94b7a7ba60 Ether0.0002212328
0x3c3b5c27cea73d282688f539d2221fdbbc87764a591a51a540b138ab631403cfSet_new_blocks P...95712602020-02-28 9:21:02480 days 11 hrs agoyearn: Deployer IN  0xae8f37f0e8ad690486bfa2495113d7e94b7a7ba60 Ether0.0002212328
0x5d759e68fc283cb5f418ef3abe1165b244b9b8e6ab89bad99d1885d3130f2ebfSet_new_blocks P...95712512020-02-28 9:20:09480 days 11 hrs agoyearn: Deployer IN  0xae8f37f0e8ad690486bfa2495113d7e94b7a7ba60 Ether0.0002212328
0xc4a01f8b987f561e8cd07134679a5e5c9ba5c23c9d1dd4734f2e8aa4ddc1a482Set_new_blocks P...95712442020-02-28 9:18:22480 days 11 hrs agoyearn: Deployer IN  0xae8f37f0e8ad690486bfa2495113d7e94b7a7ba60 Ether0.0002212328
0x3b107d8e21bc1b9b00e9bd1998a5750e9775f7ffcc9c3c3f0bb662fb3f22c239Set_new_Modifier95527562020-02-25 13:01:01483 days 8 hrs agoyearn: Deployer IN  0xae8f37f0e8ad690486bfa2495113d7e94b7a7ba60 Ether0.0002210488
0xc8e951678826c94b6d70df55cb16a55bfff1a5ae77cf2bad030e1b4e0eaa1596Set_new_blocks P...95470202020-02-24 15:45:12484 days 5 hrs agoyearn: Deployer IN  0xae8f37f0e8ad690486bfa2495113d7e94b7a7ba60 Ether0.0002212328
0x7a0ef1ffb4c4a7a030c678b60192c0842da0779c369d7ce9564d4552dbaa50f4Set_new_blocks P...95470132020-02-24 15:43:47484 days 5 hrs agoyearn: Deployer IN  0xae8f37f0e8ad690486bfa2495113d7e94b7a7ba60 Ether0.0002212328
0x9bb0aae1b0f32e7945829f4c70e3dd9c41156d187c5a404f4338c9c7738e52e5Set_new_Modifier95469992020-02-24 15:39:20484 days 5 hrs agoyearn: Deployer IN  0xae8f37f0e8ad690486bfa2495113d7e94b7a7ba60 Ether0.0002210488
0x8af1cf2d37f14d8834dd73dca8dc5728a1ff223e3e6c21220196262aa584de17Set_new_blocks P...95058522020-02-18 7:52:00490 days 13 hrs agoyearn: Deployer IN  0xae8f37f0e8ad690486bfa2495113d7e94b7a7ba60 Ether0.0002212328
0x46cdcd2209128635844259fbaa2e2a42533e18f78fc2118a4336814a8a5a522fSet_new_blocks P...95058362020-02-18 7:48:11490 days 13 hrs agoyearn: Deployer IN  0xae8f37f0e8ad690486bfa2495113d7e94b7a7ba60 Ether0.0002212328
0x800a709a140e25e3df4f93975e1939490019f5ce2a3ffc9925f8b5884c18db53Set_new_blocks P...95058302020-02-18 7:47:12490 days 13 hrs agoyearn: Deployer IN  0xae8f37f0e8ad690486bfa2495113d7e94b7a7ba60 Ether0.0002212328
0xbaaf4eea158ac1d8d00bcca11889f70a8412047301c3482f4986e9d1d76fb456Set_new_blocks P...95058192020-02-18 7:45:15490 days 13 hrs agoyearn: Deployer IN  0xae8f37f0e8ad690486bfa2495113d7e94b7a7ba60 Ether0.0002212328
0xa383523c805c8855e80c31b661f5178f225f4cb6634298f4bc382f37618ced7aSet_new_blocks P...95058082020-02-18 7:43:08490 days 13 hrs agoyearn: Deployer IN  0xae8f37f0e8ad690486bfa2495113d7e94b7a7ba60 Ether0.0002488869
0x3665ad12059fb381a08ceca82190805d211145f4a643aaf14939325472c14c6bSet_new_blocks P...94376962020-02-07 20:14:31501 days 48 mins agoyearn: Deployer IN  0xae8f37f0e8ad690486bfa2495113d7e94b7a7ba60 Ether0.000138275
0xd3571a4823ea6c3e0d54b485e99c4e8545016904abb37723b33d30512a910dee0x6080604094376812020-02-07 20:11:37501 days 51 mins agoyearn: Deployer IN  Contract Creation0 Ether0.0179986655
[ Download CSV Export 
View more zero value Internal Transactions in Advanced View mode
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
APRWithPoolOracle

Compiler Version
v0.5.12+commit.7709ece9

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2020-02-07
*/

pragma solidity ^0.5.0;
pragma experimental ABIEncoderV2;

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function decimals() external view returns (uint8);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

contract Context {
    constructor () internal { }
    // solhint-disable-previous-line no-empty-blocks

    function _msgSender() internal view returns (address payable) {
        return msg.sender;
    }

    function _msgData() internal view returns (bytes memory) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}
contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    constructor () internal {
        _owner = _msgSender();
        emit OwnershipTransferred(address(0), _owner);
    }
    function owner() public view returns (address) {
        return _owner;
    }
    modifier onlyOwner() {
        require(isOwner(), "Ownable: caller is not the owner");
        _;
    }
    function isOwner() public view returns (bool) {
        return _msgSender() == _owner;
    }
    function renounceOwnership() public onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }
    function transferOwnership(address newOwner) public onlyOwner {
        _transferOwnership(newOwner);
    }
    function _transferOwnership(address newOwner) internal {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

library SafeMath {
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;

        return c;
    }
    function divCeil(
        uint256 a,
        uint256 b
    )
        internal
        pure
        returns (uint256)
    {
        uint256 quotient = div(a, b);
        uint256 remainder = a - quotient * b;
        if (remainder > 0) {
            return quotient + 1;
        } else {
            return quotient;
        }
    }
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

library Decimal {
    using SafeMath for uint256;

    uint256 constant BASE = 10**18;

    function one()
        internal
        pure
        returns (uint256)
    {
        return BASE;
    }

    function onePlus(
        uint256 d
    )
        internal
        pure
        returns (uint256)
    {
        return d.add(BASE);
    }

    function mulFloor(
        uint256 target,
        uint256 d
    )
        internal
        pure
        returns (uint256)
    {
        return target.mul(d) / BASE;
    }

    function mulCeil(
        uint256 target,
        uint256 d
    )
        internal
        pure
        returns (uint256)
    {
        return target.mul(d).divCeil(BASE);
    }

    function divFloor(
        uint256 target,
        uint256 d
    )
        internal
        pure
        returns (uint256)
    {
        return target.mul(BASE).div(d);
    }

    function divCeil(
        uint256 target,
        uint256 d
    )
        internal
        pure
        returns (uint256)
    {
        return target.mul(BASE).divCeil(d);
    }
}

library Address {
    function isContract(address account) internal view returns (bool) {
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(account) }
        return (codehash != 0x0 && codehash != accountHash);
    }
    function toPayable(address account) internal pure returns (address payable) {
        return address(uint160(account));
    }
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        // solhint-disable-next-line avoid-call-value
        (bool success, ) = recipient.call.value(amount)("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }
}

// Compound
interface Compound {
  function interestRateModel() external view returns (address);
  function reserveFactorMantissa() external view returns (uint256);
  function totalBorrows() external view returns (uint256);
  function totalReserves() external view returns (uint256);

  function supplyRatePerBlock() external view returns (uint);
  function getCash() external view returns (uint256);
}

// Fulcrum
interface Fulcrum {
  function supplyInterestRate() external view returns (uint256);
  function nextSupplyInterestRate(uint256 supplyAmount) external view returns (uint256);
}

interface DyDx {
  struct val {
       uint256 value;
   }

   struct set {
      uint128 borrow;
      uint128 supply;
  }

  function getEarningsRate() external view returns (val memory);
  function getMarketInterestRate(uint256 marketId) external view returns (val memory);
  function getMarketTotalPar(uint256 marketId) external view returns (set memory);
}

interface LendingPoolAddressesProvider {
    function getLendingPoolCore() external view returns (address);
}

interface LendingPoolCore  {
  function getReserveCurrentLiquidityRate(address _reserve)
  external
  view
  returns (
      uint256 liquidityRate
  );
  function getReserveInterestRateStrategyAddress(address _reserve) external view returns (address);
  function getReserveTotalBorrows(address _reserve) external view returns (uint256);
  function getReserveTotalBorrowsStable(address _reserve) external view returns (uint256);
  function getReserveTotalBorrowsVariable(address _reserve) external view returns (uint256);
  function getReserveCurrentAverageStableBorrowRate(address _reserve)
     external
     view
     returns (uint256);
  function getReserveAvailableLiquidity(address _reserve) external view returns (uint256);
}

interface IReserveInterestRateStrategy {

    function getBaseVariableBorrowRate() external view returns (uint256);
    function calculateInterestRates(
        address _reserve,
        uint256 _utilizationRate,
        uint256 _totalBorrowsStable,
        uint256 _totalBorrowsVariable,
        uint256 _averageStableBorrowRate)
    external
    view
    returns (uint256 liquidityRate, uint256 stableBorrowRate, uint256 variableBorrowRate);
}

interface InterestRateModel {
  function getSupplyRate(uint cash, uint borrows, uint reserves, uint reserveFactorMantissa) external view returns (uint);
}

contract Structs {
  struct Asset {
    address lendingPool;
    address priceOralce;
    address interestModel;
  }
}

contract IDDEX is Structs {

  function getInterestRates(address token, uint256 extraBorrowAmount)
    external
    view
    returns (uint256 borrowInterestRate, uint256 supplyInterestRate);
  function getIndex(address token)
    external
    view
    returns (uint256 supplyIndex, uint256 borrowIndex);
  function getTotalSupply(address asset)
    external
    view
    returns (uint256 amount);
  function getTotalBorrow(address asset)
    external
    view
    returns (uint256 amount);
  function getAsset(address token)
    external
    view returns (Asset memory asset);
}

interface IDDEXModel {
  function polynomialInterestModel(uint256 borrowRatio) external view returns (uint256);
}

interface ILendF {
  function getSupplyBalance(address account, address token)
    external
    view
    returns (uint256);
  function supplyBalances(address account, address token)
    external
    view
    returns (uint256 principal, uint256 interestIndex);
  function supply(address asset, uint256 amount) external;
  function withdraw(address asset, uint256 amount) external;
  function markets(address asset) external view returns (
    bool isSupported,
    uint256 blockNumber,
    address interestRateModel,
    uint256 totalSupply,
    uint256 supplyRateMantissa,
    uint256 supplyIndex,
    uint256 totalBorrows,
    uint256 borrowRateMantissa,
    uint256 borrowIndex
  );
}

interface ICurveFi {
  function get_virtual_price() external view returns (uint256);
}

interface ILendFModel {
    function getSupplyRate(address asset, uint cash, uint borrows) external view returns (uint, uint);
}

contract APRWithPoolOracle is Ownable, Structs {
  using SafeMath for uint256;
  using Address for address;

  uint256 DECIMAL = 10 ** 18;

  address public DYDX;
  address public AAVE;
  address public DDEX;
  address public LENDF;
  address public CURVEFI;

  uint256 public liquidationRatio;
  uint256 public dydxModifier;
  uint256 public blocksPerYear;

  constructor() public {
    DYDX = address(0x1E0447b19BB6EcFdAe1e4AE1694b0C3659614e4e);
    AAVE = address(0x24a42fD28C976A61Df5D00D0599C34c4f90748c8);
    DDEX = address(0x241e82C79452F51fbfc89Fac6d912e021dB1a3B7);
    LENDF = address(0x0eEe3E3828A45f7601D5F54bF49bB01d1A9dF5ea);
    CURVEFI = address(0x2e60CF74d81ac34eB21eEff58Db4D385920ef419);
    liquidationRatio = 50000000000000000;
    dydxModifier = 20;
    // 3153600 seconds div 13 second blocks
    blocksPerYear = 242584;
  }

  function set_new_AAVE(address _new_AAVE) public onlyOwner {
      AAVE = _new_AAVE;
  }
  function set_new_CURVEFI(address _new_CURVEFI) public onlyOwner {
      CURVEFI = _new_CURVEFI;
  }
  function set_new_DDEX(address _new_DDEX) public onlyOwner {
      DDEX = _new_DDEX;
  }
  function set_new_DYDX(address _new_DYDX) public onlyOwner {
      DYDX = _new_DYDX;
  }
  function set_new_LENDF(address _new_LENDF) public onlyOwner {
      LENDF = _new_LENDF;
  }
  function set_new_Ratio(uint256 _new_Ratio) public onlyOwner {
      liquidationRatio = _new_Ratio;
  }
  function set_new_Modifier(uint256 _new_Modifier) public onlyOwner {
      dydxModifier = _new_Modifier;
  }
  function set_new_blocksPerYear(uint256 _new_blocksPerYear) public onlyOwner {
      blocksPerYear = _new_blocksPerYear;
  }

  function getLENDFAPR(address token) public view returns (uint256) {
    (,,,,uint256 supplyRateMantissa,,,,) = ILendF(LENDF).markets(token);
    return supplyRateMantissa.mul(blocksPerYear);
  }

  function getLENDFAPRAdjusted(address token, uint256 supply) public view returns (uint256) {
    if (token == address(0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE)) {
      return 0;
    }
    uint256 totalCash = IERC20(token).balanceOf(LENDF).add(supply);
    (,, address interestRateModel,,,, uint256 totalBorrows,,) = ILendF(LENDF).markets(token);
    if (interestRateModel == address(0)) {
      return 0;
    }
    (, uint256 supplyRateMantissa) = ILendFModel(interestRateModel).getSupplyRate(token, totalCash, totalBorrows);
    return supplyRateMantissa.mul(blocksPerYear);
  }

  function getDDEXAPR(address token) public view returns (uint256) {
    if (token == address(0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE)) {
      token = address(0x000000000000000000000000000000000000000E);
    }
    (uint256 supplyIndex,) = IDDEX(DDEX).getIndex(token);
    if (supplyIndex == 0) {
      return 0;
    }
    (,uint256 supplyRate) = IDDEX(DDEX).getInterestRates(token, 0);
    return supplyRate;
  }

  function getDDEXAPRAdjusted(address token, uint256 _supply) public view returns (uint256) {
    if (token == address(0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE)) {
      token = address(0x000000000000000000000000000000000000000E);
    }
    (uint256 supplyIndex,) = IDDEX(DDEX).getIndex(token);
    if (supplyIndex == 0) {
      return 0;
    }
    uint256 supply = IDDEX(DDEX).getTotalSupply(token).add(_supply);
    uint256 borrow = IDDEX(DDEX).getTotalBorrow(token);
    uint256 borrowRatio = borrow.mul(Decimal.one()).div(supply);
    address interestRateModel = IDDEX(DDEX).getAsset(token).interestModel;
    uint256 borrowRate = IDDEXModel(interestRateModel).polynomialInterestModel(borrowRatio);
    uint256 borrowInterest = Decimal.mulCeil(borrow, borrowRate);
    uint256 supplyInterest = Decimal.mulFloor(borrowInterest, Decimal.one().sub(liquidationRatio));
    return Decimal.divFloor(supplyInterest, supply);
  }

  function getCompoundAPR(address token) public view returns (uint256) {
    return Compound(token).supplyRatePerBlock().mul(blocksPerYear);
  }

  function getCompoundAPRAdjusted(address token, uint256 _supply) public view returns (uint256) {
    Compound c = Compound(token);
    address model = Compound(token).interestRateModel();
    if (model == address(0)) {
      return c.supplyRatePerBlock().mul(blocksPerYear);
    }
    InterestRateModel i = InterestRateModel(model);
    uint256 cashPrior = c.getCash().add(_supply);
    return i.getSupplyRate(cashPrior, c.totalBorrows(), c.totalReserves().add(_supply), c.reserveFactorMantissa()).mul(blocksPerYear);
  }

  function getFulcrumAPR(address token) public view returns(uint256) {
    return Fulcrum(token).supplyInterestRate().div(100);
  }

  function getFulcrumAPRAdjusted(address token, uint256 _supply) public view returns(uint256) {
    return Fulcrum(token).nextSupplyInterestRate(_supply).div(100);
  }

  function getDyDxAPR(uint256 marketId) public view returns(uint256) {
    uint256 rate      = DyDx(DYDX).getMarketInterestRate(marketId).value;
    uint256 aprBorrow = rate * 31622400;
    uint256 borrow    = DyDx(DYDX).getMarketTotalPar(marketId).borrow;
    uint256 supply    = DyDx(DYDX).getMarketTotalPar(marketId).supply;
    uint256 usage     = (borrow * DECIMAL) / supply;
    uint256 apr       = (((aprBorrow * usage) / DECIMAL) * DyDx(DYDX).getEarningsRate().value) / DECIMAL;
    return apr;
  }

  function getCurveAPR(address curve) public view returns (uint256) {
    uint256 blocks = block.number.sub(9325883);
    uint256 price = ICurveFi(curve).get_virtual_price().sub(1e18);
    return price.mul(blocksPerYear).div(blocks);
  }

  function getDyDxAPRAdjusted(uint256 marketId, uint256 _supply) public view returns(uint256) {
    uint256 rate      = DyDx(DYDX).getMarketInterestRate(marketId).value;
    // Arbitrary value to offset calculations
    _supply = _supply.mul(dydxModifier);
    uint256 aprBorrow = rate * 31622400;
    uint256 borrow    = DyDx(DYDX).getMarketTotalPar(marketId).borrow;
    uint256 supply    = DyDx(DYDX).getMarketTotalPar(marketId).supply;
    supply = supply.add(_supply);
    uint256 usage     = (borrow * DECIMAL) / supply;
    uint256 apr       = (((aprBorrow * usage) / DECIMAL) * DyDx(DYDX).getEarningsRate().value) / DECIMAL;
    return apr;
  }

  function getAaveCore() public view returns (address) {
    return address(LendingPoolAddressesProvider(AAVE).getLendingPoolCore());
  }

  function getAaveAPR(address token) public view returns (uint256) {
    LendingPoolCore core = LendingPoolCore(LendingPoolAddressesProvider(AAVE).getLendingPoolCore());
    return core.getReserveCurrentLiquidityRate(token).div(1e9);
  }

  function getAaveAPRAdjusted(address token, uint256 _supply) public view returns (uint256) {
    LendingPoolCore core = LendingPoolCore(LendingPoolAddressesProvider(AAVE).getLendingPoolCore());
    IReserveInterestRateStrategy apr = IReserveInterestRateStrategy(core.getReserveInterestRateStrategyAddress(token));
    (uint256 newLiquidityRate,,) = apr.calculateInterestRates(
      token,
      core.getReserveAvailableLiquidity(token).add(_supply),
      core.getReserveTotalBorrowsStable(token),
      core.getReserveTotalBorrowsVariable(token),
      core.getReserveCurrentAverageStableBorrowRate(token)
    );
    return newLiquidityRate.div(1e9);
  }

  // incase of half-way error
  function inCaseTokenGetsStuck(IERC20 _TokenAddress) onlyOwner public {
      uint qty = _TokenAddress.balanceOf(address(this));
      _TokenAddress.transfer(msg.sender, qty);
  }
  // incase of half-way error
  function inCaseETHGetsStuck() onlyOwner public{
      (bool result, ) = msg.sender.call.value(address(this).balance)("");
      require(result, "transfer of ETH failed");
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"constant":true,"inputs":[],"name":"AAVE","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"CURVEFI","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"DDEX","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"DYDX","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"LENDF","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"blocksPerYear","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"dydxModifier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"getAaveAPR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"_supply","type":"uint256"}],"name":"getAaveAPRAdjusted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getAaveCore","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"getCompoundAPR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"_supply","type":"uint256"}],"name":"getCompoundAPRAdjusted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"curve","type":"address"}],"name":"getCurveAPR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"getDDEXAPR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"_supply","type":"uint256"}],"name":"getDDEXAPRAdjusted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"marketId","type":"uint256"}],"name":"getDyDxAPR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"marketId","type":"uint256"},{"internalType":"uint256","name":"_supply","type":"uint256"}],"name":"getDyDxAPRAdjusted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"getFulcrumAPR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"_supply","type":"uint256"}],"name":"getFulcrumAPRAdjusted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"getLENDFAPR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"supply","type":"uint256"}],"name":"getLENDFAPRAdjusted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"inCaseETHGetsStuck","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"contract IERC20","name":"_TokenAddress","type":"address"}],"name":"inCaseTokenGetsStuck","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"liquidationRatio","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_new_AAVE","type":"address"}],"name":"set_new_AAVE","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_new_CURVEFI","type":"address"}],"name":"set_new_CURVEFI","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_new_DDEX","type":"address"}],"name":"set_new_DDEX","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_new_DYDX","type":"address"}],"name":"set_new_DYDX","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_new_LENDF","type":"address"}],"name":"set_new_LENDF","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_new_Modifier","type":"uint256"}],"name":"set_new_Modifier","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_new_Ratio","type":"uint256"}],"name":"set_new_Ratio","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_new_blocksPerYear","type":"uint256"}],"name":"set_new_blocksPerYear","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}]

6080604052670de0b6b3a76400006001553480156200001d57600080fd5b506200002e620002b860201b60201c565b6000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3731e0447b19bb6ecfdae1e4ae1694b0c3659614e4e600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507324a42fd28c976a61df5d00d0599c34c4f90748c8600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073241e82c79452f51fbfc89fac6d912e021db1a3b7600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550730eee3e3828a45f7601d5f54bf49bb01d1a9df5ea600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550732e60cf74d81ac34eb21eeff58db4d385920ef419600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555066b1a2bc2ec5000060078190555060146008819055506203b398600981905550620002c0565b600033905090565b613c5980620002d06000396000f3fe608060405234801561001057600080fd5b506004361061021c5760003560e01c80638f32d59b11610125578063c043fca2116100ad578063f60a15ed1161007c578063f60a15ed14610663578063f78c98c21461066d578063f82ce27d14610689578063fb73c832146106a7578063fcc01c7b146106d75761021c565b8063c043fca2146105dd578063d9dc7399146105fb578063ddf1084214610617578063f2fde38b146106475761021c565b80639f71b462116100f45780639f71b46214610539578063a385fb9614610557578063ae600c4514610575578063baad1ad114610591578063bdaaff95146105c15761021c565b80638f32d59b146104af57806390ece0de146104cd57806393195e72146104eb578063989eaa9c146105095761021c565b80634f5dd969116101a8578063768528931161017757806376852893146103f9578063812adb061461041557806381d24d8d1461043157806383deca3d146104615780638da5cb5b146104915761021c565b80634f5dd969146103715780636d5ccd18146103a1578063715018a6146103bf57806373824dae146103c95761021c565b80632c7a5ae4116101ef5780632c7a5ae4146102bb5780632e8d6e18146102d757806344e258b4146102f357806348ccda3c146103235780634eff75d8146103415761021c565b80630e775fd5146102215780631775765f14610251578063192a98611461026f5780632a71abe31461029f575b600080fd5b61023b600480360361023691908101906132f2565b610707565b60405161024891906139ed565b60405180910390f35b6102596109c9565b60405161026691906139ed565b60405180910390f35b610289600480360361028491908101906132a0565b6109cf565b60405161029691906139ed565b60405180910390f35b6102b960048036036102b491908101906134c1565b610b1b565b005b6102d560048036036102d091908101906132a0565b610b6c565b005b6102f160048036036102ec919081019061341d565b610bf7565b005b61030d600480360361030891908101906132a0565b610d5d565b60405161031a91906139ed565b60405180910390f35b61032b610df8565b6040516103389190613819565b60405180910390f35b61035b600480360361035691908101906132f2565b610e1e565b60405161036891906139ed565b60405180910390f35b61038b600480360361038691908101906132a0565b610ec4565b60405161039891906139ed565b60405180910390f35b6103a9610f9a565b6040516103b69190613819565b60405180910390f35b6103c7610fc0565b005b6103e360048036036103de91908101906132f2565b6110c6565b6040516103f091906139ed565b60405180910390f35b610413600480360361040e91908101906132a0565b611509565b005b61042f600480360361042a91908101906132a0565b611594565b005b61044b600480360361044691908101906134c1565b61161f565b60405161045891906139ed565b60405180910390f35b61047b600480360361047691908101906132a0565b611948565b60405161048891906139ed565b60405180910390f35b6104996119e2565b6040516104a69190613819565b60405180910390f35b6104b7611a0b565b6040516104c49190613910565b60405180910390f35b6104d5611a69565b6040516104e29190613819565b60405180910390f35b6104f3611a8f565b6040516105009190613819565b60405180910390f35b610523600480360361051e91908101906132f2565b611ab5565b60405161053091906139ed565b60405180910390f35b610541611ed2565b60405161054e91906139ed565b60405180910390f35b61055f611ed8565b60405161056c91906139ed565b60405180910390f35b61058f600480360361058a91908101906132a0565b611ede565b005b6105ab60048036036105a691908101906132a0565b611f69565b6040516105b891906139ed565b60405180910390f35b6105db60048036036105d691908101906132a0565b612050565b005b6105e56120db565b6040516105f29190613819565b60405180910390f35b610615600480360361061091908101906134c1565b612101565b005b610631600480360361062c91908101906132a0565b612152565b60405161063e91906139ed565b60405180910390f35b610661600480360361065c91908101906132a0565b612320565b005b61066b612373565b005b610687600480360361068291908101906134c1565b612480565b005b6106916124d1565b60405161069e9190613819565b60405180910390f35b6106c160048036036106bc91908101906132f2565b612578565b6040516106ce91906139ed565b60405180910390f35b6106f160048036036106ec9190810190613513565b6129a2565b6040516106fe91906139ed565b60405180910390f35b600073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561075a57600090506109c3565b6000610819838573ffffffffffffffffffffffffffffffffffffffff166370a08231600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b81526004016107bb9190613819565b60206040518083038186803b1580156107d357600080fd5b505afa1580156107e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061080b91908101906134ea565b612cf890919063ffffffff16565b9050600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638e8f294b876040518263ffffffff1660e01b81526004016108799190613819565b6101206040518083038186803b15801561089257600080fd5b505afa1580156108a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506108ca9190810190613357565b5050965050505093505050600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561091657600093505050506109c3565b60008273ffffffffffffffffffffffffffffffffffffffff1663517cf73e8886856040518463ffffffff1660e01b815260040161095593929190613886565b604080518083038186803b15801561096c57600080fd5b505afa158015610980573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506109a4919081019061354f565b9150506109bc60095482612d4d90919063ffffffff16565b9450505050505b92915050565b60075481565b600080600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ed6ff7606040518163ffffffff1660e01b815260040160206040518083038186803b158015610a3a57600080fd5b505afa158015610a4e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610a7291908101906132c9565b9050610b13633b9aca008273ffffffffffffffffffffffffffffffffffffffff1663c540148e866040518263ffffffff1660e01b8152600401610ab59190613819565b60206040518083038186803b158015610acd57600080fd5b505afa158015610ae1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610b0591908101906134ea565b612dbd90919063ffffffff16565b915050919050565b610b23611a0b565b610b62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b59906139cd565b60405180910390fd5b8060078190555050565b610b74611a0b565b610bb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610baa906139cd565b60405180910390fd5b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610bff611a0b565b610c3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c35906139cd565b60405180910390fd5b60008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610c799190613819565b60206040518083038186803b158015610c9157600080fd5b505afa158015610ca5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610cc991908101906134ea565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401610d06929190613834565b602060405180830381600087803b158015610d2057600080fd5b505af1158015610d34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610d58919081019061332e565b505050565b6000610df16009548373ffffffffffffffffffffffffffffffffffffffff1663ae9d70b06040518163ffffffff1660e01b815260040160206040518083038186803b158015610dab57600080fd5b505afa158015610dbf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610de391908101906134ea565b612d4d90919063ffffffff16565b9050919050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000610ebc60648473ffffffffffffffffffffffffffffffffffffffff1663d65a5021856040518263ffffffff1660e01b8152600401610e5e91906139ed565b60206040518083038186803b158015610e7657600080fd5b505afa158015610e8a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610eae91908101906134ea565b612dbd90919063ffffffff16565b905092915050565b600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638e8f294b846040518263ffffffff1660e01b8152600401610f229190613819565b6101206040518083038186803b158015610f3b57600080fd5b505afa158015610f4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610f739190810190613357565b50505050945050505050610f9260095482612d4d90919063ffffffff16565b915050919050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610fc8611a0b565b611007576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ffe906139cd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561111557600e92505b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b31610db856040518263ffffffff1660e01b81526004016111729190613819565b604080518083038186803b15801561118957600080fd5b505afa15801561119d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506111c1919081019061354f565b50905060008114156111d7576000915050611503565b600061129684600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166368da10ae886040518263ffffffff1660e01b81526004016112389190613819565b60206040518083038186803b15801561125057600080fd5b505afa158015611264573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061128891908101906134ea565b612cf890919063ffffffff16565b90506000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638538d14e876040518263ffffffff1660e01b81526004016112f59190613819565b60206040518083038186803b15801561130d57600080fd5b505afa158015611321573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061134591908101906134ea565b9050600061137583611367611358612e07565b85612d4d90919063ffffffff16565b612dbd90919063ffffffff16565b90506000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166330b8b2c6896040518263ffffffff1660e01b81526004016113d49190613819565b60606040518083038186803b1580156113ec57600080fd5b505afa158015611400573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506114249190810190613446565b60400151905060008173ffffffffffffffffffffffffffffffffffffffff166369e8a15f846040518263ffffffff1660e01b815260040161146591906139ed565b60206040518083038186803b15801561147d57600080fd5b505afa158015611491573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506114b591908101906134ea565b905060006114c38583612e17565b905060006114ec826114e76007546114d9612e07565b612e4e90919063ffffffff16565b612e98565b90506114f88188612ec6565b985050505050505050505b92915050565b611511611a0b565b611550576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611547906139cd565b60405180910390fd5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61159c611a0b565b6115db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d2906139cd565b60405180910390fd5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600080600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fd47eda6846040518263ffffffff1660e01b815260040161167d91906139ed565b60206040518083038186803b15801561169557600080fd5b505afa1580156116a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506116cd9190810190613498565b60000151905060006301e28500820290506000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663cb04a34c866040518263ffffffff1660e01b815260040161173b91906139ed565b604080518083038186803b15801561175257600080fd5b505afa158015611766573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061178a919081019061346f565b600001516fffffffffffffffffffffffffffffffff1690506000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663cb04a34c876040518263ffffffff1660e01b81526004016117ff91906139ed565b604080518083038186803b15801561181657600080fd5b505afa15801561182a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061184e919081019061346f565b602001516fffffffffffffffffffffffffffffffff16905060008160015484028161187557fe5b0490506000600154600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e55202286040518163ffffffff1660e01b815260040160206040518083038186803b1580156118e557600080fd5b505afa1580156118f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061191d9190810190613498565b600001516001548488028161192e57fe5b04028161193757fe5b049050809650505050505050919050565b60006119db60648373ffffffffffffffffffffffffffffffffffffffff166309ec6b6b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561199557600080fd5b505afa1580156119a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506119cd91908101906134ea565b612dbd90919063ffffffff16565b9050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611a4d612efd565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ed6ff7606040518163ffffffff1660e01b815260040160206040518083038186803b158015611b2057600080fd5b505afa158015611b34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611b5891908101906132c9565b905060008173ffffffffffffffffffffffffffffffffffffffff16636ae14416866040518263ffffffff1660e01b8152600401611b959190613819565b60206040518083038186803b158015611bad57600080fd5b505afa158015611bc1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611be591908101906132c9565b905060008173ffffffffffffffffffffffffffffffffffffffff166357e37af087611ca1888773ffffffffffffffffffffffffffffffffffffffff1663e24030198c6040518263ffffffff1660e01b8152600401611c439190613819565b60206040518083038186803b158015611c5b57600080fd5b505afa158015611c6f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611c9391908101906134ea565b612cf890919063ffffffff16565b8673ffffffffffffffffffffffffffffffffffffffff16637f90fec58b6040518263ffffffff1660e01b8152600401611cda9190613819565b60206040518083038186803b158015611cf257600080fd5b505afa158015611d06573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611d2a91908101906134ea565b8773ffffffffffffffffffffffffffffffffffffffff166398bd47378c6040518263ffffffff1660e01b8152600401611d639190613819565b60206040518083038186803b158015611d7b57600080fd5b505afa158015611d8f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611db391908101906134ea565b8873ffffffffffffffffffffffffffffffffffffffff166346bc0f288d6040518263ffffffff1660e01b8152600401611dec9190613819565b60206040518083038186803b158015611e0457600080fd5b505afa158015611e18573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611e3c91908101906134ea565b6040518663ffffffff1660e01b8152600401611e5c9594939291906138bd565b60606040518083038186803b158015611e7457600080fd5b505afa158015611e88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611eac919081019061358b565b50509050611ec7633b9aca0082612dbd90919063ffffffff16565b935050505092915050565b60085481565b60095481565b611ee6611a0b565b611f25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1c906139cd565b60405180910390fd5b80600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600080611f82628e4d3b43612e4e90919063ffffffff16565b9050600061201e670de0b6b3a76400008573ffffffffffffffffffffffffffffffffffffffff1663bb7b8b806040518163ffffffff1660e01b815260040160206040518083038186803b158015611fd857600080fd5b505afa158015611fec573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061201091908101906134ea565b612e4e90919063ffffffff16565b90506120478261203960095484612d4d90919063ffffffff16565b612dbd90919063ffffffff16565b92505050919050565b612058611a0b565b612097576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208e906139cd565b60405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b612109611a0b565b612148576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213f906139cd565b60405180910390fd5b8060088190555050565b600073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156121a157600e91505b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b31610db846040518263ffffffff1660e01b81526004016121fe9190613819565b604080518083038186803b15801561221557600080fd5b505afa158015612229573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061224d919081019061354f565b509050600081141561226357600091505061231b565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166343239e9b8560006040518363ffffffff1660e01b81526004016122c392919061385d565b604080518083038186803b1580156122da57600080fd5b505afa1580156122ee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612312919081019061354f565b91505080925050505b919050565b612328611a0b565b612367576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235e906139cd565b60405180910390fd5b61237081612f05565b50565b61237b611a0b565b6123ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123b1906139cd565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff16316040516123f790613804565b60006040518083038185875af1925050503d8060008114612434576040519150601f19603f3d011682016040523d82523d6000602084013e612439565b606091505b505090508061247d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124749061398d565b60405180910390fd5b50565b612488611a0b565b6124c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124be906139cd565b60405180910390fd5b8060098190555050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ed6ff7606040518163ffffffff1660e01b815260040160206040518083038186803b15801561253b57600080fd5b505afa15801561254f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061257391908101906132c9565b905090565b60008083905060008473ffffffffffffffffffffffffffffffffffffffff1663f3fdb15a6040518163ffffffff1660e01b815260040160206040518083038186803b1580156125c657600080fd5b505afa1580156125da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506125fe91908101906132c9565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156126d0576126c76009548373ffffffffffffffffffffffffffffffffffffffff1663ae9d70b06040518163ffffffff1660e01b815260040160206040518083038186803b15801561268157600080fd5b505afa158015612695573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506126b991908101906134ea565b612d4d90919063ffffffff16565b9250505061299c565b60008190506000612767868573ffffffffffffffffffffffffffffffffffffffff16633b1d21a26040518163ffffffff1660e01b815260040160206040518083038186803b15801561272157600080fd5b505afa158015612735573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061275991908101906134ea565b612cf890919063ffffffff16565b90506129956009548373ffffffffffffffffffffffffffffffffffffffff1663b8168816848873ffffffffffffffffffffffffffffffffffffffff166347bd37186040518163ffffffff1660e01b815260040160206040518083038186803b1580156127d257600080fd5b505afa1580156127e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061280a91908101906134ea565b61289a8c8b73ffffffffffffffffffffffffffffffffffffffff16638f840ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561285457600080fd5b505afa158015612868573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061288c91908101906134ea565b612cf890919063ffffffff16565b8a73ffffffffffffffffffffffffffffffffffffffff1663173b99046040518163ffffffff1660e01b815260040160206040518083038186803b1580156128e057600080fd5b505afa1580156128f4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061291891908101906134ea565b6040518563ffffffff1660e01b81526004016129379493929190613a08565b60206040518083038186803b15801561294f57600080fd5b505afa158015612963573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061298791908101906134ea565b612d4d90919063ffffffff16565b9450505050505b92915050565b600080600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fd47eda6856040518263ffffffff1660e01b8152600401612a0091906139ed565b60206040518083038186803b158015612a1857600080fd5b505afa158015612a2c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612a509190810190613498565b600001519050612a6b60085484612d4d90919063ffffffff16565b925060006301e28500820290506000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663cb04a34c876040518263ffffffff1660e01b8152600401612ad591906139ed565b604080518083038186803b158015612aec57600080fd5b505afa158015612b00573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612b24919081019061346f565b600001516fffffffffffffffffffffffffffffffff1690506000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663cb04a34c886040518263ffffffff1660e01b8152600401612b9991906139ed565b604080518083038186803b158015612bb057600080fd5b505afa158015612bc4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612be8919081019061346f565b602001516fffffffffffffffffffffffffffffffff169050612c138682612cf890919063ffffffff16565b9050600081600154840281612c2457fe5b0490506000600154600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e55202286040518163ffffffff1660e01b815260040160206040518083038186803b158015612c9457600080fd5b505afa158015612ca8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612ccc9190810190613498565b6000015160015484880281612cdd57fe5b040281612ce657fe5b04905080965050505050505092915050565b600080828401905083811015612d43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d3a9061396d565b60405180910390fd5b8091505092915050565b600080831415612d605760009050612db7565b6000828402905082848281612d7157fe5b0414612db2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612da9906139ad565b60405180910390fd5b809150505b92915050565b6000612dff83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613033565b905092915050565b6000670de0b6b3a7640000905090565b6000612e46670de0b6b3a7640000612e388486612d4d90919063ffffffff16565b61309490919063ffffffff16565b905092915050565b6000612e9083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506130ce565b905092915050565b6000670de0b6b3a7640000612eb68385612d4d90919063ffffffff16565b81612ebd57fe5b04905092915050565b6000612ef582612ee7670de0b6b3a764000086612d4d90919063ffffffff16565b612dbd90919063ffffffff16565b905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612f75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f6c9061394d565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000808311829061307a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613071919061392b565b60405180910390fd5b50600083858161308657fe5b049050809150509392505050565b6000806130a18484612dbd565b905060008382028503905060008111156130c25760018201925050506130c8565b81925050505b92915050565b6000838311158290613116576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161310d919061392b565b60405180910390fd5b5060008385039050809150509392505050565b60008135905061313881613ba3565b92915050565b60008151905061314d81613ba3565b92915050565b60008151905061316281613bba565b92915050565b60008135905061317781613bd1565b92915050565b60006060828403121561318f57600080fd5b6131996060613a4d565b905060006131a98482850161313e565b60008301525060206131bd8482850161313e565b60208301525060406131d18482850161313e565b60408301525092915050565b6000604082840312156131ef57600080fd5b6131f96040613a4d565b9050600061320984828501613261565b600083015250602061321d84828501613261565b60208301525092915050565b60006020828403121561323b57600080fd5b6132456020613a4d565b905060006132558482850161328b565b60008301525092915050565b60008151905061327081613be8565b92915050565b60008135905061328581613bff565b92915050565b60008151905061329a81613bff565b92915050565b6000602082840312156132b257600080fd5b60006132c084828501613129565b91505092915050565b6000602082840312156132db57600080fd5b60006132e98482850161313e565b91505092915050565b6000806040838503121561330557600080fd5b600061331385828601613129565b925050602061332485828601613276565b9150509250929050565b60006020828403121561334057600080fd5b600061334e84828501613153565b91505092915050565b60008060008060008060008060006101208a8c03121561337657600080fd5b60006133848c828d01613153565b99505060206133958c828d0161328b565b98505060406133a68c828d0161313e565b97505060606133b78c828d0161328b565b96505060806133c88c828d0161328b565b95505060a06133d98c828d0161328b565b94505060c06133ea8c828d0161328b565b93505060e06133fb8c828d0161328b565b92505061010061340d8c828d0161328b565b9150509295985092959850929598565b60006020828403121561342f57600080fd5b600061343d84828501613168565b91505092915050565b60006060828403121561345857600080fd5b60006134668482850161317d565b91505092915050565b60006040828403121561348157600080fd5b600061348f848285016131dd565b91505092915050565b6000602082840312156134aa57600080fd5b60006134b884828501613229565b91505092915050565b6000602082840312156134d357600080fd5b60006134e184828501613276565b91505092915050565b6000602082840312156134fc57600080fd5b600061350a8482850161328b565b91505092915050565b6000806040838503121561352657600080fd5b600061353485828601613276565b925050602061354585828601613276565b9150509250929050565b6000806040838503121561356257600080fd5b60006135708582860161328b565b92505060206135818582860161328b565b9150509250929050565b6000806000606084860312156135a057600080fd5b60006135ae8682870161328b565b93505060206135bf8682870161328b565b92505060406135d08682870161328b565b9150509250925092565b6135e381613b17565b82525050565b6135f281613aa1565b82525050565b61360181613ab3565b82525050565b61361081613b29565b82525050565b600061362182613a7a565b61362b8185613a90565b935061363b818560208601613b5f565b61364481613b92565b840191505092915050565b600061365c602683613a90565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006136c2601b83613a90565b91507f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006000830152602082019050919050565b6000613702601683613a90565b91507f7472616e73666572206f6620455448206661696c6564000000000000000000006000830152602082019050919050565b6000613742602183613a90565b91507f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008301527f77000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006137a8602083613a90565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b60006137e8600083613a85565b9150600082019050919050565b6137fe81613b0d565b82525050565b600061380f826137db565b9150819050919050565b600060208201905061382e60008301846135e9565b92915050565b600060408201905061384960008301856135da565b61385660208301846137f5565b9392505050565b600060408201905061387260008301856135e9565b61387f6020830184613607565b9392505050565b600060608201905061389b60008301866135e9565b6138a860208301856137f5565b6138b560408301846137f5565b949350505050565b600060a0820190506138d260008301886135e9565b6138df60208301876137f5565b6138ec60408301866137f5565b6138f960608301856137f5565b61390660808301846137f5565b9695505050505050565b600060208201905061392560008301846135f8565b92915050565b600060208201905081810360008301526139458184613616565b905092915050565b600060208201905081810360008301526139668161364f565b9050919050565b60006020820190508181036000830152613986816136b5565b9050919050565b600060208201905081810360008301526139a6816136f5565b9050919050565b600060208201905081810360008301526139c681613735565b9050919050565b600060208201905081810360008301526139e68161379b565b9050919050565b6000602082019050613a0260008301846137f5565b92915050565b6000608082019050613a1d60008301876137f5565b613a2a60208301866137f5565b613a3760408301856137f5565b613a4460608301846137f5565b95945050505050565b6000604051905081810181811067ffffffffffffffff82111715613a7057600080fd5b8060405250919050565b600081519050919050565b600081905092915050565b600082825260208201905092915050565b6000613aac82613aed565b9050919050565b60008115159050919050565b6000613aca82613aa1565b9050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000613b2282613b3b565b9050919050565b6000613b3482613b0d565b9050919050565b6000613b4682613b4d565b9050919050565b6000613b5882613aed565b9050919050565b60005b83811015613b7d578082015181840152602081019050613b62565b83811115613b8c576000848401525b50505050565b6000601f19601f8301169050919050565b613bac81613aa1565b8114613bb757600080fd5b50565b613bc381613ab3565b8114613bce57600080fd5b50565b613bda81613abf565b8114613be557600080fd5b50565b613bf181613ad1565b8114613bfc57600080fd5b50565b613c0881613b0d565b8114613c1357600080fd5b5056fea365627a7a7231582022e4198461842e1c0c2e8661c40a20c508c4f1bff183fb162998b499424116c86c6578706572696d656e74616cf564736f6c634300050c0040

Deployed ByteCode Sourcemap

10431:7802:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10431:7802:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12347:592;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;10705:31;;;:::i;:::-;;;;;;;;;;;;;;;;16890:238;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;11792:104;;;;;;;;;;;;;;;;:::i;:::-;;11602:89;;;;;;;;;;;;;;;;:::i;:::-;;17837:181;;;;;;;;;;;;;;;;:::i;:::-;;14322:144;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;10603:19;;;:::i;:::-;;;;;;;;;;;;;;;;15144:167;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;12144:197;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;10651:20;;;:::i;:::-;;;;;;;;;;;;;;;;1823:140;;;:::i;:::-;;13375:941;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;11509:89;;;;;;;;;;;;;;;;:::i;:::-;;11311;;;;;;;;;;;;;;;;:::i;:::-;;15317:512;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;15007:131;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;1526:79;;;:::i;:::-;;;;;;;;;;;;;;;;1723:94;;;:::i;:::-;;;;;;;;;;;;;;;;10627:19;;;:::i;:::-;;;;;;;;;;;;;;;;10676:22;;;:::i;:::-;;;;;;;;;;;;;;;;17134:666;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;10741:27;;;:::i;:::-;;;;;;;;;;;;;;;;10773:28;;;:::i;:::-;;;;;;;;;;;;;;;;11695:93;;;;;;;;;;;;;;;;:::i;:::-;;15835:239;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;11404:101;;;;;;;;;;;;;;;;:::i;:::-;;10579:19;;;:::i;:::-;;;;;;;;;;;;;;;;11900:109;;;;;;;;;;;;;;;;:::i;:::-;;12945:424;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;1969:109;;;;;;;;;;;;;;;;:::i;:::-;;18053:177;;;:::i;:::-;;12013:125;;;;;;;;;;;;;;;;:::i;:::-;;16747:137;;;:::i;:::-;;;;;;;;;;;;;;;;14472:529;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;16080:661;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;12347:592;12428:7;12465:42;12448:60;;:5;:60;;;12444:91;;;12526:1;12519:8;;;;12444:91;12541:17;12561:42;12596:6;12568:5;12561:23;;;12585:5;;;;;;;;;;;12561:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12561:30:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;12561:30:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;12561:30:0;;;;;;;;;:34;;:42;;;;:::i;:::-;12541:62;;12614:25;12644:20;12677:5;;;;;;;;;;;12670:21;;;12692:5;12670:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12670:28:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;12670:28:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;12670:28:0;;;;;;;;;12610:88;;;;;;;;;;;12738:1;12709:31;;:17;:31;;;12705:62;;;12758:1;12751:8;;;;;;;12705:62;12776:26;12818:17;12806:44;;;12851:5;12858:9;12869:12;12806:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12806:76:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;12806:76:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;12806:76:0;;;;;;;;;12773:109;;;12896:37;12919:13;;12896:18;:22;;:37;;;;:::i;:::-;12889:44;;;;;;12347:592;;;;;:::o;10705:31::-;;;;:::o;16890:238::-;16946:7;16962:20;17030:4;;;;;;;;;;;17001:53;;;:55;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17001:55:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17001:55:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;17001:55:0;;;;;;;;;16962:95;;17071:51;17118:3;17071:4;:35;;;17107:5;17071:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17071:42:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17071:42:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;17071:42:0;;;;;;;;;:46;;:51;;;;:::i;:::-;17064:58;;;16890:238;;;:::o;11792:104::-;1651:9;:7;:9::i;:::-;1643:54;;;;;;;;;;;;;;;;;;;;;;11880:10;11861:16;:29;;;;11792:104;:::o;11602:89::-;1651:9;:7;:9::i;:::-;1643:54;;;;;;;;;;;;;;;;;;;;;;11676:9;11669:4;;:16;;;;;;;;;;;;;;;;;;11602:89;:::o;17837:181::-;1651:9;:7;:9::i;:::-;1643:54;;;;;;;;;;;;;;;;;;;;;;17915:8;17926:13;:23;;;17958:4;17926:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17926:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17926:38:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;17926:38:0;;;;;;;;;17915:49;;17973:13;:22;;;17996:10;18008:3;17973:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17973:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17973:39:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;17973:39:0;;;;;;;;;;1708:1;17837:181;:::o;14322:144::-;14382:7;14405:55;14446:13;;14414:5;14405:34;;;:36;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14405:36:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14405:36:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;14405:36:0;;;;;;;;;:40;;:55;;;;:::i;:::-;14398:62;;14322:144;;;:::o;10603:19::-;;;;;;;;;;;;;:::o;15144:167::-;15227:7;15250:55;15301:3;15258:5;15250:37;;;15288:7;15250:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15250:46:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15250:46:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;15250:46:0;;;;;;;;;:50;;:55;;;;:::i;:::-;15243:62;;15144:167;;;;:::o;12144:197::-;12201:7;12222:26;12263:5;;;;;;;;;;;12256:21;;;12278:5;12256:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12256:28:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;12256:28:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;12256:28:0;;;;;;;;;12217:67;;;;;;;;;;12298:37;12321:13;;12298:18;:22;;:37;;;;:::i;:::-;12291:44;;;12144:197;;;:::o;10651:20::-;;;;;;;;;;;;;:::o;1823:140::-;1651:9;:7;:9::i;:::-;1643:54;;;;;;;;;;;;;;;;;;;;;;1922:1;1885:40;;1906:6;;;;;;;;;;;1885:40;;;;;;;;;;;;1953:1;1936:6;;:19;;;;;;;;;;;;;;;;;;1823:140::o;13375:941::-;13456:7;13493:42;13476:60;;:5;:60;;;13472:142;;;13563:42;13547:59;;13472:142;13621:19;13651:4;;;;;;;;;;;13645:20;;;13666:5;13645:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13645:27:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;13645:27:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;13645:27:0;;;;;;;;;13620:52;;;13698:1;13683:11;:16;13679:47;;;13717:1;13710:8;;;;;13679:47;13732:14;13749:46;13787:7;13755:4;;;;;;;;;;;13749:26;;;13776:5;13749:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13749:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;13749:33:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;13749:33:0;;;;;;;;;:37;;:46;;;;:::i;:::-;13732:63;;13802:14;13825:4;;;;;;;;;;;13819:26;;;13846:5;13819:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13819:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;13819:33:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;13819:33:0;;;;;;;;;13802:50;;13859:19;13881:37;13911:6;13881:25;13892:13;:11;:13::i;:::-;13881:6;:10;;:25;;;;:::i;:::-;:29;;:37;;;;:::i;:::-;13859:59;;13925:25;13959:4;;;;;;;;;;;13953:20;;;13974:5;13953:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13953:27:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;13953:27:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;13953:27:0;;;;;;;;;:41;;;13925:69;;14001:18;14033:17;14022:53;;;14076:11;14022:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14022:66:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14022:66:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;14022:66:0;;;;;;;;;14001:87;;14095:22;14120:35;14136:6;14144:10;14120:15;:35::i;:::-;14095:60;;14162:22;14187:69;14204:14;14220:35;14238:16;;14220:13;:11;:13::i;:::-;:17;;:35;;;;:::i;:::-;14187:16;:69::i;:::-;14162:94;;14270:40;14287:14;14303:6;14270:16;:40::i;:::-;14263:47;;;;;;;;;;13375:941;;;;;:::o;11509:89::-;1651:9;:7;:9::i;:::-;1643:54;;;;;;;;;;;;;;;;;;;;;;11583:9;11576:4;;:16;;;;;;;;;;;;;;;;;;11509:89;:::o;11311:::-;1651:9;:7;:9::i;:::-;1643:54;;;;;;;;;;;;;;;;;;;;;;11385:9;11378:4;;:16;;;;;;;;;;;;;;;;;;11311:89;:::o;15317:512::-;15375:7;15391:12;15416:4;;;;;;;;;;;15411:32;;;15444:8;15411:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15411:42:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15411:42:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;15411:42:0;;;;;;;;;:48;;;15391:68;;15466:17;15493:8;15486:4;:15;15466:35;;15508:14;15533:4;;;;;;;;;;;15528:28;;;15557:8;15528:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15528:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15528:38:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;15528:38:0;;;;;;;;;:45;;;15508:65;;;;15580:14;15605:4;;;;;;;;;;;15600:28;;;15629:8;15600:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15600:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15600:38:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;15600:38:0;;;;;;;;;:45;;;15580:65;;;;15652:13;15693:6;15682:7;;15673:6;:16;15672:27;;;;;;15652:47;;15706:11;15799:7;;15766:4;;;;;;;;;;;15761:26;;;:28;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15761:28:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15761:28:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;15761:28:0;;;;;;;;;:34;;;15750:7;;15741:5;15729:9;:17;15728:29;;;;;;15727:68;15726:80;;;;;;15706:100;;15820:3;15813:10;;;;;;;;15317:512;;;:::o;15007:131::-;15065:7;15088:44;15128:3;15096:5;15088:33;;;:35;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15088:35:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15088:35:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;15088:35:0;;;;;;;;;:39;;:44;;;;:::i;:::-;15081:51;;15007:131;;;:::o;1526:79::-;1564:7;1591:6;;;;;;;;;;;1584:13;;1526:79;:::o;1723:94::-;1763:4;1803:6;;;;;;;;;;;1787:22;;:12;:10;:12::i;:::-;:22;;;1780:29;;1723:94;:::o;10627:19::-;;;;;;;;;;;;;:::o;10676:22::-;;;;;;;;;;;;;:::o;17134:666::-;17215:7;17231:20;17299:4;;;;;;;;;;;17270:53;;;:55;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17270:55:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17270:55:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;17270:55:0;;;;;;;;;17231:95;;17333:32;17397:4;:42;;;17440:5;17397:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17397:49:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17397:49:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;17397:49:0;;;;;;;;;17333:114;;17455:24;17485:3;:26;;;17520:5;17534:53;17579:7;17534:4;:33;;;17568:5;17534:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17534:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17534:40:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;17534:40:0;;;;;;;;;:44;;:53;;;;:::i;:::-;17596:4;:33;;;17630:5;17596:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17596:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17596:40:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;17596:40:0;;;;;;;;;17645:4;:35;;;17681:5;17645:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17645:42:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17645:42:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;17645:42:0;;;;;;;;;17696:4;:45;;;17742:5;17696:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17696:52:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17696:52:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;17696:52:0;;;;;;;;;17485:270;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17485:270:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17485:270:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;17485:270:0;;;;;;;;;17454:301;;;;17769:25;17790:3;17769:16;:20;;:25;;;;:::i;:::-;17762:32;;;;;17134:666;;;;:::o;10741:27::-;;;;:::o;10773:28::-;;;;:::o;11695:93::-;1651:9;:7;:9::i;:::-;1643:54;;;;;;;;;;;;;;;;;;;;;;11772:10;11764:5;;:18;;;;;;;;;;;;;;;;;;11695:93;:::o;15835:239::-;15892:7;15908:14;15925:25;15942:7;15925:12;:16;;:25;;;;:::i;:::-;15908:42;;15957:13;15973:45;16013:4;15982:5;15973:33;;;:35;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15973:35:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15973:35:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;15973:35:0;;;;;;;;;:39;;:45;;;;:::i;:::-;15957:61;;16032:36;16061:6;16032:24;16042:13;;16032:5;:9;;:24;;;;:::i;:::-;:28;;:36;;;;:::i;:::-;16025:43;;;;15835:239;;;:::o;11404:101::-;1651:9;:7;:9::i;:::-;1643:54;;;;;;;;;;;;;;;;;;;;;;11487:12;11477:7;;:22;;;;;;;;;;;;;;;;;;11404:101;:::o;10579:19::-;;;;;;;;;;;;;:::o;11900:109::-;1651:9;:7;:9::i;:::-;1643:54;;;;;;;;;;;;;;;;;;;;;;11990:13;11975:12;:28;;;;11900:109;:::o;12945:424::-;13001:7;13038:42;13021:60;;:5;:60;;;13017:142;;;13108:42;13092:59;;13017:142;13166:19;13196:4;;;;;;;;;;;13190:20;;;13211:5;13190:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13190:27:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;13190:27:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;13190:27:0;;;;;;;;;13165:52;;;13243:1;13228:11;:16;13224:47;;;13262:1;13255:8;;;;;13224:47;13279:18;13307:4;;;;;;;;;;;13301:28;;;13330:5;13337:1;13301:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13301:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;13301:38:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;13301:38:0;;;;;;;;;13277:62;;;13353:10;13346:17;;;;12945:424;;;;:::o;1969:109::-;1651:9;:7;:9::i;:::-;1643:54;;;;;;;;;;;;;;;;;;;;;;2042:28;2061:8;2042:18;:28::i;:::-;1969:109;:::o;18053:177::-;1651:9;:7;:9::i;:::-;1643:54;;;;;;;;;;;;;;;;;;;;;;18109:11;18126:10;:15;;18156:4;18148:21;;;18126:48;;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;18108:66:0;;;18191:6;18183:41;;;;;;;;;;;;;;;;;;;;;;1708:1;18053:177::o;12013:125::-;1651:9;:7;:9::i;:::-;1643:54;;;;;;;;;;;;;;;;;;;;;;12114:18;12098:13;:34;;;;12013:125;:::o;16747:137::-;16791:7;16851:4;;;;;;;;;;;16822:53;;;:55;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16822:55:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16822:55:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;16822:55:0;;;;;;;;;16807:71;;16747:137;:::o;14472:529::-;14557:7;14573:10;14595:5;14573:28;;14608:13;14633:5;14624:33;;;:35;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14624:35:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14624:35:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;14624:35:0;;;;;;;;;14608:51;;14687:1;14670:19;;:5;:19;;;14666:90;;;14707:41;14734:13;;14707:1;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14707:22:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14707:22:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;14707:22:0;;;;;;;;;:26;;:41;;;;:::i;:::-;14700:48;;;;;;14666:90;14762:19;14802:5;14762:46;;14815:17;14835:24;14851:7;14835:1;:9;;;:11;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14835:11:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14835:11:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;14835:11:0;;;;;;;;;:15;;:24;;;;:::i;:::-;14815:44;;14873:122;14981:13;;14873:1;:15;;;14889:9;14900:1;:14;;;:16;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14900:16:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14900:16:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;14900:16:0;;;;;;;;;14918:30;14940:7;14918:1;:15;;;:17;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14918:17:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14918:17:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;14918:17:0;;;;;;;;;:21;;:30;;;;:::i;:::-;14950:1;:23;;;:25;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14950:25:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14950:25:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;14950:25:0;;;;;;;;;14873:103;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14873:103:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14873:103:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;14873:103:0;;;;;;;;;:107;;:122;;;;:::i;:::-;14866:129;;;;;;14472:529;;;;;:::o;16080:661::-;16163:7;16179:12;16204:4;;;;;;;;;;;16199:32;;;16232:8;16199:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16199:42:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16199:42:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;16199:42:0;;;;;;;;;:48;;;16179:68;;16311:25;16323:12;;16311:7;:11;;:25;;;;:::i;:::-;16301:35;;16343:17;16370:8;16363:4;:15;16343:35;;16385:14;16410:4;;;;;;;;;;;16405:28;;;16434:8;16405:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16405:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16405:38:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;16405:38:0;;;;;;;;;:45;;;16385:65;;;;16457:14;16482:4;;;;;;;;;;;16477:28;;;16506:8;16477:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16477:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16477:38:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;16477:38:0;;;;;;;;;:45;;;16457:65;;;;16538:19;16549:7;16538:6;:10;;:19;;;;:::i;:::-;16529:28;;16564:13;16605:6;16594:7;;16585:6;:16;16584:27;;;;;;16564:47;;16618:11;16711:7;;16678:4;;;;;;;;;;;16673:26;;;:28;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16673:28:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16673:28:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;16673:28:0;;;;;;;;;:34;;;16662:7;;16653:5;16641:9;:17;16640:29;;;;;;16639:68;16638:80;;;;;;16618:100;;16732:3;16725:10;;;;;;;;16080:661;;;;:::o;2344:181::-;2402:7;2422:9;2438:1;2434;:5;2422:17;;2463:1;2458;:6;;2450:46;;;;;;;;;;;;;;;;;;;;;;2516:1;2509:8;;;2344:181;;;;:::o;2871:250::-;2929:7;2958:1;2953;:6;2949:47;;;2983:1;2976:8;;;;2949:47;3008:9;3024:1;3020;:5;3008:17;;3053:1;3048;3044;:5;;;;;;:10;3036:56;;;;;;;;;;;;;;;;;;;;;;3112:1;3105:8;;;2871:250;;;;;:::o;3127:132::-;3185:7;3212:39;3216:1;3219;3212:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;3205:46;;3127:132;;;;:::o;4219:109::-;4284:7;4204:6;4309:11;;4219:109;:::o;4677:186::-;4796:7;4828:27;4204:6;4828:13;4839:1;4828:6;:10;;:13;;;;:::i;:::-;:21;;:27;;;;:::i;:::-;4821:34;;4677:186;;;;:::o;2531:136::-;2589:7;2616:43;2620:1;2623;2616:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;2609:50;;2531:136;;;;:::o;4489:180::-;4609:7;4204:6;4641:13;4652:1;4641:6;:10;;:13;;;;:::i;:::-;:20;;;;;;4634:27;;4489:180;;;;:::o;4871:183::-;4991:7;5023:23;5044:1;5023:16;4204:6;5023;:10;;:16;;;;:::i;:::-;:20;;:23;;;;:::i;:::-;5016:30;;4871:183;;;;:::o;908:98::-;953:15;988:10;981:17;;908:98;:::o;2084:229::-;2178:1;2158:22;;:8;:22;;;;2150:73;;;;;;;;;;;;;;;;;;;;;;2268:8;2239:38;;2260:6;;;;;;;;;;;2239:38;;;;;;;;;;;;2297:8;2288:6;;:17;;;;;;;;;;;;;;;;;;2084:229;:::o;3265:191::-;3351:7;3383:1;3379;:5;3386:12;3371:28;;;;;;;;;;;;;;;;;;;;;;;;;3410:9;3426:1;3422;:5;;;;;;3410:17;;3447:1;3440:8;;;3265:191;;;;;:::o;3462:345::-;3576:7;3601:16;3620:9;3624:1;3627;3620:3;:9::i;:::-;3601:28;;3640:17;3675:1;3664:8;:12;3660:1;:16;3640:36;;3703:1;3691:9;:13;3687:113;;;3739:1;3728:8;:12;3721:19;;;;;;3687:113;3780:8;3773:15;;;;3462:345;;;;;:::o;2673:192::-;2759:7;2792:1;2787;:6;;2795:12;2779:29;;;;;;;;;;;;;;;;;;;;;;;;;2819:9;2835:1;2831;:5;2819:17;;2856:1;2849:8;;;2673:192;;;;;:::o;5:130:-1:-;;85:6;72:20;63:29;;97:33;124:5;97:33;;;57:78;;;;;142:134;;226:6;220:13;211:22;;238:33;265:5;238:33;;;205:71;;;;;283:128;;364:6;358:13;349:22;;376:30;400:5;376:30;;;343:68;;;;;418:156;;511:6;498:20;489:29;;523:46;563:5;523:46;;;483:91;;;;;608:674;;730:4;718:9;713:3;709:19;705:30;702:2;;;748:1;745;738:12;702:2;766:20;781:4;766:20;;;757:29;;843:1;874:60;930:3;921:6;910:9;906:22;874:60;;;868:3;861:5;857:15;850:85;796:150;1003:2;1036:60;1092:3;1083:6;1072:9;1068:22;1036:60;;;1029:4;1022:5;1018:16;1011:86;956:152;1167:2;1200:60;1256:3;1247:6;1236:9;1232:22;1200:60;;;1193:4;1186:5;1182:16;1175:86;1118:154;696:586;;;;;1311:498;;1431:4;1419:9;1414:3;1410:19;1406:30;1403:2;;;1449:1;1446;1439:12;1403:2;1467:20;1482:4;1467:20;;;1458:29;;1539:1;1570:60;1626:3;1617:6;1606:9;1602:22;1570:60;;;1564:3;1557:5;1553:15;1546:85;1497:145;1694:2;1727:60;1783:3;1774:6;1763:9;1759:22;1727:60;;;1720:4;1713:5;1709:16;1702:86;1652:147;1397:412;;;;;1838:340;;1958:4;1946:9;1941:3;1937:19;1933:30;1930:2;;;1976:1;1973;1966:12;1930:2;1994:20;2009:4;1994:20;;;1985:29;;2065:1;2096:60;2152:3;2143:6;2132:9;2128:22;2096:60;;;2090:3;2083:5;2079:15;2072:85;2024:144;1924:254;;;;;2185:134;;2269:6;2263:13;2254:22;;2281:33;2308:5;2281:33;;;2248:71;;;;;2326:130;;2406:6;2393:20;2384:29;;2418:33;2445:5;2418:33;;;2378:78;;;;;2463:134;;2547:6;2541:13;2532:22;;2559:33;2586:5;2559:33;;;2526:71;;;;;2604:241;;2708:2;2696:9;2687:7;2683:23;2679:32;2676:2;;;2724:1;2721;2714:12;2676:2;2759:1;2776:53;2821:7;2812:6;2801:9;2797:22;2776:53;;;2766:63;;2738:97;2670:175;;;;;2852:263;;2967:2;2955:9;2946:7;2942:23;2938:32;2935:2;;;2983:1;2980;2973:12;2935:2;3018:1;3035:64;3091:7;3082:6;3071:9;3067:22;3035:64;;;3025:74;;2997:108;2929:186;;;;;3122:366;;;3243:2;3231:9;3222:7;3218:23;3214:32;3211:2;;;3259:1;3256;3249:12;3211:2;3294:1;3311:53;3356:7;3347:6;3336:9;3332:22;3311:53;;;3301:63;;3273:97;3401:2;3419:53;3464:7;3455:6;3444:9;3440:22;3419:53;;;3409:63;;3380:98;3205:283;;;;;;3495:257;;3607:2;3595:9;3586:7;3582:23;3578:32;3575:2;;;3623:1;3620;3613:12;3575:2;3658:1;3675:61;3728:7;3719:6;3708:9;3704:22;3675:61;;;3665:71;;3637:105;3569:183;;;;;3759:1351;;;;;;;;;;4007:3;3995:9;3986:7;3982:23;3978:33;3975:2;;;4024:1;4021;4014:12;3975:2;4059:1;4076:61;4129:7;4120:6;4109:9;4105:22;4076:61;;;4066:71;;4038:105;4174:2;4192:64;4248:7;4239:6;4228:9;4224:22;4192:64;;;4182:74;;4153:109;4293:2;4311:64;4367:7;4358:6;4347:9;4343:22;4311:64;;;4301:74;;4272:109;4412:2;4430:64;4486:7;4477:6;4466:9;4462:22;4430:64;;;4420:74;;4391:109;4531:3;4550:64;4606:7;4597:6;4586:9;4582:22;4550:64;;;4540:74;;4510:110;4651:3;4670:64;4726:7;4717:6;4706:9;4702:22;4670:64;;;4660:74;;4630:110;4771:3;4790:64;4846:7;4837:6;4826:9;4822:22;4790:64;;;4780:74;;4750:110;4891:3;4910:64;4966:7;4957:6;4946:9;4942:22;4910:64;;;4900:74;;4870:110;5011:3;5030:64;5086:7;5077:6;5066:9;5062:22;5030:64;;;5020:74;;4990:110;3969:1141;;;;;;;;;;;;5117:267;;5234:2;5222:9;5213:7;5209:23;5205:32;5202:2;;;5250:1;5247;5240:12;5202:2;5285:1;5302:66;5360:7;5351:6;5340:9;5336:22;5302:66;;;5292:76;;5264:110;5196:188;;;;;5391:307;;5528:2;5516:9;5507:7;5503:23;5499:32;5496:2;;;5544:1;5541;5534:12;5496:2;5579:1;5596:86;5674:7;5665:6;5654:9;5650:22;5596:86;;;5586:96;;5558:130;5490:208;;;;;5705:303;;5840:2;5828:9;5819:7;5815:23;5811:32;5808:2;;;5856:1;5853;5846:12;5808:2;5891:1;5908:84;5984:7;5975:6;5964:9;5960:22;5908:84;;;5898:94;;5870:128;5802:206;;;;;6015:303;;6150:2;6138:9;6129:7;6125:23;6121:32;6118:2;;;6166:1;6163;6156:12;6118:2;6201:1;6218:84;6294:7;6285:6;6274:9;6270:22;6218:84;;;6208:94;;6180:128;6112:206;;;;;6325:241;;6429:2;6417:9;6408:7;6404:23;6400:32;6397:2;;;6445:1;6442;6435:12;6397:2;6480:1;6497:53;6542:7;6533:6;6522:9;6518:22;6497:53;;;6487:63;;6459:97;6391:175;;;;;6573:263;;6688:2;6676:9;6667:7;6663:23;6659:32;6656:2;;;6704:1;6701;6694:12;6656:2;6739:1;6756:64;6812:7;6803:6;6792:9;6788:22;6756:64;;;6746:74;;6718:108;6650:186;;;;;6843:366;;;6964:2;6952:9;6943:7;6939:23;6935:32;6932:2;;;6980:1;6977;6970:12;6932:2;7015:1;7032:53;7077:7;7068:6;7057:9;7053:22;7032:53;;;7022:63;;6994:97;7122:2;7140:53;7185:7;7176:6;7165:9;7161:22;7140:53;;;7130:63;;7101:98;6926:283;;;;;;7216:399;;;7348:2;7336:9;7327:7;7323:23;7319:32;7316:2;;;7364:1;7361;7354:12;7316:2;7399:1;7416:64;7472:7;7463:6;7452:9;7448:22;7416:64;;;7406:74;;7378:108;7517:2;7535:64;7591:7;7582:6;7571:9;7567:22;7535:64;;;7525:74;;7496:109;7310:305;;;;;;7622:535;;;;7771:2;7759:9;7750:7;7746:23;7742:32;7739:2;;;7787:1;7784;7777:12;7739:2;7822:1;7839:64;7895:7;7886:6;7875:9;7871:22;7839:64;;;7829:74;;7801:108;7940:2;7958:64;8014:7;8005:6;7994:9;7990:22;7958:64;;;7948:74;;7919:109;8059:2;8077:64;8133:7;8124:6;8113:9;8109:22;8077:64;;;8067:74;;8038:109;7733:424;;;;;;8164:142;8255:45;8294:5;8255:45;;;8250:3;8243:58;8237:69;;;8313:113;8396:24;8414:5;8396:24;;;8391:3;8384:37;8378:48;;;8433:104;8510:21;8525:5;8510:21;;;8505:3;8498:34;8492:45;;;8544:142;8635:45;8674:5;8635:45;;;8630:3;8623:58;8617:69;;;8693:347;;8805:39;8838:5;8805:39;;;8856:71;8920:6;8915:3;8856:71;;;8849:78;;8932:52;8977:6;8972:3;8965:4;8958:5;8954:16;8932:52;;;9005:29;9027:6;9005:29;;;9000:3;8996:39;8989:46;;8785:255;;;;;;9048:465;;9208:67;9272:2;9267:3;9208:67;;;9201:74;;9308:66;9304:1;9299:3;9295:11;9288:87;9409:66;9404:2;9399:3;9395:12;9388:88;9504:2;9499:3;9495:12;9488:19;;9194:319;;;;9522:364;;9682:67;9746:2;9741:3;9682:67;;;9675:74;;9782:66;9778:1;9773:3;9769:11;9762:87;9877:2;9872:3;9868:12;9861:19;;9668:218;;;;9895:364;;10055:67;10119:2;10114:3;10055:67;;;10048:74;;10155:66;10151:1;10146:3;10142:11;10135:87;10250:2;10245:3;10241:12;10234:19;;10041:218;;;;10268:465;;10428:67;10492:2;10487:3;10428:67;;;10421:74;;10528:66;10524:1;10519:3;10515:11;10508:87;10629:66;10624:2;10619:3;10615:12;10608:88;10724:2;10719:3;10715:12;10708:19;;10414:319;;;;10742:364;;10902:67;10966:2;10961:3;10902:67;;;10895:74;;11002:66;10998:1;10993:3;10989:11;10982:87;11097:2;11092:3;11088:12;11081:19;;10888:218;;;;11115:296;;11292:83;11373:1;11368:3;11292:83;;;11285:90;;11403:1;11398:3;11394:11;11387:18;;11278:133;;;;11419:113;11502:24;11520:5;11502:24;;;11497:3;11490:37;11484:48;;;11539:370;;11737:147;11880:3;11737:147;;;11730:154;;11901:3;11894:10;;11718:191;;;;11916:213;;12034:2;12023:9;12019:18;12011:26;;12048:71;12116:1;12105:9;12101:17;12092:6;12048:71;;;12005:124;;;;;12136:340;;12290:2;12279:9;12275:18;12267:26;;12304:79;12380:1;12369:9;12365:17;12356:6;12304:79;;;12394:72;12462:2;12451:9;12447:18;12438:6;12394:72;;;12261:215;;;;;;12483:340;;12637:2;12626:9;12622:18;12614:26;;12651:71;12719:1;12708:9;12704:17;12695:6;12651:71;;;12733:80;12809:2;12798:9;12794:18;12785:6;12733:80;;;12608:215;;;;;;12830:435;;13004:2;12993:9;12989:18;12981:26;;13018:71;13086:1;13075:9;13071:17;13062:6;13018:71;;;13100:72;13168:2;13157:9;13153:18;13144:6;13100:72;;;13183;13251:2;13240:9;13236:18;13227:6;13183:72;;;12975:290;;;;;;;13272:659;;13502:3;13491:9;13487:19;13479:27;;13517:71;13585:1;13574:9;13570:17;13561:6;13517:71;;;13599:72;13667:2;13656:9;13652:18;13643:6;13599:72;;;13682;13750:2;13739:9;13735:18;13726:6;13682:72;;;13765;13833:2;13822:9;13818:18;13809:6;13765:72;;;13848:73;13916:3;13905:9;13901:19;13892:6;13848:73;;;13473:458;;;;;;;;;13938:201;;14050:2;14039:9;14035:18;14027:26;;14064:65;14126:1;14115:9;14111:17;14102:6;14064:65;;;14021:118;;;;;14146:301;;14284:2;14273:9;14269:18;14261:26;;14334:9;14328:4;14324:20;14320:1;14309:9;14305:17;14298:47;14359:78;14432:4;14423:6;14359:78;;;14351:86;;14255:192;;;;;14454:407;;14645:2;14634:9;14630:18;14622:26;;14695:9;14689:4;14685:20;14681:1;14670:9;14666:17;14659:47;14720:131;14846:4;14720:131;;;14712:139;;14616:245;;;;14868:407;;15059:2;15048:9;15044:18;15036:26;;15109:9;15103:4;15099:20;15095:1;15084:9;15080:17;15073:47;15134:131;15260:4;15134:131;;;15126:139;;15030:245;;;;15282:407;;15473:2;15462:9;15458:18;15450:26;;15523:9;15517:4;15513:20;15509:1;15498:9;15494:17;15487:47;15548:131;15674:4;15548:131;;;15540:139;;15444:245;;;;15696:407;;15887:2;15876:9;15872:18;15864:26;;15937:9;15931:4;15927:20;15923:1;15912:9;15908:17;15901:47;15962:131;16088:4;15962:131;;;15954:139;;15858:245;;;;16110:407;;16301:2;16290:9;16286:18;16278:26;;16351:9;16345:4;16341:20;16337:1;16326:9;16322:17;16315:47;16376:131;16502:4;16376:131;;;16368:139;;16272:245;;;;16524:213;;16642:2;16631:9;16627:18;16619:26;;16656:71;16724:1;16713:9;16709:17;16700:6;16656:71;;;16613:124;;;;;16744:547;;16946:3;16935:9;16931:19;16923:27;;16961:71;17029:1;17018:9;17014:17;17005:6;16961:71;;;17043:72;17111:2;17100:9;17096:18;17087:6;17043:72;;;17126;17194:2;17183:9;17179:18;17170:6;17126:72;;;17209;17277:2;17266:9;17262:18;17253:6;17209:72;;;16917:374;;;;;;;;17298:256;;17360:2;17354:9;17344:19;;17398:4;17390:6;17386:17;17497:6;17485:10;17482:22;17461:18;17449:10;17446:34;17443:62;17440:2;;;17518:1;17515;17508:12;17440:2;17538:10;17534:2;17527:22;17338:216;;;;;17561:122;;17655:5;17649:12;17639:22;;17620:63;;;;17691:144;;17826:3;17811:18;;17804:31;;;;;17844:163;;17959:6;17954:3;17947:19;17996:4;17991:3;17987:14;17972:29;;17940:67;;;;;18015:91;;18077:24;18095:5;18077:24;;;18066:35;;18060:46;;;;18113:85;;18186:5;18179:13;18172:21;18161:32;;18155:43;;;;18205:104;;18280:24;18298:5;18280:24;;;18269:35;;18263:46;;;;18316:113;;18389:34;18382:5;18378:46;18367:57;;18361:68;;;;18436:121;;18509:42;18502:5;18498:54;18487:65;;18481:76;;;;18564:72;;18626:5;18615:16;;18609:27;;;;18643:129;;18730:37;18761:5;18730:37;;;18717:50;;18711:61;;;;18779:116;;18866:24;18884:5;18866:24;;;18853:37;;18847:48;;;;18902:121;;18981:37;19012:5;18981:37;;;18968:50;;18962:61;;;;19030:108;;19109:24;19127:5;19109:24;;;19096:37;;19090:48;;;;19146:268;19211:1;19218:101;19232:6;19229:1;19226:13;19218:101;;;19308:1;19303:3;19299:11;19293:18;19289:1;19284:3;19280:11;19273:39;19254:2;19251:1;19247:10;19242:15;;19218:101;;;19334:6;19331:1;19328:13;19325:2;;;19399:1;19390:6;19385:3;19381:16;19374:27;19325:2;19195:219;;;;;19422:97;;19510:2;19506:7;19501:2;19494:5;19490:14;19486:28;19476:38;;19470:49;;;;19527:117;19596:24;19614:5;19596:24;;;19589:5;19586:35;19576:2;;19635:1;19632;19625:12;19576:2;19570:74;;19651:111;19717:21;19732:5;19717:21;;;19710:5;19707:32;19697:2;;19753:1;19750;19743:12;19697:2;19691:71;;19769:143;19851:37;19882:5;19851:37;;;19844:5;19841:48;19831:2;;19903:1;19900;19893:12;19831:2;19825:87;;19919:117;19988:24;20006:5;19988:24;;;19981:5;19978:35;19968:2;;20027:1;20024;20017:12;19968:2;19962:74;;20043:117;20112:24;20130:5;20112:24;;;20105:5;20102:35;20092:2;;20151:1;20148;20141:12;20092:2;20086:74;

Swarm Source

bzzr://22e4198461842e1c0c2e8661c40a20c508c4f1bff183fb162998b499424116c8
Block Transaction Difficulty Gas Used Reward
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.