Contract 0xE6354ed5bC4b393a5Aad09f21c46E101e692d447

 
Txn Hash Method
Block
From
To
Value
0xf0750134f66348689f816c34c6337debddea2db070786eff170381e3257f49ddApprove126676472021-06-19 23:06:212 days 20 hrs ago0x229fed4f4192ba3aba690e37088bb4a68881df3d IN  yearn: yUSDT Token 30 Ether0.0004726110
0x663f3e392fe23cedcbd065594d867c71a953dc1df34c9859c832021f6f67932bWithdraw126640522021-06-19 9:42:103 days 10 hrs ago0x072ed85a386e546131b616e44cbc9305f4b93239 IN  yearn: yUSDT Token 30 Ether0.0018195848
0x36a2b5b152a93c47cfc4c2e37fc5269cacd2b2add359a330c7692969c8295db4Deposit126281862021-06-13 20:08:028 days 23 hrs ago0x0d4daedbfdb722542bfc17ee0ea2162cc8387c90 IN  yearn: yUSDT Token 30 Ether0.0034112715
0x8e546f787ba43f6211056e9d68f8393ed4150845e05bf953798c7b337fcb51f2Transfer124382502021-05-15 9:46:2738 days 10 hrs ago0x11d92bd0b0585f2120cfddb1ff0c7de68743e122 IN  yearn: yUSDT Token 30 Ether0.0047140290
0x41ccf17acfa5449c5a823fb0be164f101d919430c6f8f66fe5e5b874b533f0c8Withdraw123534402021-05-02 7:28:5451 days 12 hrs ago0x842655def30d10d1bc5cf9a8c08cba133b9f14d0 IN  yearn: yUSDT Token 30 Ether0.005686525
0x6094179a5a17c781bb05ae82943fc55604ea64492ca46ead2ff899e32f0021a8Deposit122837142021-04-21 13:05:3662 days 7 hrs ago0x83052157b56ff6ab40783fae28c63546f0b84d39 IN  yearn: yUSDT Token 30 Ether0.03675039173
0x0a2bdf8adf853145b1318e0507aab291582d1bcbdf150820b61803c19e3c827dDeposit121339992021-03-29 11:56:3085 days 8 hrs ago0x842655def30d10d1bc5cf9a8c08cba133b9f14d0 IN  yearn: yUSDT Token 30 Ether0.0217833110
0xd72ec8fd5b3a9910f5886d7175a6a1519a321383ec76802c714e29b993b3e3f5Approve119735722021-03-04 19:08:06110 days 57 mins agoENS Name kostafun.eth IN  yearn: yUSDT Token 30 Ether0.007812853173
0x30633baecb507d3a418533eeb62f6f1b3ce690dec06246ee840bbd5ecc6592a5Withdraw119328692021-02-26 12:35:09116 days 7 hrs ago0x4438828aa0b75fc35c6abd2448ca8fecb9c00ab9 IN  yearn: yUSDT Token 30 Ether0.02829736130
0xb9b7baa2dab1009f42323edd81e463b029320b771647eb4be31bb9a8656f6bf0Withdraw118621182021-02-15 15:19:04127 days 4 hrs ago0x0b2c3d2709900db4a73055c2150d346dd54cb427 IN  yearn: yUSDT Token 30 Ether0.03134304144
0x79af504f622b642db396bf72deb8cf061539b0ce34688dfbd9dde02a60d2b931Withdraw116506372021-01-14 2:39:50159 days 17 hrs ago0x4209c9ea64fb4fa437eb950b3839a43c99d96c06 IN  yearn: yUSDT Token 30 Ether0.02843486163
0xae48246ecafd6da121e8e80a463f73c8ee411c02f72ad9384feb75431270b500Withdraw116472172021-01-13 14:40:09160 days 5 hrs ago0xe556b72fbd2b1ff8bbcd7c2662edd442cf89fb02 IN  yearn: yUSDT Token 30 Ether0.0132772661
0xbc8a52c125479e942f69ad2de7ae28e7b95151e54d788f2627d5ea552d716d88Deposit116137872021-01-08 11:22:47165 days 8 hrs ago0xe556b72fbd2b1ff8bbcd7c2662edd442cf89fb02 IN  yearn: yUSDT Token 30 Ether0.026201214123
0xbba87758eb75a9c1d0ffac7732ee3eb8b82bdaaacca19ecb953e4ce4aaf98db9Withdraw116094502021-01-07 19:34:52166 days 30 mins ago0x427f2ac5fdf4245e027d767e7c3ac272a1f40a65 IN  yearn: yUSDT Token 30 Ether0.068669648152
0x2e17046ee3e05788e382b872bcf166df0c31044cb5aefce9843195481e59a298Deposit115830572021-01-03 18:09:42170 days 1 hr ago0x427f2ac5fdf4245e027d767e7c3ac272a1f40a65 IN  yearn: yUSDT Token 30 Ether0.034590402189
0x214ed7df3ff328ea52a9a5bdaabfe54f48e01580c85b887fc1e79a858701bdeeDeposit115705952021-01-01 20:23:07171 days 23 hrs ago0x427f2ac5fdf4245e027d767e7c3ac272a1f40a65 IN  yearn: yUSDT Token 30 Ether0.0095863545
0xf9e04300f0e9b62308bcdad87693ba136fda1d4d5b6f6bc696ddf746e19ed632Deposit115635942020-12-31 18:40:21173 days 1 hr ago0x8e102f58c9d5ade059a38d9bb80e1a4eb0f6a567 IN  yearn: yUSDT Token 30 Ether0.01265072858
0x946a74c204f06af76e13114301bb5e93dbaad8469f4f598f857646bce5c2c549Approve115612602020-12-31 10:05:56173 days 9 hrs ago0x7af3edc58487bad40a21b93d90f14453282d8df3 IN  yearn: yUSDT Token 30 Ether0.004573374102
0xc19d3248b3c1f0a6ce8eccc1e6f11c496eb92d4e41bfffad6908c2ceb8ea1dc7Approve114283992020-12-11 0:28:41193 days 19 hrs ago0xee9e174094db61fc9bf92d3fdf15941dfa9aa033 IN  yearn: yUSDT Token 30 Ether0.000622360241.8
0x6bb0019f8661e7913ce149142d46f32b5a3753eaa37115db160c92f8c81330f9Withdraw114206772020-12-09 19:53:25195 days 12 mins ago0x9123479756d5f4a57dce96f95f9fc7432176e887 IN  yearn: yUSDT Token 30 Ether0.02487662457
0xe6dc6aab52fa01045ad1309a298c019c5c2779fb22d0e7a090a21db9324ef5a3Deposit114102492020-12-08 5:31:59196 days 14 hrs ago0x9123479756d5f4a57dce96f95f9fc7432176e887 IN  yearn: yUSDT Token 30 Ether0.00956677641
0xbfa07215d9a1dcb49e2e49e192388b36839e9e8fb58474547a31a8a452fbcb50Withdraw113282642020-11-25 15:18:56209 days 4 hrs ago0x719c54605d8c0e930f6304a3c133c918de22781e IN  yearn: yUSDT Token 30 Ether0.00790280439
0x306a6090dcaf48e56cef960b8e626a9c26f978ba6b0c1c18de0a4d0a0cc0f4c1Approve112843332020-11-18 21:18:56215 days 22 hrs ago0xd582b4084035ea4a574a9f57ce4c41970573ee98 IN  yearn: yUSDT Token 30 Ether0.00153547434
0xfe212fce7f8dffa9ee52c6dd431e6b48a8b6a59e77877aad72d2ad71ad2860c2Deposit112695142020-11-16 14:51:23218 days 5 hrs ago0x719c54605d8c0e930f6304a3c133c918de22781e IN  yearn: yUSDT Token 30 Ether0.01097884854
0xf35ebdb9d114cfbc33e99ac43f2de8365ca1e7defa05ef09f1ec66ec7175e4feWithdraw112682322020-11-16 10:06:15218 days 9 hrs ago0xac7de310cf374aa363d1d89d474dbd0d4a54a8bb IN  yearn: yUSDT Token 30 Ether0.0079037439
[ Download CSV Export 
View more zero value Internal Transactions in Advanced View mode
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
yUSDT

Compiler Version
v0.5.16+commit.9c3226ce

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-27
*/

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 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;
    }
}

contract ERC20 is Context, IERC20 {
    using SafeMath for uint256;

    mapping (address => uint256) _balances;

    mapping (address => mapping (address => uint256)) private _allowances;

    uint256 _totalSupply;
    function totalSupply() public view returns (uint256) {
        return _totalSupply;
    }
    function balanceOf(address account) public view returns (uint256) {
        return _balances[account];
    }
    function transfer(address recipient, uint256 amount) public returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }
    function allowance(address owner, address spender) public view returns (uint256) {
        return _allowances[owner][spender];
    }
    function approve(address spender, uint256 amount) public returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }
    function transferFrom(address sender, address recipient, uint256 amount) public returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }
    function increaseAllowance(address spender, uint256 addedValue) public returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
        return true;
    }
    function decreaseAllowance(address spender, uint256 subtractedValue) public returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }
    function _transfer(address sender, address recipient, uint256 amount) internal {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }
    function _mint(address account, uint256 amount) internal {
        require(account != address(0), "ERC20: mint to the zero address");

        _totalSupply = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(address(0), account, amount);
    }
    function _burn(address account, uint256 amount) internal {
        require(account != address(0), "ERC20: burn from the zero address");

        _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
        _totalSupply = _totalSupply.sub(amount);
        emit Transfer(account, address(0), amount);
    }
    function _approve(address owner, address spender, uint256 amount) internal {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }
    function _burnFrom(address account, uint256 amount) internal {
        _burn(account, amount);
        _approve(account, _msgSender(), _allowances[account][_msgSender()].sub(amount, "ERC20: burn amount exceeds allowance"));
    }
}

contract ERC20Detailed is IERC20 {
    string private _name;
    string private _symbol;
    uint8 private _decimals;

    constructor (string memory name, string memory symbol, uint8 decimals) public {
        _name = name;
        _symbol = symbol;
        _decimals = decimals;
    }
    function name() public view returns (string memory) {
        return _name;
    }
    function symbol() public view returns (string memory) {
        return _symbol;
    }
    function decimals() public view returns (uint8) {
        return _decimals;
    }
}

contract ReentrancyGuard {
    uint256 private _guardCounter;

    constructor () internal {
        _guardCounter = 1;
    }

    modifier nonReentrant() {
        _guardCounter += 1;
        uint256 localCounter = _guardCounter;
        _;
        require(localCounter == _guardCounter, "ReentrancyGuard: reentrant call");
    }
}

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) {
        // Solidity only automatically asserts when dividing by 0
        require(b > 0, errorMessage);
        uint256 c = a / b;

        return c;
    }
    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 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");
    }
}

library SafeERC20 {
    using SafeMath for uint256;
    using Address for address;

    function safeTransfer(IERC20 token, address to, uint256 value) internal {
        callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
    }

    function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {
        callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
    }

    function safeApprove(IERC20 token, address spender, uint256 value) internal {
        require((value == 0) || (token.allowance(address(this), spender) == 0),
            "SafeERC20: approve from non-zero to non-zero allowance"
        );
        callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
    }
    function callOptionalReturn(IERC20 token, bytes memory data) private {
        require(address(token).isContract(), "SafeERC20: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = address(token).call(data);
        require(success, "SafeERC20: low-level call failed");

        if (returndata.length > 0) { // Return data is optional
            // solhint-disable-next-line max-line-length
            require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
        }
    }
}

interface Compound {
    function mint ( uint256 mintAmount ) external returns ( uint256 );
    function redeem(uint256 redeemTokens) external returns (uint256);
    function exchangeRateStored() external view returns (uint);
}

interface Fulcrum {
    function mint(address receiver, uint256 amount) external payable returns (uint256 mintAmount);
    function burn(address receiver, uint256 burnAmount) external returns (uint256 loanAmountPaid);
    function assetBalanceOf(address _owner) external view returns (uint256 balance);
}

interface ILendingPoolAddressesProvider {
    function getLendingPool() external view returns (address);
}

interface Aave {
    function deposit(address _reserve, uint256 _amount, uint16 _referralCode) external;
}

interface AToken {
    function redeem(uint256 amount) external;
}

interface IIEarnManager {
    function recommend(address _token) external view returns (
      string memory choice,
      uint256 capr,
      uint256 iapr,
      uint256 aapr,
      uint256 dapr
    );
}

contract Structs {
    struct Val {
        uint256 value;
    }

    enum ActionType {
        Deposit,   // supply tokens
        Withdraw  // borrow tokens
    }

    enum AssetDenomination {
        Wei // the amount is denominated in wei
    }

    enum AssetReference {
        Delta // the amount is given as a delta from the current value
    }

    struct AssetAmount {
        bool sign; // true if positive
        AssetDenomination denomination;
        AssetReference ref;
        uint256 value;
    }

    struct ActionArgs {
        ActionType actionType;
        uint256 accountId;
        AssetAmount amount;
        uint256 primaryMarketId;
        uint256 secondaryMarketId;
        address otherAddress;
        uint256 otherAccountId;
        bytes data;
    }

    struct Info {
        address owner;  // The address that owns the account
        uint256 number; // A nonce that allows a single address to control many accounts
    }

    struct Wei {
        bool sign; // true if positive
        uint256 value;
    }
}

contract DyDx is Structs {
    function getAccountWei(Info memory account, uint256 marketId) public view returns (Wei memory);
    function operate(Info[] memory, ActionArgs[] memory) public;
}

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

contract yUSDT is ERC20, ERC20Detailed, ReentrancyGuard, Structs, Ownable {
  using SafeERC20 for IERC20;
  using Address for address;
  using SafeMath for uint256;

  uint256 public pool;
  address public token;
  address public compound;
  address public fulcrum;
  address public aave;
  address public aavePool;
  address public aaveToken;
  address public dydx;
  uint256 public dToken;
  address public apr;

  enum Lender {
      NONE,
      DYDX,
      COMPOUND,
      AAVE,
      FULCRUM
  }

  Lender public provider = Lender.NONE;

  constructor () public ERC20Detailed("iearn USDT", "yUSDT", 6) {
    token = address(0xdAC17F958D2ee523a2206206994597C13D831ec7);
    apr = address(0xdD6d648C991f7d47454354f4Ef326b04025a48A8);
    dydx = address(0x1E0447b19BB6EcFdAe1e4AE1694b0C3659614e4e);
    aave = address(0x24a42fD28C976A61Df5D00D0599C34c4f90748c8);
    aavePool = address(0x3dfd23A6c5E8BbcFc9581d2E864a68feb6a076d3);
    fulcrum = address(0xF013406A0B1d544238083DF0B93ad0d2cBE0f65f);
    aaveToken = address(0x71fc860F7D3A592A4a98740e39dB31d25db65ae8);
    compound = address(0x39AA39c021dfbaE8faC545936693aC917d5E7563);
    dToken = 3;
    approveToken();
  }

  function set_new_APR(address _new_APR) public onlyOwner {
      apr = _new_APR;
  }
  function set_new_FULCRUM(address _new_FULCRUM) public onlyOwner {
      fulcrum = _new_FULCRUM;
  }
  function set_new_COMPOUND(address _new_COMPOUND) public onlyOwner {
      compound = _new_COMPOUND;
  }
  function set_new_DTOKEN(uint256 _new_DTOKEN) public onlyOwner {
      dToken = _new_DTOKEN;
  }
  function set_new_AAVE(address _new_AAVE) public onlyOwner {
      aave = _new_AAVE;
  }
  function set_new_ATOKEN(address _new_ATOKEN) public onlyOwner {
      aaveToken = _new_ATOKEN;
  }

  // Quick swap low gas method for pool swaps
  function deposit(uint256 _amount)
      external
      nonReentrant
  {
      require(_amount > 0, "deposit must be greater than 0");
      pool = calcPoolValueInToken();

      IERC20(token).safeTransferFrom(msg.sender, address(this), _amount);

      // Calculate pool shares
      uint256 shares = 0;
      if (pool == 0) {
        shares = _amount;
        pool = _amount;
      } else {
        shares = (_amount.mul(_totalSupply)).div(pool);
      }
      pool = calcPoolValueInToken();
      _mint(msg.sender, shares);
  }

  // No rebalance implementation for lower fees and faster swaps
  function withdraw(uint256 _shares)
      external
      nonReentrant
  {
      require(_shares > 0, "withdraw must be greater than 0");

      uint256 ibalance = balanceOf(msg.sender);
      require(_shares <= ibalance, "insufficient balance");

      // Could have over value from cTokens
      pool = calcPoolValueInToken();
      // Calc to redeem before updating balances
      uint256 r = (pool.mul(_shares)).div(_totalSupply);


      _balances[msg.sender] = _balances[msg.sender].sub(_shares, "redeem amount exceeds balance");
      _totalSupply = _totalSupply.sub(_shares);

      emit Transfer(msg.sender, address(0), _shares);

      // Check balance
      uint256 b = IERC20(token).balanceOf(address(this));
      if (b < r) {
        _withdrawSome(r.sub(b));
      }

      IERC20(token).safeTransfer(msg.sender, r);
      pool = calcPoolValueInToken();
  }

  function recommend() public view returns (Lender) {
    (,uint256 capr,uint256 iapr,uint256 aapr,uint256 dapr) = IIEarnManager(apr).recommend(token);
    uint256 max = 0;
    if (capr > max) {
      max = capr;
    }
    if (iapr > max) {
      max = iapr;
    }
    if (aapr > max) {
      max = aapr;
    }
    if (dapr > max) {
      max = dapr;
    }

    Lender newProvider = Lender.NONE;
    if (max == capr) {
      newProvider = Lender.COMPOUND;
    } else if (max == iapr) {
      newProvider = Lender.FULCRUM;
    } else if (max == aapr) {
      newProvider = Lender.AAVE;
    } else if (max == dapr) {
      newProvider = Lender.DYDX;
    }
    return newProvider;
  }

  function getAave() public view returns (address) {
    return LendingPoolAddressesProvider(aave).getLendingPool();
  }
  function getAaveCore() public view returns (address) {
    return LendingPoolAddressesProvider(aave).getLendingPoolCore();
  }

  function approveToken() public {
      IERC20(token).safeApprove(compound, uint(0));
      IERC20(token).safeApprove(compound, uint(-1));
      IERC20(token).safeApprove(dydx, uint(0));
      IERC20(token).safeApprove(dydx, uint(-1));
      IERC20(token).safeApprove(getAaveCore(), uint(0));
      IERC20(token).safeApprove(getAaveCore(), uint(-1));
      IERC20(token).safeApprove(fulcrum, uint(0));
      IERC20(token).safeApprove(fulcrum, uint(-1));
  }

  function balance() public view returns (uint256) {
    return IERC20(token).balanceOf(address(this));
  }
  function balanceDydxAvailable() public view returns (uint256) {
      return IERC20(token).balanceOf(dydx);
  }
  function balanceDydx() public view returns (uint256) {
      Wei memory bal = DyDx(dydx).getAccountWei(Info(address(this), 0), dToken);
      return bal.value;
  }
  function balanceCompound() public view returns (uint256) {
      return IERC20(compound).balanceOf(address(this));
  }
  function balanceCompoundInToken() public view returns (uint256) {
    // Mantisa 1e18 to decimals
    uint256 b = balanceCompound();
    if (b > 0) {
      b = b.mul(Compound(compound).exchangeRateStored()).div(1e18);
    }
    return b;
  }
  function balanceFulcrumAvailable() public view returns (uint256) {
      return IERC20(token).balanceOf(fulcrum);
  }
  function balanceFulcrumInToken() public view returns (uint256) {
    uint256 b = balanceFulcrum();
    if (b > 0) {
      b = Fulcrum(fulcrum).assetBalanceOf(address(this));
    }
    return b;
  }
  function balanceFulcrum() public view returns (uint256) {
    return IERC20(fulcrum).balanceOf(address(this));
  }
  function balanceAaveAvailable() public view returns (uint256) {
      return IERC20(token).balanceOf(aavePool);
  }
  function balanceAave() public view returns (uint256) {
    return IERC20(aaveToken).balanceOf(address(this));
  }

  function rebalance() public {
    Lender newProvider = recommend();

    if (newProvider != provider) {
      _withdrawAll();
    }

    if (balance() > 0) {
      if (newProvider == Lender.DYDX) {
        _supplyDydx(balance());
      } else if (newProvider == Lender.FULCRUM) {
        _supplyFulcrum(balance());
      } else if (newProvider == Lender.COMPOUND) {
        _supplyCompound(balance());
      } else if (newProvider == Lender.AAVE) {
        _supplyAave(balance());
      }
    }

    provider = newProvider;
  }

  function _withdrawAll() internal {
    uint256 amount = balanceCompound();
    if (amount > 0) {
      _withdrawSomeCompound(balanceCompoundInToken().sub(1));
    }
    amount = balanceDydx();
    if (amount > 0) {
      _withdrawDydx(balanceDydxAvailable());
    }
    amount = balanceFulcrum();
    if (amount > 0) {
      _withdrawSomeFulcrum(balanceFulcrumAvailable().sub(1));
    }
    amount = balanceAave();
    if (amount > 0) {
      _withdrawAave(balanceAaveAvailable());
    }
  }

  function _withdrawSomeCompound(uint256 _amount) internal {
    uint256 b = balanceCompound();
    uint256 bT = balanceCompoundInToken();
    require(bT >= _amount, "insufficient funds");
    // can have unintentional rounding errors
    uint256 amount = (b.mul(_amount)).div(bT).add(1);
    _withdrawCompound(amount);
  }

  function _withdrawSomeFulcrum(uint256 _amount) internal {
    uint256 b = balanceFulcrum();
    uint256 bT = balanceFulcrumInToken();
    require(bT >= _amount, "insufficient funds");
    // can have unintentional rounding errors
    uint256 amount = (b.mul(_amount)).div(bT).add(1);
    _withdrawFulcrum(amount);
  }

  function _withdrawSome(uint256 _amount) internal {
    if (provider == Lender.COMPOUND) {
      _withdrawSomeCompound(_amount);
    }
    if (provider == Lender.AAVE) {
      require(balanceAave() >= _amount, "insufficient funds");
      _withdrawAave(_amount);
    }
    if (provider == Lender.DYDX) {
      require(balanceDydx() >= _amount, "insufficient funds");
      _withdrawDydx(_amount);
    }
    if (provider == Lender.FULCRUM) {
      _withdrawSomeFulcrum(_amount);
    }
  }

  function _supplyDydx(uint256 amount) internal {
      Info[] memory infos = new Info[](1);
      infos[0] = Info(address(this), 0);

      AssetAmount memory amt = AssetAmount(true, AssetDenomination.Wei, AssetReference.Delta, amount);
      ActionArgs memory act;
      act.actionType = ActionType.Deposit;
      act.accountId = 0;
      act.amount = amt;
      act.primaryMarketId = dToken;
      act.otherAddress = address(this);

      ActionArgs[] memory args = new ActionArgs[](1);
      args[0] = act;

      DyDx(dydx).operate(infos, args);
  }

  function _supplyAave(uint amount) internal {
      Aave(getAave()).deposit(token, amount, 0);
  }
  function _supplyFulcrum(uint amount) internal {
      require(Fulcrum(fulcrum).mint(address(this), amount) > 0, "FULCRUM: supply failed");
  }
  function _supplyCompound(uint amount) internal {
      require(Compound(compound).mint(amount) == 0, "COMPOUND: supply failed");
  }
  function _withdrawAave(uint amount) internal {
      AToken(aaveToken).redeem(amount);
  }
  function _withdrawFulcrum(uint amount) internal {
      require(Fulcrum(fulcrum).burn(address(this), amount) > 0, "FULCRUM: withdraw failed");
  }
  function _withdrawCompound(uint amount) internal {
      require(Compound(compound).redeem(amount) == 0, "COMPOUND: withdraw failed");
  }

  function _withdrawDydx(uint256 amount) internal {
      Info[] memory infos = new Info[](1);
      infos[0] = Info(address(this), 0);

      AssetAmount memory amt = AssetAmount(false, AssetDenomination.Wei, AssetReference.Delta, amount);
      ActionArgs memory act;
      act.actionType = ActionType.Withdraw;
      act.accountId = 0;
      act.amount = amt;
      act.primaryMarketId = dToken;
      act.otherAddress = address(this);

      ActionArgs[] memory args = new ActionArgs[](1);
      args[0] = act;

      DyDx(dydx).operate(infos, args);
  }

  function calcPoolValueInToken() public view returns (uint) {
    return balanceCompoundInToken()
      .add(balanceFulcrumInToken())
      .add(balanceDydx())
      .add(balanceAave())
      .add(balance());
  }

  function getPricePerFullShare() public view returns (uint) {
    uint _pool = calcPoolValueInToken();
    return _pool.mul(1e18).div(_totalSupply);
  }

  function withdrawSomeCompound(uint256 _amount) public onlyOwner {
    _withdrawSomeCompound(_amount);
  }
  function withdrawSomeFulcrum(uint256 _amount) public onlyOwner {
    _withdrawSomeFulcrum(_amount);
  }
  function withdrawAave(uint amount) public onlyOwner {
      _withdrawAave(amount);
  }
  function withdrawDydx(uint256 amount) public onlyOwner {
      _withdrawDydx(amount);
  }

  function supplyDydx(uint256 amount) public onlyOwner {
      _supplyDydx(amount);
  }
  function supplyAave(uint amount) public onlyOwner {
    _supplyAave(amount);
  }
  function supplyFulcrum(uint amount) public onlyOwner {
      _supplyFulcrum(amount);
  }
  function supplyCompound(uint amount) public onlyOwner {
      _supplyCompound(amount);
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"constant":true,"inputs":[],"name":"aave","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"aavePool","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"aaveToken","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"approveToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"apr","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"balance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"balanceAave","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"balanceAaveAvailable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"balanceCompound","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"balanceCompoundInToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"balanceDydx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"balanceDydxAvailable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"balanceFulcrum","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"balanceFulcrumAvailable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"balanceFulcrumInToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"calcPoolValueInToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"compound","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"dToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"deposit","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"dydx","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"fulcrum","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getAave","outputs":[{"internalType":"address","name":"","type":"address"}],"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":[],"name":"getPricePerFullShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"pool","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"provider","outputs":[{"internalType":"enum yUSDT.Lender","name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"rebalance","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"recommend","outputs":[{"internalType":"enum yUSDT.Lender","name":"","type":"uint8"}],"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_APR","type":"address"}],"name":"set_new_APR","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_new_ATOKEN","type":"address"}],"name":"set_new_ATOKEN","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_new_COMPOUND","type":"address"}],"name":"set_new_COMPOUND","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_new_DTOKEN","type":"uint256"}],"name":"set_new_DTOKEN","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_new_FULCRUM","type":"address"}],"name":"set_new_FULCRUM","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"supplyAave","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"supplyCompound","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"supplyDydx","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"supplyFulcrum","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"token","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_shares","type":"uint256"}],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawAave","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawDydx","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdrawSomeCompound","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdrawSomeFulcrum","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}]

60806040526000601160146101000a81548160ff021916908360048111156200002457fe5b02179055503480156200003657600080fd5b506040518060400160405280600a81526020017f696561726e2055534454000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f795553445400000000000000000000000000000000000000000000000000000081525060068260039080519060200190620000bd92919062000cb9565b508160049080519060200190620000d692919062000cb9565b5080600560006101000a81548160ff021916908360ff16021790555050505060016006819055506200010d6200049060201b60201c565b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a373dac17f958d2ee523a2206206994597c13d831ec7600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073dd6d648c991f7d47454354f4ef326b04025a48a8601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550731e0447b19bb6ecfdae1e4ae1694b0c3659614e4e600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507324a42fd28c976a61df5d00d0599c34c4f90748c8600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550733dfd23a6c5e8bbcfc9581d2e864a68feb6a076d3600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073f013406a0b1d544238083df0b93ad0d2cbe0f65f600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507371fc860f7d3a592a4a98740e39db31d25db65ae8600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507339aa39c021dfbae8fac545936693ac917d5e7563600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060036010819055506200048a6200049860201b60201c565b620011ce565b600033905090565b6200050f600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16620008a860201b62003ec7179092919060201c565b620005a5600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16620008a860201b62003ec7179092919060201c565b6200061c600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16620008a860201b62003ec7179092919060201c565b620006b2600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16620008a860201b62003ec7179092919060201c565b62000716620006c662000a3360201b60201c565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16620008a860201b62003ec7179092919060201c565b620007996200072a62000a3360201b60201c565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16620008a860201b62003ec7179092919060201c565b62000810600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16620008a860201b62003ec7179092919060201c565b620008a6600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16620008a860201b62003ec7179092919060201c565b565b600081148062000948575060008373ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30856040518363ffffffff1660e01b8152600401620008f292919062000ff7565b60206040518083038186803b1580156200090b57600080fd5b505afa15801562000920573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525062000946919081019062000e05565b145b6200098a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009819062001095565b60405180910390fd5b62000a2e838473ffffffffffffffffffffffffffffffffffffffff1663095ea7b3905060e01b8484604051602401620009c592919062001024565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505062000ade60201b60201c565b505050565b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ed6ff7606040518163ffffffff1660e01b815260040160206040518083038186803b15801562000a9e57600080fd5b505afa15801562000ab3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525062000ad9919081019062000dad565b905090565b62000b0a8273ffffffffffffffffffffffffffffffffffffffff1662000c6d60201b620047f71760201c565b62000b4c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b4390620010b7565b60405180910390fd5b600060608373ffffffffffffffffffffffffffffffffffffffff168360405162000b77919062000fde565b6000604051808303816000865af19150503d806000811462000bb6576040519150601f19603f3d011682016040523d82523d6000602084013e62000bbb565b606091505b50915091508162000c03576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000bfa9062001051565b60405180910390fd5b60008151111562000c67578080602001905162000c24919081019062000dd9565b62000c66576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000c5d9062001073565b60405180910390fd5b5b50505050565b60008060007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060001b9050833f91506000801b821415801562000cb05750808214155b92505050919050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1062000cfc57805160ff191683800117855562000d2d565b8280016001018555821562000d2d579182015b8281111562000d2c57825182559160200191906001019062000d0f565b5b50905062000d3c919062000d40565b5090565b62000d6591905b8082111562000d6157600081600090555060010162000d47565b5090565b90565b60008151905062000d798162001180565b92915050565b60008151905062000d90816200119a565b92915050565b60008151905062000da781620011b4565b92915050565b60006020828403121562000dc057600080fd5b600062000dd08482850162000d68565b91505092915050565b60006020828403121562000dec57600080fd5b600062000dfc8482850162000d7f565b91505092915050565b60006020828403121562000e1857600080fd5b600062000e288482850162000d96565b91505092915050565b62000e3c8162001100565b82525050565b600062000e4f82620010d9565b62000e5b8185620010e4565b935062000e6d8185602086016200114a565b80840191505092915050565b600062000e88602083620010ef565b91507f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65646000830152602082019050919050565b600062000eca602a83620010ef565b91507f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008301527f6f742073756363656564000000000000000000000000000000000000000000006020830152604082019050919050565b600062000f32603683620010ef565b91507f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60008301527f20746f206e6f6e2d7a65726f20616c6c6f77616e6365000000000000000000006020830152604082019050919050565b600062000f9a601f83620010ef565b91507f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e7472616374006000830152602082019050919050565b62000fd88162001140565b82525050565b600062000fec828462000e42565b915081905092915050565b60006040820190506200100e600083018562000e31565b6200101d602083018462000e31565b9392505050565b60006040820190506200103b600083018562000e31565b6200104a602083018462000fcd565b9392505050565b600060208201905081810360008301526200106c8162000e79565b9050919050565b600060208201905081810360008301526200108e8162000ebb565b9050919050565b60006020820190508181036000830152620010b08162000f23565b9050919050565b60006020820190508181036000830152620010d28162000f8b565b9050919050565b600081519050919050565b600081905092915050565b600082825260208201905092915050565b60006200110d8262001120565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b838110156200116a5780820151818401526020810190506200114d565b838111156200117a576000848401525b50505050565b6200118b8162001100565b81146200119757600080fd5b50565b620011a58162001114565b8114620011b157600080fd5b50565b620011bf8162001140565b8114620011cb57600080fd5b50565b615fd880620011de6000396000f3fe608060405234801561001057600080fd5b50600436106103995760003560e01c80638da5cb5b116101e9578063b69ef8a81161010f578063e849d659116100ad578063f69e20461161007c578063f69e204614610a30578063f7c1ec7714610a4e578063f82ce27d14610a6c578063fc0c546a14610a8a57610399565b8063e849d659146109be578063f2fde38b146109da578063f5a41dea146109f6578063f5ff191614610a1457610399565b8063cf8ca426116100e9578063cf8ca42614610934578063d54e324414610952578063d9d7858a14610970578063dd62ed3e1461098e57610399565b8063b69ef8a8146108de578063b6b55f25146108fc578063bbf316441461091857610399565b8063a03e4bc311610187578063a9059cbb11610156578063a9059cbb14610858578063a9de245b14610888578063b098fc80146108a4578063b30d0bb2146108c257610399565b8063a03e4bc3146107ce578063a160176d146107ec578063a457c2d71461080a578063a72879711461083a57610399565b80638f9225ca116101c35780638f9225ca1461076c57806395d89b411461078a57806399b71d5c146107a85780639ff011b9146107b257610399565b80638da5cb5b146107125780638e4ec6ef146107305780638f32d59b1461074e57610399565b806346357473116102ce57806370a082311161026c5780637d7c2a1c1161023b5780637d7c2a1c146106b25780638124955c146106bc578063812adb06146106d8578063819faf7b146106f457610399565b806370a082311461063c5780637137ef991461066c578063715018a61461068a57806377c7b8fc1461069457610399565b806358782c21116102a857806358782c21146105c857806361c1ec55146105e657806365aab7491461060457806367e4b7401461062057610399565b8063463574731461057257806356cc93781461058e57806357ded9c9146105aa57610399565b806318160ddd1161033b578063313ce56711610315578063313ce567146104ea578063395093511461050857806339c0a7e11461053857806341c57c8d1461055657610399565b806318160ddd1461048057806323b872dd1461049e5780632e1a7d4d146104ce57610399565b8063085d488311610377578063085d4883146103f6578063095ea7b3146104145780630eb2a2671461044457806316f0115b1461046257610399565b806306636c1c1461039e57806306a3fe59146103ba57806306fdde03146103d8575b600080fd5b6103b860048036036103b39190810190614ce5565b610aa8565b005b6103c2610afb565b6040516103cf91906157ba565b60405180910390f35b6103e0610b21565b6040516103ed9190615902565b60405180910390f35b6103fe610bc3565b60405161040b91906158e7565b60405180910390f35b61042e60048036036104299190810190614bc8565b610bd6565b60405161043b91906158cc565b60405180910390f35b61044c610bf4565b6040516104599190615c0d565b60405180910390f35b61046a610ca6565b6040516104779190615c0d565b60405180910390f35b610488610cac565b6040516104959190615c0d565b60405180910390f35b6104b860048036036104b39190810190614b79565b610cb6565b6040516104c591906158cc565b60405180910390f35b6104e860048036036104e39190810190614ce5565b610d8f565b005b6104f2611139565b6040516104ff9190615c28565b60405180910390f35b610522600480360361051d9190810190614bc8565b611150565b60405161052f91906158cc565b60405180910390f35b610540611203565b60405161054d9190615c0d565b60405180910390f35b610570600480360361056b9190810190614ce5565b6112f3565b005b61058c60048036036105879190810190614aeb565b611346565b005b6105a860048036036105a39190810190614ce5565b6113d1565b005b6105b2611424565b6040516105bf91906157ba565b60405180910390f35b6105d061144a565b6040516105dd91906157ba565b60405180910390f35b6105ee611470565b6040516105fb9190615c0d565b60405180910390f35b61061e60048036036106199190810190614ce5565b611522565b005b61063a60048036036106359190810190614ce5565b611575565b005b61065660048036036106519190810190614aeb565b6115c8565b6040516106639190615c0d565b60405180910390f35b610674611610565b6040516106819190615c0d565b60405180910390f35b610692611683565b005b61069c61178b565b6040516106a99190615c0d565b60405180910390f35b6106ba6117cd565b005b6106d660048036036106d19190810190614ce5565b611913565b005b6106f260048036036106ed9190810190614aeb565b611966565b005b6106fc6119f1565b60405161070991906157ba565b60405180910390f35b61071a611a17565b60405161072791906157ba565b60405180910390f35b610738611a41565b60405161074591906157ba565b60405180910390f35b610756611a67565b60405161076391906158cc565b60405180910390f35b610774611ac6565b6040516107819190615c0d565b60405180910390f35b610792611b9a565b60405161079f9190615902565b60405180910390f35b6107b0611c3c565b005b6107cc60048036036107c79190810190614ce5565b612004565b005b6107d6612055565b6040516107e391906157ba565b60405180910390f35b6107f461207b565b60405161080191906158e7565b60405180910390f35b610824600480360361081f9190810190614bc8565b6121e7565b60405161083191906158cc565b60405180910390f35b6108426122b4565b60405161084f9190615c0d565b60405180910390f35b610872600480360361086d9190810190614bc8565b6123a0565b60405161087f91906158cc565b60405180910390f35b6108a2600480360361089d9190810190614aeb565b6123be565b005b6108ac612449565b6040516108b99190615c0d565b60405180910390f35b6108dc60048036036108d79190810190614ce5565b61251d565b005b6108e6612570565b6040516108f39190615c0d565b60405180910390f35b61091660048036036109119190810190614ce5565b612622565b005b610932600480360361092d9190810190614aeb565b612786565b005b61093c612811565b6040516109499190615c0d565b60405180910390f35b61095a6128c3565b6040516109679190615c0d565b60405180910390f35b610978612997565b6040516109859190615c0d565b60405180910390f35b6109a860048036036109a39190810190614b3d565b61299d565b6040516109b59190615c0d565b60405180910390f35b6109d860048036036109d39190810190614ce5565b612a24565b005b6109f460048036036109ef9190810190614aeb565b612a77565b005b6109fe612aca565b604051610a0b9190615c0d565b60405180910390f35b610a2e6004803603610a299190810190614aeb565b612b95565b005b610a38612c20565b604051610a4591906157ba565b60405180910390f35b610a56612c46565b604051610a6391906157ba565b60405180910390f35b610a74612ced565b604051610a8191906157ba565b60405180910390f35b610a92612d94565b604051610a9f91906157ba565b60405180910390f35b610ab0611a67565b610aef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae690615a44565b60405180910390fd5b610af881612dba565b50565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060038054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610bb95780601f10610b8e57610100808354040283529160200191610bb9565b820191906000526020600020905b815481529060010190602001808311610b9c57829003601f168201915b5050505050905090565b601160149054906101000a900460ff1681565b6000610bea610be3612ff4565b8484612ffc565b6001905092915050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610c5191906157ba565b60206040518083038186803b158015610c6957600080fd5b505afa158015610c7d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610ca19190810190614d0e565b905090565b60085481565b6000600254905090565b6000610cc38484846131c7565b610d8484610ccf612ff4565b610d7f85604051806060016040528060288152602001615f4960289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610d35612ff4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134519092919063ffffffff16565b612ffc565b600190509392505050565b60016006600082825401925050819055506000600654905060008211610dea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de190615a84565b60405180910390fd5b6000610df5336115c8565b905080831115610e3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3190615a64565b60405180910390fd5b610e42611610565b6008819055506000610e73600254610e65866008546134ac90919063ffffffff16565b61351c90919063ffffffff16565b9050610efd846040518060400160405280601d81526020017f72656465656d20616d6f756e7420657863656564732062616c616e63650000008152506000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134519092919063ffffffff16565b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610f548460025461356690919063ffffffff16565b600281905550600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051610fb89190615c0d565b60405180910390a36000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161101d91906157ba565b60206040518083038186803b15801561103557600080fd5b505afa158015611049573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061106d9190810190614d0e565b9050818110156110935761109261108d828461356690919063ffffffff16565b6135b0565b5b6110e03383600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166137269092919063ffffffff16565b6110e8611610565b6008819055505050506006548114611135576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112c90615b64565b60405180910390fd5b5050565b6000600560009054906101000a900460ff16905090565b60006111f961115d612ff4565b846111f4856001600061116e612ff4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546137c590919063ffffffff16565b612ffc565b6001905092915050565b600061120d614842565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c190c2ec60405180604001604052803073ffffffffffffffffffffffffffffffffffffffff16815260200160008152506010546040518363ffffffff1660e01b8152600401611297929190615be4565b604080518083038186803b1580156112ae57600080fd5b505afa1580156112c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506112e69190810190614cbc565b9050806020015191505090565b6112fb611a67565b61133a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133190615a44565b60405180910390fd5b6113438161381a565b50565b61134e611a67565b61138d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138490615a44565b60405180910390fd5b80601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6113d9611a67565b611418576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140f90615a44565b60405180910390fd5b61142181613a54565b50565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016114cd91906157ba565b60206040518083038186803b1580156114e557600080fd5b505afa1580156114f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061151d9190810190614d0e565b905090565b61152a611a67565b611569576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156090615a44565b60405180910390fd5b61157281613ae4565b50565b61157d611a67565b6115bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b390615a44565b60405180910390fd5b6115c581613b80565b50565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600061167e61161d612570565b611670611628612811565b611662611633611203565b61165461163e612aca565b6116466122b4565b6137c590919063ffffffff16565b6137c590919063ffffffff16565b6137c590919063ffffffff16565b6137c590919063ffffffff16565b905090565b61168b611a67565b6116ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c190615a44565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600080611796611610565b90506117c76002546117b9670de0b6b3a7640000846134ac90919063ffffffff16565b61351c90919063ffffffff16565b91505090565b60006117d761207b565b9050601160149054906101000a900460ff1660048111156117f457fe5b81600481111561180057fe5b1461180e5761180d613c26565b5b6000611818612570565b11156118ed576001600481111561182b57fe5b81600481111561183757fe5b14156118525761184d611848612570565b612dba565b6118ec565b60048081111561185e57fe5b81600481111561186a57fe5b14156118855761188061187b612570565b613ce1565b6118eb565b6002600481111561189257fe5b81600481111561189e57fe5b14156118b9576118b46118af612570565b613dd5565b6118ea565b600360048111156118c657fe5b8160048111156118d257fe5b14156118e9576118e86118e3612570565b613ae4565b5b5b5b5b5b80601160146101000a81548160ff0219169083600481111561190b57fe5b021790555050565b61191b611a67565b61195a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195190615a44565b60405180910390fd5b61196381613ce1565b50565b61196e611a67565b6119ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a490615a44565b60405180910390fd5b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611aaa612ff4565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b8152600401611b4591906157ba565b60206040518083038186803b158015611b5d57600080fd5b505afa158015611b71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611b959190810190614d0e565b905090565b606060048054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611c325780601f10611c0757610100808354040283529160200191611c32565b820191906000526020600020905b815481529060010190602001808311611c1557829003601f168201915b5050505050905090565b611cac600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16613ec79092919063ffffffff16565b611d3b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16613ec79092919063ffffffff16565b611dab600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16613ec79092919063ffffffff16565b611e3a600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16613ec79092919063ffffffff16565b611e8f611e45612ced565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16613ec79092919063ffffffff16565b611f03611e9a612ced565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16613ec79092919063ffffffff16565b611f73600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16613ec79092919063ffffffff16565b612002600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16613ec79092919063ffffffff16565b565b61200c611a67565b61204b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204290615a44565b60405180910390fd5b8060108190555050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806000806000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d88be3c0600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b815260040161210091906157ba565b60006040518083038186803b15801561211857600080fd5b505afa15801561212c573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052506121559190810190614c2d565b94509450945094505060008090508085111561216f578490505b8084111561217b578390505b80831115612187578290505b80821115612193578190505b6000809050858214156121a957600290506121db565b848214156121ba57600490506121da565b838214156121cb57600390506121d9565b828214156121d857600190505b5b5b5b80965050505050505090565b60006122aa6121f4612ff4565b846122a585604051806060016040528060258152602001615f71602591396001600061221e612ff4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134519092919063ffffffff16565b612ffc565b6001905092915050565b6000806122bf611470565b9050600081111561239957612396670de0b6b3a7640000612388600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663182df0f56040518163ffffffff1660e01b815260040160206040518083038186803b15801561234157600080fd5b505afa158015612355573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506123799190810190614d0e565b846134ac90919063ffffffff16565b61351c90919063ffffffff16565b90505b8091505090565b60006123b46123ad612ff4565b84846131c7565b6001905092915050565b6123c6611a67565b612405576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123fc90615a44565b60405180910390fd5b80600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b81526004016124c891906157ba565b60206040518083038186803b1580156124e057600080fd5b505afa1580156124f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506125189190810190614d0e565b905090565b612525611a67565b612564576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161255b90615a44565b60405180910390fd5b61256d8161403e565b50565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016125cd91906157ba565b60206040518083038186803b1580156125e557600080fd5b505afa1580156125f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061261d9190810190614d0e565b905090565b6001600660008282540192505081905550600060065490506000821161267d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161267490615b04565b60405180910390fd5b612685611610565b6008819055506126da333084600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166140e4909392919063ffffffff16565b6000809050600060085414156126f95782905082600881905550612725565b612722600854612714600254866134ac90919063ffffffff16565b61351c90919063ffffffff16565b90505b61272d611610565b60088190555061273d3382614186565b506006548114612782576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277990615b64565b60405180910390fd5b5050565b61278e611a67565b6127cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127c490615a44565b60405180910390fd5b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161286e91906157ba565b60206040518083038186803b15801561288657600080fd5b505afa15801561289a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506128be9190810190614d0e565b905090565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b815260040161294291906157ba565b60206040518083038186803b15801561295a57600080fd5b505afa15801561296e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506129929190810190614d0e565b905090565b60105481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b612a2c611a67565b612a6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a6290615a44565b60405180910390fd5b612a7481613dd5565b50565b612a7f611a67565b612abe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ab590615a44565b60405180910390fd5b612ac78161430e565b50565b600080612ad5610bf4565b90506000811115612b8e57600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166306b3efd6306040518263ffffffff1660e01b8152600401612b3b91906157ba565b60206040518083038186803b158015612b5357600080fd5b505afa158015612b67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612b8b9190810190614d0e565b90505b8091505090565b612b9d611a67565b612bdc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bd390615a44565b60405180910390fd5b80600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630261bf8b6040518163ffffffff1660e01b815260040160206040518083038186803b158015612cb057600080fd5b505afa158015612cc4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612ce89190810190614b14565b905090565b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ed6ff7606040518163ffffffff1660e01b815260040160206040518083038186803b158015612d5757600080fd5b505afa158015612d6b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612d8f9190810190614b14565b905090565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60606001604051908082528060200260200182016040528015612df757816020015b612de461485e565b815260200190600190039081612ddc5790505b50905060405180604001604052803073ffffffffffffffffffffffffffffffffffffffff168152602001600081525081600081518110612e3357fe5b6020026020010181905250612e4661488e565b6040518060800160405280600115158152602001600080811115612e6657fe5b8152602001600080811115612e7757fe5b8152602001848152509050612e8a6148cc565b600081600001906001811115612e9c57fe5b90816001811115612ea957fe5b815250506000816020018181525050818160400181905250601054816060018181525050308160a0019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060606001604051908082528060200260200182016040528015612f4257816020015b612f2f614938565b815260200190600190039081612f275790505b5090508181600081518110612f5357fe5b6020026020010181905250600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a67a6a4585836040518363ffffffff1660e01b8152600401612fbb929190615895565b600060405180830381600087803b158015612fd557600080fd5b505af1158015612fe9573d6000803e3d6000fd5b505050505050505050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561306c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161306390615ae4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156130dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130d390615984565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516131ba9190615c0d565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613237576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161322e90615aa4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156132a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161329e90615924565b60405180910390fd5b61331281604051806060016040528060268152602001615f23602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134519092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506133a5816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546137c590919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516134449190615c0d565b60405180910390a3505050565b6000838311158290613499576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134909190615902565b60405180910390fd5b5060008385039050809150509392505050565b6000808314156134bf5760009050613516565b60008284029050828482816134d057fe5b0414613511576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161350890615a04565b60405180910390fd5b809150505b92915050565b600061355e83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061443e565b905092915050565b60006135a883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613451565b905092915050565b600260048111156135bd57fe5b601160149054906101000a900460ff1660048111156135d857fe5b14156135e8576135e78161403e565b5b600360048111156135f557fe5b601160149054906101000a900460ff16600481111561361057fe5b141561366a578061361f612811565b1015613660576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161365790615ac4565b60405180910390fd5b61366981613a54565b5b6001600481111561367757fe5b601160149054906101000a900460ff16600481111561369257fe5b14156136ec57806136a1611203565b10156136e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136d990615ac4565b60405180910390fd5b6136eb8161381a565b5b6004808111156136f857fe5b601160149054906101000a900460ff16600481111561371357fe5b14156137235761372281613b80565b5b50565b6137c0838473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb905060e01b848460405160240161375e929190615835565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061449f565b505050565b600080828401905083811015613810576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613807906159c4565b60405180910390fd5b8091505092915050565b6060600160405190808252806020026020018201604052801561385757816020015b61384461485e565b81526020019060019003908161383c5790505b50905060405180604001604052803073ffffffffffffffffffffffffffffffffffffffff16815260200160008152508160008151811061389357fe5b60200260200101819052506138a661488e565b60405180608001604052806000151581526020016000808111156138c657fe5b81526020016000808111156138d757fe5b81526020018481525090506138ea6148cc565b6001816000019060018111156138fc57fe5b9081600181111561390957fe5b815250506000816020018181525050818160400181905250601054816060018181525050308160a0019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050606060016040519080825280602002602001820160405280156139a257816020015b61398f614938565b8152602001906001900390816139875790505b50905081816000815181106139b357fe5b6020026020010181905250600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a67a6a4585836040518363ffffffff1660e01b8152600401613a1b929190615895565b600060405180830381600087803b158015613a3557600080fd5b505af1158015613a49573d6000803e3d6000fd5b505050505050505050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663db006a75826040518263ffffffff1660e01b8152600401613aaf9190615c0d565b600060405180830381600087803b158015613ac957600080fd5b505af1158015613add573d6000803e3d6000fd5b5050505050565b613aec612c46565b73ffffffffffffffffffffffffffffffffffffffff1663d2d0e066600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168360006040518463ffffffff1660e01b8152600401613b4b9392919061585e565b600060405180830381600087803b158015613b6557600080fd5b505af1158015613b79573d6000803e3d6000fd5b5050505050565b6000613b8a610bf4565b90506000613b96612aca565b905082811015613bdb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613bd290615ac4565b60405180910390fd5b6000613c156001613c0784613bf988886134ac90919063ffffffff16565b61351c90919063ffffffff16565b6137c590919063ffffffff16565b9050613c2081614611565b50505050565b6000613c30611470565b90506000811115613c5f57613c5e613c596001613c4b6122b4565b61356690919063ffffffff16565b61403e565b5b613c67611203565b90506000811115613c8357613c82613c7d6128c3565b61381a565b5b613c8b610bf4565b90506000811115613cba57613cb9613cb46001613ca6611ac6565b61356690919063ffffffff16565b613b80565b5b613cc2612811565b90506000811115613cde57613cdd613cd8612449565b613a54565b5b50565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1930846040518363ffffffff1660e01b8152600401613d40929190615835565b602060405180830381600087803b158015613d5a57600080fd5b505af1158015613d6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250613d929190810190614d0e565b11613dd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613dc990615b24565b60405180910390fd5b50565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a0712d68836040518263ffffffff1660e01b8152600401613e329190615c0d565b602060405180830381600087803b158015613e4c57600080fd5b505af1158015613e60573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250613e849190810190614d0e565b14613ec4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ebb906159a4565b60405180910390fd5b50565b6000811480613f60575060008373ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30856040518363ffffffff1660e01b8152600401613f0e9291906157d5565b60206040518083038186803b158015613f2657600080fd5b505afa158015613f3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250613f5e9190810190614d0e565b145b613f9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613f9690615b84565b60405180910390fd5b614039838473ffffffffffffffffffffffffffffffffffffffff1663095ea7b3905060e01b8484604051602401613fd7929190615835565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061449f565b505050565b6000614048611470565b905060006140546122b4565b905082811015614099576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161409090615ac4565b60405180910390fd5b60006140d360016140c5846140b788886134ac90919063ffffffff16565b61351c90919063ffffffff16565b6137c590919063ffffffff16565b90506140de81614705565b50505050565b614180848573ffffffffffffffffffffffffffffffffffffffff166323b872dd905060e01b85858560405160240161411e939291906157fe565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061449f565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156141f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016141ed90615bc4565b60405180910390fd5b61420b816002546137c590919063ffffffff16565b600281905550614262816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546137c590919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516143029190615c0d565b60405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561437e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161437590615964565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008083118290614485576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161447c9190615902565b60405180910390fd5b50600083858161449157fe5b049050809150509392505050565b6144be8273ffffffffffffffffffffffffffffffffffffffff166147f7565b6144fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016144f490615ba4565b60405180910390fd5b600060608373ffffffffffffffffffffffffffffffffffffffff168360405161452691906157a3565b6000604051808303816000865af19150503d8060008114614563576040519150601f19603f3d011682016040523d82523d6000602084013e614568565b606091505b5091509150816145ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016145a4906159e4565b60405180910390fd5b60008151111561460b57808060200190516145cb9190810190614c04565b61460a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161460190615b44565b60405180910390fd5b5b50505050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639dc29fac30846040518363ffffffff1660e01b8152600401614670929190615835565b602060405180830381600087803b15801561468a57600080fd5b505af115801561469e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506146c29190810190614d0e565b11614702576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016146f990615a24565b60405180910390fd5b50565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663db006a75836040518263ffffffff1660e01b81526004016147629190615c0d565b602060405180830381600087803b15801561477c57600080fd5b505af1158015614790573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506147b49190810190614d0e565b146147f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016147eb90615944565b60405180910390fd5b50565b60008060007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060001b9050833f91506000801b82141580156148395750808214155b92505050919050565b6040518060400160405280600015158152602001600081525090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600081525090565b60405180608001604052806000151581526020016000808111156148ae57fe5b81526020016000808111156148bf57fe5b8152602001600081525090565b604051806101000160405280600060018111156148e557fe5b8152602001600081526020016148f96149a4565b81526020016000815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001606081525090565b6040518061010001604052806000600181111561495157fe5b8152602001600081526020016149656149a4565b81526020016000815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001606081525090565b60405180608001604052806000151581526020016000808111156149c457fe5b81526020016000808111156149d557fe5b8152602001600081525090565b6000813590506149f181615edd565b92915050565b600081519050614a0681615edd565b92915050565b600081519050614a1b81615ef4565b92915050565b600082601f830112614a3257600080fd5b8151614a45614a4082615c70565b615c43565b91508082526020830160208301858383011115614a6157600080fd5b614a6c838284615e65565b50505092915050565b600060408284031215614a8757600080fd5b614a916040615c43565b90506000614aa184828501614a0c565b6000830152506020614ab584828501614ad6565b60208301525092915050565b600081359050614ad081615f0b565b92915050565b600081519050614ae581615f0b565b92915050565b600060208284031215614afd57600080fd5b6000614b0b848285016149e2565b91505092915050565b600060208284031215614b2657600080fd5b6000614b34848285016149f7565b91505092915050565b60008060408385031215614b5057600080fd5b6000614b5e858286016149e2565b9250506020614b6f858286016149e2565b9150509250929050565b600080600060608486031215614b8e57600080fd5b6000614b9c868287016149e2565b9350506020614bad868287016149e2565b9250506040614bbe86828701614ac1565b9150509250925092565b60008060408385031215614bdb57600080fd5b6000614be9858286016149e2565b9250506020614bfa85828601614ac1565b9150509250929050565b600060208284031215614c1657600080fd5b6000614c2484828501614a0c565b91505092915050565b600080600080600060a08688031215614c4557600080fd5b600086015167ffffffffffffffff811115614c5f57600080fd5b614c6b88828901614a21565b9550506020614c7c88828901614ad6565b9450506040614c8d88828901614ad6565b9350506060614c9e88828901614ad6565b9250506080614caf88828901614ad6565b9150509295509295909350565b600060408284031215614cce57600080fd5b6000614cdc84828501614a75565b91505092915050565b600060208284031215614cf757600080fd5b6000614d0584828501614ac1565b91505092915050565b600060208284031215614d2057600080fd5b6000614d2e84828501614ad6565b91505092915050565b6000614d438383615610565b905092915050565b6000614d578383615718565b60408301905092915050565b614d6c81615d5c565b82525050565b614d7b81615d5c565b82525050565b6000614d8c82615cbc565b614d968185615d0d565b935083602082028501614da885615c9c565b8060005b85811015614de45784840389528151614dc58582614d37565b9450614dd083615cf3565b925060208a01995050600181019050614dac565b50829750879550505050505092915050565b6000614e0182615cc7565b614e0b8185615d1e565b9350614e1683615cac565b8060005b83811015614e47578151614e2e8882614d4b565b9750614e3983615d00565b925050600181019050614e1a565b5085935050505092915050565b614e5d81615d6e565b82525050565b614e6c81615d6e565b82525050565b6000614e7d82615cdd565b614e878185615d40565b9350614e97818560208601615e65565b80840191505092915050565b6000614eae82615cd2565b614eb88185615d2f565b9350614ec8818560208601615e65565b614ed181615e98565b840191505092915050565b614ee581615e0b565b82525050565b614ef481615e1d565b82525050565b614f0381615e2f565b82525050565b614f1281615e41565b82525050565b614f2181615e53565b82525050565b6000614f3282615ce8565b614f3c8185615d4b565b9350614f4c818560208601615e65565b614f5581615e98565b840191505092915050565b6000614f6d602383615d4b565b91507f45524332303a207472616e7366657220746f20746865207a65726f206164647260008301527f65737300000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614fd3601983615d4b565b91507f434f4d504f554e443a207769746864726177206661696c6564000000000000006000830152602082019050919050565b6000615013602683615d4b565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000615079602283615d4b565b91507f45524332303a20617070726f766520746f20746865207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006150df601783615d4b565b91507f434f4d504f554e443a20737570706c79206661696c65640000000000000000006000830152602082019050919050565b600061511f601b83615d4b565b91507f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006000830152602082019050919050565b600061515f602083615d4b565b91507f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65646000830152602082019050919050565b600061519f602183615d4b565b91507f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008301527f77000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000615205601883615d4b565b91507f46554c4352554d3a207769746864726177206661696c656400000000000000006000830152602082019050919050565b6000615245602083615d4b565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000615285601483615d4b565b91507f696e73756666696369656e742062616c616e63650000000000000000000000006000830152602082019050919050565b60006152c5601f83615d4b565b91507f7769746864726177206d7573742062652067726561746572207468616e2030006000830152602082019050919050565b6000615305602583615d4b565b91507f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008301527f64726573730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061536b601283615d4b565b91507f696e73756666696369656e742066756e647300000000000000000000000000006000830152602082019050919050565b60006153ab602483615d4b565b91507f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000615411601e83615d4b565b91507f6465706f736974206d7573742062652067726561746572207468616e203000006000830152602082019050919050565b6000615451601683615d4b565b91507f46554c4352554d3a20737570706c79206661696c6564000000000000000000006000830152602082019050919050565b6000615491602a83615d4b565b91507f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008301527f6f742073756363656564000000000000000000000000000000000000000000006020830152604082019050919050565b60006154f7601f83615d4b565b91507f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006000830152602082019050919050565b6000615537603683615d4b565b91507f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60008301527f20746f206e6f6e2d7a65726f20616c6c6f77616e6365000000000000000000006020830152604082019050919050565b600061559d601f83615d4b565b91507f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e7472616374006000830152602082019050919050565b60006155dd601f83615d4b565b91507f45524332303a206d696e7420746f20746865207a65726f2061646472657373006000830152602082019050919050565b6000610160830160008301516156296000860182614edc565b50602083015161563c6020860182615776565b50604083015161564f60408601826156c3565b50606083015161566260c0860182615776565b50608083015161567560e0860182615776565b5060a0830151615689610100860182614d63565b5060c083015161569d610120860182615776565b5060e08301518482036101408601526156b68282614ea3565b9150508091505092915050565b6080820160008201516156d96000850182614e54565b5060208201516156ec6020850182614eeb565b5060408201516156ff6040850182614efa565b5060608201516157126060850182615776565b50505050565b60408201600082015161572e6000850182614d63565b5060208201516157416020850182615776565b50505050565b60408201600082015161575d6000850182614d63565b5060208201516157706020850182615776565b50505050565b61577f81615df4565b82525050565b61578e81615df4565b82525050565b61579d81615dfe565b82525050565b60006157af8284614e72565b915081905092915050565b60006020820190506157cf6000830184614d72565b92915050565b60006040820190506157ea6000830185614d72565b6157f76020830184614d72565b9392505050565b60006060820190506158136000830186614d72565b6158206020830185614d72565b61582d6040830184615785565b949350505050565b600060408201905061584a6000830185614d72565b6158576020830184615785565b9392505050565b60006060820190506158736000830186614d72565b6158806020830185615785565b61588d6040830184614f18565b949350505050565b600060408201905081810360008301526158af8185614df6565b905081810360208301526158c38184614d81565b90509392505050565b60006020820190506158e16000830184614e63565b92915050565b60006020820190506158fc6000830184614f09565b92915050565b6000602082019050818103600083015261591c8184614f27565b905092915050565b6000602082019050818103600083015261593d81614f60565b9050919050565b6000602082019050818103600083015261595d81614fc6565b9050919050565b6000602082019050818103600083015261597d81615006565b9050919050565b6000602082019050818103600083015261599d8161506c565b9050919050565b600060208201905081810360008301526159bd816150d2565b9050919050565b600060208201905081810360008301526159dd81615112565b9050919050565b600060208201905081810360008301526159fd81615152565b9050919050565b60006020820190508181036000830152615a1d81615192565b9050919050565b60006020820190508181036000830152615a3d816151f8565b9050919050565b60006020820190508181036000830152615a5d81615238565b9050919050565b60006020820190508181036000830152615a7d81615278565b9050919050565b60006020820190508181036000830152615a9d816152b8565b9050919050565b60006020820190508181036000830152615abd816152f8565b9050919050565b60006020820190508181036000830152615add8161535e565b9050919050565b60006020820190508181036000830152615afd8161539e565b9050919050565b60006020820190508181036000830152615b1d81615404565b9050919050565b60006020820190508181036000830152615b3d81615444565b9050919050565b60006020820190508181036000830152615b5d81615484565b9050919050565b60006020820190508181036000830152615b7d816154ea565b9050919050565b60006020820190508181036000830152615b9d8161552a565b9050919050565b60006020820190508181036000830152615bbd81615590565b9050919050565b60006020820190508181036000830152615bdd816155d0565b9050919050565b6000606082019050615bf96000830185615747565b615c066040830184615785565b9392505050565b6000602082019050615c226000830184615785565b92915050565b6000602082019050615c3d6000830184615794565b92915050565b6000604051905081810181811067ffffffffffffffff82111715615c6657600080fd5b8060405250919050565b600067ffffffffffffffff821115615c8757600080fd5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b6000615d6782615dd4565b9050919050565b60008115159050919050565b6000819050615d8882615ea9565b919050565b6000819050615d9b82615eb6565b919050565b6000819050615dae82615ec3565b919050565b6000819050615dc182615ed0565b919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000615e1682615d7a565b9050919050565b6000615e2882615d8d565b9050919050565b6000615e3a82615da0565b9050919050565b6000615e4c82615db3565b9050919050565b6000615e5e82615dc6565b9050919050565b60005b83811015615e83578082015181840152602081019050615e68565b83811115615e92576000848401525b50505050565b6000601f19601f8301169050919050565b60028110615eb357fe5b50565b60018110615ec057fe5b50565b60018110615ecd57fe5b50565b60058110615eda57fe5b50565b615ee681615d5c565b8114615ef157600080fd5b50565b615efd81615d6e565b8114615f0857600080fd5b50565b615f1481615df4565b8114615f1f57600080fd5b5056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa365627a7a72315820cd0363eb01267572dd43b6ce6dc2d5ee86d41562cc3a570b0fd4bd380b247d5c6c6578706572696d656e74616cf564736f6c63430005100040

Deployed ByteCode Sourcemap

13021:11630:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13021:11630:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24285:87;;;;;;;;;;;;;;;;:::i;:::-;;13350:24;;;:::i;:::-;;;;;;;;;;;;;;;;5991:83;;;:::i;:::-;;;;;;;;;;;;;;;;13549:36;;;:::i;:::-;;;;;;;;;;;;;;;;3011:152;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;18958:116;;;:::i;:::-;;;;;;;;;;;;;;;;13194:19;;;:::i;:::-;;;;;;;;;;;;;;;;2494:91;;;:::i;:::-;;;;;;;;;;;;;;;;3169:304;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;15510:897;;;;;;;;;;;;;;;;:::i;:::-;;6173:83;;;:::i;:::-;;;;;;;;;;;;;;;;3479:210;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;18082:166;;;:::i;:::-;;;;;;;;;;;;;;;;24188:91;;;;;;;;;;;;;;;;:::i;:::-;;14240:85;;;;;;;;;;;;;;;;:::i;:::-;;24096:88;;;;;;;;;;;;;;;;:::i;:::-;;13429:18;;;:::i;:::-;;;;;;;;;;;;;;;;13271:22;;;:::i;:::-;;;;;;;;;;;;;;;;18252:120;;;:::i;:::-;;;;;;;;;;;;;;;;24376:82;;;;;;;;;;;;;;;;:::i;:::-;;23987:105;;;;;;;;;;;;;;;;:::i;:::-;;2591:110;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;23493:217;;;:::i;:::-;;;;;;;;;;;;;;;;1769:140;;;:::i;:::-;;23716:154;;;:::i;:::-;;;;;;;;;;;;;;;;19320:547;;;:::i;:::-;;24462:90;;;;;;;;;;;;;;;;:::i;:::-;;14644:89;;;;;;;;;;;;;;;;:::i;:::-;;13298:19;;;:::i;:::-;;;;;;;;;;;;;;;;1472:79;;;:::i;:::-;;;;;;;;;;;;;;;;13379:19;;;:::i;:::-;;;;;;;;;;;;;;;;1669:94;;;:::i;:::-;;;;;;;;;;;;;;;;18628:119;;;:::i;:::-;;;;;;;;;;;;;;;;6080:87;;;:::i;:::-;;;;;;;;;;;;;;;;17383:465;;;:::i;:::-;;14543:97;;;;;;;;;;;;;;;;:::i;:::-;;13322:23;;;:::i;:::-;;;;;;;;;;;;;;;;16413:706;;;:::i;:::-;;;;;;;;;;;;;;;;3695:261;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;18376:248;;;:::i;:::-;;;;;;;;;;;;;;;;2707:158;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;14737:100;;;;;;;;;;;;;;;;:::i;:::-;;19078:117;;;:::i;:::-;;;;;;;;;;;;;;;;23876:107;;;;;;;;;;;;;;;;:::i;:::-;;17854;;;:::i;:::-;;;;;;;;;;;;;;;;14890:548;;;;;;;;;;;;;;;;:::i;:::-;;14329:101;;;;;;;;;;;;;;;;:::i;:::-;;19199:115;;;:::i;:::-;;;;;;;;;;;;;;;;17965:113;;;:::i;:::-;;;;;;;;;;;;;;;;13403:21;;;:::i;:::-;;;;;;;;;;;;;;;;2871:134;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;24556:92;;;;;;;;;;;;;;;;:::i;:::-;;1915:109;;;;;;;;;;;;;;;;:::i;:::-;;18751:203;;;:::i;:::-;;;;;;;;;;;;;;;;14434:105;;;;;;;;;;;;;;;;:::i;:::-;;13243:23;;;:::i;:::-;;;;;;;;;;;;;;;;17125:120;;;:::i;:::-;;;;;;;;;;;;;;;;17249:128;;;:::i;:::-;;;;;;;;;;;;;;;;13218:20;;;:::i;:::-;;;;;;;;;;;;;;;;24285:87;1597:9;:7;:9::i;:::-;1589:54;;;;;;;;;;;;;;;;;;;;;;24347:19;24359:6;24347:11;:19::i;:::-;24285:87;:::o;13350:24::-;;;;;;;;;;;;;:::o;5991:83::-;6028:13;6061:5;6054:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5991:83;:::o;13549:36::-;;;;;;;;;;;;;:::o;3011:152::-;3077:4;3094:39;3103:12;:10;:12::i;:::-;3117:7;3126:6;3094:8;:39::i;:::-;3151:4;3144:11;;3011:152;;;;:::o;18958:116::-;19005:7;19035;;;;;;;;;;;19028:25;;;19062:4;19028:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19028:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19028: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;19028:40:0;;;;;;;;;19021:47;;18958:116;:::o;13194:19::-;;;;:::o;2494:91::-;2538:7;2565:12;;2558:19;;2494:91;:::o;3169:304::-;3258:4;3275:36;3285:6;3293:9;3304:6;3275:9;:36::i;:::-;3322:121;3331:6;3339:12;:10;:12::i;:::-;3353:89;3391:6;3353:89;;;;;;;;;;;;;;;;;:11;:19;3365:6;3353:19;;;;;;;;;;;;;;;:33;3373:12;:10;:12::i;:::-;3353:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;3322:8;:121::i;:::-;3461:4;3454:11;;3169:304;;;;;:::o;15510:897::-;6453:1;6436:13;;:18;;;;;;;;;;;6465:20;6488:13;;6465:36;;15611:1;15601:7;:11;15593:55;;;;;;;;;;;;;;;;;;;;;;15659:16;15678:21;15688:10;15678:9;:21::i;:::-;15659:40;;15727:8;15716:7;:19;;15708:52;;;;;;;;;;;;;;;;;;;;;;15823:22;:20;:22::i;:::-;15816:4;:29;;;;15904:9;15916:37;15940:12;;15917:17;15926:7;15917:4;;:8;;:17;;;;:::i;:::-;15916:23;;:37;;;;:::i;:::-;15904:49;;15990:67;16016:7;15990:67;;;;;;;;;;;;;;;;;:9;:21;16000:10;15990:21;;;;;;;;;;;;;;;;:25;;:67;;;;;:::i;:::-;15966:9;:21;15976:10;15966:21;;;;;;;;;;;;;;;:91;;;;16081:25;16098:7;16081:12;;:16;;:25;;;;:::i;:::-;16066:12;:40;;;;16151:1;16122:41;;16131:10;16122:41;;;16155:7;16122:41;;;;;;;;;;;;;;;16198:9;16217:5;;;;;;;;;;;16210:23;;;16242:4;16210:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16210:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16210: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;16210:38:0;;;;;;;;;16198:50;;16265:1;16261;:5;16257:55;;;16279:23;16293:8;16299:1;16293;:5;;:8;;;;:::i;:::-;16279:13;:23::i;:::-;16257:55;16322:41;16349:10;16361:1;16329:5;;;;;;;;;;;16322:26;;;;:41;;;;;:::i;:::-;16379:22;:20;:22::i;:::-;16372:4;:29;;;;6512:1;;;6548:13;;6532:12;:29;6524:73;;;;;;;;;;;;;;;;;;;;;;15510:897;;:::o;6173:83::-;6214:5;6239:9;;;;;;;;;;;6232:16;;6173:83;:::o;3479:210::-;3559:4;3576:83;3585:12;:10;:12::i;:::-;3599:7;3608:50;3647:10;3608:11;:25;3620:12;:10;:12::i;:::-;3608:25;;;;;;;;;;;;;;;:34;3634:7;3608:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;3576:8;:83::i;:::-;3677:4;3670:11;;3479:210;;;;:::o;18082:166::-;18126:7;18144:14;;:::i;:::-;18166:4;;;;;;;;;;;18161:24;;;18186:22;;;;;;;;18199:4;18186:22;;;;;;18206:1;18186:22;;;18210:6;;18161:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18161:56:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18161:56: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;18161:56:0;;;;;;;;;18144:73;;18233:3;:9;;;18226:16;;;18082:166;:::o;24188:91::-;1597:9;:7;:9::i;:::-;1589:54;;;;;;;;;;;;;;;;;;;;;;24252:21;24266:6;24252:13;:21::i;:::-;24188:91;:::o;14240:85::-;1597:9;:7;:9::i;:::-;1589:54;;;;;;;;;;;;;;;;;;;;;;14311:8;14305:3;;:14;;;;;;;;;;;;;;;;;;14240:85;:::o;24096:88::-;1597:9;:7;:9::i;:::-;1589:54;;;;;;;;;;;;;;;;;;;;;;24157:21;24171:6;24157:13;:21::i;:::-;24096:88;:::o;13429:18::-;;;;;;;;;;;;;:::o;13271:22::-;;;;;;;;;;;;;:::o;18252:120::-;18300:7;18332:8;;;;;;;;;;;18325:26;;;18360:4;18325:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18325:41:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18325:41: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;18325:41:0;;;;;;;;;18318:48;;18252:120;:::o;24376:82::-;1597:9;:7;:9::i;:::-;1589:54;;;;;;;;;;;;;;;;;;;;;;24433:19;24445:6;24433:11;:19::i;:::-;24376:82;:::o;23987:105::-;1597:9;:7;:9::i;:::-;1589:54;;;;;;;;;;;;;;;;;;;;;;24057:29;24078:7;24057:20;:29::i;:::-;23987:105;:::o;2591:110::-;2648:7;2675:9;:18;2685:7;2675:18;;;;;;;;;;;;;;;;2668:25;;2591:110;;;:::o;23493:217::-;23546:4;23566:138;23694:9;:7;:9::i;:::-;23566:115;23667:13;:11;:13::i;:::-;23566:88;23640:13;:11;:13::i;:::-;23566:61;23603:23;:21;:23::i;:::-;23566:24;:22;:24::i;:::-;:36;;:61;;;;:::i;:::-;:73;;:88;;;;:::i;:::-;:100;;:115;;;;:::i;:::-;:127;;:138;;;;:::i;:::-;23559:145;;23493:217;:::o;1769:140::-;1597:9;:7;:9::i;:::-;1589:54;;;;;;;;;;;;;;;;;;;;;;1868:1;1831:40;;1852:6;;;;;;;;;;;1831:40;;;;;;;;;;;;1899:1;1882:6;;:19;;;;;;;;;;;;;;;;;;1769:140::o;23716:154::-;23769:4;23782:10;23795:22;:20;:22::i;:::-;23782:35;;23831:33;23851:12;;23831:15;23841:4;23831:5;:9;;:15;;;;:::i;:::-;:19;;:33;;;;:::i;:::-;23824:40;;;23716:154;:::o;19320:547::-;19355:18;19376:11;:9;:11::i;:::-;19355:32;;19415:8;;;;;;;;;;;19400:23;;;;;;;;:11;:23;;;;;;;;;19396:60;;19434:14;:12;:14::i;:::-;19396:60;19480:1;19468:9;:7;:9::i;:::-;:13;19464:367;;;19511:11;19496:26;;;;;;;;:11;:26;;;;;;;;;19492:332;;;19535:22;19547:9;:7;:9::i;:::-;19535:11;:22::i;:::-;19492:332;;;19592:14;19577:29;;;;;;;;:11;:29;;;;;;;;;19573:251;;;19619:25;19634:9;:7;:9::i;:::-;19619:14;:25::i;:::-;19573:251;;;19679:15;19664:30;;;;;;;;:11;:30;;;;;;;;;19660:164;;;19707:26;19723:9;:7;:9::i;:::-;19707:15;:26::i;:::-;19660:164;;;19768:11;19753:26;;;;;;;;:11;:26;;;;;;;;;19749:75;;;19792:22;19804:9;:7;:9::i;:::-;19792:11;:22::i;:::-;19749:75;19660:164;19573:251;19492:332;19464:367;19850:11;19839:8;;:22;;;;;;;;;;;;;;;;;;;;;;;;19320:547;:::o;24462:90::-;1597:9;:7;:9::i;:::-;1589:54;;;;;;;;;;;;;;;;;;;;;;24524:22;24539:6;24524:14;:22::i;:::-;24462:90;:::o;14644:89::-;1597:9;:7;:9::i;:::-;1589:54;;;;;;;;;;;;;;;;;;;;;;14718:9;14711:4;;:16;;;;;;;;;;;;;;;;;;14644:89;:::o;13298:19::-;;;;;;;;;;;;;:::o;1472:79::-;1510:7;1537:6;;;;;;;;;;;1530:13;;1472:79;:::o;13379:19::-;;;;;;;;;;;;;:::o;1669:94::-;1709:4;1749:6;;;;;;;;;;;1733:22;;:12;:10;:12::i;:::-;:22;;;1726:29;;1669:94;:::o;18628:119::-;18684:7;18716:5;;;;;;;;;;;18709:23;;;18733:7;;;;;;;;;;;18709:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18709:32:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18709:32: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;18709:32:0;;;;;;;;;18702:39;;18628:119;:::o;6080:87::-;6119:13;6152:7;6145:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6080:87;:::o;17383:465::-;17423:44;17449:8;;;;;;;;;;;17464:1;17430:5;;;;;;;;;;;17423:25;;;;:44;;;;;:::i;:::-;17476:45;17502:8;;;;;;;;;;;17517:2;17483:5;;;;;;;;;;;17476:25;;;;:45;;;;;:::i;:::-;17530:40;17556:4;;;;;;;;;;;17567:1;17537:5;;;;;;;;;;;17530:25;;;;:40;;;;;:::i;:::-;17579:41;17605:4;;;;;;;;;;;17616:2;17586:5;;;;;;;;;;;17579:25;;;;:41;;;;;:::i;:::-;17629:49;17655:13;:11;:13::i;:::-;17675:1;17636:5;;;;;;;;;;;17629:25;;;;:49;;;;;:::i;:::-;17687:50;17713:13;:11;:13::i;:::-;17733:2;17694:5;;;;;;;;;;;17687:25;;;;:50;;;;;:::i;:::-;17746:43;17772:7;;;;;;;;;;;17786:1;17753:5;;;;;;;;;;;17746:25;;;;:43;;;;;:::i;:::-;17798:44;17824:7;;;;;;;;;;;17838:2;17805:5;;;;;;;;;;;17798:25;;;;:44;;;;;:::i;:::-;17383:465::o;14543:97::-;1597:9;:7;:9::i;:::-;1589:54;;;;;;;;;;;;;;;;;;;;;;14623:11;14614:6;:20;;;;14543:97;:::o;13322:23::-;;;;;;;;;;;;;:::o;16413:706::-;16455:6;16472:12;16485;16498;16511;16541:3;;;;;;;;;;;16527:28;;;16556:5;;;;;;;;;;;16527:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16527:35:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16527:35:0;;;;;;39:16:-1;36:1;17:17;2:54;16527: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;16527:35:0;;;;;;;;;16470:92;;;;;;;;;16569:11;16583:1;16569:15;;16602:3;16595:4;:10;16591:43;;;16622:4;16616:10;;16591:43;16651:3;16644:4;:10;16640:43;;;16671:4;16665:10;;16640:43;16700:3;16693:4;:10;16689:43;;;16720:4;16714:10;;16689:43;16749:3;16742:4;:10;16738:43;;;16769:4;16763:10;;16738:43;16789:18;16810:11;16789:32;;16839:4;16832:3;:11;16828:261;;;16868:15;16854:29;;16828:261;;;16908:4;16901:3;:11;16897:192;;;16937:14;16923:28;;16897:192;;;16976:4;16969:3;:11;16965:124;;;17005:11;16991:25;;16965:124;;;17041:4;17034:3;:11;17030:59;;;17070:11;17056:25;;17030:59;16965:124;16897:192;16828:261;17102:11;17095:18;;;;;;;;16413:706;:::o;3695:261::-;3780:4;3797:129;3806:12;:10;:12::i;:::-;3820:7;3829:96;3868:15;3829:96;;;;;;;;;;;;;;;;;:11;:25;3841:12;:10;:12::i;:::-;3829:25;;;;;;;;;;;;;;;:34;3855:7;3829:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;3797:8;:129::i;:::-;3944:4;3937:11;;3695:261;;;;:::o;18376:248::-;18431:7;18480:9;18492:17;:15;:17::i;:::-;18480:29;;18524:1;18520;:5;18516:88;;;18540:56;18591:4;18540:46;18555:8;;;;;;;;;;;18546:37;;;:39;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18546:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18546: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;18546:39:0;;;;;;;;;18540:1;:5;;:46;;;;:::i;:::-;:50;;:56;;;;:::i;:::-;18536:60;;18516:88;18617:1;18610:8;;;18376:248;:::o;2707:158::-;2776:4;2793:42;2803:12;:10;:12::i;:::-;2817:9;2828:6;2793:9;:42::i;:::-;2853:4;2846:11;;2707:158;;;;:::o;14737:100::-;1597:9;:7;:9::i;:::-;1589:54;;;;;;;;;;;;;;;;;;;;;;14820:11;14808:9;;:23;;;;;;;;;;;;;;;;;;14737:100;:::o;19078:117::-;19131:7;19163:5;;;;;;;;;;;19156:23;;;19180:8;;;;;;;;;;;19156:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19156:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19156: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;19156:33:0;;;;;;;;;19149:40;;19078:117;:::o;23876:107::-;1597:9;:7;:9::i;:::-;1589:54;;;;;;;;;;;;;;;;;;;;;;23947:30;23969:7;23947:21;:30::i;:::-;23876:107;:::o;17854:::-;17894:7;17924:5;;;;;;;;;;;17917:23;;;17949:4;17917:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17917:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17917: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;17917:38:0;;;;;;;;;17910:45;;17854:107;:::o;14890:548::-;6453:1;6436:13;;:18;;;;;;;;;;;6465:20;6488:13;;6465:36;;14990:1;14980:7;:11;14972:54;;;;;;;;;;;;;;;;;;;;;;15042:22;:20;:22::i;:::-;15035:4;:29;;;;15075:66;15106:10;15126:4;15133:7;15082:5;;;;;;;;;;;15075:30;;;;:66;;;;;;:::i;:::-;15184:14;15201:1;15184:18;;15223:1;15215:4;;:9;15211:150;;;15246:7;15237:16;;15271:7;15264:4;:14;;;;15211:150;;;15314:37;15346:4;;15315:25;15327:12;;15315:7;:11;;:25;;;;:::i;:::-;15314:31;;:37;;;;:::i;:::-;15305:46;;15211:150;15376:22;:20;:22::i;:::-;15369:4;:29;;;;15407:25;15413:10;15425:6;15407:5;:25::i;:::-;6512:1;6548:13;;6532:12;:29;6524:73;;;;;;;;;;;;;;;;;;;;;;14890:548;;:::o;14329:101::-;1597:9;:7;:9::i;:::-;1589:54;;;;;;;;;;;;;;;;;;;;;;14412:12;14402:7;;:22;;;;;;;;;;;;;;;;;;14329:101;:::o;19199:115::-;19243:7;19273:9;;;;;;;;;;;19266:27;;;19302:4;19266:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19266:42:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19266: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;19266:42:0;;;;;;;;;19259:49;;19199:115;:::o;17965:113::-;18018:7;18050:5;;;;;;;;;;;18043:23;;;18067:4;;;;;;;;;;;18043:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18043:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18043:29: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;18043:29:0;;;;;;;;;18036:36;;17965:113;:::o;13403:21::-;;;;:::o;2871:134::-;2943:7;2970:11;:18;2982:5;2970:18;;;;;;;;;;;;;;;:27;2989:7;2970:27;;;;;;;;;;;;;;;;2963:34;;2871:134;;;;:::o;24556:92::-;1597:9;:7;:9::i;:::-;1589:54;;;;;;;;;;;;;;;;;;;;;;24619:23;24635:6;24619:15;:23::i;:::-;24556:92;:::o;1915:109::-;1597:9;:7;:9::i;:::-;1589:54;;;;;;;;;;;;;;;;;;;;;;1988:28;2007:8;1988:18;:28::i;:::-;1915:109;:::o;18751:203::-;18805:7;18821:9;18833:16;:14;:16::i;:::-;18821:28;;18864:1;18860;:5;18856:78;;;18888:7;;;;;;;;;;;18880:31;;;18920:4;18880:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18880:46:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18880: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;18880:46:0;;;;;;;;;18876:50;;18856:78;18947:1;18940:8;;;18751:203;:::o;14434:105::-;1597:9;:7;:9::i;:::-;1589:54;;;;;;;;;;;;;;;;;;;;;;14520:13;14509:8;;:24;;;;;;;;;;;;;;;;;;14434:105;:::o;13243:23::-;;;;;;;;;;;;;:::o;17125:120::-;17165:7;17217:4;;;;;;;;;;;17188:49;;;:51;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17188:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17188:51: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;17188:51:0;;;;;;;;;17181:58;;17125:120;:::o;17249:128::-;17293:7;17345:4;;;;;;;;;;;17316:53;;;:55;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17316:55:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17316: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;17316:55:0;;;;;;;;;17309:62;;17249:128;:::o;13218:20::-;;;;;;;;;;;;;:::o;21558:568::-;21613:19;21646:1;21635:13;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;21613:35;;21668:22;;;;;;;;21681:4;21668:22;;;;;;21688:1;21668:22;;;21657:5;21663:1;21657:8;;;;;;;;;;;;;:33;;;;21701:22;;:::i;:::-;21726:70;;;;;;;;21738:4;21726:70;;;;;;21744:21;21726:70;;;;;;;;;;;;21767:20;21726:70;;;;;;;;;;;;21789:6;21726:70;;;21701:95;;21805:21;;:::i;:::-;21852:18;21835:3;:14;;:35;;;;;;;;;;;;;;;;;;;;;;;21895:1;21879:3;:13;;:17;;;;;21918:3;21905;:10;;:16;;;;21952:6;;21930:3;:19;;:28;;;;;21994:4;21967:3;:16;;:32;;;;;;;;;;;22010:24;22054:1;22037:19;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;22010:46;;22075:3;22065:4;22070:1;22065:7;;;;;;;;;;;;;:13;;;;22094:4;;;;;;;;;;;22089:18;;;22108:5;22115:4;22089:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22089:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22089:31:0;;;;21558:568;;;;;:::o;852:98::-;897:15;932:10;925:17;;852:98;:::o;5107:338::-;5218:1;5201:19;;:5;:19;;;;5193:68;;;;;;;;;;;;;;;;;;;;;;5299:1;5280:21;;:7;:21;;;;5272:68;;;;;;;;;;;;;;;;;;;;;;5383:6;5353:11;:18;5365:5;5353:18;;;;;;;;;;;;;;;:27;5372:7;5353:27;;;;;;;;;;;;;;;:36;;;;5421:7;5405:32;;5414:5;5405:32;;;5430:6;5405:32;;;;;;;;;;;;;;;5107:338;;;:::o;3962:471::-;4078:1;4060:20;;:6;:20;;;;4052:70;;;;;;;;;;;;;;;;;;;;;;4162:1;4141:23;;:9;:23;;;;4133:71;;;;;;;;;;;;;;;;;;;;;;4237;4259:6;4237:71;;;;;;;;;;;;;;;;;:9;:17;4247:6;4237:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;4217:9;:17;4227:6;4217:17;;;;;;;;;;;;;;;:91;;;;4342:32;4367:6;4342:9;:20;4352:9;4342:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;4319:9;:20;4329:9;4319:20;;;;;;;;;;;;;;;:55;;;;4407:9;4390:35;;4399:6;4390:35;;;4418:6;4390:35;;;;;;;;;;;;;;;3962:471;;;:::o;6965:192::-;7051:7;7084:1;7079;:6;;7087:12;7071:29;;;;;;;;;;;;;;;;;;;;;;;;;7111:9;7127:1;7123;:5;7111:17;;7148:1;7141:8;;;6965:192;;;;;:::o;7163:250::-;7221:7;7250:1;7245;:6;7241:47;;;7275:1;7268:8;;;;7241:47;7300:9;7316:1;7312;:5;7300:17;;7345:1;7340;7336;:5;;;;;;:10;7328:56;;;;;;;;;;;;;;;;;;;;;;7404:1;7397:8;;;7163:250;;;;;:::o;7419:132::-;7477:7;7504:39;7508:1;7511;7504:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;7497:46;;7419:132;;;;:::o;6823:136::-;6881:7;6908:43;6912:1;6915;6908:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;6901:50;;6823:136;;;;:::o;21051:501::-;21123:15;21111:27;;;;;;;;:8;;;;;;;;;;;:27;;;;;;;;;21107:80;;;21149:30;21171:7;21149:21;:30::i;:::-;21107:80;21209:11;21197:23;;;;;;;;:8;;;;;;;;;;;:23;;;;;;;;;21193:132;;;21256:7;21239:13;:11;:13::i;:::-;:24;;21231:55;;;;;;;;;;;;;;;;;;;;;;21295:22;21309:7;21295:13;:22::i;:::-;21193:132;21347:11;21335:23;;;;;;;;:8;;;;;;;;;;;:23;;;;;;;;;21331:132;;;21394:7;21377:13;:11;:13::i;:::-;:24;;21369:55;;;;;;;;;;;;;;;;;;;;;;21433:22;21447:7;21433:13;:22::i;:::-;21331:132;21485:14;21473:26;;;;;;;;:8;;;;;;;;;;;:26;;;;;;;;;21469:78;;;21510:29;21531:7;21510:20;:29::i;:::-;21469:78;21051:501;:::o;9136:176::-;9219:85;9238:5;9268;:14;;;:23;;;;9293:2;9297:5;9245:58;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;9245:58:0;;;;;;;38:4:-1;29:7;25:18;67:10;61:17;96:58;199:8;192:4;186;182:15;179:29;167:10;160:49;0:215;;;9245:58:0;9219:18;:85::i;:::-;9136:176;;;:::o;6636:181::-;6694:7;6714:9;6730:1;6726;:5;6714:17;;6755:1;6750;:6;;6742:46;;;;;;;;;;;;;;;;;;;;;;6808:1;6801:8;;;6636:181;;;;:::o;22915:572::-;22972:19;23005:1;22994:13;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;22972:35;;23027:22;;;;;;;;23040:4;23027:22;;;;;;23047:1;23027:22;;;23016:5;23022:1;23016:8;;;;;;;;;;;;;:33;;;;23060:22;;:::i;:::-;23085:71;;;;;;;;23097:5;23085:71;;;;;;23104:21;23085:71;;;;;;;;;;;;23127:20;23085:71;;;;;;;;;;;;23149:6;23085:71;;;23060:96;;23165:21;;:::i;:::-;23212:19;23195:3;:14;;:36;;;;;;;;;;;;;;;;;;;;;;;23256:1;23240:3;:13;;:17;;;;;23279:3;23266;:10;;:16;;;;23313:6;;23291:3;:19;;:28;;;;;23355:4;23328:3;:16;;:32;;;;;;;;;;;23371:24;23415:1;23398:19;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;23371:46;;23436:3;23426:4;23431:1;23426:7;;;;;;;;;;;;;:13;;;;23455:4;;;;;;;;;;;23450:18;;;23469:5;23476:4;23450:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23450:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23450:31:0;;;;22915:572;;;;;:::o;22521:92::-;22582:9;;;;;;;;;;;22575:24;;;22600:6;22575:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22575:32:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22575:32:0;;;;22521:92;:::o;22132:99::-;22189:9;:7;:9::i;:::-;22184:23;;;22208:5;;;;;;;;;;;22215:6;22223:1;22184:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22184:41:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22184:41:0;;;;22132:99;:::o;20721:324::-;20784:9;20796:16;:14;:16::i;:::-;20784:28;;20819:10;20832:23;:21;:23::i;:::-;20819:36;;20876:7;20870:2;:13;;20862:44;;;;;;;;;;;;;;;;;;;;;;20960:14;20977:31;21006:1;20977:24;20998:2;20978:14;20984:7;20978:1;:5;;:14;;;;:::i;:::-;20977:20;;:24;;;;:::i;:::-;:28;;:31;;;;:::i;:::-;20960:48;;21015:24;21032:6;21015:16;:24::i;:::-;20721:324;;;;:::o;19873:508::-;19913:14;19930:17;:15;:17::i;:::-;19913:34;;19967:1;19958:6;:10;19954:87;;;19979:54;20001:31;20030:1;20001:24;:22;:24::i;:::-;:28;;:31;;;;:::i;:::-;19979:21;:54::i;:::-;19954:87;20056:13;:11;:13::i;:::-;20047:22;;20089:1;20080:6;:10;20076:70;;;20101:37;20115:22;:20;:22::i;:::-;20101:13;:37::i;:::-;20076:70;20161:16;:14;:16::i;:::-;20152:25;;20197:1;20188:6;:10;20184:87;;;20209:54;20230:32;20260:1;20230:25;:23;:25::i;:::-;:29;;:32;;;;:::i;:::-;20209:20;:54::i;:::-;20184:87;20286:13;:11;:13::i;:::-;20277:22;;20319:1;20310:6;:10;20306:70;;;20331:37;20345:22;:20;:22::i;:::-;20331:13;:37::i;:::-;20306:70;19873:508;:::o;22235:144::-;22345:1;22306:7;;;;;;;;;;;22298:21;;;22328:4;22335:6;22298:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22298:44:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22298:44: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;22298:44:0;;;;;;;;;:48;22290:83;;;;;;;;;;;;;;;;;;;;;;22235:144;:::o;22383:134::-;22482:1;22456:8;;;;;;;;;;;22447:23;;;22471:6;22447:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22447:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22447:31: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;22447:31:0;;;;;;;;;:36;22439:72;;;;;;;;;;;;;;;;;;;;;;22383:134;:::o;9532:347::-;9637:1;9628:5;:10;9627:62;;;;9687:1;9644:5;:15;;;9668:4;9675:7;9644:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9644:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;9644: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;9644:39:0;;;;;;;;;:44;9627:62;9619:152;;;;;;;;;;;;;;;;;;;;;;9782:89;9801:5;9831;:13;;;:22;;;;9855:7;9864:5;9808:62;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;9808:62:0;;;;;;;38:4:-1;29:7;25:18;67:10;61:17;96:58;199:8;192:4;186;182:15;179:29;167:10;160:49;0:215;;;9808:62:0;9782:18;:89::i;:::-;9532:347;;;:::o;20387:328::-;20451:9;20463:17;:15;:17::i;:::-;20451:29;;20487:10;20500:24;:22;:24::i;:::-;20487:37;;20545:7;20539:2;:13;;20531:44;;;;;;;;;;;;;;;;;;;;;;20629:14;20646:31;20675:1;20646:24;20667:2;20647:14;20653:7;20647:1;:5;;:14;;;;:::i;:::-;20646:20;;:24;;;;:::i;:::-;:28;;:31;;;;:::i;:::-;20629:48;;20684:25;20702:6;20684:17;:25::i;:::-;20387:328;;;;:::o;9320:204::-;9421:95;9440:5;9470;:18;;;:27;;;;9499:4;9505:2;9509:5;9447:68;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;9447:68:0;;;;;;;38:4:-1;29:7;25:18;67:10;61:17;96:58;199:8;192:4;186;182:15;179:29;167:10;160:49;0:215;;;9447:68:0;9421:18;:95::i;:::-;9320:204;;;;:::o;4439:308::-;4534:1;4515:21;;:7;:21;;;;4507:65;;;;;;;;;;;;;;;;;;;;;;4600:24;4617:6;4600:12;;:16;;:24;;;;:::i;:::-;4585:12;:39;;;;4656:30;4679:6;4656:9;:18;4666:7;4656:18;;;;;;;;;;;;;;;;:22;;:30;;;;:::i;:::-;4635:9;:18;4645:7;4635:18;;;;;;;;;;;;;;;:51;;;;4723:7;4702:37;;4719:1;4702:37;;;4732:6;4702:37;;;;;;;;;;;;;;;4439:308;;:::o;2030:229::-;2124:1;2104:22;;:8;:22;;;;2096:73;;;;;;;;;;;;;;;;;;;;;;2214:8;2185:38;;2206:6;;;;;;;;;;;2185:38;;;;;;;;;;;;2243:8;2234:6;;:17;;;;;;;;;;;;;;;;;;2030:229;:::o;7557:258::-;7643:7;7742:1;7738;:5;7745:12;7730:28;;;;;;;;;;;;;;;;;;;;;;;;;7769:9;7785:1;7781;:5;;;;;;7769:17;;7806:1;7799:8;;;7557:258;;;;;:::o;9885:598::-;9973:27;9981:5;9973:25;;;:27::i;:::-;9965:71;;;;;;;;;;;;;;;;;;;;;;10110:12;10124:23;10159:5;10151:19;;10171:4;10151:25;;;;;;;;;;;;;;;;;;;;;;;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;;10109:67:0;;;;10195:7;10187:52;;;;;;;;;;;;;;;;;;;;;;10276:1;10256:10;:17;:21;10252:224;;;10398:10;10387:30;;;;;;;;;;;;;;10379:85;;;;;;;;;;;;;;;;;;;;;;10252:224;9885:598;;;;:::o;22617:148::-;22729:1;22690:7;;;;;;;;;;;22682:21;;;22712:4;22719:6;22682:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22682:44:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22682:44: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;22682:44:0;;;;;;;;;:48;22674:85;;;;;;;;;;;;;;;;;;;;;;22617:148;:::o;22769:140::-;22872:1;22844:8;;;;;;;;;;;22835:25;;;22861:6;22835:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22835:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22835: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;22835:33:0;;;;;;;;;:38;22827:76;;;;;;;;;;;;;;;;;;;;;;22769:140;:::o;8153:374::-;8213:4;8230:16;8257:19;8279:66;8257:88;;;;8448:7;8436:20;8424:32;;8488:3;8476:15;;:8;:15;;:42;;;;;8507:11;8495:8;:23;;8476:42;8468:51;;;;8153:374;;;:::o;13021:11630::-;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::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;;;;;419:444;;532:3;525:4;517:6;513:17;509:27;499:2;;550:1;547;540:12;499:2;580:6;574:13;602:65;617:49;659:6;617:49;;;602:65;;;593:74;;687:6;680:5;673:21;723:4;715:6;711:17;756:4;749:5;745:16;791:3;782:6;777:3;773:16;770:25;767:2;;;808:1;805;798:12;767:2;818:39;850:6;845:3;840;818:39;;;492:371;;;;;;;;896:494;;1017:4;1005:9;1000:3;996:19;992:30;989:2;;;1035:1;1032;1025:12;989:2;1053:20;1068:4;1053:20;;;1044:29;;1123:1;1155:57;1208:3;1199:6;1188:9;1184:22;1155:57;;;1148:4;1141:5;1137:16;1130:83;1083:141;1275:2;1308:60;1364:3;1355:6;1344:9;1340:22;1308:60;;;1301:4;1294:5;1290:16;1283:86;1234:146;983:407;;;;;1397:130;;1477:6;1464:20;1455:29;;1489:33;1516:5;1489:33;;;1449:78;;;;;1534:134;;1618:6;1612:13;1603:22;;1630:33;1657:5;1630:33;;;1597:71;;;;;1675:241;;1779:2;1767:9;1758:7;1754:23;1750:32;1747:2;;;1795:1;1792;1785:12;1747:2;1830:1;1847:53;1892:7;1883:6;1872:9;1868:22;1847:53;;;1837:63;;1809:97;1741:175;;;;;1923:263;;2038:2;2026:9;2017:7;2013:23;2009:32;2006:2;;;2054:1;2051;2044:12;2006:2;2089:1;2106:64;2162:7;2153:6;2142:9;2138:22;2106:64;;;2096:74;;2068:108;2000:186;;;;;2193:366;;;2314:2;2302:9;2293:7;2289:23;2285:32;2282:2;;;2330:1;2327;2320:12;2282:2;2365:1;2382:53;2427:7;2418:6;2407:9;2403:22;2382:53;;;2372:63;;2344:97;2472:2;2490:53;2535:7;2526:6;2515:9;2511:22;2490:53;;;2480:63;;2451:98;2276:283;;;;;;2566:491;;;;2704:2;2692:9;2683:7;2679:23;2675:32;2672:2;;;2720:1;2717;2710:12;2672:2;2755:1;2772:53;2817:7;2808:6;2797:9;2793:22;2772:53;;;2762:63;;2734:97;2862:2;2880:53;2925:7;2916:6;2905:9;2901:22;2880:53;;;2870:63;;2841:98;2970:2;2988:53;3033:7;3024:6;3013:9;3009:22;2988:53;;;2978:63;;2949:98;2666:391;;;;;;3064:366;;;3185:2;3173:9;3164:7;3160:23;3156:32;3153:2;;;3201:1;3198;3191:12;3153:2;3236:1;3253:53;3298:7;3289:6;3278:9;3274:22;3253:53;;;3243:63;;3215:97;3343:2;3361:53;3406:7;3397:6;3386:9;3382:22;3361:53;;;3351:63;;3322:98;3147:283;;;;;;3437:257;;3549:2;3537:9;3528:7;3524:23;3520:32;3517:2;;;3565:1;3562;3555:12;3517:2;3600:1;3617:61;3670:7;3661:6;3650:9;3646:22;3617:61;;;3607:71;;3579:105;3511:183;;;;;3701:908;;;;;;3894:3;3882:9;3873:7;3869:23;3865:33;3862:2;;;3911:1;3908;3901:12;3862:2;3967:1;3956:9;3952:17;3946:24;3990:18;3982:6;3979:30;3976:2;;;4022:1;4019;4012:12;3976:2;4042:74;4108:7;4099:6;4088:9;4084:22;4042:74;;;4032:84;;3925:197;4153:2;4171:64;4227:7;4218:6;4207:9;4203:22;4171:64;;;4161:74;;4132:109;4272:2;4290:64;4346:7;4337:6;4326:9;4322:22;4290:64;;;4280:74;;4251:109;4391:2;4409:64;4465:7;4456:6;4445:9;4441:22;4409:64;;;4399:74;;4370:109;4510:3;4529:64;4585:7;4576:6;4565:9;4561:22;4529:64;;;4519:74;;4489:110;3856:753;;;;;;;;;4616:305;;4752:2;4740:9;4731:7;4727:23;4723:32;4720:2;;;4768:1;4765;4758:12;4720:2;4803:1;4820:85;4897:7;4888:6;4877:9;4873:22;4820:85;;;4810:95;;4782:129;4714:207;;;;;4928:241;;5032:2;5020:9;5011:7;5007:23;5003:32;5000:2;;;5048:1;5045;5038:12;5000:2;5083:1;5100:53;5145:7;5136:6;5125:9;5121:22;5100:53;;;5090:63;;5062:97;4994:175;;;;;5176:263;;5291:2;5279:9;5270:7;5266:23;5262:32;5259:2;;;5307:1;5304;5297:12;5259:2;5342:1;5359:64;5415:7;5406:6;5395:9;5391:22;5359:64;;;5349:74;;5321:108;5253:186;;;;;5447:253;;5596:98;5690:3;5682:6;5596:98;;;5582:112;;5575:125;;;;;5709:249;;5832:86;5914:3;5906:6;5832:86;;;5947:4;5942:3;5938:14;5924:28;;5825:133;;;;;5966:103;6039:24;6057:5;6039:24;;;6034:3;6027:37;6021:48;;;6076:113;6159:24;6177:5;6159:24;;;6154:3;6147:37;6141:48;;;6263:1040;;6456:78;6528:5;6456:78;;;6547:110;6650:6;6645:3;6547:110;;;6540:117;;6680:3;6722:4;6714:6;6710:17;6705:3;6701:27;6749:80;6823:5;6749:80;;;6849:7;6877:1;6862:402;6887:6;6884:1;6881:13;6862:402;;;6949:9;6943:4;6939:20;6934:3;6927:33;6994:6;6988:13;7016:112;7123:4;7108:13;7016:112;;;7008:120;;7145:84;7222:6;7145:84;;;7135:94;;7252:4;7247:3;7243:14;7236:21;;6919:345;6909:1;6906;6902:9;6897:14;;6862:402;;;6866:14;7277:4;7270:11;;7294:3;7287:10;;6435:868;;;;;;;;;;7366:834;;7547:72;7613:5;7547:72;;;7632:104;7729:6;7724:3;7632:104;;;7625:111;;7757:74;7825:5;7757:74;;;7851:7;7879:1;7864:314;7889:6;7886:1;7883:13;7864:314;;;7956:6;7950:13;7977:99;8072:3;8057:13;7977:99;;;7970:106;;8093:78;8164:6;8093:78;;;8083:88;;7921:257;7911:1;7908;7904:9;7899:14;;7864:314;;;7868:14;8191:3;8184:10;;7526:674;;;;;;;;8208:94;8275:21;8290:5;8275:21;;;8270:3;8263:34;8257:45;;;8309:104;8386:21;8401:5;8386:21;;;8381:3;8374:34;8368:45;;;8420:356;;8548:38;8580:5;8548:38;;;8598:88;8679:6;8674:3;8598:88;;;8591:95;;8691:52;8736:6;8731:3;8724:4;8717:5;8713:16;8691:52;;;8764:6;8759:3;8755:16;8748:23;;8528:248;;;;;;8783:315;;8879:34;8907:5;8879:34;;;8925:60;8978:6;8973:3;8925:60;;;8918:67;;8990:52;9035:6;9030:3;9023:4;9016:5;9012:16;8990:52;;;9063:29;9085:6;9063:29;;;9058:3;9054:39;9047:46;;8859:239;;;;;;9105:142;9191:50;9235:5;9191:50;;;9186:3;9179:63;9173:74;;;9254:156;9347:57;9398:5;9347:57;;;9342:3;9335:70;9329:81;;;9417:150;9507:54;9555:5;9507:54;;;9502:3;9495:67;9489:78;;;9574:144;9666:46;9706:5;9666:46;;;9661:3;9654:59;9648:70;;;9725:140;9815:44;9853:5;9815:44;;;9810:3;9803:57;9797:68;;;9872:347;;9984:39;10017:5;9984:39;;;10035:71;10099:6;10094:3;10035:71;;;10028:78;;10111:52;10156:6;10151:3;10144:4;10137:5;10133:16;10111:52;;;10184:29;10206:6;10184:29;;;10179:3;10175:39;10168:46;;9964:255;;;;;;10227:372;;10387:67;10451:2;10446:3;10387:67;;;10380:74;;10487:34;10483:1;10478:3;10474:11;10467:55;10556:5;10551:2;10546:3;10542:12;10535:27;10590:2;10585:3;10581:12;10574:19;;10373:226;;;;10608:325;;10768:67;10832:2;10827:3;10768:67;;;10761:74;;10868:27;10864:1;10859:3;10855:11;10848:48;10924:2;10919:3;10915:12;10908:19;;10754:179;;;;10942:375;;11102:67;11166:2;11161:3;11102:67;;;11095:74;;11202:34;11198:1;11193:3;11189:11;11182:55;11271:8;11266:2;11261:3;11257:12;11250:30;11308:2;11303:3;11299:12;11292:19;;11088:229;;;;11326:371;;11486:67;11550:2;11545:3;11486:67;;;11479:74;;11586:34;11582:1;11577:3;11573:11;11566:55;11655:4;11650:2;11645:3;11641:12;11634:26;11688:2;11683:3;11679:12;11672:19;;11472:225;;;;11706:323;;11866:67;11930:2;11925:3;11866:67;;;11859:74;;11966:25;11962:1;11957:3;11953:11;11946:46;12020:2;12015:3;12011:12;12004:19;;11852:177;;;;12038:327;;12198:67;12262:2;12257:3;12198:67;;;12191:74;;12298:29;12294:1;12289:3;12285:11;12278:50;12356:2;12351:3;12347:12;12340:19;;12184:181;;;;12374:332;;12534:67;12598:2;12593:3;12534:67;;;12527:74;;12634:34;12630:1;12625:3;12621:11;12614:55;12697:2;12692:3;12688:12;12681:19;;12520:186;;;;12715:370;;12875:67;12939:2;12934:3;12875:67;;;12868:74;;12975:34;12971:1;12966:3;12962:11;12955:55;13044:3;13039:2;13034:3;13030:12;13023:25;13076:2;13071:3;13067:12;13060:19;;12861:224;;;;13094:324;;13254:67;13318:2;13313:3;13254:67;;;13247:74;;13354:26;13350:1;13345:3;13341:11;13334:47;13409:2;13404:3;13400:12;13393:19;;13240:178;;;;13427:332;;13587:67;13651:2;13646:3;13587:67;;;13580:74;;13687:34;13683:1;13678:3;13674:11;13667:55;13750:2;13745:3;13741:12;13734:19;;13573:186;;;;13768:320;;13928:67;13992:2;13987:3;13928:67;;;13921:74;;14028:22;14024:1;14019:3;14015:11;14008:43;14079:2;14074:3;14070:12;14063:19;;13914:174;;;;14097:331;;14257:67;14321:2;14316:3;14257:67;;;14250:74;;14357:33;14353:1;14348:3;14344:11;14337:54;14419:2;14414:3;14410:12;14403:19;;14243:185;;;;14437:374;;14597:67;14661:2;14656:3;14597:67;;;14590:74;;14697:34;14693:1;14688:3;14684:11;14677:55;14766:7;14761:2;14756:3;14752:12;14745:29;14802:2;14797:3;14793:12;14786:19;;14583:228;;;;14820:318;;14980:67;15044:2;15039:3;14980:67;;;14973:74;;15080:20;15076:1;15071:3;15067:11;15060:41;15129:2;15124:3;15120:12;15113:19;;14966:172;;;;15147:373;;15307:67;15371:2;15366:3;15307:67;;;15300:74;;15407:34;15403:1;15398:3;15394:11;15387:55;15476:6;15471:2;15466:3;15462:12;15455:28;15511:2;15506:3;15502:12;15495:19;;15293:227;;;;15529:330;;15689:67;15753:2;15748:3;15689:67;;;15682:74;;15789:32;15785:1;15780:3;15776:11;15769:53;15850:2;15845:3;15841:12;15834:19;;15675:184;;;;15868:322;;16028:67;16092:2;16087:3;16028:67;;;16021:74;;16128:24;16124:1;16119:3;16115:11;16108:45;16181:2;16176:3;16172:12;16165:19;;16014:176;;;;16199:379;;16359:67;16423:2;16418:3;16359:67;;;16352:74;;16459:34;16455:1;16450:3;16446:11;16439:55;16528:12;16523:2;16518:3;16514:12;16507:34;16569:2;16564:3;16560:12;16553:19;;16345:233;;;;16587:331;;16747:67;16811:2;16806:3;16747:67;;;16740:74;;16847:33;16843:1;16838:3;16834:11;16827:54;16909:2;16904:3;16900:12;16893:19;;16733:185;;;;16927:391;;17087:67;17151:2;17146:3;17087:67;;;17080:74;;17187:34;17183:1;17178:3;17174:11;17167:55;17256:24;17251:2;17246:3;17242:12;17235:46;17309:2;17304:3;17300:12;17293:19;;17073:245;;;;17327:331;;17487:67;17551:2;17546:3;17487:67;;;17480:74;;17587:33;17583:1;17578:3;17574:11;17567:54;17649:2;17644:3;17640:12;17633:19;;17473:185;;;;17667:331;;17827:67;17891:2;17886:3;17827:67;;;17820:74;;17927:33;17923:1;17918:3;17914:11;17907:54;17989:2;17984:3;17980:12;17973:19;;17813:185;;;;18067:1611;;18210:6;18205:3;18201:16;18301:4;18294:5;18290:16;18284:23;18313:76;18383:4;18378:3;18374:14;18360:12;18313:76;;;18232:163;18473:4;18466:5;18462:16;18456:23;18485:63;18542:4;18537:3;18533:14;18519:12;18485:63;;;18405:149;18629:4;18622:5;18618:16;18612:23;18641:117;18752:4;18747:3;18743:14;18729:12;18641:117;;;18564:200;18848:4;18841:5;18837:16;18831:23;18860:63;18917:4;18912:3;18908:14;18894:12;18860:63;;;18774:155;19015:4;19008:5;19004:16;18998:23;19027:63;19084:4;19079:3;19075:14;19061:12;19027:63;;;18939:157;19177:4;19170:5;19166:16;19160:23;19189:65;19246:6;19241:3;19237:16;19223:12;19189:65;;;19106:154;19343:4;19336:5;19332:16;19326:23;19355:65;19412:6;19407:3;19403:16;19389:12;19355:65;;;19270:156;19499:4;19492:5;19488:16;19482:23;19553:3;19547:4;19543:14;19534:6;19529:3;19525:16;19518:40;19573:67;19635:4;19621:12;19573:67;;;19565:75;;19436:216;19669:4;19662:11;;18183:1495;;;;;;19748:817;19885:4;19880:3;19876:14;19968:4;19961:5;19957:16;19951:23;19980:57;20031:4;20026:3;20022:14;20008:12;19980:57;;;19905:138;20124:4;20117:5;20113:16;20107:23;20136:83;20213:4;20208:3;20204:14;20190:12;20136:83;;;20053:172;20297:4;20290:5;20286:16;20280:23;20309:80;20383:4;20378:3;20374:14;20360:12;20309:80;;;20235:160;20469:4;20462:5;20458:16;20452:23;20481:63;20538:4;20533:3;20529:14;20515:12;20481:63;;;20405:145;19858:707;;;;20621:459;20744:4;20739:3;20735:14;20828:4;20821:5;20817:16;20811:23;20840:63;20897:4;20892:3;20888:14;20874:12;20840:63;;;20764:145;20984:4;20977:5;20973:16;20967:23;20996:63;21053:4;21048:3;21044:14;21030:12;20996:63;;;20919:146;20717:363;;;;21136:469;21269:4;21264:3;21260:14;21353:4;21346:5;21342:16;21336:23;21365:63;21422:4;21417:3;21413:14;21399:12;21365:63;;;21289:145;21509:4;21502:5;21498:16;21492:23;21521:63;21578:4;21573:3;21569:14;21555:12;21521:63;;;21444:146;21242:363;;;;21612:103;21685:24;21703:5;21685:24;;;21680:3;21673:37;21667:48;;;21722:113;21805:24;21823:5;21805:24;;;21800:3;21793:37;21787:48;;;21842:107;21921:22;21937:5;21921:22;;;21916:3;21909:35;21903:46;;;21956:262;;22100:93;22189:3;22180:6;22100:93;;;22093:100;;22210:3;22203:10;;22081:137;;;;;22225:213;;22343:2;22332:9;22328:18;22320:26;;22357:71;22425:1;22414:9;22410:17;22401:6;22357:71;;;22314:124;;;;;22445:324;;22591:2;22580:9;22576:18;22568:26;;22605:71;22673:1;22662:9;22658:17;22649:6;22605:71;;;22687:72;22755:2;22744:9;22740:18;22731:6;22687:72;;;22562:207;;;;;;22776:435;;22950:2;22939:9;22935:18;22927:26;;22964:71;23032:1;23021:9;23017:17;23008:6;22964:71;;;23046:72;23114:2;23103:9;23099:18;23090:6;23046:72;;;23129;23197:2;23186:9;23182:18;23173:6;23129:72;;;22921:290;;;;;;;23218:324;;23364:2;23353:9;23349:18;23341:26;;23378:71;23446:1;23435:9;23431:17;23422:6;23378:71;;;23460:72;23528:2;23517:9;23513:18;23504:6;23460:72;;;23335:207;;;;;;23549:449;;23730:2;23719:9;23715:18;23707:26;;23744:71;23812:1;23801:9;23797:17;23788:6;23744:71;;;23826:72;23894:2;23883:9;23879:18;23870:6;23826:72;;;23909:79;23984:2;23973:9;23969:18;23960:6;23909:79;;;23701:297;;;;;;;24005:788;;24335:2;24324:9;24320:18;24312:26;;24385:9;24379:4;24375:20;24371:1;24360:9;24356:17;24349:47;24410:144;24549:4;24540:6;24410:144;;;24402:152;;24602:9;24596:4;24592:20;24587:2;24576:9;24572:18;24565:48;24627:156;24778:4;24769:6;24627:156;;;24619:164;;24306:487;;;;;;24800:201;;24912:2;24901:9;24897:18;24889:26;;24926:65;24988:1;24977:9;24973:17;24964:6;24926:65;;;24883:118;;;;;25008:231;;25135:2;25124:9;25120:18;25112:26;;25149:80;25226:1;25215:9;25211:17;25202:6;25149:80;;;25106:133;;;;;25246:301;;25384:2;25373:9;25369:18;25361:26;;25434:9;25428:4;25424:20;25420:1;25409:9;25405:17;25398:47;25459:78;25532:4;25523:6;25459:78;;;25451:86;;25355:192;;;;;25554:407;;25745:2;25734:9;25730:18;25722:26;;25795:9;25789:4;25785:20;25781:1;25770:9;25766:17;25759:47;25820:131;25946:4;25820:131;;;25812:139;;25716:245;;;;25968:407;;26159:2;26148:9;26144:18;26136:26;;26209:9;26203:4;26199:20;26195:1;26184:9;26180:17;26173:47;26234:131;26360:4;26234:131;;;26226:139;;26130:245;;;;26382:407;;26573:2;26562:9;26558:18;26550:26;;26623:9;26617:4;26613:20;26609:1;26598:9;26594:17;26587:47;26648:131;26774:4;26648:131;;;26640:139;;26544:245;;;;26796:407;;26987:2;26976:9;26972:18;26964:26;;27037:9;27031:4;27027:20;27023:1;27012:9;27008:17;27001:47;27062:131;27188:4;27062:131;;;27054:139;;26958:245;;;;27210:407;;27401:2;27390:9;27386:18;27378:26;;27451:9;27445:4;27441:20;27437:1;27426:9;27422:17;27415:47;27476:131;27602:4;27476:131;;;27468:139;;27372:245;;;;27624:407;;27815:2;27804:9;27800:18;27792:26;;27865:9;27859:4;27855:20;27851:1;27840:9;27836:17;27829:47;27890:131;28016:4;27890:131;;;27882:139;;27786:245;;;;28038:407;;28229:2;28218:9;28214:18;28206:26;;28279:9;28273:4;28269:20;28265:1;28254:9;28250:17;28243:47;28304:131;28430:4;28304:131;;;28296:139;;28200:245;;;;28452:407;;28643:2;28632:9;28628:18;28620:26;;28693:9;28687:4;28683:20;28679:1;28668:9;28664:17;28657:47;28718:131;28844:4;28718:131;;;28710:139;;28614:245;;;;28866:407;;29057:2;29046:9;29042:18;29034:26;;29107:9;29101:4;29097:20;29093:1;29082:9;29078:17;29071:47;29132:131;29258:4;29132:131;;;29124:139;;29028:245;;;;29280:407;;29471:2;29460:9;29456:18;29448:26;;29521:9;29515:4;29511:20;29507:1;29496:9;29492:17;29485:47;29546:131;29672:4;29546:131;;;29538:139;;29442:245;;;;29694:407;;29885:2;29874:9;29870:18;29862:26;;29935:9;29929:4;29925:20;29921:1;29910:9;29906:17;29899:47;29960:131;30086:4;29960:131;;;29952:139;;29856:245;;;;30108:407;;30299:2;30288:9;30284:18;30276:26;;30349:9;30343:4;30339:20;30335:1;30324:9;30320:17;30313:47;30374:131;30500:4;30374:131;;;30366:139;;30270:245;;;;30522:407;;30713:2;30702:9;30698:18;30690:26;;30763:9;30757:4;30753:20;30749:1;30738:9;30734:17;30727:47;30788:131;30914:4;30788:131;;;30780:139;;30684:245;;;;30936:407;;31127:2;31116:9;31112:18;31104:26;;31177:9;31171:4;31167:20;31163:1;31152:9;31148:17;31141:47;31202:131;31328:4;31202:131;;;31194:139;;31098:245;;;;31350:407;;31541:2;31530:9;31526:18;31518:26;;31591:9;31585:4;31581:20;31577:1;31566:9;31562:17;31555:47;31616:131;31742:4;31616:131;;;31608:139;;31512:245;;;;31764:407;;31955:2;31944:9;31940:18;31932:26;;32005:9;31999:4;31995:20;31991:1;31980:9;31976:17;31969:47;32030:131;32156:4;32030:131;;;32022:139;;31926:245;;;;32178:407;;32369:2;32358:9;32354:18;32346:26;;32419:9;32413:4;32409:20;32405:1;32394:9;32390:17;32383:47;32444:131;32570:4;32444:131;;;32436:139;;32340:245;;;;32592:407;;32783:2;32772:9;32768:18;32760:26;;32833:9;32827:4;32823:20;32819:1;32808:9;32804:17;32797:47;32858:131;32984:4;32858:131;;;32850:139;;32754:245;;;;33006:407;;33197:2;33186:9;33182:18;33174:26;;33247:9;33241:4;33237:20;33233:1;33222:9;33218:17;33211:47;33272:131;33398:4;33272:131;;;33264:139;;33168:245;;;;33420:407;;33611:2;33600:9;33596:18;33588:26;;33661:9;33655:4;33651:20;33647:1;33636:9;33632:17;33625:47;33686:131;33812:4;33686:131;;;33678:139;;33582:245;;;;33834:407;;34025:2;34014:9;34010:18;34002:26;;34075:9;34069:4;34065:20;34061:1;34050:9;34046:17;34039:47;34100:131;34226:4;34100:131;;;34092:139;;33996:245;;;;34248:407;;34439:2;34428:9;34424:18;34416:26;;34489:9;34483:4;34479:20;34475:1;34464:9;34460:17;34453:47;34514:131;34640:4;34514:131;;;34506:139;;34410:245;;;;34662:404;;34848:2;34837:9;34833:18;34825:26;;34862:111;34970:1;34959:9;34955:17;34946:6;34862:111;;;34984:72;35052:2;35041:9;35037:18;35028:6;34984:72;;;34819:247;;;;;;35073:213;;35191:2;35180:9;35176:18;35168:26;;35205:71;35273:1;35262:9;35258:17;35249:6;35205:71;;;35162:124;;;;;35293:205;;35407:2;35396:9;35392:18;35384:26;;35421:67;35485:1;35474:9;35470:17;35461:6;35421:67;;;35378:120;;;;;35505:256;;35567:2;35561:9;35551:19;;35605:4;35597:6;35593:17;35704:6;35692:10;35689:22;35668:18;35656:10;35653:34;35650:62;35647:2;;;35725:1;35722;35715:12;35647:2;35745:10;35741:2;35734:22;35545:216;;;;;35768:322;;35912:18;35904:6;35901:30;35898:2;;;35944:1;35941;35934:12;35898:2;36011:4;36007:9;36000:4;35992:6;35988:17;35984:33;35976:41;;36075:4;36069;36065:15;36057:23;;35835:255;;;;36097:175;;36207:3;36199:11;;36245:4;36240:3;36236:14;36228:22;;36193:79;;;;36279:169;;36383:3;36375:11;;36421:4;36416:3;36412:14;36404:22;;36369:79;;;;36455:161;;36588:5;36582:12;36572:22;;36553:63;;;;36623:155;;36750:5;36744:12;36734:22;;36715:63;;;;36785:117;;36874:5;36868:12;36858:22;;36839:63;;;;36909:121;;37002:5;36996:12;36986:22;;36967:63;;;;37037:122;;37131:5;37125:12;37115:22;;37096:63;;;;37166:132;;37288:4;37283:3;37279:14;37271:22;;37265:33;;;;37305:126;;37421:4;37416:3;37412:14;37404:22;;37398:33;;;;37439:202;;37593:6;37588:3;37581:19;37630:4;37625:3;37621:14;37606:29;;37574:67;;;;;37650:196;;37798:6;37793:3;37786:19;37835:4;37830:3;37826:14;37811:29;;37779:67;;;;;37855:152;;37959:6;37954:3;37947:19;37996:4;37991:3;37987:14;37972:29;;37940:67;;;;;38016:144;;38151:3;38136:18;;38129:31;;;;;38169:163;;38284:6;38279:3;38272:19;38321:4;38316:3;38312:14;38297:29;;38265:67;;;;;38340:91;;38402:24;38420:5;38402:24;;;38391:35;;38385:46;;;;38438:85;;38511:5;38504:13;38497:21;38486:32;;38480:43;;;;38530:136;;38607:5;38596:16;;38613:48;38655:5;38613:48;;;38590:76;;;;38673:150;;38757:5;38746:16;;38763:55;38812:5;38763:55;;;38740:83;;;;38830:144;;38911:5;38900:16;;38917:52;38963:5;38917:52;;;38894:80;;;;38981:128;;39054:5;39043:16;;39060:44;39098:5;39060:44;;;39037:72;;;;39116:84;;39188:6;39181:5;39177:18;39166:29;;39160:40;;;;39207:121;;39280:42;39273:5;39269:54;39258:65;;39252:76;;;;39335:72;;39397:5;39386:16;;39380:27;;;;39414:81;;39485:4;39478:5;39474:16;39463:27;;39457:38;;;;39502:136;;39594:39;39627:5;39594:39;;;39581:52;;39575:63;;;;39645:150;;39744:46;39784:5;39744:46;;;39731:59;;39725:70;;;;39802:144;;39898:43;39935:5;39898:43;;;39885:56;;39879:67;;;;39953:128;;40041:35;40070:5;40041:35;;;40028:48;;40022:59;;;;40088:114;;40174:23;40191:5;40174:23;;;40161:36;;40155:47;;;;40210:268;40275:1;40282:101;40296:6;40293:1;40290:13;40282:101;;;40372:1;40367:3;40363:11;40357:18;40353:1;40348:3;40344:11;40337:39;40318:2;40315:1;40311:10;40306:15;;40282:101;;;40398:6;40395:1;40392:13;40389:2;;;40463:1;40454:6;40449:3;40445:16;40438:27;40389:2;40259:219;;;;;40486:97;;40574:2;40570:7;40565:2;40558:5;40554:14;40550:28;40540:38;;40534:49;;;;40591:106;40675:1;40668:5;40665:12;40655:2;;40681:9;40655:2;40649:48;;40704:113;40795:1;40788:5;40785:12;40775:2;;40801:9;40775:2;40769:48;;40824:110;40912:1;40905:5;40902:12;40892:2;;40918:9;40892:2;40886:48;;40941:102;41021:1;41014:5;41011:12;41001:2;;41027:9;41001:2;40995:48;;41050:117;41119:24;41137:5;41119:24;;;41112:5;41109:35;41099:2;;41158:1;41155;41148:12;41099:2;41093:74;;41174:111;41240:21;41255:5;41240:21;;;41233:5;41230:32;41220:2;;41276:1;41273;41266:12;41220:2;41214:71;;41292:117;41361:24;41379:5;41361:24;;;41354:5;41351:35;41341:2;;41400:1;41397;41390:12;41341:2;41335:74;

Swarm Source

bzzr://cd0363eb01267572dd43b6ce6dc2d5ee86d41562cc3a570b0fd4bd380b247d5c
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.