Contract 0xd52dca990CFC3760e0Cb0A60D96BE0da43fEbf19 6

 
 
Txn Hash
Method
Block
From
To
Value
0x0d126456323dd8063145b3d0904396e5ed0fde460b4b1e87a4c3f40f61a4e5b6Stake End(pending)2022-12-07 10:50:4220 mins ago0x70a336e4c8b5fc11d3a6f78010dedafe9dd381fc IN 0xd52dca990cfc3760e0cb0a60d96be0da43febf190 Ether(Pending)(Pending)
0x581bce0620242015852de0060a25d3b0a9f9feb96242f13a7b4f78820926ab19Buy(pending)2022-12-07 9:53:441 hr 17 mins ago0xffae22bfbc2db1190c49d287ef7d7471fd0fff3c IN 0xd52dca990cfc3760e0cb0a60d96be0da43febf190 Ether(Pending)(Pending)
0x7c77c0e67308e7b8b40e523c62f9d9a867f21478c196f72ee26b5c651f0a72d2Stake End(pending)2022-12-07 8:59:572 hrs 10 mins ago0x70a336e4c8b5fc11d3a6f78010dedafe9dd381fc IN 0xd52dca990cfc3760e0cb0a60d96be0da43febf190 Ether(Pending)(Pending)
0xd70e956d090f0da319832b4a5883e2b58460f5816a14ea7a0b854b8d6453a33aStake End161302602022-12-07 3:39:357 hrs 31 mins ago0x260d45e212d5c37ef45ff5d600f44fccb533ce9d IN  0xd52dca990cfc3760e0cb0a60d96be0da43febf190 Ether0.02908215 15.67536975
0x7b9638c4aef737ab0e04b3a33f0c89f144a7967542453ed53870309c1be750ccWithdraw161228942022-12-06 2:54:231 day 8 hrs ago0x20818168cf8e0521737dd8eb257822cd7b50fc85 IN  0xd52dca990cfc3760e0cb0a60d96be0da43febf190 Ether0.0008914 11.77660678
0x272372836bd600e629e24dfdc0f6e0fec924cee8a059b6a1f0fbfcd0d6354cedSell161228902022-12-06 2:53:351 day 8 hrs ago0x20818168cf8e0521737dd8eb257822cd7b50fc85 IN  0xd52dca990cfc3760e0cb0a60d96be0da43febf190 Ether0.0011045 12.05786845
0xc3eb991ab4d12f2b4e0d5e1e4337870e62b422bd79ce502784fd6f284824cbf5Stake End161228852022-12-06 2:52:351 day 8 hrs ago0x20818168cf8e0521737dd8eb257822cd7b50fc85 IN  0xd52dca990cfc3760e0cb0a60d96be0da43febf190 Ether0.02704726 11.51427242
0x52f001764bf7ac0f47fa03caf67cc68eee2c750a362772085e3d5335dd6e8749Withdraw161210102022-12-05 20:36:231 day 14 hrs ago0x3d247eaeb731fb3446f629d91fb1b4666c50b235 IN  0xd52dca990cfc3760e0cb0a60d96be0da43febf190 Ether0.00080063 13.66439299
0x88da02e60281f97c55792bc1ff8673b75fe42f00e6e8d92f7887715a2981be11Withdraw161155392022-12-05 2:13:112 days 8 hrs ago0xf7ead947ffbfefbecd0963d9c547d470b37439c9 IN  0xd52dca990cfc3760e0cb0a60d96be0da43febf190 Ether0.00077828 13.28297161
0x220469f58ee3e6f20323b1e80b4022b2f9598d9fcafe869dab074dc8ebf922a9Sell161155382022-12-05 2:12:472 days 8 hrs ago0xf7ead947ffbfefbecd0963d9c547d470b37439c9 IN  0xd52dca990cfc3760e0cb0a60d96be0da43febf190 Ether0.00123548 13.48610767
0x18bdcfa05fcb46731b1e1e6b5a38b1b6e36bd148b8a7b3a8b7edd1fed06d1aadStake End161154362022-12-05 1:51:592 days 9 hrs ago0xf7ead947ffbfefbecd0963d9c547d470b37439c9 IN  0xd52dca990cfc3760e0cb0a60d96be0da43febf190 Ether0.0254411 13.49230746
0x203b9c29dfa19a63fe4360f8d89d3053a2d5b928e67103825592e9212f4c9b7cWithdraw161151582022-12-05 0:55:352 days 10 hrs agoENS Name trevonjames.eth IN  0xd52dca990cfc3760e0cb0a60d96be0da43febf190 Ether0.00071897 12.27065845
0xdce71c88b518a058d66a3e781695cbfe00ce70bc4443c157e5f160f1f6014d9bWithdraw160957852022-12-02 7:59:475 days 3 hrs ago0xda1bdb55969eac47f664d66fd16d6119abb564a1 IN  0xd52dca990cfc3760e0cb0a60d96be0da43febf190 Ether0.00076449 10.1
0x9eb7ddc64690fa30bc91d70af1441f82ff993f837c34ecc00a22e8669feeda45Sell160957752022-12-02 7:57:475 days 3 hrs ago0xda1bdb55969eac47f664d66fd16d6119abb564a1 IN  0xd52dca990cfc3760e0cb0a60d96be0da43febf190 Ether0.00092503 10.1
0xde9946e541804d56bb16854eea3f8815b6eda2f86665cee561f1462eb42610e6Withdraw160939002022-12-02 1:41:115 days 9 hrs ago0x067053411269f540a09fcd7babb7747472af8745 IN  0xd52dca990cfc3760e0cb0a60d96be0da43febf190 Ether0.0008881 11.73299342
0x09371a8249d13fb03e8367751f99f535b2422b00455faa65be152fb9dec931c3Withdraw160918262022-12-01 18:44:355 days 16 hrs ago0xf6d44482c95190caebb37b31caf57cf6b5315bd1 IN  0xd52dca990cfc3760e0cb0a60d96be0da43febf190 Ether0.00081689 13.94190901
0x0abeb0fff368bbf2e00800cd9563395c275ecb0a75a646a405d03a67070a05d3Sell160918232022-12-01 18:43:595 days 16 hrs ago0xf6d44482c95190caebb37b31caf57cf6b5315bd1 IN  0xd52dca990cfc3760e0cb0a60d96be0da43febf190 Ether0.00133176 14.54080842
0x17953231263c42b6c91e6739bae6f673c0be8d6bef790de27b7327a1d3f782e8Withdraw160889742022-12-01 9:10:356 days 2 hrs ago0x666024e9855bd8dcbbf1a91c2d40f31c27699254 IN  0xd52dca990cfc3760e0cb0a60d96be0da43febf190 Ether0.00072752 12.41662609
0xac58a30ac35f9d5fc99900837740c38f541d84193ea0e8c9407a0975f9289c40Sell160889712022-12-01 9:09:596 days 2 hrs ago0x666024e9855bd8dcbbf1a91c2d40f31c27699254 IN  0xd52dca990cfc3760e0cb0a60d96be0da43febf190 Ether0.0012307 13.44882239
0xf76bc82d5557acc7b1722cb5a88c9d4d797fc6ed847a24fd6c7afd58f7f489a8Withdraw160847062022-11-30 18:51:236 days 16 hrs ago0x86d26652c40c177dd3bbe4e25fa66c0dcab3d115 IN  0xd52dca990cfc3760e0cb0a60d96be0da43febf190 Ether0.00128464 16.97172959
0xaa0694e70337e17c2593ea267c4c2026dccad134e4308af204700a483dab2d83Sell160847032022-11-30 18:50:476 days 16 hrs ago0x86d26652c40c177dd3bbe4e25fa66c0dcab3d115 IN  0xd52dca990cfc3760e0cb0a60d96be0da43febf190 Ether0.00167133 18.24837039
0xc1d3ef7266689a026c65fa6b066a85777519be5468f0e0db4a585e0eaa245582Withdraw160846272022-11-30 18:35:356 days 16 hrs ago0x86d26652c40c177dd3bbe4e25fa66c0dcab3d115 IN  0xd52dca990cfc3760e0cb0a60d96be0da43febf190 Ether0.00150442 19.87537821
0xe227e93e14dc490741deb49142433446eef2143b65e124e50f6475fbc9094b9dWithdraw160605612022-11-27 9:55:1110 days 1 hr ago0x666024e9855bd8dcbbf1a91c2d40f31c27699254 IN  0xd52dca990cfc3760e0cb0a60d96be0da43febf190 Ether0.00067441 11.51015199
0x1a5fdc35ccded3616e20a0d52acaa7429a5e82899778ce0ab8462a1243dcf0b7Withdraw160592312022-11-27 5:28:2310 days 5 hrs ago0xf6945b2a91b73f30251c0fb2edaa8947d82196f7 IN  0xd52dca990cfc3760e0cb0a60d96be0da43febf190 Ether0.00077643 13.25131809
0xafc1da97a6b59a8a8f2cc4a07ba154a710149298c2d7160b38da5d74fc7c0c07Exit160591182022-11-27 5:05:3510 days 6 hrs ago0x86d9344094297cf5a6c77c07476f40c2f9903cd8 IN  0xd52dca990cfc3760e0cb0a60d96be0da43febf190 Ether0.00127052 10.07692359
[ Download CSV Export 
View more zero value Internal Transactions in Advanced View mode
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
HMX

Compiler Version
v0.5.13+commit.5b0b510c

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2020-03-28
*/

pragma solidity ^0.5.13;

library SafeMath {
  function mul(uint256 a, uint256 b) internal pure returns (uint256 c) {
    if (a == 0) {
      return 0;
    }
    c = a * b;
    assert(c / a == b);
    return c;
  }

  function div(uint256 a, uint256 b) internal pure returns (uint256) {
    return a / b;
  }

  function sub(uint256 a, uint256 b) internal pure returns (uint256) {
    assert(b <= a);
    return a - b;
  }

  function add(uint256 a, uint256 b) internal pure returns (uint256 c) {
    c = a + b;
    assert(c >= a);
    return c;
  }
}

contract EXCH {
    function distribute(uint256 _amount) public returns (uint256);
    function appreciateTokenPrice(uint256 _amount) public;
}

contract TOKEN {
    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);
    function stakeStart(uint256 newStakedHearts, uint256 newStakedDays) external;
    function stakeEnd(uint256 stakeIndex, uint40 stakeIdParam) external;
    function stakeCount(address stakerAddr) external view returns (uint256);
    function stakeLists(address owner, uint256 stakeIndex) external view returns (uint40, uint72, uint72, uint16, uint16, uint16, bool);
    function currentDay() external view returns (uint256);
}

contract Ownable {
  address public owner;

  constructor() public {
    owner = address(0x86d9344094297cf5a6c77c07476F40C2F9903CD8);
  }

  modifier onlyOwner() {
    require(msg.sender == owner);
    _;
  }
}

contract HMX is Ownable {
    using SafeMath for uint256;

    uint ACTIVATION_TIME = 1585440000;

    modifier isActivated {
        require(now >= ACTIVATION_TIME);

        if (now <= (ACTIVATION_TIME + 2 minutes)) {
            require(tx.gasprice <= 0.2 szabo);
        }
        _;
    }

    modifier onlyTokenHolders {
        require(myTokens(true) > 0);
        _;
    }

    modifier onlyDivis {
        require(myDividends(true) > 0);
        _;
    }

    modifier isStakeActivated {
        require(stakeActivated == true);
        _;
    }

    event onDistribute(
        address indexed customerAddress,
        uint256 tokens
    );

    event onTokenAppreciation(
        uint256 tokenPrice,
        uint256 timestamp
    );

    event Transfer(
        address indexed from,
        address indexed to,
        uint256 tokens
    );

    event onTokenPurchase(
        address indexed customerAddress,
        uint256 incomingHEX,
        uint256 tokensMinted,
        address indexed referredBy,
        uint256 timestamp
    );

    event onTokenSell(
        address indexed customerAddress,
        uint256 tokensBurned,
        uint256 hexEarned,
        uint256 timestamp
    );

    event onRoll(
        address indexed customerAddress,
        uint256 hexRolled,
        uint256 tokensMinted
    );

    event onWithdraw(
        address indexed customerAddress,
        uint256 hexWithdrawn
    );

    event onStakeStart(
        address indexed customerAddress,
        uint256 uniqueID,
        uint256 currentTokens,
        uint256 timestamp
    );

    event onStakeEnd(
        address indexed customerAddress,
        uint256 uniqueID,
        uint256 returnAmount,
        uint256 difference,
        uint256 timestamp
    );

    string public name = "HEXMAX";
    string public symbol = "HEX4";
    uint8 constant public decimals = 8;
    uint256 constant private priceMagnitude = 1e8;
    uint256 constant private divMagnitude = 2 ** 64;

    uint8 constant private appreciateFee = 2;
    uint8 constant private buyInFee = 6;
    uint8 constant private sellOutFee = 6;
    uint8 constant private transferFee = 1;
    uint8 constant private devFee = 1;
    uint8 constant private hexTewFee = 1;
    uint8 constant private hexRiseFee = 1;

    mapping(address => uint256) private tokenBalanceLedger;
    mapping(address => uint256) private referralBalance;
    mapping(address => int256) private payoutsTo;
    mapping(address => uint256) public lockedHexBalanceLedger;

    struct Stats {
       uint256 deposits;
       uint256 withdrawals;
       uint256 staked;
       uint256 activeStakes;
    }

    mapping(address => Stats) public playerStats;

    uint256 public referralRequirement = 100000e8;
    uint256 public totalStakeBalance = 0;
    uint256 public totalPlayer = 0;
    uint256 public totalDonation = 0;
    uint256 public totalTewFundReceived = 0;
    uint256 public totalTewFundCollected = 0;
    uint256 public totalRiseFundReceived = 0;
    uint256 public totalRiseFundCollected = 0;

    uint256 private tokenSupply = 0;
    uint256 private profitPerShare = 0;
    uint256 private contractValue = 0;
    uint256 private tokenPrice = 100000000;

    EXCH hextew;
    EXCH hexrise;

    TOKEN erc20;

    struct StakeStore {
      uint40 stakeID;
      uint256 hexAmount;
      uint72 stakeShares;
      uint16 lockedDay;
      uint16 stakedDays;
      uint16 unlockedDay;
      bool started;
      bool ended;
    }

    bool stakeActivated = true;
    bool feedActivated = true;
    mapping(address => mapping(uint256 => StakeStore)) public stakeLists;

    constructor() public {
        hextew = EXCH(address(0xD495cC8C7c29c7fA3E027a5759561Ab68C363609));
        hexrise = EXCH(address(0x8D5CA96e9984662625e6cbF490Da40c9D7270865));
        erc20 = TOKEN(address(0x2b591e99afE9f32eAA6214f7B7629768c40Eeb39));
    }

    function() payable external {
        revert();
    }

    function checkAndTransferHEX(uint256 _amount) private {
        require(erc20.transferFrom(msg.sender, address(this), _amount) == true, "transfer must succeed");
    }

    function distribute(uint256 _amount) isActivated public {
        require(_amount > 0, "must be a positive value");
        checkAndTransferHEX(_amount);
        totalDonation += _amount;
        profitPerShare = SafeMath.add(profitPerShare, (_amount * divMagnitude) / tokenSupply);
        emit onDistribute(msg.sender, _amount);
    }

    function appreciateTokenPrice(uint256 _amount) isActivated public {
        require(_amount > 0, "must be a positive value");
        checkAndTransferHEX(_amount);
        totalDonation += _amount;
        contractValue = contractValue.add(_amount);

        if (tokenSupply > priceMagnitude) {
            tokenPrice = (contractValue.mul(priceMagnitude)) / tokenSupply;
        }

        emit onTokenAppreciation(tokenPrice, now);
    }

    function payFund(bytes32 exchange) public {
        if (exchange == "hextew") {
          uint256 _hexToPay = totalTewFundCollected.sub(totalTewFundReceived);
          require(_hexToPay > 0);
          totalTewFundReceived = totalTewFundReceived.add(_hexToPay);
          erc20.approve(address(0xD495cC8C7c29c7fA3E027a5759561Ab68C363609), _hexToPay);
          hextew.distribute(_hexToPay);
        } else if (exchange == "hexrise") {
          uint256 _hexToPay = totalRiseFundCollected.sub(totalRiseFundReceived);
          require(_hexToPay > 0);
          totalRiseFundReceived = totalRiseFundReceived.add(_hexToPay);
          erc20.approve(address(0x8D5CA96e9984662625e6cbF490Da40c9D7270865), _hexToPay);
          hexrise.appreciateTokenPrice(_hexToPay);
        }
    }

    function roll() onlyDivis public {
        address _customerAddress = msg.sender;
        uint256 _dividends = myDividends(false);
        payoutsTo[_customerAddress] +=  (int256) (_dividends * divMagnitude);
        _dividends += referralBalance[_customerAddress];
        referralBalance[_customerAddress] = 0;
        uint256 _tokens = purchaseTokens(address(0), _customerAddress, _dividends);
        emit onRoll(_customerAddress, _dividends, _tokens);
    }

    function exit() external {
        address _customerAddress = msg.sender;
        uint256 _lockedToken = (lockedHexBalanceLedger[_customerAddress].mul(priceMagnitude)) / tokenPrice;
        uint256 _tokens = tokenBalanceLedger[_customerAddress].sub(_lockedToken);
        if (_tokens > 0) sell(_tokens);
        withdraw();
    }

    function withdraw() onlyDivis public {
        address _customerAddress = msg.sender;
        uint256 _dividends = myDividends(false);
        payoutsTo[_customerAddress] += (int256) (_dividends * divMagnitude);
        _dividends += referralBalance[_customerAddress];
        referralBalance[_customerAddress] = 0;
        erc20.transfer(_customerAddress, _dividends);
        playerStats[_customerAddress].withdrawals += _dividends;
        emit onWithdraw(_customerAddress, _dividends);
    }

    function buy(address _referredBy, uint256 _amount) public returns (uint256) {
        checkAndTransferHEX(_amount);
        return purchaseTokens(_referredBy, msg.sender, _amount);
    }

    function buyFor(address _referredBy, address _customerAddress, uint256 _amount) public returns (uint256) {
        checkAndTransferHEX(_amount);
        return purchaseTokens(_referredBy, _customerAddress, _amount);
    }

    function _purchaseTokens(address _customerAddress, uint256 _incomingHEX, uint256 _dividends) private returns(uint256) {
        uint256 _amountOfTokens = (_incomingHEX.mul(priceMagnitude)) / tokenPrice;
        uint256 _fee = _dividends * divMagnitude;

        require(_amountOfTokens > 0 && _amountOfTokens.add(tokenSupply) > tokenSupply);

        if (tokenSupply > 0) {
            tokenSupply = tokenSupply.add(_amountOfTokens);
            profitPerShare += (_dividends * divMagnitude / tokenSupply);
            _fee = _fee - (_fee - (_amountOfTokens * (_dividends * divMagnitude / tokenSupply)));
        } else {
            tokenSupply = _amountOfTokens;
        }

        tokenBalanceLedger[_customerAddress] =  tokenBalanceLedger[_customerAddress].add(_amountOfTokens);

        int256 _updatedPayouts = (int256) (profitPerShare * _amountOfTokens - _fee);
        payoutsTo[_customerAddress] += _updatedPayouts;

        emit Transfer(address(0), _customerAddress, _amountOfTokens);

        return _amountOfTokens;
    }

    function purchaseTokens(address _referredBy, address _customerAddress, uint256 _incomingHEX) private isActivated returns (uint256) {
        if (playerStats[_customerAddress].deposits == 0) {
            totalPlayer++;
        }

        playerStats[_customerAddress].deposits += _incomingHEX;

        require(_incomingHEX > 0);

        uint256 _appreciateFee = _incomingHEX.mul(appreciateFee).div(100);
        uint256 _dividendFee = feedActivated == true ? _incomingHEX.mul(buyInFee).div(100) : _incomingHEX.mul(buyInFee+1).div(100);
        uint256 _devFee = _incomingHEX.mul(devFee).div(100);
        uint256 _hexTewFee = feedActivated == true ? _incomingHEX.mul(hexTewFee).div(100) : 0;
        uint256 _taxedHEX = _incomingHEX.sub(_appreciateFee).sub(_dividendFee).sub(_devFee).sub(_hexTewFee);

        _purchaseTokens(owner, _devFee, 0);
        uint256 _amountOfTokens = _purchaseTokens(_customerAddress, _taxedHEX, _dividendFee);

        if (_referredBy != address(0) && _referredBy != _customerAddress && tokenBalanceLedger[_referredBy] >= referralRequirement) {
            referralBalance[_referredBy] = referralBalance[_referredBy].add(_hexTewFee);
        } else {
            totalTewFundCollected = totalTewFundCollected.add(_hexTewFee);
        }

        contractValue = contractValue.add(_incomingHEX.sub(_hexTewFee).sub(_dividendFee));

        if (tokenSupply > priceMagnitude) {
            tokenPrice = (contractValue.mul(priceMagnitude)) / tokenSupply;
        }

        if (hexToSendFund("hextew") >= 10000e8) {
            payFund("hextew");
        }

        emit onTokenPurchase(_customerAddress, _incomingHEX, _amountOfTokens, _referredBy, now);
        emit onTokenAppreciation(tokenPrice, now);

        return _amountOfTokens;
    }

    function sell(uint256 _amountOfTokens) isActivated onlyTokenHolders public {
        address _customerAddress = msg.sender;
        uint256 _lockedToken = (lockedHexBalanceLedger[_customerAddress].mul(priceMagnitude)) / tokenPrice;

        require(_amountOfTokens > 0 && _amountOfTokens <= tokenBalanceLedger[_customerAddress].sub(_lockedToken));

        uint256 _hex = _amountOfTokens.mul(tokenPrice).div(priceMagnitude);
        uint256 _appreciateFee = _hex.mul(appreciateFee).div(100);
        uint256 _dividendFee = feedActivated == true ? _hex.mul(sellOutFee).div(100) : _hex.mul(sellOutFee+1).div(100);
        uint256 _devFee = _hex.mul(devFee).div(100);
        uint256 _hexRiseFee = feedActivated == true ? _hex.mul(hexRiseFee).div(100) : 0;

        _purchaseTokens(owner, _devFee, 0);
        totalRiseFundCollected = totalRiseFundCollected.add(_hexRiseFee);

        _hex = _hex.sub(_appreciateFee).sub(_dividendFee).sub(_devFee).sub(_hexRiseFee);

        tokenSupply = tokenSupply.sub(_amountOfTokens);
        tokenBalanceLedger[_customerAddress] = tokenBalanceLedger[_customerAddress].sub(_amountOfTokens);

        int256 _updatedPayouts = (int256) (profitPerShare * _amountOfTokens + (_hex * divMagnitude));
        payoutsTo[_customerAddress] -= _updatedPayouts;

        if (tokenSupply > 0) {
            profitPerShare = SafeMath.add(profitPerShare, (_dividendFee * divMagnitude) / tokenSupply);
        }

        contractValue = contractValue.sub(_hex.add(_hexRiseFee).add(_dividendFee));

        if (tokenSupply > priceMagnitude) {
            tokenPrice = (contractValue.mul(priceMagnitude)) / tokenSupply;
        }

        if (hexToSendFund("hexrise") >= 10000e8) {
            payFund("hexrise");
        }

        emit Transfer(_customerAddress, address(0), _amountOfTokens);
        emit onTokenSell(_customerAddress, _amountOfTokens, _hex, now);
        emit onTokenAppreciation(tokenPrice, now);
    }

    function transfer(address _toAddress, uint256 _amountOfTokens) isActivated onlyTokenHolders external returns (bool) {
        address _customerAddress = msg.sender;
        uint256 _lockedToken = (lockedHexBalanceLedger[_customerAddress].mul(priceMagnitude)) / tokenPrice;

        require(_amountOfTokens > 0 && _amountOfTokens <= tokenBalanceLedger[_customerAddress].sub(_lockedToken));

        if (myDividends(true) > 0) {
            withdraw();
        }

        uint256 _tokenFee = _amountOfTokens.mul(transferFee).div(100);
        uint256 _taxedTokens = _amountOfTokens.sub(_tokenFee);

        tokenBalanceLedger[_customerAddress] = tokenBalanceLedger[_customerAddress].sub(_amountOfTokens);
        tokenBalanceLedger[_toAddress] = tokenBalanceLedger[_toAddress].add(_taxedTokens);

        payoutsTo[_customerAddress] -= (int256) (profitPerShare * _amountOfTokens);
        payoutsTo[_toAddress] += (int256) (profitPerShare * _taxedTokens);

        tokenSupply = tokenSupply.sub(_tokenFee);

        if (tokenSupply > priceMagnitude)
        {
            tokenPrice = (contractValue.mul(priceMagnitude)) / tokenSupply;
        }

        emit Transfer(_customerAddress, address(0), _tokenFee);
        emit Transfer(_customerAddress, _toAddress, _taxedTokens);
        emit onTokenAppreciation(tokenPrice, now);

        return true;
    }

    function stakeStart(uint256 _amount, uint256 _days) public isStakeActivated {
        require(_amount <= 4722366482869645213695);
        require(hexBalanceOfNoFee(msg.sender, true) >= _amount);

        erc20.stakeStart(_amount, _days); // revert or succeed

        uint256 _stakeIndex;
        uint40 _stakeID;
        uint72 _stakeShares;
        uint16 _lockedDay;
        uint16 _stakedDays;

        _stakeIndex = erc20.stakeCount(address(this));
        _stakeIndex = SafeMath.sub(_stakeIndex, 1);

        (_stakeID,,_stakeShares,_lockedDay,_stakedDays,,) = erc20.stakeLists(address(this), _stakeIndex);

        uint256 _uniqueID =  uint256(keccak256(abi.encodePacked(_stakeID, _stakeShares))); // unique enough
        require(stakeLists[msg.sender][_uniqueID].started == false); // still check for collision
        stakeLists[msg.sender][_uniqueID].started = true;

        stakeLists[msg.sender][_uniqueID] = StakeStore(_stakeID, _amount, _stakeShares, _lockedDay, _stakedDays, uint16(0), true, false);

        totalStakeBalance = SafeMath.add(totalStakeBalance, _amount);

        playerStats[msg.sender].activeStakes += 1;
        playerStats[msg.sender].staked += _amount;

        lockedHexBalanceLedger[msg.sender] = SafeMath.add(lockedHexBalanceLedger[msg.sender], _amount);

        emit onStakeStart(msg.sender, _uniqueID, calculateTokensReceived(_amount, false), now);
    }

    function _stakeEnd(uint256 _stakeIndex, uint40 _stakeIdParam, uint256 _uniqueID) public view returns (uint16){
        uint40 _stakeID;
        uint72 _stakedHearts;
        uint72 _stakeShares;
        uint16 _lockedDay;
        uint16 _stakedDays;
        uint16 _unlockedDay;

        (_stakeID,_stakedHearts,_stakeShares,_lockedDay,_stakedDays,_unlockedDay,) = erc20.stakeLists(address(this), _stakeIndex);
        require(stakeLists[msg.sender][_uniqueID].started == true && stakeLists[msg.sender][_uniqueID].ended == false);
        require(stakeLists[msg.sender][_uniqueID].stakeID == _stakeIdParam && _stakeIdParam == _stakeID);
        require(stakeLists[msg.sender][_uniqueID].hexAmount == uint256(_stakedHearts));
        require(stakeLists[msg.sender][_uniqueID].stakeShares == _stakeShares);
        require(stakeLists[msg.sender][_uniqueID].lockedDay == _lockedDay);
        require(stakeLists[msg.sender][_uniqueID].stakedDays == _stakedDays);

        return _unlockedDay;
    }

    function stakeEnd(uint256 _stakeIndex, uint40 _stakeIdParam, uint256 _uniqueID) public {
        uint16 _unlockedDay = _stakeEnd(_stakeIndex, _stakeIdParam, _uniqueID);

        if (_unlockedDay == 0){
            stakeLists[msg.sender][_uniqueID].unlockedDay = uint16(erc20.currentDay()); // no penalty/penalty/reward
        } else {
            stakeLists[msg.sender][_uniqueID].unlockedDay = _unlockedDay;
        }

        uint256 _balance = erc20.balanceOf(address(this));

        erc20.stakeEnd(_stakeIndex, _stakeIdParam); // revert or 0 or less or equal or more hex returned.
        stakeLists[msg.sender][_uniqueID].ended = true;

        uint256 _amount = SafeMath.sub(erc20.balanceOf(address(this)), _balance);
        uint256 _stakedAmount = stakeLists[msg.sender][_uniqueID].hexAmount;
        uint256 _difference;

        if (_amount <= _stakedAmount) {
            _difference = SafeMath.sub(_stakedAmount, _amount);
            contractValue = contractValue.sub(_difference);
            _difference = (_difference.mul(priceMagnitude)) / tokenPrice;
            tokenSupply = SafeMath.sub(tokenSupply, _difference);
            tokenBalanceLedger[msg.sender] = SafeMath.sub(tokenBalanceLedger[msg.sender], _difference);
            int256 _updatedPayouts = (int256) (profitPerShare * _difference);
            payoutsTo[msg.sender] -= _updatedPayouts;
            emit Transfer(msg.sender, address(0), _difference);
        } else if (_amount > _stakedAmount) {
            _difference = SafeMath.sub(_amount, _stakedAmount);
            _difference = purchaseTokens(address(0), msg.sender, _difference);
        }

        totalStakeBalance = SafeMath.sub(totalStakeBalance, _stakedAmount);
        playerStats[msg.sender].activeStakes -= 1;

        lockedHexBalanceLedger[msg.sender] = SafeMath.sub(lockedHexBalanceLedger[msg.sender], _stakedAmount);

        emit onStakeEnd(msg.sender, _uniqueID, _amount, _difference, now);
    }

    function setName(string memory _name) onlyOwner public
    {
        name = _name;
    }

    function setSymbol(string memory _symbol) onlyOwner public
    {
        symbol = _symbol;
    }

    function setHexStaking(bool _stakeActivated) onlyOwner public
    {
        stakeActivated = _stakeActivated;
    }

    function setFeeding(bool _feedActivated) onlyOwner public
    {
        feedActivated = _feedActivated;
    }

    function totalHexBalance() public view returns (uint256) {
        return erc20.balanceOf(address(this));
    }

    function totalSupply() public view returns(uint256) {
        return tokenSupply;
    }

    function myTokens(bool _stakeable) public view returns (uint256) {
        address _customerAddress = msg.sender;
        return balanceOf(_customerAddress, _stakeable);
    }

    function myDividends(bool _includeReferralBonus) public view returns (uint256) {
        address _customerAddress = msg.sender;
        return _includeReferralBonus ? dividendsOf(_customerAddress) + referralBalance[_customerAddress] : dividendsOf(_customerAddress) ;
    }

    function balanceOf(address _customerAddress, bool _stakeable) public view returns (uint256) {
        if (_stakeable == false) {
            return tokenBalanceLedger[_customerAddress];
        }
        else if (_stakeable == true) {
            uint256 _lockedToken = (lockedHexBalanceLedger[_customerAddress].mul(priceMagnitude)) / tokenPrice;
            return (tokenBalanceLedger[_customerAddress].sub(_lockedToken));
        }
    }

    function dividendsOf(address _customerAddress) public view returns (uint256) {
        return (uint256) ((int256) (profitPerShare * tokenBalanceLedger[_customerAddress]) - payoutsTo[_customerAddress]) / divMagnitude;
    }

    function sellPrice(bool _includeFees) public view returns (uint256) {
        uint256 _appreciateFee = 0;
        uint256 _dividendFee = 0;
        uint256 _devFee = 0;
        uint256 _hexRiseFee = 0;

        if (_includeFees) {
            _appreciateFee = tokenPrice.mul(appreciateFee).div(100);
            _dividendFee = feedActivated == true ? tokenPrice.mul(sellOutFee).div(100) : tokenPrice.mul(sellOutFee+1).div(100);
            _devFee = tokenPrice.mul(devFee).div(100);
            _hexRiseFee = feedActivated == true ? tokenPrice.mul(hexRiseFee).div(100) : 0;
        }

        return (tokenPrice.sub(_appreciateFee).sub(_dividendFee).sub(_devFee).sub(_hexRiseFee));
    }

    function buyPrice(bool _includeFees) public view returns(uint256) {
        uint256 _appreciateFee = 0;
        uint256 _dividendFee = 0;
        uint256 _devFee = 0;
        uint256 _hexTewFee = 0;

        if (_includeFees) {
            _appreciateFee = tokenPrice.mul(appreciateFee).div(100);
            _dividendFee = feedActivated == true ? tokenPrice.mul(buyInFee).div(100) : tokenPrice.mul(buyInFee+1).div(100);
            _devFee = tokenPrice.mul(devFee).div(100);
            _hexTewFee = feedActivated == true ? tokenPrice.mul(hexTewFee).div(100) : 0;
        }

        return (tokenPrice.add(_appreciateFee).add(_dividendFee).add(_devFee).add(_hexTewFee));
    }

    function calculateTokensReceived(uint256 _hexToSpend, bool _includeFees) public view returns (uint256) {
        uint256 _appreciateFee = 0;
        uint256 _dividendFee = 0;
        uint256 _devFee = 0;
        uint256 _hexTewFee = 0;

        if (_includeFees) {
            _appreciateFee = _hexToSpend.mul(appreciateFee).div(100);
            _dividendFee = feedActivated == true ? _hexToSpend.mul(buyInFee).div(100) : _hexToSpend.mul(buyInFee+1).div(100);
            _devFee = _hexToSpend.mul(devFee).div(100);
            _hexTewFee = feedActivated == true ? _hexToSpend.mul(hexTewFee).div(100) : 0;
        }

        uint256 _taxedHEX = _hexToSpend.sub(_appreciateFee).sub(_dividendFee).sub(_devFee).sub(_hexTewFee);
        uint256 _amountOfTokens = (_taxedHEX.mul(priceMagnitude)) / tokenPrice;

        return _amountOfTokens;
    }

    function hexBalanceOf(address _customerAddress, bool _stakeable) public view returns(uint256) {
        uint256 _price = sellPrice(true);
        uint256 _balance = balanceOf(_customerAddress, _stakeable);
        uint256 _value = (_balance.mul(_price)) / priceMagnitude;

        return _value;
    }

    function hexBalanceOfNoFee(address _customerAddress, bool _stakeable) public view returns(uint256) {
        uint256 _price = sellPrice(false);
        uint256 _balance = balanceOf(_customerAddress, _stakeable);
        uint256 _value = (_balance.mul(_price)) / priceMagnitude;

        return _value;
    }

    function hexToSendFund(bytes32 exchange) public view returns(uint256) {
        if (exchange == "hextew") {
          return totalTewFundCollected.sub(totalTewFundReceived);
        } else if (exchange == "hexrise") {
          return totalRiseFundCollected.sub(totalRiseFundReceived);
        }
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"customerAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"onDistribute","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"customerAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"hexRolled","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensMinted","type":"uint256"}],"name":"onRoll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"customerAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"uniqueID","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"returnAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"difference","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"onStakeEnd","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"customerAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"uniqueID","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"currentTokens","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"onStakeStart","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokenPrice","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"onTokenAppreciation","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"customerAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"incomingHEX","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensMinted","type":"uint256"},{"indexed":true,"internalType":"address","name":"referredBy","type":"address"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"onTokenPurchase","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"customerAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokensBurned","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"hexEarned","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"onTokenSell","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"customerAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"hexWithdrawn","type":"uint256"}],"name":"onWithdraw","type":"event"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"constant":true,"inputs":[{"internalType":"uint256","name":"_stakeIndex","type":"uint256"},{"internalType":"uint40","name":"_stakeIdParam","type":"uint40"},{"internalType":"uint256","name":"_uniqueID","type":"uint256"}],"name":"_stakeEnd","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"appreciateTokenPrice","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"_customerAddress","type":"address"},{"internalType":"bool","name":"_stakeable","type":"bool"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_referredBy","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"buy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_referredBy","type":"address"},{"internalType":"address","name":"_customerAddress","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"buyFor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"bool","name":"_includeFees","type":"bool"}],"name":"buyPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"_hexToSpend","type":"uint256"},{"internalType":"bool","name":"_includeFees","type":"bool"}],"name":"calculateTokensReceived","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":"uint256","name":"_amount","type":"uint256"}],"name":"distribute","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"_customerAddress","type":"address"}],"name":"dividendsOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"exit","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"_customerAddress","type":"address"},{"internalType":"bool","name":"_stakeable","type":"bool"}],"name":"hexBalanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"_customerAddress","type":"address"},{"internalType":"bool","name":"_stakeable","type":"bool"}],"name":"hexBalanceOfNoFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"exchange","type":"bytes32"}],"name":"hexToSendFund","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"lockedHexBalanceLedger","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"bool","name":"_includeReferralBonus","type":"bool"}],"name":"myDividends","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"bool","name":"_stakeable","type":"bool"}],"name":"myTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":false,"inputs":[{"internalType":"bytes32","name":"exchange","type":"bytes32"}],"name":"payFund","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"playerStats","outputs":[{"internalType":"uint256","name":"deposits","type":"uint256"},{"internalType":"uint256","name":"withdrawals","type":"uint256"},{"internalType":"uint256","name":"staked","type":"uint256"},{"internalType":"uint256","name":"activeStakes","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"referralRequirement","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"roll","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_amountOfTokens","type":"uint256"}],"name":"sell","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"bool","name":"_includeFees","type":"bool"}],"name":"sellPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"bool","name":"_feedActivated","type":"bool"}],"name":"setFeeding","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"bool","name":"_stakeActivated","type":"bool"}],"name":"setHexStaking","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"string","name":"_name","type":"string"}],"name":"setName","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"string","name":"_symbol","type":"string"}],"name":"setSymbol","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_stakeIndex","type":"uint256"},{"internalType":"uint40","name":"_stakeIdParam","type":"uint40"},{"internalType":"uint256","name":"_uniqueID","type":"uint256"}],"name":"stakeEnd","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"stakeLists","outputs":[{"internalType":"uint40","name":"stakeID","type":"uint40"},{"internalType":"uint256","name":"hexAmount","type":"uint256"},{"internalType":"uint72","name":"stakeShares","type":"uint72"},{"internalType":"uint16","name":"lockedDay","type":"uint16"},{"internalType":"uint16","name":"stakedDays","type":"uint16"},{"internalType":"uint16","name":"unlockedDay","type":"uint16"},{"internalType":"bool","name":"started","type":"bool"},{"internalType":"bool","name":"ended","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint256","name":"_days","type":"uint256"}],"name":"stakeStart","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":"totalDonation","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalHexBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalPlayer","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalRiseFundCollected","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalRiseFundReceived","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalStakeBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalTewFundCollected","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalTewFundReceived","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_toAddress","type":"address"},{"internalType":"uint256","name":"_amountOfTokens","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}]

635e7fe50060015560c0604052600660808190527f4845584d4158000000000000000000000000000000000000000000000000000060a0908152620000489160029190620001b1565b506040805180820190915260048082527f484558340000000000000000000000000000000000000000000000000000000060209092019182526200008f91600391620001b1565b506509184e72a0006009556000600a819055600b819055600c819055600d819055600e819055600f8190556010819055601181905560128190556013556305f5e1006014556017805460ff60a81b1960ff60a01b1990911674010000000000000000000000000000000000000000171675010000000000000000000000000000000000000000001790553480156200012657600080fd5b50600080546001600160a01b03199081167386d9344094297cf5a6c77c07476f40c2f9903cd81790915560158054821673d495cc8c7c29c7fa3e027a5759561ab68c363609179055601680548216738d5ca96e9984662625e6cbf490da40c9d727086517905560178054909116732b591e99afe9f32eaa6214f7b7629768c40eeb3917905562000256565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620001f457805160ff191683800117855562000224565b8280016001018555821562000224579182015b828111156200022457825182559160200191906001019062000207565b506200023292915062000236565b5090565b6200025391905b808211156200023257600081556001016200023d565b90565b6133d680620002666000396000f3fe6080604052600436106102665760003560e01c80637864e91a11610144578063c47f0027116100b6578063e4849b321161007a578063e4849b3214610a95578063e7fa534e14610abf578063e9fad8ee14610afa578063edcc8bee14610b0f578063ee2ac05f14610b39578063feed18ff14610b4e57610266565b8063c47f002714610926578063c494a080146109d9578063cce7ec13146109ee578063cd5e3c5d14610a27578063cdafbbb614610a3c57610266565b80639cdb88f9116101085780639cdb88f91461073f578063a200dd451461077a578063a9059cbb146107bd578063ae93e5fd1461080a578063b60126551461081f578063b84c82461461087357610266565b80637864e91a146106a557806386bdb391146106ba5780638da5cb5b146106cf57806391c05b0b1461070057806395d89b411461072a57610266565b8063386b3d90116101dd5780635c80d3d1116101a15780635c80d3d1146105a557806362cc2cfe146105ba5780636403ba0a146105e6578063667e460614610612578063688abbf71461063e578063772865e21461066a57610266565b8063386b3d90146104ed5780633ccfd60b1461051f5780633eaeef1b146105345780634b82cab71461054957806352a438b81461057557610266565b806318160ddd1161022f57806318160ddd146103a557806320b48517146103ba57806321c7f162146103e65780632607443b14610419578063313ce567146104ad57806334949cc1146104d857610266565b806265318b1461026b57806305a3f885146102b057806306fdde03146102dc5780630a0ab492146103665780630b9c51b114610390575b600080fd5b34801561027757600080fd5b5061029e6004803603602081101561028e57600080fd5b50356001600160a01b0316610b8b565b60408051918252519081900360200190f35b3480156102bc57600080fd5b5061029e600480360360208110156102d357600080fd5b50351515610bc4565b3480156102e857600080fd5b506102f1610cde565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561032b578181015183820152602001610313565b50505050905090810190601f1680156103585780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561037257600080fd5b5061029e6004803603602081101561038957600080fd5b5035610d69565b34801561039c57600080fd5b5061029e610dbf565b3480156103b157600080fd5b5061029e610e3c565b3480156103c657600080fd5b506103e4600480360360208110156103dd57600080fd5b5035610e42565b005b3480156103f257600080fd5b5061029e6004803603602081101561040957600080fd5b50356001600160a01b0316610f47565b34801561042557600080fd5b506104526004803603604081101561043c57600080fd5b506001600160a01b038135169060200135610f59565b6040805164ffffffffff909916895260208901979097526001600160481b039095168787015261ffff9384166060880152918316608087015290911660a0850152151560c0840152151560e083015251908190036101000190f35b3480156104b957600080fd5b506104c2610fcc565b6040805160ff9092168252519081900360200190f35b3480156104e457600080fd5b5061029e610fd1565b3480156104f957600080fd5b5061029e6004803603604081101561051057600080fd5b50803590602001351515610fd7565b34801561052b57600080fd5b506103e46110e2565b34801561054057600080fd5b5061029e61120e565b34801561055557600080fd5b506103e46004803603602081101561056c57600080fd5b50351515611214565b34801561058157600080fd5b506103e46004803603604081101561059857600080fd5b5080359060200135611249565b3480156105b157600080fd5b5061029e611742565b3480156105c657600080fd5b5061029e600480360360208110156105dd57600080fd5b50351515611748565b3480156105f257600080fd5b506103e46004803603602081101561060957600080fd5b5035151561175c565b34801561061e57600080fd5b5061029e6004803603602081101561063557600080fd5b50351515611791565b34801561064a57600080fd5b5061029e6004803603602081101561066157600080fd5b50351515611895565b34801561067657600080fd5b5061029e6004803603604081101561068d57600080fd5b506001600160a01b03813516906020013515156118d5565b3480156106b157600080fd5b5061029e611976565b3480156106c657600080fd5b5061029e61197c565b3480156106db57600080fd5b506106e4611982565b604080516001600160a01b039092168252519081900360200190f35b34801561070c57600080fd5b506103e46004803603602081101561072357600080fd5b5035611991565b34801561073657600080fd5b506102f1611a7a565b34801561074b57600080fd5b5061029e6004803603604081101561076257600080fd5b506001600160a01b0381351690602001351515611ad5565b34801561078657600080fd5b5061029e6004803603606081101561079d57600080fd5b506001600160a01b03813581169160208101359091169060400135611b1b565b3480156107c957600080fd5b506107f6600480360360408110156107e057600080fd5b506001600160a01b038135169060200135611b39565b604080519115158252519081900360200190f35b34801561081657600080fd5b5061029e611dcb565b34801561082b57600080fd5b5061085c6004803603606081101561084257600080fd5b5080359064ffffffffff6020820135169060400135611dd1565b6040805161ffff9092168252519081900360200190f35b34801561087f57600080fd5b506103e46004803603602081101561089657600080fd5b8101906020810181356401000000008111156108b157600080fd5b8201836020820111156108c357600080fd5b803590602001918460018302840111640100000000831117156108e557600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550612072945050505050565b34801561093257600080fd5b506103e46004803603602081101561094957600080fd5b81019060208101813564010000000081111561096457600080fd5b82018360208201111561097657600080fd5b8035906020019184600183028401116401000000008311171561099857600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506120a0945050505050565b3480156109e557600080fd5b5061029e6120ca565b3480156109fa57600080fd5b5061029e60048036036040811015610a1157600080fd5b506001600160a01b0381351690602001356120d0565b348015610a3357600080fd5b506103e46120e6565b348015610a4857600080fd5b50610a6f60048036036020811015610a5f57600080fd5b50356001600160a01b031661219c565b604080519485526020850193909352838301919091526060830152519081900360800190f35b348015610aa157600080fd5b506103e460048036036020811015610ab857600080fd5b50356121c3565b348015610acb57600080fd5b5061029e60048036036040811015610ae257600080fd5b506001600160a01b0381351690602001351515612585565b348015610b0657600080fd5b506103e4612592565b348015610b1b57600080fd5b506103e460048036036020811015610b3257600080fd5b5035612612565b348015610b4557600080fd5b5061029e6128c4565b348015610b5a57600080fd5b506103e460048036036060811015610b7157600080fd5b5080359064ffffffffff60208201351690604001356128ca565b6001600160a01b0381166000908152600660209081526040808320546004909252822054601254600160401b929102030490505b919050565b6000808080808515610ca757601454610bf790606490610beb90600263ffffffff612d1816565b9063ffffffff612d3d16565b601754909450600160a81b900460ff161515600114610c3057601454610c2b90606490610beb90600763ffffffff612d1816565b610c4b565b601454610c4b90606490610beb90600663ffffffff612d1816565b601454909350610c6990606490610beb90600163ffffffff612d1816565b601754909250600160a81b900460ff161515600114610c89576000610ca4565b601454610ca490606490610beb90600163ffffffff612d1816565b90505b610cd481610cc884610cc887610cc88a601454612d5090919063ffffffff16565b9063ffffffff612d5016565b9695505050505050565b6002805460408051602060018416156101000260001901909316849004601f81018490048402820184019092528181529291830182828015610d615780601f10610d3657610100808354040283529160200191610d61565b820191906000526020600020905b815481529060010190602001808311610d4457829003601f168201915b505050505081565b6000816568657874657760d01b1415610d9857600d54600e54610d919163ffffffff612d5016565b9050610bbf565b81666865787269736560c81b1415610bbf57600f54601054610d919163ffffffff612d5016565b601754604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b158015610e0a57600080fd5b505afa158015610e1e573d6000803e3d6000fd5b505050506040513d6020811015610e3457600080fd5b505190505b90565b60115490565b600154421015610e5157600080fd5b6001546078014211610e6f57642e90edd0003a1115610e6f57600080fd5b60008111610ebf576040805162461bcd60e51b81526020600482015260186024820152776d757374206265206120706f7369746976652076616c756560401b604482015290519081900360640190fd5b610ec881612d62565b600c805482019055601354610ee3908263ffffffff612e3616565b6013556011546305f5e1001015610f1a57601154601354610f0e906305f5e10063ffffffff612d1816565b81610f1557fe5b046014555b6014546040805191825242602083015280516000805160206133628339815191529281900390910190a150565b60076020526000908152604090205481565b601860209081526000928352604080842090915290825290208054600182015460029092015464ffffffffff90911691906001600160481b0381169061ffff600160481b8204811691600160581b8104821691600160681b8204169060ff600160781b8204811691600160801b90041688565b600881565b600a5481565b600080808080851561109457610ff96064610beb89600263ffffffff612d1816565b601754909450600160a81b900460ff16151560011461102d576110286064610beb89600763ffffffff612d1816565b611043565b6110436064610beb89600663ffffffff612d1816565b925061105b6064610beb89600163ffffffff612d1816565b601754909250600160a81b900460ff16151560011461107b576000611091565b6110916064610beb89600163ffffffff612d1816565b90505b60006110ae82610cc8858188818e8c63ffffffff612d5016565b6014549091506000906110cb836305f5e10063ffffffff612d1816565b816110d257fe5b0496505050505050505b92915050565b60006110ee6001611895565b116110f857600080fd5b33600061110481611895565b6001600160a01b0380841660008181526006602090815260408083208054600160401b880201905560058252808320805490849055601754825163a9059cbb60e01b815260048101969096529601602485018190529051909650949093169363a9059cbb936044808501949193918390030190829087803b15801561118857600080fd5b505af115801561119c573d6000803e3d6000fd5b505050506040513d60208110156111b257600080fd5b50506001600160a01b038216600081815260086020908152604091829020600101805485019055815184815291517fccad973dcd043c7d680389db4378bd6b9775db7124092e9e0422c9e46d7985dc9281900390910190a25050565b60095481565b6000546001600160a01b0316331461122b57600080fd5b60178054911515600160a01b0260ff60a01b19909216919091179055565b601754600160a01b900460ff16151560011461126457600080fd5b6001600160481b0382111561127857600080fd5b81611284336001611ad5565b101561128f57600080fd5b60175460408051630a54871760e31b8152600481018590526024810184905290516001600160a01b03909216916352a438b89160448082019260009290919082900301818387803b1580156112e357600080fd5b505af11580156112f7573d6000803e3d6000fd5b50506017546040805163033060d960e41b81523060048201529051600094508493508392839283926001600160a01b03909216916333060d9091602480820192602092909190829003018186803b15801561135157600080fd5b505afa158015611365573d6000803e3d6000fd5b505050506040513d602081101561137b57600080fd5b5051945061138a856001612d50565b60175460408051632607443b60e01b81523060048201526024810184905290519297506001600160a01b0390911691632607443b9160448082019260e092909190829003018186803b1580156113df57600080fd5b505afa1580156113f3573d6000803e3d6000fd5b505050506040513d60e081101561140957600080fd5b5080516040808301516060840151608090940151825160d885901b6001600160d81b03191660208083019190915260b884901b6001600160b81b03191660258301528451808303600e018152602e90920185528151918101919091203360009081526018835285812082825290925293902060020154939850909650929450919250600160781b900460ff161561149f57600080fd5b600160186000336001600160a01b03166001600160a01b031681526020019081526020016000206000838152602001908152602001600020600201600f6101000a81548160ff0219169083151502179055506040518061010001604052808664ffffffffff168152602001898152602001856001600160481b031681526020018461ffff1681526020018361ffff168152602001600061ffff1681526020016001151581526020016000151581525060186000336001600160a01b03166001600160a01b03168152602001908152602001600020600083815260200190815260200160002060008201518160000160006101000a81548164ffffffffff021916908364ffffffffff1602179055506020820151816001015560408201518160020160006101000a8154816001600160481b0302191690836001600160481b0316021790555060608201518160020160096101000a81548161ffff021916908361ffff160217905550608082015181600201600b6101000a81548161ffff021916908361ffff16021790555060a082015181600201600d6101000a81548161ffff021916908361ffff16021790555060c082015181600201600f6101000a81548160ff02191690831515021790555060e08201518160020160106101000a81548160ff02191690831515021790555090505061169c600a5489612e36565b600a55336000908152600860209081526040808320600381018054600101905560020180548c01905560079091529020546116d79089612e36565b33600081815260076020526040812092909255907fa1b3ce42ae14b20db76f482a3801388c971b15477c77c380941e9f2e6c08873190839061171a908c90610fd7565b6040805192835260208301919091524282820152519081900360600190a25050505050505050565b600e5481565b60003361175581846118d5565b9392505050565b6000546001600160a01b0316331461177357600080fd5b60178054911515600160a81b0260ff60a81b19909216919091179055565b6000808080808515611868576014546117b890606490610beb90600263ffffffff612d1816565b601754909450600160a81b900460ff1615156001146117f1576014546117ec90606490610beb90600763ffffffff612d1816565b61180c565b60145461180c90606490610beb90600663ffffffff612d1816565b60145490935061182a90606490610beb90600163ffffffff612d1816565b601754909250600160a81b900460ff16151560011461184a576000611865565b60145461186590606490610beb90600163ffffffff612d1816565b90505b610cd48161188984611889876118898a601454612e3690919063ffffffff16565b9063ffffffff612e3616565b600033826118ab576118a681610b8b565b611755565b6001600160a01b0381166000908152600560205260409020546118cd82610b8b565b019392505050565b6000816118fb57506001600160a01b0382166000908152600460205260409020546110dc565b600182151514156110dc576014546001600160a01b038416600090815260076020526040812054909190611939906305f5e10063ffffffff612d1816565b8161194057fe5b6001600160a01b038616600090815260046020526040902054919004915061196e908263ffffffff612d5016565b9150506110dc565b600d5481565b600f5481565b6000546001600160a01b031681565b6001544210156119a057600080fd5b60015460780142116119be57642e90edd0003a11156119be57600080fd5b60008111611a0e576040805162461bcd60e51b81526020600482015260186024820152776d757374206265206120706f7369746976652076616c756560401b604482015290519081900360640190fd5b611a1781612d62565b600c805482019055601254601154611a3e9190600160401b840281611a3857fe5b04612e36565b60125560408051828152905133917fd14b763af9e91e53a0578778058d700fec4f12297440083843749bb37d806064919081900360200190a250565b6003805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610d615780601f10610d3657610100808354040283529160200191610d61565b600080611ae26000610bc4565b90506000611af085856118d5565b905060006305f5e100611b09838563ffffffff612d1816565b81611b1057fe5b049695505050505050565b6000611b2682612d62565b611b31848484612e43565b949350505050565b6000600154421015611b4a57600080fd5b6001546078014211611b6857642e90edd0003a1115611b6857600080fd5b6000611b746001611748565b11611b7e57600080fd5b6014543360008181526007602052604081205491929091611ba9906305f5e10063ffffffff612d1816565b81611bb057fe5b049050600084118015611beb57506001600160a01b038216600090815260046020526040902054611be7908263ffffffff612d5016565b8411155b611bf457600080fd5b6000611c006001611895565b1115611c0e57611c0e6110e2565b6000611c266064610beb87600163ffffffff612d1816565b90506000611c3a868363ffffffff612d5016565b6001600160a01b038516600090815260046020526040902054909150611c66908763ffffffff612d5016565b6001600160a01b038086166000908152600460205260408082209390935590891681522054611c9b908263ffffffff612e3616565b6001600160a01b0388811660008181526004602090815260408083209590955560128054948a16835260069091528482208054948c02909403909355915490825291902080549183029091019055601154611cf69083612d50565b60118190556305f5e1001015611d2c57601154601354611d20906305f5e10063ffffffff612d1816565b81611d2757fe5b046014555b6040805183815290516000916001600160a01b038716916000805160206133828339815191529181900360200190a3866001600160a01b0316846001600160a01b0316600080516020613382833981519152836040518082815260200191505060405180910390a36014546040805191825242602083015280516000805160206133628339815191529281900390910190a15060019695505050505050565b60105481565b60175460408051632607443b60e01b81523060048201526024810186905290516000928392839283928392839283926001600160a01b031691632607443b9160448083019260e0929190829003018186803b158015611e2f57600080fd5b505afa158015611e43573d6000803e3d6000fd5b505050506040513d60e0811015611e5957600080fd5b810190808051906020019092919080519060200190929190805190602001909291908051906020019092919080519060200190929190805190602001909291908051906020019092919050505050809650819750829850839950849a50859b5050505050505060186000336001600160a01b03166001600160a01b031681526020019081526020016000206000898152602001908152602001600020600201600f9054906101000a900460ff16151560011515148015611f3e57503360009081526018602090815260408083208b8452909152902060020154600160801b900460ff16155b611f4757600080fd5b3360009081526018602090815260408083208b845290915290205464ffffffffff8a81169116148015611f8757508564ffffffffff168964ffffffffff16145b611f9057600080fd5b3360009081526018602090815260408083208b84529091529020600101546001600160481b03861614611fc257600080fd5b3360009081526018602090815260408083208b84529091529020600201546001600160481b03858116911614611ff757600080fd5b3360009081526018602090815260408083208b845290915290206002015461ffff848116600160481b909204161461202e57600080fd5b3360009081526018602090815260408083208b845290915290206002015461ffff838116600160581b909204161461206557600080fd5b9998505050505050505050565b6000546001600160a01b0316331461208957600080fd5b805161209c9060039060208401906132c9565b5050565b6000546001600160a01b031633146120b757600080fd5b805161209c9060029060208401906132c9565b600b5481565b60006120db82612d62565b611755833384612e43565b60006120f26001611895565b116120fc57600080fd5b33600061210881611895565b6001600160a01b03831660009081526006602090815260408083208054600160401b860201905560059091528120805490829055909101915061214c818484612e43565b9050826001600160a01b03167fe4f0eeaa8dd27ac941d5cb906c00cec31d5590659951566d91f7ec9eaacc8e0c8383604051808381526020018281526020019250505060405180910390a2505050565b60086020526000908152604090208054600182015460028301546003909301549192909184565b6001544210156121d257600080fd5b60015460780142116121f057642e90edd0003a11156121f057600080fd5b60006121fc6001611748565b1161220657600080fd5b6014543360008181526007602052604081205491929091612231906305f5e10063ffffffff612d1816565b8161223857fe5b04905060008311801561227357506001600160a01b03821660009081526004602052604090205461226f908263ffffffff612d5016565b8311155b61227c57600080fd5b600061229b6305f5e100610beb60145487612d1890919063ffffffff16565b905060006122b56064610beb84600263ffffffff612d1816565b90506000601760159054906101000a900460ff16151560011515146122ef576122ea6064610beb85600763ffffffff612d1816565b612305565b6123056064610beb85600663ffffffff612d1816565b9050600061231f6064610beb86600163ffffffff612d1816565b90506000601760159054906101000a900460ff161515600115151461234557600061235b565b61235b6064610beb87600163ffffffff612d1816565b60008054919250612377916001600160a01b031690849061318c565b5060105461238b908263ffffffff612e3616565b6010556123a681610cc8848187818b8b63ffffffff612d5016565b6011549095506123bc908963ffffffff612d5016565b6011556001600160a01b0387166000908152600460205260409020546123e8908963ffffffff612d5016565b6001600160a01b03881660009081526004602090815260408083209390935560125460069091529190208054918a02600160401b8802019182900390556011541561244857612444601254601154600160401b870281611a3857fe5b6012555b61246e61245f85611889898663ffffffff612e3616565b6013549063ffffffff612d5016565b6013556011546305f5e10010156124a557601154601354612499906305f5e10063ffffffff612d1816565b816124a057fe5b046014555b64e8d4a510006124be666865787269736560c81b610d69565b106124d6576124d6666865787269736560c81b612612565b604080518a815290516000916001600160a01b038b16916000805160206133828339815191529181900360200190a3604080518a815260208101889052428183015290516001600160a01b038a16917f723391258f051422e0be75f0bbcc5c94947b440ae6162c87b3efb5fecde315e5919081900360600190a26014546040805191825242602083015280516000805160206133628339815191529281900390910190a1505050505050505050565b600080611ae26001610bc4565b60145433600081815260076020526040812054919290916125bd906305f5e10063ffffffff612d1816565b816125c457fe5b6001600160a01b038416600090815260046020526040812054929091049250906125f4908363ffffffff612d5016565b9050801561260557612605816121c3565b61260d6110e2565b505050565b806568657874657760d01b141561277657600061263c600d54600e54612d5090919063ffffffff16565b90506000811161264b57600080fd5b600d5461265e908263ffffffff612e3616565b600d556017546040805163095ea7b360e01b815273d495cc8c7c29c7fa3e027a5759561ab68c36360960048201526024810184905290516001600160a01b039092169163095ea7b3916044808201926020929091908290030181600087803b1580156126c957600080fd5b505af11580156126dd573d6000803e3d6000fd5b505050506040513d60208110156126f357600080fd5b5050601554604080516391c05b0b60e01b81526004810184905290516001600160a01b03909216916391c05b0b916024808201926020929091908290030181600087803b15801561274357600080fd5b505af1158015612757573d6000803e3d6000fd5b505050506040513d602081101561276d57600080fd5b506128c1915050565b80666865787269736560c81b14156128c15760006127a1600f54601054612d5090919063ffffffff16565b9050600081116127b057600080fd5b600f546127c3908263ffffffff612e3616565b600f556017546040805163095ea7b360e01b8152738d5ca96e9984662625e6cbf490da40c9d727086560048201526024810184905290516001600160a01b039092169163095ea7b3916044808201926020929091908290030181600087803b15801561282e57600080fd5b505af1158015612842573d6000803e3d6000fd5b505050506040513d602081101561285857600080fd5b5050601654604080516320b4851760e01b81526004810184905290516001600160a01b03909216916320b485179160248082019260009290919082900301818387803b1580156128a757600080fd5b505af11580156128bb573d6000803e3d6000fd5b50505050505b50565b600c5481565b60006128d7848484611dd1565b905061ffff811661299c57601760009054906101000a90046001600160a01b03166001600160a01b0316635c9302c96040518163ffffffff1660e01b815260040160206040518083038186803b15801561293057600080fd5b505afa158015612944573d6000803e3d6000fd5b505050506040513d602081101561295a57600080fd5b50513360009081526018602090815260408083208684529091529020600201805461ffff909216600160681b0261ffff60681b199092169190911790556129d2565b3360009081526018602090815260408083208584529091529020600201805461ffff60681b1916600160681b61ffff8416021790555b601754604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b158015612a1d57600080fd5b505afa158015612a31573d6000803e3d6000fd5b505050506040513d6020811015612a4757600080fd5b505160175460408051631a1804d160e11b81526004810189905264ffffffffff8816602482015290519293506001600160a01b039091169163343009a29160448082019260009290919082900301818387803b158015612aa657600080fd5b505af1158015612aba573d6000803e3d6000fd5b50503360009081526018602090815260408083208884528252808320600201805460ff60801b1916600160801b17905560175481516370a0823160e01b81523060048201529151939550612b6894506001600160a01b0316926370a0823192602480840193919291829003018186803b158015612b3657600080fd5b505afa158015612b4a573d6000803e3d6000fd5b505050506040513d6020811015612b6057600080fd5b505183612d50565b336000908152601860209081526040808320888452909152812060010154919250818311612c5157612b9a8284612d50565b601354909150612bb0908263ffffffff612d5016565b601355601454612bca826305f5e10063ffffffff612d1816565b81612bd157fe5b049050612be060115482612d50565b60115533600090815260046020526040902054612bfd9082612d50565b3360008181526004602090815260408083209490945560125460068252848320805491870291829003905584518681529451909492939260008051602061338283398151915292908290030190a350612c74565b81831115612c7457612c638383612d50565b9050612c7160003383612e43565b90505b612c80600a5483612d50565b600a5533600090815260086020908152604080832060030180546000190190556007909152902054612cb29083612d50565b336000818152600760209081526040918290209390935580518981529283018690528281018490524260608401525190917f3cfedd205f4a938d3e671ceda6c16675f20d3c7aa1bf7190f572afd767dba248919081900360800190a25050505050505050565b600082612d27575060006110dc565b5081810281838281612d3557fe5b04146110dc57fe5b6000818381612d4857fe5b049392505050565b600082821115612d5c57fe5b50900390565b601754604080516323b872dd60e01b81523360048201523060248201526044810184905290516001600160a01b03909216916323b872dd916064808201926020929091908290030181600087803b158015612dbc57600080fd5b505af1158015612dd0573d6000803e3d6000fd5b505050506040513d6020811015612de657600080fd5b505115156001146128c1576040805162461bcd60e51b81526020600482015260156024820152741d1c985b9cd9995c881b5d5cdd081cdd58d8d95959605a1b604482015290519081900360640190fd5b818101828110156110dc57fe5b6000600154421015612e5457600080fd5b6001546078014211612e7257642e90edd0003a1115612e7257600080fd5b6001600160a01b038316600090815260086020526040902054612e9957600b805460010190555b6001600160a01b038316600090815260086020526040902080548301905581612ec157600080fd5b6000612ed96064610beb85600263ffffffff612d1816565b90506000601760159054906101000a900460ff1615156001151514612f1357612f0e6064610beb86600763ffffffff612d1816565b612f29565b612f296064610beb86600663ffffffff612d1816565b90506000612f436064610beb87600163ffffffff612d1816565b90506000601760159054906101000a900460ff1615156001151514612f69576000612f7f565b612f7f6064610beb88600163ffffffff612d1816565b90506000612f9b82610cc8858188818d8c63ffffffff612d5016565b60008054919250612fb7916001600160a01b031690859061318c565b506000612fc589838761318c565b90506001600160a01b038a1615801590612ff15750886001600160a01b03168a6001600160a01b031614155b801561301757506009546001600160a01b038b1660009081526004602052604090205410155b15613063576001600160a01b038a16600090815260056020526040902054613045908463ffffffff612e3616565b6001600160a01b038b1660009081526005602052604090205561307a565b600e54613076908463ffffffff612e3616565b600e555b6130a061309186610cc88b8763ffffffff612d5016565b6013549063ffffffff612e3616565b6013556011546305f5e10010156130d7576011546013546130cb906305f5e10063ffffffff612d1816565b816130d257fe5b046014555b64e8d4a510006130ef6568657874657760d01b610d69565b10613106576131066568657874657760d01b612612565b6040805189815260208101839052428183015290516001600160a01b03808d1692908c16917fff69b2ba8f4ef8248f8c375ba3916c770604b215557acdd4e8387a4dd5e7de869181900360600190a36014546040805191825242602083015280516000805160206133628339815191529281900390910190a19998505050505050505050565b60145460009081906131a8856305f5e10063ffffffff612d1816565b816131af57fe5b049050600160401b830281158015906131d857506011546131d6838263ffffffff612e3616565b115b6131e157600080fd5b60115415613239576011546131fc908363ffffffff612e3616565b6011819055600160401b85028161320f57fe5b60128054929091049091019055601154600160401b85028161322d57fe5b0482028103900361323f565b60118290555b6001600160a01b038616600090815260046020526040902054613268908363ffffffff612e3616565b6001600160a01b038716600081815260046020908152604080832094909455601254600682528483208054918802879003918201905584518781529451909460008051602061338283398151915292908290030190a3509095945050505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061330a57805160ff1916838001178555613337565b82800160010185558215613337579182015b8281111561333757825182559160200191906001019061331c565b50613343929150613347565b5090565b610e3991905b80821115613343576000815560010161334d56fe0d257a4fe7c6968563ed5ac588cf5b4ddb95868eb9b8fe412c2000cb6f2843acddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa265627a7a7231582067f94d52f3e810cb33ee3e8255761e716348e38169714b47aa9f38b2cd05d51d64736f6c634300050d0032

Deployed ByteCode Sourcemap

1902:23413:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5977:8;;;21860:224;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21860:224:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;21860:224:0;-1:-1:-1;;;;;21860:224:0;;:::i;:::-;;;;;;;;;;;;;;;;22092:701;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22092:701:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;22092:701:0;;;;:::i;3758:29::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3758:29:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;3758:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25005:307;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25005:307:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;25005:307:0;;:::i;20718:113::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20718:113:0;;;:::i;20839:89::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20839:89:0;;;:::i;6528:449::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6528:449:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;6528:449:0;;:::i;:::-;;4456:57;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4456:57:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4456:57:0;-1:-1:-1;;;;;4456:57:0;;:::i;5592:68::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5592:68:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;5592:68:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5592:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3830:34;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3830:34:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;4765:36;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4765:36:0;;;:::i;23500:861::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23500:861:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;23500:861:0;;;;;;;;;:::i;8606:504::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8606:504:0;;;:::i;4713:45::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4713:45:0;;;:::i;20472:118::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20472:118:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;20472:118:0;;;;:::i;15808:1429::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15808:1429:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;15808:1429:0;;;;;;;:::i;4930:40::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4930:40:0;;;:::i;20936:178::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20936:178:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;20936:178:0;;;;:::i;20598:112::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20598:112:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;20598:112:0;;;;:::i;22801:691::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22801:691:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;22801:691:0;;;;:::i;21122:275::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21122:275:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;21122:275:0;;;;:::i;21405:447::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21405:447:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;21405:447:0;;;;;;;;;;:::i;4884:39::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4884:39:0;;;:::i;4977:40::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4977:40:0;;;:::i;1699:20::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1699:20:0;;;:::i;:::-;;;;-1:-1:-1;;;;;1699:20:0;;;;;;;;;;;;;;6178:342;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6178:342:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;6178:342:0;;:::i;3794:29::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3794:29:0;;;:::i;24684:313::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24684:313:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;24684:313:0;;;;;;;;;;:::i;9315:224::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9315:224:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;9315:224:0;;;;;;;;;;;;;;;;;:::i;14415:1385::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14415:1385:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;14415:1385:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;5024:41;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5024:41:0;;;:::i;17245:1011::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17245:1011:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17245:1011:0;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;20365:99;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20365:99:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;20365:99:0;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;20365:99:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;20365:99:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;20365:99:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;20365:99:0;;-1:-1:-1;20365:99:0;;-1:-1:-1;;;;;20365:99:0:i;20266:91::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20266:91:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;20266:91:0;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;20266:91:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;20266:91:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;20266:91:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;20266:91:0;;-1:-1:-1;20266:91:0;;-1:-1:-1;;;;;20266:91:0:i;4808:30::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4808:30:0;;;:::i;9118:189::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9118:189:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;9118:189:0;;;;;;;;:::i;7785:470::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7785:470:0;;;:::i;4660:44::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4660:44:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4660:44:0;-1:-1:-1;;;;;4660:44:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12427:1980;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12427:1980:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;12427:1980:0;;:::i;24369:307::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24369:307:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;24369:307:0;;;;;;;;;;:::i;8263:335::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8263:335:0;;;:::i;6985:792::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6985:792:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;6985:792:0;;:::i;4845:32::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4845:32:0;;;:::i;18264:1994::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18264:1994:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;18264:1994:0;;;;;;;;;;;;;;:::i;21860:224::-;-1:-1:-1;;;;;22033:27:0;;21928:7;22033:27;;;:9;:27;;;;;;;;;21993:18;:36;;;;;;21976:14;;-1:-1:-1;;;3963:7:0;21976:53;;21966:94;21955:121;21948:128;;21860:224;;;;:::o;22092:701::-;22151:7;;;;;22309:377;;;;22359:10;;:38;;22393:3;;22359:29;;4018:1;22359:29;:14;:29;:::i;:::-;:33;:38;:33;:38;:::i;:::-;22427:13;;22342:55;;-1:-1:-1;;;;22427:13:0;;;;:21;;22444:4;22427:21;:99;;22489:10;;:37;;22522:3;;22489:28;;22504:12;22489:28;:14;:28;:::i;:37::-;22427:99;;;22451:10;;:35;;22482:3;;22451:26;;4104:1;22451:26;:14;:26;:::i;:35::-;22551:10;;22412:114;;-1:-1:-1;22551:31:0;;22578:3;;22551:22;;4189:1;22551:22;:14;:22;:::i;:31::-;22611:13;;22541:41;;-1:-1:-1;;;;22611:13:0;;;;:21;;22628:4;22611:21;:63;;22673:1;22611:63;;;22635:10;;:35;;22666:3;;22635:26;;4276:1;22635:26;:14;:26;:::i;:35::-;22597:77;;22309:377;22706:78;22772:11;22706:61;22759:7;22706:48;22741:12;22706:30;22721:14;22706:10;;:14;;:30;;;;:::i;:::-;:34;:48;:34;:48;:::i;:78::-;22698:87;22092:701;-1:-1:-1;;;;;;22092:701:0:o;3758:29::-;;;;;;;;;;;;;;-1:-1:-1;;3758:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;25005:307::-;25066:7;25090:8;-1:-1:-1;;;25090:20:0;25086:219;;;25158:20;;25132:21;;:47;;;:25;:47;:::i;:::-;25125:54;;;;25086:219;25201:8;-1:-1:-1;;;25201:21:0;25197:108;;;25271:21;;25244:22;;:49;;;:26;:49;:::i;20718:113::-;20793:5;;:30;;;-1:-1:-1;;;20793:30:0;;20817:4;20793:30;;;;;;20766:7;;-1:-1:-1;;;;;20793:5:0;;:15;;:30;;;;;;;;;;;;;;:5;:30;;;5:2:-1;;;;30:1;27;20:12;5:2;20793:30:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20793:30:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;20793:30:0;;-1:-1:-1;20718:113:0;;:::o;20839:89::-;20909:11;;20839:89;:::o;6528:449::-;2057:15;;2050:3;:22;;2042:31;;;;;;2098:15;;2116:9;2098:27;2090:3;:36;2086:102;;2166:9;2151:11;:24;;2143:33;;;;;;6623:1;6613:7;:11;6605:48;;;;;-1:-1:-1;;;6605:48:0;;;;;;;;;;;;-1:-1:-1;;;6605:48:0;;;;;;;;;;;;;;;6664:28;6684:7;6664:19;:28::i;:::-;6703:13;:24;;;;;;6754:13;;:26;;6720:7;6754:26;:17;:26;:::i;:::-;6738:13;:42;6797:11;;3913:3;-1:-1:-1;6793:123:0;;;6893:11;;6856:13;;:33;;3913:3;6856:33;:17;:33;:::i;:::-;6855:49;;;;;;6842:10;:62;6793:123;6953:10;;6933:36;;;;;;6965:3;6933:36;;;;;;-1:-1:-1;;;;;;;;;;;6933:36:0;;;;;;;;;6528:449;:::o;4456:57::-;;;;;;;;;;;;;:::o;5592:68::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5592:68:0;;;;-1:-1:-1;;;5592:68:0;;;;;-1:-1:-1;;;5592:68:0;;;;;-1:-1:-1;;;5592:68:0;;;;;-1:-1:-1;;;5592:68:0;;;;;-1:-1:-1;;;5592:68:0;;;;:::o;3830:34::-;3863:1;3830:34;:::o;4765:36::-;;;;:::o;23500:861::-;23594:7;;;;;23751:376;;;;23801:39;23836:3;23801:30;:11;4018:1;23801:30;:15;:30;:::i;:39::-;23870:13;;23784:56;;-1:-1:-1;;;;23870:13:0;;;;:21;;23887:4;23870:21;:97;;23931:36;23963:3;23931:27;:11;23947:10;23931:27;:15;:27;:::i;:36::-;23870:97;;;23894:34;23924:3;23894:25;:11;4060:1;23894:25;:15;:25;:::i;:34::-;23855:112;-1:-1:-1;23992:32:0;24020:3;23992:23;:11;4189:1;23992:23;:15;:23;:::i;:32::-;24052:13;;23982:42;;-1:-1:-1;;;;24052:13:0;;;;:21;;24069:4;24052:21;:63;;24114:1;24052:63;;;24076:35;24107:3;24076:26;:11;4232:1;24076:26;:15;:26;:::i;:35::-;24039:76;;23751:376;24139:17;24159:78;24226:10;24159:62;24213:7;24159:62;24195:12;24159:62;:11;24175:14;24159:31;:15;:31;:::i;:78::-;24308:10;;24139:98;;-1:-1:-1;24248:23:0;;24275:29;24139:98;3913:3;24275:29;:13;:29;:::i;:::-;24274:44;;;;;;;-1:-1:-1;;;;;;;23500:861:0;;;;;:::o;8606:504::-;2365:1;2345:17;2357:4;2345:11;:17::i;:::-;:21;2337:30;;;;;;8681:10;8654:24;8723:18;8654:24;8723:11;:18::i;:::-;-1:-1:-1;;;;;8752:27:0;;;;;;;:9;:27;;;;;;;;:67;;-1:-1:-1;;;8793:25:0;;8752:67;;;8844:15;:33;;;;;;;8888:37;;;;8936:5;;:44;;-1:-1:-1;;;8936:44:0;;;;;;;;;8830:47;;8936:44;;;;;;;;8830:47;;-1:-1:-1;8936:5:0;;;;;:14;;:44;;;;;8752:27;;8936:44;;;;;;;;:5;:44;;;5:2:-1;;;;30:1;27;20:12;5:2;8936:44:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;8936:44:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;;8991:29:0;;;;;;:11;8936:44;8991:29;;;;;;;;:41;;:55;;;;;;9062:40;;;;;;;;;;;;;;;;;2378:1;;8606:504::o;4713:45::-;;;;:::o;20472:118::-;1875:5;;-1:-1:-1;;;;;1875:5:0;1861:10;:19;1853:28;;;;;;20550:14;:32;;;;;-1:-1:-1;;;20550:32:0;-1:-1:-1;;;;20550:32:0;;;;;;;;;20472:118::o;15808:1429::-;2440:14;;-1:-1:-1;;;2440:14:0;;;;:22;;2458:4;2440:22;2432:31;;;;;;-1:-1:-1;;;;;15903:7:0;:33;;15895:42;;;;;;15995:7;15956:35;15974:10;15986:4;15956:17;:35::i;:::-;:46;;15948:55;;;;;;16016:5;;:32;;;-1:-1:-1;;;16016:32:0;;;;;;;;;;;;;;;;-1:-1:-1;;;;;16016:5:0;;;;:16;;:32;;;;;:5;;:32;;;;;;;;:5;;:32;;;5:2:-1;;;;30:1;27;20:12;5:2;16016:32:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;16241:5:0;;:31;;;-1:-1:-1;;;16241:31:0;;16266:4;16241:31;;;;;;16082:19;;-1:-1:-1;16082:19:0;;-1:-1:-1;16082:19:0;;;;;;-1:-1:-1;;;;;16241:5:0;;;;:16;;:31;;;;;;;;;;;;;;;:5;:31;;;5:2:-1;;;;30:1;27;20:12;5:2;16241:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16241:31:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16241:31:0;;-1:-1:-1;16297:28:0;16241:31;16323:1;16297:12;:28::i;:::-;16390:5;;:44;;;-1:-1:-1;;;16390:44:0;;16415:4;16390:44;;;;;;;;;;;;16283:42;;-1:-1:-1;;;;;;16390:5:0;;;;:16;;:44;;;;;;;;;;;;;;;:5;:44;;;5:2:-1;;;;30:1;27;20:12;5:2;16390:44:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16390:44:0;;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;16390:44:0;;;;;;;;;;;;;;;;16486:40;;;;;;-1:-1:-1;;;;;;16486:40:0;16390:44;16486:40;;;;;;;;;;;-1:-1:-1;;;;;;16486:40:0;;;;;;;26:21:-1;;;22:32;;6:49;;16486:40:0;;;;;;16476:51;;;;;;;;;16575:10;-1:-1:-1;16564:22:0;;;:10;:22;;;;;:33;;;;;;;;;:41;;;16390:44;;-1:-1:-1;16390:44:0;;-1:-1:-1;16390:44:0;;-1:-1:-1;16390:44:0;;-1:-1:-1;;;;16564:41:0;;;;:50;16556:59;;;;;;16699:4;16655:10;:22;16666:10;-1:-1:-1;;;;;16655:22:0;-1:-1:-1;;;;;16655:22:0;;;;;;;;;;;;:33;16678:9;16655:33;;;;;;;;;;;:41;;;:48;;;;;;;;;;;;;;;;;;16752:92;;;;;;;;16763:8;16752:92;;;;;;16773:7;16752:92;;;;16782:12;-1:-1:-1;;;;;16752:92:0;;;;;16796:10;16752:92;;;;;;16808:11;16752:92;;;;;;16828:1;16752:92;;;;;;16832:4;16752:92;;;;;;16838:5;16752:92;;;;;16716:10;:22;16727:10;-1:-1:-1;;;;;16716:22:0;-1:-1:-1;;;;;16716:22:0;;;;;;;;;;;;:33;16739:9;16716:33;;;;;;;;;;;:128;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;16716:128:0;;;;;-1:-1:-1;;;;;16716:128:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16877:40;16890:17;;16909:7;16877:12;:40::i;:::-;16857:17;:60;16942:10;16930:23;;;;:11;:23;;;;;;;;:36;;;:41;;16970:1;16930:41;;;16982:30;;:41;;;;;;17086:22;:34;;;;;;17073:57;;17016:7;17073:12;:57::i;:::-;17059:10;17036:34;;;;:22;:34;;;;;:94;;;;17059:10;17148:81;;17173:9;;17184:39;;17208:7;;17184:23;:39::i;:::-;17148:81;;;;;;;;;;;;;17225:3;17148:81;;;;;;;;;;;;;2474:1;;;;;;15808:1429;;:::o;4930:40::-;;;;:::o;20936:178::-;20992:7;21039:10;21067:39;21039:10;21095;21067:9;:39::i;:::-;21060:46;20936:178;-1:-1:-1;;;20936:178:0:o;20598:112::-;1875:5;;-1:-1:-1;;;;;1875:5:0;1861:10;:19;1853:28;;;;;;20672:13;:30;;;;;-1:-1:-1;;;20672:30:0;-1:-1:-1;;;;20672:30:0;;;;;;;;;20598:112::o;22801:691::-;22858:7;;;;;23015:371;;;;23065:10;;:38;;23099:3;;23065:29;;4018:1;23065:29;:14;:29;:::i;:38::-;23133:13;;23048:55;;-1:-1:-1;;;;23133:13:0;;;;:21;;23150:4;23133:21;:95;;23193:10;;:35;;23224:3;;23193:26;;23208:10;23193:26;:14;:26;:::i;:35::-;23133:95;;;23157:10;;:33;;23186:3;;23157:24;;4060:1;23157:24;:14;:24;:::i;:33::-;23253:10;;23118:110;;-1:-1:-1;23253:31:0;;23280:3;;23253:22;;4189:1;23253:22;:14;:22;:::i;:31::-;23312:13;;23243:41;;-1:-1:-1;;;;23312:13:0;;;;:21;;23329:4;23312:21;:62;;23373:1;23312:62;;;23336:10;;:34;;23366:3;;23336:25;;4232:1;23336:25;:14;:25;:::i;:34::-;23299:75;;23015:371;23406:77;23472:10;23406:61;23459:7;23406:48;23441:12;23406:30;23421:14;23406:10;;:14;;:30;;;;:::i;:::-;:34;:48;:34;:48;:::i;21122:275::-;21192:7;21239:10;21267:21;:121;;21359:29;21371:16;21359:11;:29::i;:::-;21267:121;;;-1:-1:-1;;;;;21323:33:0;;;;;;:15;:33;;;;;;21291:29;21339:16;21291:11;:29::i;:::-;:65;;21122:275;-1:-1:-1;;;21122:275:0:o;21405:447::-;21488:7;21512:19;21508:337;;-1:-1:-1;;;;;;21555:36:0;;;;;;:18;:36;;;;;;21548:43;;21508:337;21636:4;21622:18;;;;21618:227;;;21745:10;;-1:-1:-1;;;;;21681:40:0;;21657:20;21681:40;;;:22;:40;;;;;;21657:20;;21745:10;21681:60;;3913:3;21681:60;:44;:60;:::i;:::-;21680:75;;;;;-1:-1:-1;;;;;21778:36:0;;;;;;:18;:36;;;;;;21680:75;;;;-1:-1:-1;21778:54:0;;21680:75;21778:54;:40;:54;:::i;:::-;21770:63;;;;;4884:39;;;;:::o;4977:40::-;;;;:::o;1699:20::-;;;-1:-1:-1;;;;;1699:20:0;;:::o;6178:342::-;2057:15;;2050:3;:22;;2042:31;;;;;;2098:15;;2116:9;2098:27;2090:3;:36;2086:102;;2166:9;2151:11;:24;;2143:33;;;;;;6263:1;6253:7;:11;6245:48;;;;;-1:-1:-1;;;6245:48:0;;;;;;;;;;;;-1:-1:-1;;;6245:48:0;;;;;;;;;;;;;;;6304:28;6324:7;6304:19;:28::i;:::-;6343:13;:24;;;;;;6408:14;;6451:11;;6395:68;;6408:14;-1:-1:-1;;;6425:22:0;;6451:11;6424:38;;;;;6395:12;:68::i;:::-;6378:14;:85;6479:33;;;;;;;;6492:10;;6479:33;;;;;;;;;;6178:342;:::o;3794:29::-;;;;;;;;;;;;;;;-1:-1:-1;;3794:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24684:313;24774:7;24794:14;24811:16;24821:5;24811:9;:16::i;:::-;24794:33;;24838:16;24857:39;24867:16;24885:10;24857:9;:39::i;:::-;24838:58;-1:-1:-1;24907:14:0;3913:3;24925:20;24838:58;24938:6;24925:20;:12;:20;:::i;:::-;24924:39;;;;;;;24684:313;-1:-1:-1;;;;;;24684:313:0:o;9315:224::-;9411:7;9431:28;9451:7;9431:19;:28::i;:::-;9477:54;9492:11;9505:16;9523:7;9477:14;:54::i;:::-;9470:61;9315:224;-1:-1:-1;;;;9315:224:0:o;14415:1385::-;14525:4;2057:15;;2050:3;:22;;2042:31;;;;;;2098:15;;2116:9;2098:27;2090:3;:36;2086:102;;2166:9;2151:11;:24;;2143:33;;;;;;2277:1;2260:14;2269:4;2260:8;:14::i;:::-;:18;2252:27;;;;;;14678:10;;14569;14542:24;14614:40;;;:22;:40;;;;;;14569:10;;14542:24;;14614:60;;3913:3;14614:60;:44;:60;:::i;:::-;14613:75;;;;;;14590:98;;14727:1;14709:15;:19;:96;;;;-1:-1:-1;;;;;;14751:36:0;;;;;;:18;:36;;;;;;:54;;14792:12;14751:54;:40;:54;:::i;:::-;14732:15;:73;;14709:96;14701:105;;;;;;14843:1;14823:17;14835:4;14823:11;:17::i;:::-;:21;14819:64;;;14861:10;:8;:10::i;:::-;14895:17;14915:41;14952:3;14915:32;:15;4149:1;14915:32;:19;:32;:::i;:41::-;14895:61;-1:-1:-1;14967:20:0;14990:30;:15;14895:61;14990:30;:19;:30;:::i;:::-;-1:-1:-1;;;;;15072:36:0;;;;;;:18;:36;;;;;;14967:53;;-1:-1:-1;15072:57:0;;15113:15;15072:57;:40;:57;:::i;:::-;-1:-1:-1;;;;;15033:36:0;;;;;;;:18;:36;;;;;;:96;;;;15173:30;;;;;;;:48;;15208:12;15173:48;:34;:48;:::i;:::-;-1:-1:-1;;;;;15140:30:0;;;;;;;:18;:30;;;;;;;;:81;;;;15275:14;;;15234:27;;;;;:9;:27;;;;;;:74;;15275:32;;;15234:74;;;;;;15354:14;;15319:21;;;;;;:65;;15354:29;;;15319:65;;;;;15411:11;;:26;;15427:9;15411:15;:26::i;:::-;15397:11;:40;;;3913:3;-1:-1:-1;15450:132:0;;;15559:11;;15522:13;;:33;;3913:3;15522:33;:17;:33;:::i;:::-;15521:49;;;;;;15508:10;:62;15450:132;15599:49;;;;;;;;15634:1;;-1:-1:-1;;;;;15599:49:0;;;-1:-1:-1;;;;;;;;;;;15599:49:0;;;;;;;;15691:10;-1:-1:-1;;;;;15664:52:0;15673:16;-1:-1:-1;;;;;15664:52:0;-1:-1:-1;;;;;;;;;;;15703:12:0;15664:52;;;;;;;;;;;;;;;;;;15752:10;;15732:36;;;;;;15764:3;15732:36;;;;;;-1:-1:-1;;;;;;;;;;;15732:36:0;;;;;;;;;-1:-1:-1;15788:4:0;;14415:1385;-1:-1:-1;;;;;;14415:1385:0:o;5024:41::-;;;;:::o;17245:1011::-;17618:5;;:44;;;-1:-1:-1;;;17618:44:0;;17643:4;17618:44;;;;;;;;;;;;17347:6;;;;;;;;;;;;;;-1:-1:-1;;;;;17618:5:0;;:16;;:44;;;;;;;;;;;;;;:5;:44;;;5:2:-1;;;;30:1;27;20:12;5:2;17618:44:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17618:44:0;;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;17618:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17541:121;;;;;;;;;;;;;;;;;;;;;;;;;17681:10;:22;17692:10;-1:-1:-1;;;;;17681:22:0;-1:-1:-1;;;;;17681:22:0;;;;;;;;;;;;:33;17704:9;17681:33;;;;;;;;;;;:41;;;;;;;;;;;;:49;;17726:4;17681:49;;;:101;;;;-1:-1:-1;17745:10:0;17734:22;;;;:10;:22;;;;;;;;:33;;;;;;;;:39;;;-1:-1:-1;;;17734:39:0;;;;:48;17681:101;17673:110;;;;;;17813:10;17802:22;;;;:10;:22;;;;;;;;:33;;;;;;;;:41;:58;;;;:41;;:58;:87;;;;;17881:8;17864:25;;:13;:25;;;17802:87;17794:96;;;;;;17920:10;17909:22;;;;:10;:22;;;;;;;;:33;;;;;;;;:43;;;-1:-1:-1;;;;;17956:22:0;;17909:69;17901:78;;;;;;18009:10;17998:22;;;;:10;:22;;;;;;;;:33;;;;;;;;:45;;;-1:-1:-1;;;;;17998:61:0;;;:45;;:61;17990:70;;;;;;18090:10;18079:22;;;;:10;:22;;;;;;;;:33;;;;;;;;:43;;;:57;;;;-1:-1:-1;;;18079:43:0;;;;:57;18071:66;;;;;;18167:10;18156:22;;;;:10;:22;;;;;;;;:33;;;;;;;;:44;;;:59;;;;-1:-1:-1;;;18156:44:0;;;;:59;18148:68;;;;;;18236:12;17245:1011;-1:-1:-1;;;;;;;;;17245:1011:0:o;20365:99::-;1875:5;;-1:-1:-1;;;;;1875:5:0;1861:10;:19;1853:28;;;;;;20440:16;;;;:6;;:16;;;;;:::i;:::-;;20365:99;:::o;20266:91::-;1875:5;;-1:-1:-1;;;;;1875:5:0;1861:10;:19;1853:28;;;;;;20337:12;;;;:4;;:12;;;;;:::i;4808:30::-;;;;:::o;9118:189::-;9185:7;9205:28;9225:7;9205:19;:28::i;:::-;9251:48;9266:11;9279:10;9291:7;9251:14;:48::i;7785:470::-;2365:1;2345:17;2357:4;2345:11;:17::i;:::-;:21;2337:30;;;;;;7856:10;7829:24;7898:18;7829:24;7898:11;:18::i;:::-;-1:-1:-1;;;;;7927:27:0;;;;;;:9;:27;;;;;;;;:68;;-1:-1:-1;;;7969:25:0;;7927:68;;;8020:15;:33;;;;;;;8064:37;;;;8006:47;;;;-1:-1:-1;8130:56:0;7927:27;7937:16;8006:47;8130:14;:56::i;:::-;8112:74;;8209:16;-1:-1:-1;;;;;8202:45:0;;8227:10;8239:7;8202:45;;;;;;;;;;;;;;;;;;;;;;;;2378:1;;;7785:470::o;4660:44::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;12427:1980::-;2057:15;;2050:3;:22;;2042:31;;;;;;2098:15;;2116:9;2098:27;2090:3;:36;2086:102;;2166:9;2151:11;:24;;2143:33;;;;;;2277:1;2260:14;2269:4;2260:8;:14::i;:::-;:18;2252:27;;;;;;12649:10;;12540;12513:24;12585:40;;;:22;:40;;;;;;12540:10;;12513:24;;12585:60;;3913:3;12585:60;:44;:60;:::i;:::-;12584:75;;;;;;12561:98;;12698:1;12680:15;:19;:96;;;;-1:-1:-1;;;;;;12722:36:0;;;;;;:18;:36;;;;;;:54;;12763:12;12722:54;:40;:54;:::i;:::-;12703:15;:73;;12680:96;12672:105;;;;;;12790:12;12805:51;3913:3;12805:31;12825:10;;12805:15;:19;;:31;;;;:::i;:51::-;12790:66;-1:-1:-1;12867:22:0;12892:32;12920:3;12892:23;12790:66;4018:1;12892:23;:8;:23;:::i;:32::-;12867:57;;12935:20;12958:13;;;;;;;;;;;:21;;12975:4;12958:21;;;:87;;13014:31;13041:3;13014:22;:4;13023:12;13014:22;:8;:22;:::i;:31::-;12958:87;;;12982:29;13007:3;12982:20;:4;4104:1;12982:20;:8;:20;:::i;:29::-;12935:110;-1:-1:-1;13056:15:0;13074:25;13095:3;13074:16;:4;4189:1;13074:16;:8;:16;:::i;:25::-;13056:43;;13110:19;13132:13;;;;;;;;;;;:21;;13149:4;13132:21;;;:57;;13188:1;13132:57;;;13156:29;13181:3;13156:20;:4;4276:1;13156:20;:8;:20;:::i;:29::-;13218:5;;;13110:79;;-1:-1:-1;13202:34:0;;-1:-1:-1;;;;;13218:5:0;;13225:7;;13202:15;:34::i;:::-;-1:-1:-1;13272:22:0;;:39;;13299:11;13272:39;:26;:39;:::i;:::-;13247:22;:64;13331:72;13391:11;13331:55;13378:7;13331:55;13360:12;13331:55;:4;13340:14;13331:24;:8;:24;:::i;:72::-;13430:11;;13324:79;;-1:-1:-1;13430:32:0;;13446:15;13430:32;:15;:32;:::i;:::-;13416:11;:46;-1:-1:-1;;;;;13512:36:0;;;;;;:18;:36;;;;;;:57;;13553:15;13512:57;:40;:57;:::i;:::-;-1:-1:-1;;;;;13473:36:0;;;;;;:18;:36;;;;;;;;:96;;;;13617:14;;13685:9;:27;;;;;;:46;;13617:32;;;-1:-1:-1;;;13653:19:0;;13617:56;13685:46;;;;;;13748:11;;:15;13744:138;;13797:73;13810:14;;13858:11;;-1:-1:-1;;;13827:12:0;:27;13826:43;;;;13797:73;13780:14;:90;13744:138;13910:58;13928:39;13954:12;13928:21;:4;13937:11;13928:21;:8;:21;:::i;:39::-;13910:13;;;:58;:17;:58;:::i;:::-;13894:13;:74;13985:11;;3913:3;-1:-1:-1;13981:123:0;;;14081:11;;14044:13;;:33;;3913:3;14044:33;:17;:33;:::i;:::-;14043:49;;;;;;14030:10;:62;13981:123;14148:7;14120:24;-1:-1:-1;;;14120:13:0;:24::i;:::-;:35;14116:86;;14172:18;-1:-1:-1;;;14172:7:0;:18::i;:::-;14219:55;;;;;;;;14254:1;;-1:-1:-1;;;;;14219:55:0;;;-1:-1:-1;;;;;;;;;;;14219:55:0;;;;;;;;14290:57;;;;;;;;;;;;14343:3;14290:57;;;;;;-1:-1:-1;;;;;14290:57:0;;;;;;;;;;;;;14383:10;;14363:36;;;;;;14395:3;14363:36;;;;;;-1:-1:-1;;;;;;;;;;;14363:36:0;;;;;;;;;2290:1;;;;;;;;12427:1980;:::o;24369:307::-;24454:7;24474:14;24491:15;24501:4;24491:9;:15::i;8263:335::-;8435:10;;8326;8299:24;8371:40;;;:22;:40;;;;;;8326:10;;8299:24;;8371:60;;3913:3;8371:60;:44;:60;:::i;:::-;8370:75;;;;;-1:-1:-1;;;;;8474:36:0;;8456:15;8474:36;;;:18;:36;;;;;;8370:75;;;;;-1:-1:-1;8456:15:0;8474:54;;8370:75;8474:54;:40;:54;:::i;:::-;8456:72;-1:-1:-1;8543:11:0;;8539:30;;8556:13;8561:7;8556:4;:13::i;:::-;8580:10;:8;:10::i;:::-;8263:335;;;:::o;6985:792::-;7042:8;-1:-1:-1;;;7042:20:0;7038:732;;;7077:17;7097:47;7123:20;;7097:21;;:25;;:47;;;;:::i;:::-;7077:67;;7177:1;7165:9;:13;7157:22;;;;;;7215:20;;:35;;7240:9;7215:35;:24;:35;:::i;:::-;7192:20;:58;7263:5;;:77;;;-1:-1:-1;;;7263:77:0;;7285:42;7263:77;;;;;;;;;;;;-1:-1:-1;;;;;7263:5:0;;;;:13;;:77;;;;;;;;;;;;;;;:5;;:77;;;5:2:-1;;;;30:1;27;20:12;5:2;7263:77:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;7263:77:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;7353:6:0;;:28;;;-1:-1:-1;;;7353:28:0;;;;;;;;;;-1:-1:-1;;;;;7353:6:0;;;;:17;;:28;;;;;7263:77;;7353:28;;;;;;;;:6;;:28;;;5:2:-1;;;;30:1;27;20:12;5:2;7353:28:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;7353:28:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;7038:732:0;;-1:-1:-1;;7038:732:0;;7403:8;-1:-1:-1;;;7403:21:0;7399:371;;;7439:17;7459:49;7486:21;;7459:22;;:26;;:49;;;;:::i;:::-;7439:69;;7541:1;7529:9;:13;7521:22;;;;;;7580:21;;:36;;7606:9;7580:36;:25;:36;:::i;:::-;7556:21;:60;7629:5;;:77;;;-1:-1:-1;;;7629:77:0;;7651:42;7629:77;;;;;;;;;;;;-1:-1:-1;;;;;7629:5:0;;;;:13;;:77;;;;;;;;;;;;;;;:5;;:77;;;5:2:-1;;;;30:1;27;20:12;5:2;7629:77:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;7629:77:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;7719:7:0;;:39;;;-1:-1:-1;;;7719:39:0;;;;;;;;;;-1:-1:-1;;;;;7719:7:0;;;;:28;;:39;;;;;:7;;:39;;;;;;;;:7;;:39;;;5:2:-1;;;;30:1;27;20:12;5:2;7719:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;7719:39:0;;;;7399:371;;6985:792;:::o;4845:32::-;;;;:::o;18264:1994::-;18362:19;18384:48;18394:11;18407:13;18422:9;18384;:48::i;:::-;18362:70;-1:-1:-1;18449:17:0;;;18445:245;;18537:5;;;;;;;;;-1:-1:-1;;;;;18537:5:0;-1:-1:-1;;;;;18537:16:0;;:18;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18537:18:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18537:18:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;18537:18:0;18493:10;18482:22;;;;:10;18537:18;18482:22;;;;;;;:33;;;;;;;;:45;;:74;;;;;;-1:-1:-1;;;18482:74:0;-1:-1:-1;;;;18482:74:0;;;;;;;;;18445:245;;;18629:10;18618:22;;;;:10;:22;;;;;;;;:33;;;;;;;;:45;;:60;;-1:-1:-1;;;;18618:60:0;-1:-1:-1;;;18618:60:0;;;;;;;18445:245;18721:5;;:30;;;-1:-1:-1;;;18721:30:0;;18745:4;18721:30;;;;;;18702:16;;-1:-1:-1;;;;;18721:5:0;;:15;;:30;;;;;;;;;;;;;;:5;:30;;;5:2:-1;;;;30:1;27;20:12;5:2;18721:30:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18721:30:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;18721:30:0;18764:5;;:42;;;-1:-1:-1;;;18764:42:0;;;;;;;;;;;;;;;;;18721:30;;-1:-1:-1;;;;;;18764:5:0;;;;:14;;:42;;;;;:5;;:42;;;;;;;;:5;;:42;;;5:2:-1;;;;30:1;27;20:12;5:2;18764:42:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;18882:10:0;18871:22;;;;:10;:22;;;;;;;;:33;;;;;;;;:39;;:46;;-1:-1:-1;;;;18871:46:0;-1:-1:-1;;;18871:46:0;;;18961:5;;:30;;-1:-1:-1;;;18961:30:0;;18985:4;18961:30;;;;;;18871:22;;-1:-1:-1;18948:54:0;;-1:-1:-1;;;;;;18961:5:0;;:15;;:30;;;;;18871:22;;18961:30;;;;;;:5;:30;;;5:2:-1;;;;30:1;27;20:12;5:2;18961:30:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18961:30:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;18961:30:0;18993:8;18948:12;:54::i;:::-;19048:10;19013:21;19037:22;;;:10;:22;;;;;;;;:33;;;;;;;;:43;;;18930:72;;-1:-1:-1;19127:24:0;;;19123:806;;19182:36;19195:13;19210:7;19182:12;:36::i;:::-;19249:13;;19168:50;;-1:-1:-1;19249:30:0;;19168:50;19249:30;:17;:30;:::i;:::-;19233:13;:46;19344:10;;19309:31;:11;3913:3;19309:31;:15;:31;:::i;:::-;19308:46;;;;;;19294:60;;19383:38;19396:11;;19409;19383:12;:38::i;:::-;19369:11;:52;19501:10;19482:30;;;;:18;:30;;;;;;19469:57;;19514:11;19469:12;:57::i;:::-;19455:10;19436:30;;;;:18;:30;;;;;;;;:90;;;;19576:14;;19620:9;:21;;;;;:40;;19576:28;;;19620:40;;;;;;19680:45;;;;;;;19576:28;;19436:30;;19455:10;-1:-1:-1;;;;;;;;;;;19680:45:0;;;;;;;;19123:806;;;;19757:13;19747:7;:23;19743:186;;;19801:36;19814:7;19823:13;19801:12;:36::i;:::-;19787:50;;19866:51;19889:1;19893:10;19905:11;19866:14;:51::i;:::-;19852:65;;19743:186;19961:46;19974:17;;19993:13;19961:12;:46::i;:::-;19941:17;:66;20030:10;20018:23;;;;:11;:23;;;;;;;;:36;;:41;;-1:-1:-1;;20018:41:0;;;20122:22;:34;;;;;;20109:63;;20158:13;20109:12;:63::i;:::-;20095:10;20072:34;;;;:22;:34;;;;;;;;;:100;;;;20190:60;;;;;;;;;;;;;;;;;20246:3;20190:60;;;;;20095:10;;20190:60;;;;;;;;;;18264:1994;;;;;;;;:::o;50:174::-;108:9;130:6;126:37;;-1:-1:-1;154:1:0;147:8;;126:37;-1:-1:-1;173:5:0;;;177:1;173;:5;:1;192:5;;;;;:10;185:18;;;230:92;288:7;315:1;311;:5;;;;;;;230:92;-1:-1:-1;;;230:92:0:o;328:113::-;386:7;414:1;409;:6;;402:14;;;;-1:-1:-1;430:5:0;;;328:113::o;6001:169::-;6074:5;;:54;;;-1:-1:-1;;;6074:54:0;;6093:10;6074:54;;;;6113:4;6074:54;;;;;;;;;;;;-1:-1:-1;;;;;6074:5:0;;;;:18;;:54;;;;;;;;;;;;;;;:5;;:54;;;5:2:-1;;;;30:1;27;20:12;5:2;6074:54:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;6074:54:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;6074:54:0;:62;;6132:4;6074:62;6066:96;;;;;-1:-1:-1;;;6066:96:0;;;;;;;;;;;;-1:-1:-1;;;6066:96:0;;;;;;;;;;;;;;447:127;527:5;;;546:6;;;;539:14;;;10611:1808;10733:7;2057:15;;2050:3;:22;;2042:31;;;;;;2098:15;;2116:9;2098:27;2090:3;:36;2086:102;;2166:9;2151:11;:24;;2143:33;;;;;;-1:-1:-1;;;;;10757:29:0;;;;;;:11;:29;;;;;:38;10753:89;;10817:11;:13;;;;;;10753:89;-1:-1:-1;;;;;10854:29:0;;;;;;:11;:29;;;;;:54;;;;;;10929:16;10921:25;;;;;;10959:22;10984:40;11020:3;10984:31;:12;4018:1;10984:31;:16;:31;:::i;:40::-;10959:65;;11035:20;11058:13;;;;;;;;;;;:21;;11075:4;11058:21;;;:99;;11120:37;11153:3;11120:28;:12;11137:10;11120:28;:16;:28;:::i;:37::-;11058:99;;;11082:35;11113:3;11082:26;:12;4060:1;11082:26;:16;:26;:::i;:35::-;11035:122;-1:-1:-1;11168:15:0;11186:33;11215:3;11186:24;:12;4189:1;11186:24;:16;:24;:::i;:33::-;11168:51;;11230:18;11251:13;;;;;;;;;;;:21;;11268:4;11251:21;;;:64;;11314:1;11251:64;;;11275:36;11307:3;11275:27;:12;4232:1;11275:27;:16;:27;:::i;:36::-;11230:85;-1:-1:-1;11326:17:0;11346:79;11230:85;11346:63;11401:7;11346:63;11383:12;11346:63;:12;11363:14;11346:32;:16;:32;:::i;:79::-;11454:5;;;11326:99;;-1:-1:-1;11438:34:0;;-1:-1:-1;;;;;11454:5:0;;11461:7;;11438:15;:34::i;:::-;;11483:23;11509:58;11525:16;11543:9;11554:12;11509:15;:58::i;:::-;11483:84;-1:-1:-1;;;;;;11584:25:0;;;;;;:60;;;11628:16;-1:-1:-1;;;;;11613:31:0;:11;-1:-1:-1;;;;;11613:31:0;;;11584:60;:118;;;;-1:-1:-1;11683:19:0;;-1:-1:-1;;;;;11648:31:0;;;;;;:18;:31;;;;;;:54;;11584:118;11580:320;;;-1:-1:-1;;;;;11750:28:0;;;;;;:15;:28;;;;;;:44;;11783:10;11750:44;:32;:44;:::i;:::-;-1:-1:-1;;;;;11719:28:0;;;;;;:15;:28;;;;;:75;11580:320;;;11851:21;;:37;;11877:10;11851:37;:25;:37;:::i;:::-;11827:21;:61;11580:320;11928:65;11946:46;11979:12;11946:28;:12;11963:10;11946:28;:16;:28;:::i;:46::-;11928:13;;;:65;:17;:65;:::i;:::-;11912:13;:81;12010:11;;3913:3;-1:-1:-1;12006:123:0;;;12106:11;;12069:13;;:33;;3913:3;12069:33;:17;:33;:::i;:::-;12068:49;;;;;;12055:10;:62;12006:123;12172:7;12145:23;-1:-1:-1;;;12145:13:0;:23::i;:::-;:34;12141:84;;12196:17;-1:-1:-1;;;12196:7:0;:17::i;:::-;12242:82;;;;;;;;;;;;12320:3;12242:82;;;;;;-1:-1:-1;;;;;12242:82:0;;;;;;;;;;;;;;;;;12360:10;;12340:36;;;;;;12372:3;12340:36;;;;;;-1:-1:-1;;;;;;;;;;;12340:36:0;;;;;;;;;12396:15;10611:1808;-1:-1:-1;;;;;;;;;10611:1808:0:o;9547:1056::-;9739:10;;9656:7;;;;9703:32;:12;3913:3;9703:32;:16;:32;:::i;:::-;9702:47;;;;;;;-1:-1:-1;;;;9775:25:0;;9821:19;;;;;:69;;-1:-1:-1;9879:11:0;;9844:32;:15;9879:11;9844:32;:19;:32;:::i;:::-;:46;9821:69;9813:78;;;;;;9908:11;;:15;9904:329;;9954:11;;:32;;9970:15;9954:32;:15;:32;:::i;:::-;9940:11;:46;;;-1:-1:-1;;;10020:25:0;;9940:46;10020:39;;;;10001:14;:59;;10020:39;;;;10001:59;;;;;10145:11;;-1:-1:-1;;;10117:25:0;;10145:11;10117:39;;;;;10098:59;;10090:68;;10082:77;;9904:329;;;10192:11;:29;;;9904:329;-1:-1:-1;;;;;10285:36:0;;;;;;:18;:36;;;;;;:57;;10326:15;10285:57;:40;:57;:::i;:::-;-1:-1:-1;;;;;10245:36:0;;;;;;:18;:36;;;;;;;;:97;;;;10390:14;;10441:9;:27;;;;;:46;;10390:32;;;:39;;;10441:46;;;;;10505:55;;;;;;;10390:39;;-1:-1:-1;;;;;;;;;;;10505:55:0;;;;;;;;-1:-1:-1;10580:15:0;;9547:1056;-1:-1:-1;;;;;9547:1056:0:o;1902:23413::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1902:23413:0;;;-1:-1:-1;1902:23413:0;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;

Swarm Source

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

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.