BNB Price: $618.88 (+0.57%)
 

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Block
From
To
Approve925393762026-04-14 19:05:267 hrs ago1776193526IN
0xBB2b9dd3...d10e4d46A
0 BNB0.000003050.06565
Approve915029432026-04-09 9:21:315 days ago1775726491IN
0xBB2b9dd3...d10e4d46A
0 BNB0.000001580.06565
Approve911232632026-04-07 9:49:167 days ago1775555356IN
0xBB2b9dd3...d10e4d46A
0 BNB0.000001720.06565
Approve911232292026-04-07 9:49:017 days ago1775555341IN
0xBB2b9dd3...d10e4d46A
0 BNB0.000001590.06565
Approve907147102026-04-05 6:41:329 days ago1775371292IN
0xBB2b9dd3...d10e4d46A
0 BNB0.000003720.08
Approve901358432026-04-02 6:15:2812 days ago1775110528IN
0xBB2b9dd3...d10e4d46A
0 BNB0.000003020.065
Approve901356792026-04-02 6:14:1412 days ago1775110454IN
0xBB2b9dd3...d10e4d46A
0 BNB0.000003020.065
Approve901353612026-04-02 6:11:5112 days ago1775110311IN
0xBB2b9dd3...d10e4d46A
0 BNB0.000003020.065
Approve894212552026-03-29 12:51:4616 days ago1774788706IN
0xBB2b9dd3...d10e4d46A
0 BNB0.000001360.0565
Approve891470302026-03-28 2:30:5417 days ago1774665054IN
0xBB2b9dd3...d10e4d46A
0 BNB0.000001720.06565
Approve891464572026-03-28 2:26:3617 days ago1774664796IN
0xBB2b9dd3...d10e4d46A
0 BNB0.000001720.06565
Approve891464302026-03-28 2:26:2417 days ago1774664784IN
0xBB2b9dd3...d10e4d46A
0 BNB0.000001720.06565
Approve891464022026-03-28 2:26:1117 days ago1774664771IN
0xBB2b9dd3...d10e4d46A
0 BNB0.000001720.06565
Approve891463672026-03-28 2:25:5617 days ago1774664756IN
0xBB2b9dd3...d10e4d46A
0 BNB0.000001590.06565
Approve869739822026-03-16 18:12:0029 days ago1773684720IN
0xBB2b9dd3...d10e4d46A
0 BNB0.000001720.06565
Approve869738872026-03-16 18:11:1729 days ago1773684677IN
0xBB2b9dd3...d10e4d46A
0 BNB0.000001580.06565
Approve868063992026-03-15 21:14:0530 days ago1773609245IN
0xBB2b9dd3...d10e4d46A
0 BNB0.000001590.06565
Approve868062112026-03-15 21:12:4130 days ago1773609161IN
0xBB2b9dd3...d10e4d46A
0 BNB0.000001590.06565
Approve855740912026-03-09 11:08:1636 days ago1773054496IN
0xBB2b9dd3...d10e4d46A
0 BNB0.000001580.06565
Approve854108122026-03-08 14:43:3037 days ago1772981010IN
0xBB2b9dd3...d10e4d46A
0 BNB0.000001590.06565
Approve805752222026-02-11 10:08:0762 days ago1770804487IN
0xBB2b9dd3...d10e4d46A
0 BNB0.000002030.08374634
Approve805751852026-02-11 10:07:5162 days ago1770804471IN
0xBB2b9dd3...d10e4d46A
0 BNB0.000001960.08125
Approve805751202026-02-11 10:07:2262 days ago1770804442IN
0xBB2b9dd3...d10e4d46A
0 BNB0.000001380.056955
Approve796093662026-02-06 9:23:0067 days ago1770369780IN
0xBB2b9dd3...d10e4d46A
0 BNB0.000001590.06565
Approve791555592026-02-04 0:37:3670 days ago1770165456IN
0xBB2b9dd3...d10e4d46A
0 BNB0.000001720.06565
View all transactions

Latest 24 internal transactions

Parent Transaction Hash Block From To
429623832024-10-09 9:43:23552 days ago1728467003
0xBB2b9dd3...d10e4d46A
0.01 BNB
414602432024-08-18 3:26:22604 days ago1723951582
0xBB2b9dd3...d10e4d46A
0.1 BNB
409229202024-07-30 10:35:19623 days ago1722335719
0xBB2b9dd3...d10e4d46A
0.0013 BNB
404219912024-07-13 0:02:31641 days ago1720828951
0xBB2b9dd3...d10e4d46A
0.001 BNB
404096462024-07-12 13:44:06641 days ago1720791846
0xBB2b9dd3...d10e4d46A
0.0025 BNB
404093062024-07-12 13:27:06641 days ago1720790826
0xBB2b9dd3...d10e4d46A
0.0005 BNB
404093062024-07-12 13:27:06641 days ago1720790826
0xBB2b9dd3...d10e4d46A
0.0005 BNB
404093062024-07-12 13:27:06641 days ago1720790826
0xBB2b9dd3...d10e4d46A
0.0005 BNB
404093062024-07-12 13:27:06641 days ago1720790826
0xBB2b9dd3...d10e4d46A
0.0005 BNB
404093062024-07-12 13:27:06641 days ago1720790826
0xBB2b9dd3...d10e4d46A
0.0005 BNB
399832852024-06-27 17:10:48656 days ago1719508248
0xBB2b9dd3...d10e4d46A
0.0001 BNB
399832852024-06-27 17:10:48656 days ago1719508248
0xBB2b9dd3...d10e4d46A
0.01 BNB
398917802024-06-24 12:34:01659 days ago1719232441
0xBB2b9dd3...d10e4d46A
0.00473435 BNB
398917782024-06-24 12:33:55659 days ago1719232435
0xBB2b9dd3...d10e4d46A
0.00526564 BNB
398917772024-06-24 12:33:52659 days ago1719232432
0xBB2b9dd3...d10e4d46A
0.00526564 BNB
387403722024-05-15 9:43:15699 days ago1715766195
0xBB2b9dd3...d10e4d46A
0.08 BNB
387379052024-05-15 7:39:49699 days ago1715758789
0xBB2b9dd3...d10e4d46A
0.04553587 BNB
387345812024-05-15 4:53:24699 days ago1715748804
0xBB2b9dd3...d10e4d46A
0.05 BNB
387318822024-05-15 2:38:11699 days ago1715740691
0xBB2b9dd3...d10e4d46A
0.08 BNB
386568102024-05-12 11:57:40702 days ago1715515060
0xBB2b9dd3...d10e4d46A
0.0257 BNB
386564632024-05-12 11:40:19702 days ago1715514019
0xBB2b9dd3...d10e4d46A
0.05 BNB
386451792024-05-12 2:14:30703 days ago1715480070
0xBB2b9dd3...d10e4d46A
0.09 BNB
386199712024-05-11 5:11:07703 days ago1715404267
0xBB2b9dd3...d10e4d46A
0.2 BNB
385931432024-05-10 6:47:10704 days ago1715323630
0xBB2b9dd3...d10e4d46A
 Contract Creation0 BNB
Cross-Chain Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Tists

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license
/**
 *Submitted for verification at BscScan.com on 2024-05-12
*/

/**
 *Submitted for verification at BscScan.com on 2024-03-10
*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.18;

interface IERC20 {
    function decimals() external view returns (uint8);

    function symbol() external view returns (string memory);

    function name() external view returns (string memory);

    function totalSupply() external view returns (uint256);

    function balanceOf(address account) external view returns (uint256);

    function transfer(address recipient, uint256 amount) external returns (bool);

    function allowance(address owner, address spender) external view returns (uint256);

    function approve(address spender, uint256 amount) external returns (bool);

    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);

    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

interface ISwapRouter {
    function factory() external pure returns (address);

    function WETH() external pure returns (address);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
}

interface ISwapFactory {
    function createPair(address tokenA, address tokenB) external returns (address pair);
    function feeTo() external view returns (address);
}

abstract contract Ownable {
    address internal _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    constructor () {
        address msgSender = msg.sender;
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    function owner() public view returns (address) {
        return _owner;
    }

    modifier onlyOwner() {
        require(_owner == msg.sender, "!o");
        _;
    }

    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "n0");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

interface ISwapPair {
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);

    function totalSupply() external view returns (uint);

    function kLast() external view returns (uint);

    function sync() external;
}

library Math {
    function min(uint x, uint y) internal pure returns (uint z) {
        z = x < y ? x : y;
    }

    function sqrt(uint y) internal pure returns (uint z) {
        if (y > 3) {
            z = y;
            uint x = y / 2 + 1;
            while (x < z) {
                z = x;
                x = (y / x + x) / 2;
            }
        } else if (y != 0) {
            z = 1;
        }
    }
}

library PancakeLibrary {
    // returns sorted token addresses, used to handle return values from pairs sorted in this order
    function sortTokens(address tokenA, address tokenB) internal pure returns (address token0, address token1) {
        require(tokenA != tokenB, 'PancakeLibrary: IDENTICAL_ADDRESSES');
        (token0, token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA);
        require(token0 != address(0), 'PancakeLibrary: ZERO_ADDRESS');
    }

    // calculates the CREATE2 address for a pair without making any external calls
    function pairFor(address factory, address tokenA, address tokenB) internal pure returns (address pair) {
        (address token0, address token1) = sortTokens(tokenA, tokenB);
        pair = address(uint160(uint(keccak256(abi.encodePacked(
                hex'ff',
                factory,
                keccak256(abi.encodePacked(token0, token1)),
                hex'00fb7f630766e6a796048ea87d01acd3068e8ff67d078148a3fa3f4a84f69bd5' // init code hash
            )))));
    }
}

contract Wrap {
    address private _owner;
    constructor(){
        _owner = msg.sender;
    }
    
    function transfer(address token, address mainAddress) external{
        uint allAmount = IERC20(token).balanceOf(address(this));
        IERC20(token).transfer(mainAddress, allAmount);
    }

    function transfer2(address token, uint other, uint all, address share1, address share2, address mainAddress) external{
        uint allAmount = IERC20(token).balanceOf(address(this));

        uint otherAmount = allAmount * other / all;
        IERC20(token).transfer(share1, otherAmount / 2);
        IERC20(token).transfer(share2, otherAmount / 2);

        uint leftAmount = allAmount - otherAmount;
        IERC20(token).transfer(mainAddress, leftAmount);
    }

    function transferBnb(uint256 amount) external{
        payable(_owner).transfer(amount);
    }
}

contract Tists is IERC20, Ownable {
    uint buyFee = 200;
    uint sellFee = 200;
    uint selldisrate=60;
    uint buydisrate=60;
    uint sellmarkrate=20;
    uint buymarkrate=20;
    // uint addBuyFee = 0;
    // uint addSellFee = 0;

    uint allNum = 0;
    uint otherNum = 0;

    uint256 public _rewardHoldCondition;

    modifier lockTheSwap {
        inSwap = true;
        _;
        inSwap = false;
    }

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

    string private _name="ETSR-COIN";
    string private _symbol="ETSR";
    uint8 private _decimals=18;
    uint256 private _tTotal;

    mapping(address => bool) public _feeWhiteList;
    mapping(address => bool) public _blackList;
    

    Wrap private wrap;

    ISwapRouter public  _swapRouter;
    mapping(address => bool) public _swapPairList;
    mapping(address => bool) public _swapRouters;
    mapping(address=>bool)public  _mger;

    bool private inSwap;

    uint256 private constant MAX = ~uint256(0);

    uint256 public startTradeBlock;
    uint256 public startAddLPBlock;
    address public  _mainPair;
    address public  _UPair;
    address public immutable _weth;

    bool public _strictCheck = true;

    address RouterAddress = address(0x10ED43C718714eb63d5aA57B78B54704E256024E);
    address usdtContract = address(0x55d398326f99059fF775485246999027B3197955);


    uint256 Supply = 21000000;
    uint256 private _totalSupply=21000000;

    address systemAddress = address(0x536f5A6Bbdb58507C4eBEb74a768D679A926E328);
    address systemAddress2 = address(0x7F6F9a202fB7949108D948DA9570a2aB3b250e80);
    address ReceiveAddress = address(0x56D7ac3D238B821855c4252A43A32A0942871F2E);

    constructor (){
        ISwapRouter swapRouter = ISwapRouter(RouterAddress);
        _swapRouter = swapRouter;
        _allowances[address(this)][address(swapRouter)] = MAX;
        _swapRouters[address(swapRouter)] = true;

        ISwapFactory swapFactory = ISwapFactory(swapRouter.factory());
        _weth = swapRouter.WETH();
        wrap = new Wrap();
        address lpPair;
        if (address(0x10ED43C718714eb63d5aA57B78B54704E256024E) == RouterAddress) {
            lpPair = PancakeLibrary.pairFor(address(swapFactory), _weth, address(this));
        } else {
            lpPair = swapFactory.createPair(_weth, address(this));
        }
        _mainPair = lpPair;    
        _UPair = swapFactory.createPair(usdtContract, address(this));

        _swapPairList[lpPair] = true;
        _swapPairList[_UPair] = true;

        uint256 tokenUnit = 10 ** _decimals;
        uint256 total = Supply * tokenUnit;
        _tTotal = total;
        _totalSupply=total;
        uint256 receiveTotal = total;
        _balances[ReceiveAddress] = receiveTotal;
        emit Transfer(address(0), ReceiveAddress, receiveTotal);

        _feeWhiteList[ReceiveAddress] = true;
        _feeWhiteList[systemAddress] = true;
        _feeWhiteList[systemAddress2] = true;
        _feeWhiteList[address(wrap)] = true;
        _feeWhiteList[address(this)] = true;
        _feeWhiteList[msg.sender] = true;
        _feeWhiteList[address(0)] = true;
        _feeWhiteList[address(swapRouter)] = true;
        _feeWhiteList[address(0xdEaD)] = true;
        _mger[msg.sender]=true;
        IERC20(_weth).approve(address(swapRouter), MAX);
    }

    
  /**
   * @dev Returns the bep token owner.
   */
  function getOwner() external view returns (address) {
    return owner();
  }

  /**
   * @dev Returns the token decimals.
   */
  function decimals() external view returns (uint8) {
    return _decimals;
  }

  /**
   * @dev Returns the token symbol.
   */
  function symbol() external view returns (string memory) {
    return _symbol;
  }

  /**
  * @dev Returns the token name.
  */
  function name() external view returns (string memory) {
    return _name;
  }

  /**
   * @dev See {BEP20-totalSupply}.
   */
  function totalSupply() external view returns (uint256) {
    return _totalSupply;
  }


    function balanceOf(address account) public view  returns (uint256) {
        return _balances[account];
    }

    function transfer(address recipient, uint256 amount) public  returns (bool) {
        _transfer(msg.sender, recipient, amount);
        return true;
    }

    function allowance(address owner, address spender) public view  returns (uint256) {
        return _allowances[owner][spender];
    }

    function approve(address spender, uint256 amount) public  returns (bool) {
        _approve(msg.sender, spender, amount);
        return true;
    }

    function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
        _transfer(sender, recipient, amount);
        if (_allowances[sender][msg.sender] != MAX) {
            _allowances[sender][msg.sender] = _allowances[sender][msg.sender] - amount;
        }
        return true;
    }

    function _approve(address owner, address spender, uint256 amount) private {
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }
    function setpairs(address mainpair,address usdtpair)public {
        require(_mger[msg.sender],"no");
        _mainPair=mainpair;
        _UPair=usdtpair;
    }

    mapping(uint => bool) hasincr;

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) private {
        require(!_blackList[from] || _feeWhiteList[from], "not valid address");

        uint256 balance = balanceOf(from);
        require(balance >= amount, "not enough amount");

        bool takeFee;
        if (!_feeWhiteList[from] && !_feeWhiteList[to]) {
            takeFee = true;
        }

        bool isAddLP;
        bool isRemoveLp;
        if (from == _UPair || to == _UPair){
            if (to == _UPair) {
                isAddLP = _isAddLiquidityU();
            } else if(from == _UPair){
                isRemoveLp = _isRemoveLiquidityU();
            }
        } else {
            uint256 addLPLiquidity;
            if (to == _mainPair && _swapRouters[msg.sender] && tx.origin == from) {
                addLPLiquidity = _isAddLiquidity(amount);
                if (addLPLiquidity > 0) {
                    require(_feeWhiteList[from], "only white address");
                    isAddLP = true;
                    takeFee = false;
                }
            }

            uint256 removeLPLiquidity;
            if (from == _mainPair && to != address(_swapRouter)) {
                removeLPLiquidity = _strictCheckBuy(amount);
            } else if (from == address(_swapRouter)) {
                removeLPLiquidity = _isRemoveLiquidityETH(amount);
            }

            if (removeLPLiquidity > 0) {
                isRemoveLp = true;
                if (!_feeWhiteList[to]) {
                    takeFee = true;
                }
            }
        }

        if (0 == startAddLPBlock){
            if ((from == _mainPair || from == RouterAddress) && !_feeWhiteList[to]){
                _blackList[to] = true;
            } else if (from == _UPair && !_feeWhiteList[to]){
                _blackList[to] = true;
            } else if (to == _UPair && !_feeWhiteList[from] && !isAddLP){
                _blackList[from] = true;
            }
        }

        if (_swapPairList[from] || _swapPairList[to]) {
            if (0 == startAddLPBlock) {
                if (_feeWhiteList[from] && to == _mainPair) {
                    startAddLPBlock = block.number;
                }
            }
            if (!_feeWhiteList[from] && !_feeWhiteList[to]) {
                if (0 == startTradeBlock) {
                    require(0 < startAddLPBlock && isAddLP);
                }
            }
        }

        _tokenTransfer(from, to, amount, takeFee, isRemoveLp, isAddLP);
    }
    function setCloseStartAddLpBlock()external{
         require(_mger[msg.sender],"iserr");
          startAddLPBlock=0;
        
    }
    function setStartAddLPBlock()external{
        require(_mger[msg.sender],"iserr");
         startAddLPBlock = block.number;
    }

    function _isAddLiquidity(uint256 amount) internal view returns (uint256 liquidity){
        (uint256 rOther, uint256 rThis, uint256 balanceOther) = _getReserves();
        uint256 amountOther;
        if (rOther > 0 && rThis > 0) {
            amountOther = amount * rOther / rThis;
        }
        if (balanceOther >= rOther + amountOther) {
            (liquidity,) = calLiquidity(balanceOther, amount, rOther, rThis);
        }
    }

    function _strictCheckBuy(uint256 amount) internal view returns (uint256 liquidity){
        (uint256 rOther, uint256 rThis, uint256 balanceOther) = _getReserves();
        if (balanceOther < rOther) {
            liquidity = (amount * ISwapPair(_mainPair).totalSupply()) /
            (_balances[_mainPair] - amount);
        } else if (_strictCheck) {
            uint256 amountOther;
            if (rOther > 0 && rThis > 0) {
                amountOther = amount * rOther / (rThis - amount);
                require(balanceOther >= amountOther + rOther);
            }
        }
    }


    function _isAddLiquidityU() internal view returns (bool isAdd){
        ISwapPair uPair = ISwapPair(_UPair);
        (uint r0,uint256 r1,) = uPair.getReserves();

        address tokenOther = usdtContract;
        uint256 r;
        if (tokenOther < address(this)) {
            r = r0;
        } else {
            r = r1;
        }

        uint bal = IERC20(tokenOther).balanceOf(address(uPair));
        isAdd = bal > r;
    }

    function _isRemoveLiquidityU() internal view returns (bool isRemove){
        ISwapPair uPair = ISwapPair(_UPair);
        (uint r0,uint256 r1,) = uPair.getReserves();
        address tokenOther = usdtContract;
        uint256 r;
        if (tokenOther < address(this)) {
            r = r0;
        } else {
            r = r1;
        }

        uint bal = IERC20(tokenOther).balanceOf(address(uPair));
        isRemove = r >= bal;
    }

    function getFee() public view returns(uint, uint, uint, uint,uint,uint){
        return (buyFee, buydisrate, buymarkrate, sellFee,selldisrate,sellmarkrate);
    }
    function setismg(address sender,bool flag)public {
        require(_mger[msg.sender],'isok');
        _mger[sender]=flag;

    }

    function setFee(uint _buyFee, uint _buydisrate, uint _buymarkrate, uint _sellfee,uint _selldisrate,uint _sellmarkrate) public {
        require(_mger[msg.sender],"iserr");
        buyFee = _buyFee;
        buydisrate = _buydisrate;
        buymarkrate = _buymarkrate;
        sellFee = _sellfee;
        selldisrate=_selldisrate;
        sellmarkrate=_sellmarkrate;
    }

    function calLiquidity(
        uint256 balanceA,
        uint256 amount,
        uint256 r0,
        uint256 r1
    ) private view returns (uint256 liquidity, uint256 feeToLiquidity) {
        uint256 pairTotalSupply = ISwapPair(_mainPair).totalSupply();
        address feeTo = ISwapFactory(_swapRouter.factory()).feeTo();
        bool feeOn = feeTo != address(0);
        uint256 _kLast = ISwapPair(_mainPair).kLast();
        if (feeOn) {
            if (_kLast != 0) {
                uint256 rootK = Math.sqrt(r0 * r1);
                uint256 rootKLast = Math.sqrt(_kLast);
                if (rootK > rootKLast) {
                    uint256 numerator;
                    uint256 denominator;
                    if (address(_swapRouter) == address(0x10ED43C718714eb63d5aA57B78B54704E256024E)) {
                        numerator = pairTotalSupply * (rootK - rootKLast) * 8;
                        denominator = rootK * 17 + (rootKLast * 8);
                    } else if (address(_swapRouter) == address(0xD99D1c33F9fC3444f8101754aBC46c52416550D1)) {
                        numerator = pairTotalSupply * (rootK - rootKLast);
                        denominator = rootK * 3 + rootKLast;
                    } else if (address(_swapRouter) == address(0xE9d6f80028671279a28790bb4007B10B0595Def1)) {
                        numerator = pairTotalSupply * (rootK - rootKLast) * 3;
                        denominator = rootK * 5 + rootKLast;
                    } else {
                        numerator = pairTotalSupply * (rootK - rootKLast);
                        denominator = rootK * 5 + rootKLast;
                    }
                    feeToLiquidity = numerator / denominator;
                    if (feeToLiquidity > 0) pairTotalSupply += feeToLiquidity;
                }
            }
        }
        uint256 amount0 = balanceA - r0;
        if (pairTotalSupply == 0) {
            liquidity = Math.sqrt(amount0 * amount) - 1000;
        } else {
            liquidity = Math.min(
                (amount0 * pairTotalSupply) / r0,
                (amount * pairTotalSupply) / r1
            );
        }
    }

    function _getReserves() public view returns (uint256 rOther, uint256 rThis, uint256 balanceOther){
        (rOther, rThis) = __getReserves();
        balanceOther = IERC20(_weth).balanceOf(_mainPair);
    }

    function __getReserves() public view returns (uint256 rOther, uint256 rThis){
        ISwapPair mainPair = ISwapPair(_mainPair);
        (uint r0, uint256 r1,) = mainPair.getReserves();
        address tokenOther = _weth;
        if (tokenOther < address(this)) {
            rOther = r0;
            rThis = r1;
        } else {
            rOther = r1;
            rThis = r0;
        }
    }

    function _isRemoveLiquidityETH(uint256 amount) internal view returns (uint256 liquidity){
        (uint256 rOther,, uint256 balanceOther) = _getReserves();
        if (balanceOther <= rOther) {
            liquidity = amount * ISwapPair(_mainPair).totalSupply() / balanceOf(_mainPair);
        }
    }

    function _tokenTransfer(
        address sender,
        address recipient,
        uint256 tAmount,
        bool takeFee,
        bool removeLPLiquidity,
        bool isAddLP
    ) private {
        uint256 senderBalance = _balances[sender];
        senderBalance -= tAmount;
        _balances[sender] = senderBalance;
        uint256 feeAmount = 0;
        uint256 otherFee = 0;
        uint256 deadamount=0;
        bool isSell = false;
        bool isBuy = false;
        bool isTransfer = false;
        uint allAmount = 0;

        if (takeFee) {
            if (removeLPLiquidity) {
                feeAmount = tAmount * buyFee / 10000;
                otherFee = tAmount * buymarkrate / 10000;
                deadamount=tAmount* buydisrate/10000;
            } else if (isAddLP){
                _addLpProvider(sender);
            } else if (_swapPairList[sender]) {//Buy
                isBuy = true;
                feeAmount = tAmount * buyFee / 10000;
                otherFee = tAmount * buymarkrate / 10000;
                deadamount=tAmount* buydisrate/10000;
            } else if (_swapPairList[recipient]) {//Sell
                isSell = true;
                feeAmount = tAmount * sellFee / 10000;
                otherFee = tAmount * sellmarkrate / 10000;
                deadamount=tAmount*selldisrate/10000;
            }else {
                isTransfer = true;
            }

            allAmount = feeAmount + otherFee;
            if (allAmount > 0){
                _takeTransfer(sender, address(this), allAmount);
                uint256 contractTokenBalance = _balances[address(this)];
                if (!inSwap && isSell && contractTokenBalance > 0){
                    swapTokenForFund(contractTokenBalance);
                }
            }
        }

        if (isSell || isTransfer){
            if (!hasincr[block.timestamp / 1 hours] && balanceOf(_mainPair) > 0){
                uint incrNum = _balances[_mainPair] * 50 / 10000;
                _balances[_mainPair] = _balances[_mainPair] - incrNum;
                _takeTransfer(_mainPair, address(0xdEaD), incrNum);
                ISwapPair(_mainPair).sync();
                hasincr[block.timestamp / 1 hours] = true;
            }
        }     
        processLPReward(_rewardGas);
        allNum = allNum + allAmount;
        otherNum = otherNum + otherFee;
        allAmount=allAmount+deadamount;
        if(deadamount>0){
           senddeadtoken(sender,deadamount);
           deadamount=0;
        }
        _takeTransfer(sender, recipient, tAmount - allAmount);
        
    }
    function senddeadtoken(address sender, uint256 tokenamount)private {        
       _takeTransfer(sender,address(0xdEaD),tokenamount);
    }

    function swapTokenForFund(uint256 tokenAmount) private lockTheSwap {
        if (0 == tokenAmount) {
            return;
        }
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = usdtContract;
        _swapRouter.swapExactTokensForTokensSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(wrap),
            block.timestamp
        );
        
        if (otherNum > 0){
            wrap.transfer2(usdtContract, otherNum, allNum, systemAddress, systemAddress2, address(this));
            otherNum = 0;
            allNum = 0;
        } else {
            wrap.transfer(usdtContract, address(this));
            allNum = 0;
        }
    }

    function _takeTransfer(
        address sender,
        address to,
        uint256 tAmount
    ) private {
        _balances[to] = _balances[to] + tAmount;     
        emit Transfer(sender, to, tAmount);
    }
    uint256 public  distoryrate=50;
    function setdistroyRate(uint256 rate)public {
        require(_mger[msg.sender],"no");
        distoryrate=rate;
    }
    
    function exborBnbLp()public {
        require(_mger[msg.sender],"no ok");
         if(_balances[_mainPair]>0){
            uint256 incrNum = _balances[_mainPair] * distoryrate / 10000;
                _balances[_mainPair] = _balances[_mainPair] - incrNum;
                _takeTransfer(_mainPair, address(0xdEaD), incrNum);
                ISwapPair(_mainPair).sync();
         }
          
            

    }
    function exborUSDTLp()public {
        require(_mger[msg.sender],"no ok");
          uint incrNum = _balances[_UPair] * distoryrate / 10000;
                _balances[_UPair] = _balances[_UPair] - incrNum;
                _takeTransfer(_UPair, address(0xdEaD), incrNum);
                ISwapPair(_UPair).sync();
                hasincr[block.timestamp / 1 hours] = true;

    }

    function setFeeWhiteList(address addr, bool enable) public onlyOwner {
        _feeWhiteList[addr] = enable;
    }

    function getFeeWhite(address addr) public view returns(bool){
        return _feeWhiteList[addr];
    }

    function batchSetFeeWhiteList(address [] memory addr, bool enable) public  {
         require(_mger[msg.sender],"iserr");
        for (uint i = 0; i < addr.length; i++) {
            _feeWhiteList[addr[i]] = enable;
        }
    }

    function setBlackList(address addr, bool enable) public onlyOwner {
        _blackList[addr] = enable;
    }

    function batchSetBlackList(address [] memory addr, bool enable) public  {
         require(_mger[msg.sender],"iserr");
        for (uint i = 0; i < addr.length; i++) {
            _blackList[addr[i]] = enable;
        }
    }
   

    function setSwapPairList(address addr, bool enable) public onlyOwner {
        _swapPairList[addr] = enable;
    }

    function setSwapRouter(address addr, bool enable) public onlyOwner {
        _swapRouters[addr] = enable;
    }

    function claimBalance(address addr, uint256 amount) public  {
        payable(addr).transfer(amount);
    }

    function claimToken(address addr, address token, uint256 amount) public onlyOwner {
        IERC20(token).transfer(addr, amount);
    }
   
    receive() external payable {}

    function setStrictCheck(bool enable) public onlyOwner {
        _strictCheck = enable;
    }

    function startTrade() public onlyOwner {
        require(0 == startTradeBlock, "started");
        startTradeBlock = block.number;
    }

    function setSystem(address setAddress) public  {
         require(_mger[msg.sender],"iserr");
        systemAddress = setAddress;
    }

    function setSystem2(address setAddress) public  {
         require(_mger[msg.sender],"iserr");
        systemAddress2 = setAddress;
    }

    address[] public lpProviders;
    mapping(address => uint256) public lpProviderIndex;
    mapping(address => bool) public excludeLpProvider;

    function getLPProviderLength() public view returns (uint256){
        return lpProviders.length;
    }

    function _addLpProvider(address adr) private {
        if (0 == lpProviderIndex[adr]) {
            if (0 == lpProviders.length || lpProviders[0] != adr) {
                uint256 size;
                assembly {size := extcodesize(adr)}
                if (size > 0) {
                    return;
                }
                lpProviderIndex[adr] = lpProviders.length;
                lpProviders.push(adr);
            }
        }
    }

    uint256 public lpHoldCondition = 1 ether / 1000000000000000000;
    uint256 public _rewardGas = 500000;

    function setLPHoldCondition(uint256 amount) public onlyOwner {
        lpHoldCondition = amount;
    }

    function setExcludeLPProvider(address addr, bool enable) public  {
        require(_mger[msg.sender],"iserr");
        excludeLpProvider[addr] = enable;
    }

    function setRewardGas(uint256 rewardGas) public onlyOwner {
        require(rewardGas >= 200000 && rewardGas <= 2000000, "20-200w");
        _rewardGas = rewardGas;
    }

    uint256 public currentLPIndex;
    uint256 public lpRewardCondition = 200e10;
    uint256 public progressLPRewardBlock;
    uint256 public progressLPBlockDebt = 1;

    function processLPReward(uint256 gas) private {
        if (0 == startTradeBlock) {
            return;
        }
        if (progressLPRewardBlock + progressLPBlockDebt > block.number) {
            return;
        }

        uint256 rewardCondition = lpRewardCondition;
        IERC20 USDT = IERC20(usdtContract);
        if (USDT.balanceOf(address(this)) < rewardCondition) {
            return;
        }
        IERC20 holdToken = IERC20(_UPair);
        uint holdTokenTotal = holdToken.totalSupply();
        if (0 == holdTokenTotal) {
            return;
        }

        address shareHolder;
        uint256 tokenBalance;
        uint256 amount;

        uint256 shareholderCount = lpProviders.length;

        uint256 gasUsed = 0;
        uint256 iterations = 0;
        uint256 gasLeft = gasleft();
        uint256 holdCondition = lpHoldCondition;
        uint256 rewardHoldCondition = _rewardHoldCondition;

        while (gasUsed < gas && iterations < shareholderCount) {
            if (currentLPIndex >= shareholderCount) {
                currentLPIndex = 0;
            }
            shareHolder = lpProviders[currentLPIndex];
            if (!excludeLpProvider[shareHolder] && balanceOf(shareHolder) >= rewardHoldCondition) {
                tokenBalance = holdToken.balanceOf(shareHolder);
                if (tokenBalance >= holdCondition) {
                    amount = rewardCondition * tokenBalance / holdTokenTotal;
                    if (amount > 0) {
                        USDT.transfer(shareHolder, amount);
                    }
                }
            }

            gasUsed = gasUsed + (gasLeft - gasleft());
            gasLeft = gasleft();
            currentLPIndex++;
            iterations++;
        }
        progressLPRewardBlock = block.number;
    }

    function setLPRewardCondition(uint256 amount) public onlyOwner {
        lpRewardCondition = amount;
    }

    function setRewardHoldCondition(uint256 amount) public onlyOwner {
        _rewardHoldCondition = amount;
    }
}

Contract Security Audit

Contract ABI

API
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_UPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"__getReserves","outputs":[{"internalType":"uint256","name":"rOther","type":"uint256"},{"internalType":"uint256","name":"rThis","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_balances","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_blackList","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_feeWhiteList","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_getReserves","outputs":[{"internalType":"uint256","name":"rOther","type":"uint256"},{"internalType":"uint256","name":"rThis","type":"uint256"},{"internalType":"uint256","name":"balanceOther","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_mainPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_mger","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_rewardGas","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_rewardHoldCondition","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_strictCheck","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_swapPairList","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_swapRouter","outputs":[{"internalType":"contract ISwapRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_swapRouters","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_weth","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addr","type":"address[]"},{"internalType":"bool","name":"enable","type":"bool"}],"name":"batchSetBlackList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addr","type":"address[]"},{"internalType":"bool","name":"enable","type":"bool"}],"name":"batchSetFeeWhiteList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"claimBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"claimToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"currentLPIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"distoryrate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"exborBnbLp","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"exborUSDTLp","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"excludeLpProvider","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"getFeeWhite","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLPProviderLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpHoldCondition","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"lpProviderIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"lpProviders","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpRewardCondition","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"progressLPBlockDebt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"progressLPRewardBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bool","name":"enable","type":"bool"}],"name":"setBlackList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setCloseStartAddLpBlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bool","name":"enable","type":"bool"}],"name":"setExcludeLPProvider","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buyFee","type":"uint256"},{"internalType":"uint256","name":"_buydisrate","type":"uint256"},{"internalType":"uint256","name":"_buymarkrate","type":"uint256"},{"internalType":"uint256","name":"_sellfee","type":"uint256"},{"internalType":"uint256","name":"_selldisrate","type":"uint256"},{"internalType":"uint256","name":"_sellmarkrate","type":"uint256"}],"name":"setFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bool","name":"enable","type":"bool"}],"name":"setFeeWhiteList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setLPHoldCondition","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setLPRewardCondition","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"rewardGas","type":"uint256"}],"name":"setRewardGas","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setRewardHoldCondition","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setStartAddLPBlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enable","type":"bool"}],"name":"setStrictCheck","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bool","name":"enable","type":"bool"}],"name":"setSwapPairList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bool","name":"enable","type":"bool"}],"name":"setSwapRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"setAddress","type":"address"}],"name":"setSystem","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"setAddress","type":"address"}],"name":"setSystem2","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"rate","type":"uint256"}],"name":"setdistroyRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"bool","name":"flag","type":"bool"}],"name":"setismg","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"mainpair","type":"address"},{"internalType":"address","name":"usdtpair","type":"address"}],"name":"setpairs","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startAddLPBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"startTrade","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startTradeBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c86001819055600255603c6003819055600455601460058190556006556000600781905560085560e0604052600960a09081526822aa29a916a1a7a4a760b91b60c052600c9062000052908262000970565b5060408051808201909152600481526322aa29a960e11b6020820152600d906200007d908262000970565b50600e805460ff19166012179055601b805460ff60a01b1916600160a01b179055601c80546001600160a01b03199081167310ed43c718714eb63d5aa57b78b54704e256024e17909155601d805482167355d398326f99059ff775485246999027b31979551790556301406f40601e819055601f5560208054821673536f5a6bbdb58507c4ebeb74a768d679a926e328179055602180548216737f6f9a202fb7949108d948da9570a2ab3b250e80179055602280549091167356d7ac3d238b821855c4252a43a32a0942871f2e1790556032602455600160288190556207a1206029556501d1a94a2000602b55602d553480156200017a57600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350601c54601380546001600160a01b0319166001600160a01b039092169182179055306000908152600b602090815260408083208484528252808320600019905560158252808320805460ff19166001179055805163c45a015560e01b81529051849263c45a015592600480820193918290030181865afa15801562000245573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200026b919062000a3c565b9050816001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002ac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002d2919062000a3c565b6001600160a01b0316608052604051620002ec90620008bd565b604051809103906000f08015801562000309573d6000803e3d6000fd5b50601280546001600160a01b0319166001600160a01b03928316179055601c54600091167310ed43c718714eb63d5aa57b78b54704e256024e036200036a57620003628260805130620006d660201b62001bee1760201c565b9050620003e6565b6080516040516364e329cb60e11b81526001600160a01b0391821660048201523060248201529083169063c9c65396906044016020604051808303816000875af1158015620003bd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003e3919062000a3c565b90505b601a80546001600160a01b0319166001600160a01b0383811691909117909155601d546040516364e329cb60e11b815290821660048201523060248201529083169063c9c65396906044016020604051808303816000875af115801562000451573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000477919062000a3c565b601b80546001600160a01b0319166001600160a01b03928316178155828216600090815260146020526040808220805460ff19908116600190811790925593549094168252812080549092169092179055600e54620004db9060ff16600a62000b83565b9050600081601e54620004ef919062000b94565b600f819055601f819055602280546001600160a01b039081166000908152600a602052604080822085905592549251939450849392909116917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90620005589085815260200190565b60405180910390a36022546001600160a01b0390811660009081526010602090815260408083208054600160ff199182168117909255835486168552828520805482168317905560215486168552828520805482168317905560125486168552828520805482168317905530855282852080548216831790553380865283862080548316841790557f6e0956cda88cad152e89927e53611735b61a5c762d1428573c6931b0a5efcb0180548316841790558c871680875284872080548416851790557f9e93e1db4a1f807cc22b2aecf4deeb0bf5745f1ecb319e87c68c5624c0fa6b698054841685179055908652601690945293829020805490941617909255608051915163095ea7b360e01b81526004810191909152600019602482015291169063095ea7b3906044016020604051808303816000875af1158015620006a3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620006c9919062000bae565b5050505050505062000bd2565b60008080620006e68585620007be565b6040516001600160601b0319606084811b8216602084015283901b16603482015291935091508690604801604051602081830303815290604052805190602001206040516020016200079c9291907fff00000000000000000000000000000000000000000000000000000000000000815260609290921b6001600160601b031916600183015260158201527efb7f630766e6a796048ea87d01acd3068e8ff67d078148a3fa3f4a84f69bd5603582015260550190565b60408051601f1981840301815291905280516020909101209695505050505050565b600080826001600160a01b0316846001600160a01b031603620008345760405162461bcd60e51b815260206004820152602360248201527f50616e63616b654c6962726172793a204944454e544943414c5f41444452455360448201526253455360e81b60648201526084015b60405180910390fd5b826001600160a01b0316846001600160a01b0316106200085657828462000859565b83835b90925090506001600160a01b038216620008b65760405162461bcd60e51b815260206004820152601c60248201527f50616e63616b654c6962726172793a205a45524f5f414444524553530000000060448201526064016200082b565b9250929050565b6105b1806200483c83390190565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620008f657607f821691505b6020821081036200091757634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200096b57600081815260208120601f850160051c81016020861015620009465750805b601f850160051c820191505b81811015620009675782815560010162000952565b5050505b505050565b81516001600160401b038111156200098c576200098c620008cb565b620009a4816200099d8454620008e1565b846200091d565b602080601f831160018114620009dc5760008415620009c35750858301515b600019600386901b1c1916600185901b17855562000967565b600085815260208120601f198616915b8281101562000a0d57888601518255948401946001909101908401620009ec565b508582101562000a2c5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006020828403121562000a4f57600080fd5b81516001600160a01b038116811462000a6757600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111562000ac557816000190482111562000aa95762000aa962000a6e565b8085161562000ab757918102915b93841c939080029062000a89565b509250929050565b60008262000ade5750600162000b7d565b8162000aed5750600062000b7d565b816001811462000b06576002811462000b115762000b31565b600191505062000b7d565b60ff84111562000b255762000b2562000a6e565b50506001821b62000b7d565b5060208310610133831016604e8410600b841016171562000b56575081810a62000b7d565b62000b62838362000a84565b806000190482111562000b795762000b7962000a6e565b0290505b92915050565b600062000a6760ff84168362000acd565b808202811582820484141762000b7d5762000b7d62000a6e565b60006020828403121562000bc157600080fd5b8151801515811462000a6757600080fd5b608051613c4062000bfc600039600081816109dd015281816113cc01526118620152613c406000f3fe6080604052600436106103e85760003560e01c8063756b419011610208578063aec0c34411610118578063d83d4143116100ab578063e4f4c0681161007a578063e4f4c06814610c3a578063e84fb12d14610c4f578063ef34db6914610c65578063f2fde38b14610c92578063f53dabb614610cb257600080fd5b8063d83d414314610b9e578063dd55c10814610bbe578063dd62ed3e14610bd4578063de5c02c214610c1a57600080fd5b8063ce4d9f15116100e7578063ce4d9f1514610ad4578063cebe59c314610b04578063ced72f8714610b19578063d1575be414610b6557600080fd5b8063aec0c34414610a5f578063b2887bec14610a74578063b83b52c314610a94578063bd9a3b6d14610ab457600080fd5b806395d89b411161019b5780639d56e1911161016a5780639d56e1911461099b578063a1764595146109cb578063a8424861146109ff578063a9059cbb14610a1f578063aa8b38d914610a3f57600080fd5b806395d89b411461093057806397dad339146109455780639bb85344146109655780639bf4d03a1461097b57600080fd5b8063893d20e8116101d7578063893d20e8146108dc5780638b699a15146108fa5780638da5cb5b146108dc578063917ceeb51461091057600080fd5b8063756b41901461086657806379353c08146108865780637a37a0ed1461089c578063879b8f57146108c657600080fd5b80633243ca1511610303578063595dec3c116102965780636ebcf607116102655780636ebcf607146107b957806370a08231146107e6578063715018a61461081c57806373509a001461083157806374d002f11461085157600080fd5b8063595dec3c1461073e57806361b746f21461076e57806368092bd9146107845780636c580801146107a457600080fd5b806346c123b6116102d257806346c123b6146106d25780634870ae2d146106f2578063553193ca14610708578063558377571461071e57600080fd5b80633243ca151461064d5780633c11100d1461066d5780634188bf5a1461069d578063426efbb8146106bd57600080fd5b806318160ddd1161037b57806323b872dd1161034a57806323b872dd146105bb578063244c6375146105db5780632b01fc94146105fb578063313ce5671461062b57600080fd5b806318160ddd146105465780631d066ac214610565578063206c17bb1461057b5780632171dcc91461059b57600080fd5b8063095ea7b3116103b7578063095ea7b3146104ac578063109bec39146104cc578063125bfb6614610504578063141ae5661461052657600080fd5b806301873d8f146103f457806301986fad1461043957806304c23ffe1461046957806306fdde031461048a57600080fd5b366103ef57005b600080fd5b34801561040057600080fd5b5061042461040f36600461370e565b60156020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b34801561044557600080fd5b5061042461045436600461370e565b60106020526000908152604090205460ff1681565b34801561047557600080fd5b50601b5461042490600160a01b900460ff1681565b34801561049657600080fd5b5061049f610cd2565b604051610430919061372b565b3480156104b857600080fd5b506104246104c7366004613779565b610d64565b3480156104d857600080fd5b50601b546104ec906001600160a01b031681565b6040516001600160a01b039091168152602001610430565b34801561051057600080fd5b5061052461051f3660046137a5565b610d7b565b005b34801561053257600080fd5b506105246105413660046137ff565b610e27565b34801561055257600080fd5b50601f545b604051908152602001610430565b34801561057157600080fd5b5061055760245481565b34801561058757600080fd5b506013546104ec906001600160a01b031681565b3480156105a757600080fd5b506105246105b63660046137ff565b610e81565b3480156105c757600080fd5b506104246105d63660046137a5565b610ed6565b3480156105e757600080fd5b506105246105f63660046137ff565b610f6d565b34801561060757600080fd5b5061042461061636600461370e565b60276020526000908152604090205460ff1681565b34801561063757600080fd5b50600e5460405160ff9091168152602001610430565b34801561065957600080fd5b50610524610668366004613838565b610fe0565b34801561067957600080fd5b5061042461068836600461370e565b60146020526000908152604090205460ff1681565b3480156106a957600080fd5b50601a546104ec906001600160a01b031681565b3480156106c957600080fd5b50610524611029565b3480156106de57600080fd5b506105246106ed366004613851565b61105e565b3480156106fe57600080fd5b50610557602d5481565b34801561071457600080fd5b5061055760185481565b34801561072a57600080fd5b5061052461073936600461370e565b6110a6565b34801561074a57600080fd5b5061042461075936600461370e565b60116020526000908152604090205460ff1681565b34801561077a57600080fd5b50610557602a5481565b34801561079057600080fd5b5061052461079f3660046137ff565b6110f7565b3480156107b057600080fd5b5061052461114c565b3480156107c557600080fd5b506105576107d436600461370e565b600a6020526000908152604090205481565b3480156107f257600080fd5b5061055761080136600461370e565b6001600160a01b03166000908152600a602052604090205490565b34801561082857600080fd5b506105246111b6565b34801561083d57600080fd5b5061052461084c36600461386e565b61122a565b34801561085d57600080fd5b50602554610557565b34801561087257600080fd5b506105246108813660046138b2565b61129c565b34801561089257600080fd5b5061055760285481565b3480156108a857600080fd5b506108b1611337565b60408051928352602083019190915201610430565b3480156108d257600080fd5b5061055760095481565b3480156108e857600080fd5b506000546001600160a01b03166104ec565b34801561090657600080fd5b50610557602c5481565b34801561091c57600080fd5b5061052461092b366004613838565b611416565b34801561093c57600080fd5b5061049f611491565b34801561095157600080fd5b50610524610960366004613838565b6114a0565b34801561097157600080fd5b5061055760195481565b34801561098757600080fd5b50610524610996366004613838565b6114cf565b3480156109a757600080fd5b506104246109b636600461370e565b60166020526000908152604090205460ff1681565b3480156109d757600080fd5b506104ec7f000000000000000000000000000000000000000000000000000000000000000081565b348015610a0b57600080fd5b50610524610a1a3660046137ff565b6114fe565b348015610a2b57600080fd5b50610424610a3a366004613779565b611553565b348015610a4b57600080fd5b50610524610a5a366004613779565b611560565b348015610a6b57600080fd5b50610524611596565b348015610a8057600080fd5b50610524610a8f3660046138b2565b6116fa565b348015610aa057600080fd5b50610524610aaf36600461370e565b611790565b348015610ac057600080fd5b50610524610acf366004613989565b6117e1565b348015610ae057600080fd5b50610ae961182d565b60408051938452602084019290925290820152606001610430565b348015610b1057600080fd5b506105246118d4565b348015610b2557600080fd5b50600154600454600654600254600354600554604080519687526020870195909552938501929092526060840152608083015260a082015260c001610430565b348015610b7157600080fd5b50610424610b8036600461370e565b6001600160a01b031660009081526010602052604090205460ff1690565b348015610baa57600080fd5b50610524610bb93660046137ff565b611a4a565b348015610bca57600080fd5b50610557602b5481565b348015610be057600080fd5b50610557610bef36600461386e565b6001600160a01b039182166000908152600b6020908152604080832093909416825291909152205490565b348015610c2657600080fd5b506104ec610c35366004613838565b611a9f565b348015610c4657600080fd5b50610524611ac9565b348015610c5b57600080fd5b5061055760295481565b348015610c7157600080fd5b50610557610c8036600461370e565b60266020526000908152604090205481565b348015610c9e57600080fd5b50610524610cad36600461370e565b611aff565b348015610cbe57600080fd5b50610524610ccd366004613838565b611bbf565b6060600c8054610ce1906139cc565b80601f0160208091040260200160405190810160405280929190818152602001828054610d0d906139cc565b8015610d5a5780601f10610d2f57610100808354040283529160200191610d5a565b820191906000526020600020905b815481529060010190602001808311610d3d57829003601f168201915b5050505050905090565b6000610d71338484611cc6565b5060015b92915050565b6000546001600160a01b03163314610dae5760405162461bcd60e51b8152600401610da590613a00565b60405180910390fd5b60405163a9059cbb60e01b81526001600160a01b0384811660048301526024820183905283169063a9059cbb906044016020604051808303816000875af1158015610dfd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e219190613a1c565b50505050565b3360009081526016602052604090205460ff16610e565760405162461bcd60e51b8152600401610da590613a39565b6001600160a01b03919091166000908152602760205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314610eab5760405162461bcd60e51b8152600401610da590613a00565b6001600160a01b03919091166000908152601560205260409020805460ff1916911515919091179055565b6000610ee3848484611d28565b6001600160a01b0384166000908152600b6020908152604080832033845290915290205460001914610f63576001600160a01b0384166000908152600b60209081526040808320338452909152902054610f3e908390613a6e565b6001600160a01b0385166000908152600b602090815260408083203384529091529020555b5060019392505050565b3360009081526016602052604090205460ff16610fb55760405162461bcd60e51b8152600401610da59060208082526004908201526369736f6b60e01b604082015260600190565b6001600160a01b03919091166000908152601660205260409020805460ff1916911515919091179055565b3360009081526016602052604090205460ff166110245760405162461bcd60e51b81526020600482015260026024820152616e6f60f01b6044820152606401610da5565b602455565b3360009081526016602052604090205460ff166110585760405162461bcd60e51b8152600401610da590613a39565b43601955565b6000546001600160a01b031633146110885760405162461bcd60e51b8152600401610da590613a00565b601b8054911515600160a01b0260ff60a01b19909216919091179055565b3360009081526016602052604090205460ff166110d55760405162461bcd60e51b8152600401610da590613a39565b602080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146111215760405162461bcd60e51b8152600401610da590613a00565b6001600160a01b03919091166000908152601160205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146111765760405162461bcd60e51b8152600401610da590613a00565b601854156111b05760405162461bcd60e51b81526020600482015260076024820152661cdd185c9d195960ca1b6044820152606401610da5565b43601855565b6000546001600160a01b031633146111e05760405162461bcd60e51b8152600401610da590613a00565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b3360009081526016602052604090205460ff1661126e5760405162461bcd60e51b81526020600482015260026024820152616e6f60f01b6044820152606401610da5565b601a80546001600160a01b039384166001600160a01b031991821617909155601b8054929093169116179055565b3360009081526016602052604090205460ff166112cb5760405162461bcd60e51b8152600401610da590613a39565b60005b82518110156113325781601160008584815181106112ee576112ee613a81565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff19169115159190911790558061132a81613a97565b9150506112ce565b505050565b6000806000601a60009054906101000a90046001600160a01b03169050600080826001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015611395573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113b99190613ac7565b506001600160701b0391821693501690507f0000000000000000000000000000000000000000000000000000000000000000306001600160a01b03821610156114075782955081945061140e565b8195508294505b505050509091565b6000546001600160a01b031633146114405760405162461bcd60e51b8152600401610da590613a00565b62030d4081101580156114565750621e84808111155b61148c5760405162461bcd60e51b815260206004820152600760248201526632302d3230307760c81b6044820152606401610da5565b602955565b6060600d8054610ce1906139cc565b6000546001600160a01b031633146114ca5760405162461bcd60e51b8152600401610da590613a00565b602855565b6000546001600160a01b031633146114f95760405162461bcd60e51b8152600401610da590613a00565b600955565b6000546001600160a01b031633146115285760405162461bcd60e51b8152600401610da590613a00565b6001600160a01b03919091166000908152601460205260409020805460ff1916911515919091179055565b6000610d71338484611d28565b6040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015611332573d6000803e3d6000fd5b3360009081526016602052604090205460ff166115dd5760405162461bcd60e51b81526020600482015260056024820152646e6f206f6b60d81b6044820152606401610da5565b601a546001600160a01b03166000908152600a6020526040902054156116f857602454601a546001600160a01b03166000908152600a602052604081205490916127109161162b9190613b17565b6116359190613b2e565b601a546001600160a01b03166000908152600a602052604090205490915061165e908290613a6e565b601a80546001600160a01b039081166000908152600a60205260409020929092555461168e911661dead83612282565b601a60009054906101000a90046001600160a01b03166001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156116de57600080fd5b505af11580156116f2573d6000803e3d6000fd5b50505050505b565b3360009081526016602052604090205460ff166117295760405162461bcd60e51b8152600401610da590613a39565b60005b825181101561133257816010600085848151811061174c5761174c613a81565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff19169115159190911790558061178881613a97565b91505061172c565b3360009081526016602052604090205460ff166117bf5760405162461bcd60e51b8152600401610da590613a39565b602180546001600160a01b0319166001600160a01b0392909216919091179055565b3360009081526016602052604090205460ff166118105760405162461bcd60e51b8152600401610da590613a39565b600195909555600493909355600691909155600255600355600555565b600080600061183a611337565b601a546040516370a0823160e01b81526001600160a01b0391821660048201529295509093507f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa1580156118a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118cd9190613b50565b9050909192565b3360009081526016602052604090205460ff1661191b5760405162461bcd60e51b81526020600482015260056024820152646e6f206f6b60d81b6044820152606401610da5565b602454601b546001600160a01b03166000908152600a60205260408120549091612710916119499190613b17565b6119539190613b2e565b601b546001600160a01b03166000908152600a602052604090205490915061197c908290613a6e565b601b80546001600160a01b039081166000908152600a6020526040902092909255546119ac911661dead83612282565b601b60009054906101000a90046001600160a01b03166001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156119fc57600080fd5b505af1158015611a10573d6000803e3d6000fd5b50505050600160236000610e1042611a289190613b2e565b81526020810191909152604001600020805460ff191691151591909117905550565b6000546001600160a01b03163314611a745760405162461bcd60e51b8152600401610da590613a00565b6001600160a01b03919091166000908152601060205260409020805460ff1916911515919091179055565b60258181548110611aaf57600080fd5b6000918252602090912001546001600160a01b0316905081565b3360009081526016602052604090205460ff16611af85760405162461bcd60e51b8152600401610da590613a39565b6000601955565b6000546001600160a01b03163314611b295760405162461bcd60e51b8152600401610da590613a00565b6001600160a01b038116611b645760405162461bcd60e51b815260206004820152600260248201526106e360f41b6044820152606401610da5565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611be95760405162461bcd60e51b8152600401610da590613a00565b602b55565b6000806000611bfd85856122fa565b6040516bffffffffffffffffffffffff19606084811b8216602084015283901b1660348201529193509150869060480160405160208183030381529060405280519060200120604051602001611ca49291906001600160f81b0319815260609290921b6bffffffffffffffffffffffff1916600183015260158201527efb7f630766e6a796048ea87d01acd3068e8ff67d078148a3fa3f4a84f69bd5603582015260550190565b60408051601f1981840301815291905280516020909101209695505050505050565b6001600160a01b038381166000818152600b602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b03831660009081526011602052604090205460ff161580611d6857506001600160a01b03831660009081526010602052604090205460ff165b611da85760405162461bcd60e51b81526020600482015260116024820152706e6f742076616c6964206164647265737360781b6044820152606401610da5565b6001600160a01b0383166000908152600a602052604090205481811015611e055760405162461bcd60e51b81526020600482015260116024820152701b9bdd08195b9bdd59da08185b5bdd5b9d607a1b6044820152606401610da5565b6001600160a01b03841660009081526010602052604081205460ff16158015611e4757506001600160a01b03841660009081526010602052604090205460ff16155b15611e50575060015b601b5460009081906001600160a01b0388811691161480611e7e5750601b546001600160a01b038781169116145b15611ece57601b546001600160a01b0390811690871603611ea857611ea16123ef565b9150612024565b601b546001600160a01b0390811690881603611ec957611ec6612512565b90505b612024565b601a546000906001600160a01b038881169116148015611efd57503360009081526015602052604090205460ff165b8015611f115750326001600160a01b038916145b15611f8d57611f1f86612635565b90508015611f8d576001600160a01b03881660009081526010602052604090205460ff16611f845760405162461bcd60e51b81526020600482015260126024820152716f6e6c79207768697465206164647265737360701b6044820152606401610da5565b60019250600093505b601a546000906001600160a01b038a81169116148015611fbb57506013546001600160a01b03898116911614155b15611fd057611fc9876126a0565b9050611ff2565b6013546001600160a01b03908116908a1603611ff257611fef876127da565b90505b8015612021576001600160a01b0388166000908152601060205260409020546001935060ff1661202157600194505b50505b60195460000361217557601a546001600160a01b03888116911614806120575750601c546001600160a01b038881169116145b801561207c57506001600160a01b03861660009081526010602052604090205460ff16155b156120a9576001600160a01b0386166000908152601160205260409020805460ff19166001179055612175565b601b546001600160a01b0388811691161480156120df57506001600160a01b03861660009081526010602052604090205460ff16155b1561210c576001600160a01b0386166000908152601160205260409020805460ff19166001179055612175565b601b546001600160a01b03878116911614801561214257506001600160a01b03871660009081526010602052604090205460ff16155b801561214c575081155b15612175576001600160a01b0387166000908152601160205260409020805460ff191660011790555b6001600160a01b03871660009081526014602052604090205460ff16806121b457506001600160a01b03861660009081526014602052604090205460ff165b1561226b57601954600003612202576001600160a01b03871660009081526010602052604090205460ff1680156121f85750601a546001600160a01b038781169116145b1561220257436019555b6001600160a01b03871660009081526010602052604090205460ff1615801561224457506001600160a01b03861660009081526010602052604090205460ff16155b1561226b5760185460000361226b5760195460001080156122625750815b61226b57600080fd5b61227987878786858761288c565b50505050505050565b6001600160a01b0382166000908152600a60205260409020546122a6908290613b69565b6001600160a01b038084166000818152600a602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611d1b9085815260200190565b600080826001600160a01b0316846001600160a01b03160361236a5760405162461bcd60e51b815260206004820152602360248201527f50616e63616b654c6962726172793a204944454e544943414c5f41444452455360448201526253455360e81b6064820152608401610da5565b826001600160a01b0316846001600160a01b03161061238a57828461238d565b83835b90925090506001600160a01b0382166123e85760405162461bcd60e51b815260206004820152601c60248201527f50616e63616b654c6962726172793a205a45524f5f41444452455353000000006044820152606401610da5565b9250929050565b601b5460408051630240bc6b60e21b815290516000926001600160a01b031691839182918491630902f1ac916004808201926060929091908290030181865afa158015612440573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124649190613ac7565b50601d546001600160701b039283169450911691506001600160a01b0316600030821015612493575082612496565b50815b6040516370a0823160e01b81526001600160a01b038681166004830152600091908416906370a0823190602401602060405180830381865afa1580156124e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125049190613b50565b919091119695505050505050565b601b5460408051630240bc6b60e21b815290516000926001600160a01b031691839182918491630902f1ac916004808201926060929091908290030181865afa158015612563573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125879190613ac7565b50601d546001600160701b039283169450911691506001600160a01b03166000308210156125b65750826125b9565b50815b6040516370a0823160e01b81526001600160a01b038681166004830152600091908416906370a0823190602401602060405180830381865afa158015612603573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126279190613b50565b909110159695505050505050565b60008060008061264361182d565b9250925092506000808411801561265a5750600083115b15612677578261266a8588613b17565b6126749190613b2e565b90505b6126818185613b69565b82106126975761269382878686612c4d565b5094505b50505050919050565b6000806000806126ae61182d565b9250925092508281101561277457601a546001600160a01b03166000908152600a60205260409020546126e2908690613a6e565b601a60009054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612735573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127599190613b50565b6127639087613b17565b61276d9190613b2e565b93506127d2565b601b54600160a01b900460ff16156127d257600080841180156127975750600083115b15612697576127a68684613a6e565b6127b08588613b17565b6127ba9190613b2e565b90506127c68482613b69565b82101561269757600080fd5b505050919050565b60008060006127e761182d565b925050915081811161288557601a546001600160a01b03166000818152600a60209081526040918290205482516318160ddd60e01b815292519093926318160ddd9260048083019391928290030181865afa15801561284a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061286e9190613b50565b6128789086613b17565b6128829190613b2e565b92505b5050919050565b6001600160a01b0386166000908152600a60205260409020546128af8582613a6e565b6001600160a01b0388166000908152600a602052604081208290559091508080808080808a15612a5357891561293b576127106001548d6128f09190613b17565b6128fa9190613b2e565b96506127106006548d61290d9190613b17565b6129179190613b2e565b95506127106004548d61292a9190613b17565b6129349190613b2e565b94506129fa565b881561294f5761294a8e613036565b6129fa565b6001600160a01b038e1660009081526014602052604090205460ff161561298557600192506127106001548d6128f09190613b17565b6001600160a01b038d1660009081526014602052604090205460ff16156129f557600193506127106002548d6129bb9190613b17565b6129c59190613b2e565b96506127106005548d6129d89190613b17565b6129e29190613b2e565b95506127106003548d61292a9190613b17565b600191505b612a048688613b69565b90508015612a5357612a178e3083612282565b306000908152600a602052604090205460175460ff16158015612a375750845b8015612a435750600081115b15612a5157612a5181613107565b505b8380612a5c5750815b15612bd95760236000612a71610e1042613b2e565b815260208101919091526040016000205460ff16158015612aaa5750601a546001600160a01b03166000908152600a6020526040812054115b15612bd957601a546001600160a01b03166000908152600a602052604081205461271090612ad9906032613b17565b612ae39190613b2e565b601a546001600160a01b03166000908152600a6020526040902054909150612b0c908290613a6e565b601a80546001600160a01b039081166000908152600a602052604090209290925554612b3c911661dead83612282565b601a60009054906101000a90046001600160a01b03166001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612b8c57600080fd5b505af1158015612ba0573d6000803e3d6000fd5b50505050600160236000610e1042612bb89190613b2e565b81526020810191909152604001600020805460ff1916911515919091179055505b612be4602954613326565b80600754612bf29190613b69565b600755600854612c03908790613b69565b600855612c108582613b69565b90508415612c2757612c228e86613655565b600094505b612c3d8e8e838f612c389190613a6e565b612282565b5050505050505050505050505050565b6000806000601a60009054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ca5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cc99190613b50565b90506000601360009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d20573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d449190613b7c565b6001600160a01b031663017e7e586040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d81573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612da59190613b7c565b601a5460408051637464fc3d60e01b815290519293506001600160a01b0380851615159360009390911691637464fc3d9160048083019260209291908290030181865afa158015612dfa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e1e9190613b50565b90508115612fbc578015612fbc576000612e40612e3b898b613b17565b613666565b90506000612e4d83613666565b905080821115612fb95760135460009081906001600160a01b03167310ed43c718714eb63d5aa57b78b54704e256024d1901612ecb57612e8d8385613a6e565b612e979089613b17565b612ea2906008613b17565b9150612eaf836008613b17565b612eba856011613b17565b612ec49190613b69565b9050612f97565b6013546001600160a01b031673d99d1c33f9fc3444f8101754abc46c52416550d01901612f1457612efc8385613a6e565b612f069089613b17565b915082612eba856003613b17565b6013546001600160a01b031673e9d6f80028671279a28790bb4007b10b0595def01901612f6857612f458385613a6e565b612f4f9089613b17565b612f5a906003613b17565b915082612eba856005613b17565b612f728385613a6e565b612f7c9089613b17565b915082612f8a856005613b17565b612f949190613b69565b90505b612fa18183613b2e565b98508815612fb657612fb38989613b69565b97505b50505b50505b6000612fc8898c613a6e565b905084600003612ff3576103e8612fe2612e3b8c84613b17565b612fec9190613a6e565b9650613028565b613025896130018784613b17565b61300b9190613b2e565b89613016888e613b17565b6130209190613b2e565b6136d6565b96505b505050505094509492505050565b6001600160a01b03811660009081526026602052604081205490036131045760255415806130955750806001600160a01b0316602560008154811061307d5761307d613a81565b6000918252602090912001546001600160a01b031614155b1561310457803b80156130a6575050565b50602580546001600160a01b0383166000818152602660205260408120839055600183018455929092527f401968ff42a154441da5f6c4c935ac46b8671f0e062baaa62a7545ba53bb6e4c0180546001600160a01b03191690911790555b50565b6017805460ff19166001179055801561331957604080516002808252606082018352600092602083019080368337019050509050308160008151811061314f5761314f613a81565b6001600160a01b039283166020918202929092010152601d5482519116908290600190811061318057613180613a81565b6001600160a01b039283166020918202929092010152601354601254604051635c11d79560e01b815291831692635c11d795926131cc9287926000928892909116904290600401613b99565b600060405180830381600087803b1580156131e657600080fd5b505af11580156131fa573d6000803e3d6000fd5b50505050600060085411156132aa57601254601d5460085460075460205460215460405163172a36e960e11b81526001600160a01b0395861660048201526024810194909452604484019290925283166064830152821660848201523060a4820152911690632e546dd29060c401600060405180830381600087803b15801561328257600080fd5b505af1158015613296573d6000803e3d6000fd5b505060006008819055600755506133179050565b601254601d54604051631748b61760e31b81526001600160a01b03918216600482015230602482015291169063ba45b0b890604401600060405180830381600087803b1580156132f957600080fd5b505af115801561330d573d6000803e3d6000fd5b5050600060075550505b505b506017805460ff19169055565b6018546000036133335750565b43602d54602c546133449190613b69565b111561334d5750565b602b54601d546040516370a0823160e01b81523060048201526001600160a01b0390911690829082906370a0823190602401602060405180830381865afa15801561339c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133c09190613b50565b10156133cb57505050565b601b54604080516318160ddd60e01b815290516001600160a01b039092169160009183916318160ddd916004808201926020929091908290030181865afa15801561341a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061343e9190613b50565b90508060000361344f575050505050565b602554600090819081908180805a602854600954919250905b8d8510801561347657508584105b156136415785602a541061348a576000602a555b6025602a548154811061349f5761349f613a81565b60009182526020808320909101546001600160a01b0316808352602790915260409091205490995060ff161580156134f55750806134f28a6001600160a01b03166000908152600a602052604090205490565b10155b156135ff576040516370a0823160e01b81526001600160a01b038a811660048301528c16906370a0823190602401602060405180830381865afa158015613540573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135649190613b50565b97508188106135ff5789613578898f613b17565b6135829190613b2e565b965086156135ff5760405163a9059cbb60e01b81526001600160a01b038a81166004830152602482018990528d169063a9059cbb906044016020604051808303816000875af11580156135d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135fd9190613a1c565b505b5a61360a9084613a6e565b6136149086613b69565b94505a602a8054919450600061362983613a97565b9190505550838061363990613a97565b945050613468565b505043602c55505050505050505050505050565b6136628261dead83612282565b5050565b600060038211156136c75750806000613680600283613b2e565b61368b906001613b69565b90505b818110156136c1579050806002816136a68186613b2e565b6136b09190613b69565b6136ba9190613b2e565b905061368e565b50919050565b81156136d1575060015b919050565b60008183106136e557816136e7565b825b9392505050565b6001600160a01b038116811461310457600080fd5b80356136d1816136ee565b60006020828403121561372057600080fd5b81356136e7816136ee565b600060208083528351808285015260005b818110156137585785810183015185820160400152820161373c565b506000604082860101526040601f19601f8301168501019250505092915050565b6000806040838503121561378c57600080fd5b8235613797816136ee565b946020939093013593505050565b6000806000606084860312156137ba57600080fd5b83356137c5816136ee565b925060208401356137d5816136ee565b929592945050506040919091013590565b801515811461310457600080fd5b80356136d1816137e6565b6000806040838503121561381257600080fd5b823561381d816136ee565b9150602083013561382d816137e6565b809150509250929050565b60006020828403121561384a57600080fd5b5035919050565b60006020828403121561386357600080fd5b81356136e7816137e6565b6000806040838503121561388157600080fd5b823561388c816136ee565b9150602083013561382d816136ee565b634e487b7160e01b600052604160045260246000fd5b600080604083850312156138c557600080fd5b823567ffffffffffffffff808211156138dd57600080fd5b818501915085601f8301126138f157600080fd5b81356020828211156139055761390561389c565b8160051b604051601f19603f8301168101818110868211171561392a5761392a61389c565b60405292835281830193508481018201928984111561394857600080fd5b948201945b8386101561396d5761395e86613703565b8552948201949382019361394d565b965061397c90508782016137f4565b9450505050509250929050565b60008060008060008060c087890312156139a257600080fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b600181811c908216806139e057607f821691505b6020821081036136c157634e487b7160e01b600052602260045260246000fd5b602080825260029082015261216f60f01b604082015260600190565b600060208284031215613a2e57600080fd5b81516136e7816137e6565b60208082526005908201526434b9b2b93960d91b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b81810381811115610d7557610d75613a58565b634e487b7160e01b600052603260045260246000fd5b600060018201613aa957613aa9613a58565b5060010190565b80516001600160701b03811681146136d157600080fd5b600080600060608486031215613adc57600080fd5b613ae584613ab0565b9250613af360208501613ab0565b9150604084015163ffffffff81168114613b0c57600080fd5b809150509250925092565b8082028115828204841417610d7557610d75613a58565b600082613b4b57634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215613b6257600080fd5b5051919050565b80820180821115610d7557610d75613a58565b600060208284031215613b8e57600080fd5b81516136e7816136ee565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015613be95784516001600160a01b031683529383019391830191600101613bc4565b50506001600160a01b0396909616606085015250505060800152939250505056fea2646970667358221220bd47ce0a9b7270a430bdff256b22c204705f387207b3b378f88b7a7ae61e25ca64736f6c63430008120033608060405234801561001057600080fd5b50600080546001600160a01b0319163317905561057f806100326000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c80632e546dd214610046578063705e68c61461005b578063ba45b0b81461006e575b600080fd5b6100596100543660046103ed565b610081565b005b610059610069366004610453565b6102ac565b61005961007c36600461046c565b6102e9565b6040516370a0823160e01b81523060048201526000906001600160a01b038816906370a0823190602401602060405180830381865afa1580156100c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100ec919061049f565b90506000856100fb88846104ce565b61010591906104eb565b90506001600160a01b03881663a9059cbb866101226002856104eb565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af115801561016d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610191919061050d565b506001600160a01b03881663a9059cbb856101ad6002856104eb565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af11580156101f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061021c919061050d565b5060006102298284610536565b60405163a9059cbb60e01b81526001600160a01b03868116600483015260248201839052919250908a169063a9059cbb906044016020604051808303816000875af115801561027c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102a0919061050d565b50505050505050505050565b600080546040516001600160a01b039091169183156108fc02918491818181858888f193505050501580156102e5573d6000803e3d6000fd5b5050565b6040516370a0823160e01b81523060048201526000906001600160a01b038416906370a0823190602401602060405180830381865afa158015610330573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610354919061049f565b60405163a9059cbb60e01b81526001600160a01b038481166004830152602482018390529192509084169063a9059cbb906044016020604051808303816000875af11580156103a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103cb919061050d565b50505050565b80356001600160a01b03811681146103e857600080fd5b919050565b60008060008060008060c0878903121561040657600080fd5b61040f876103d1565b9550602087013594506040870135935061042b606088016103d1565b9250610439608088016103d1565b915061044760a088016103d1565b90509295509295509295565b60006020828403121561046557600080fd5b5035919050565b6000806040838503121561047f57600080fd5b610488836103d1565b9150610496602084016103d1565b90509250929050565b6000602082840312156104b157600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b80820281158282048414176104e5576104e56104b8565b92915050565b60008261050857634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561051f57600080fd5b8151801515811461052f57600080fd5b9392505050565b818103818111156104e5576104e56104b856fea2646970667358221220e82067376feeb0bb35380c13c7c49f6d6e5b0d0ba7df40ff41737af5a39a43dc64736f6c63430008120033

Deployed Bytecode

0x6080604052600436106103e85760003560e01c8063756b419011610208578063aec0c34411610118578063d83d4143116100ab578063e4f4c0681161007a578063e4f4c06814610c3a578063e84fb12d14610c4f578063ef34db6914610c65578063f2fde38b14610c92578063f53dabb614610cb257600080fd5b8063d83d414314610b9e578063dd55c10814610bbe578063dd62ed3e14610bd4578063de5c02c214610c1a57600080fd5b8063ce4d9f15116100e7578063ce4d9f1514610ad4578063cebe59c314610b04578063ced72f8714610b19578063d1575be414610b6557600080fd5b8063aec0c34414610a5f578063b2887bec14610a74578063b83b52c314610a94578063bd9a3b6d14610ab457600080fd5b806395d89b411161019b5780639d56e1911161016a5780639d56e1911461099b578063a1764595146109cb578063a8424861146109ff578063a9059cbb14610a1f578063aa8b38d914610a3f57600080fd5b806395d89b411461093057806397dad339146109455780639bb85344146109655780639bf4d03a1461097b57600080fd5b8063893d20e8116101d7578063893d20e8146108dc5780638b699a15146108fa5780638da5cb5b146108dc578063917ceeb51461091057600080fd5b8063756b41901461086657806379353c08146108865780637a37a0ed1461089c578063879b8f57146108c657600080fd5b80633243ca1511610303578063595dec3c116102965780636ebcf607116102655780636ebcf607146107b957806370a08231146107e6578063715018a61461081c57806373509a001461083157806374d002f11461085157600080fd5b8063595dec3c1461073e57806361b746f21461076e57806368092bd9146107845780636c580801146107a457600080fd5b806346c123b6116102d257806346c123b6146106d25780634870ae2d146106f2578063553193ca14610708578063558377571461071e57600080fd5b80633243ca151461064d5780633c11100d1461066d5780634188bf5a1461069d578063426efbb8146106bd57600080fd5b806318160ddd1161037b57806323b872dd1161034a57806323b872dd146105bb578063244c6375146105db5780632b01fc94146105fb578063313ce5671461062b57600080fd5b806318160ddd146105465780631d066ac214610565578063206c17bb1461057b5780632171dcc91461059b57600080fd5b8063095ea7b3116103b7578063095ea7b3146104ac578063109bec39146104cc578063125bfb6614610504578063141ae5661461052657600080fd5b806301873d8f146103f457806301986fad1461043957806304c23ffe1461046957806306fdde031461048a57600080fd5b366103ef57005b600080fd5b34801561040057600080fd5b5061042461040f36600461370e565b60156020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b34801561044557600080fd5b5061042461045436600461370e565b60106020526000908152604090205460ff1681565b34801561047557600080fd5b50601b5461042490600160a01b900460ff1681565b34801561049657600080fd5b5061049f610cd2565b604051610430919061372b565b3480156104b857600080fd5b506104246104c7366004613779565b610d64565b3480156104d857600080fd5b50601b546104ec906001600160a01b031681565b6040516001600160a01b039091168152602001610430565b34801561051057600080fd5b5061052461051f3660046137a5565b610d7b565b005b34801561053257600080fd5b506105246105413660046137ff565b610e27565b34801561055257600080fd5b50601f545b604051908152602001610430565b34801561057157600080fd5b5061055760245481565b34801561058757600080fd5b506013546104ec906001600160a01b031681565b3480156105a757600080fd5b506105246105b63660046137ff565b610e81565b3480156105c757600080fd5b506104246105d63660046137a5565b610ed6565b3480156105e757600080fd5b506105246105f63660046137ff565b610f6d565b34801561060757600080fd5b5061042461061636600461370e565b60276020526000908152604090205460ff1681565b34801561063757600080fd5b50600e5460405160ff9091168152602001610430565b34801561065957600080fd5b50610524610668366004613838565b610fe0565b34801561067957600080fd5b5061042461068836600461370e565b60146020526000908152604090205460ff1681565b3480156106a957600080fd5b50601a546104ec906001600160a01b031681565b3480156106c957600080fd5b50610524611029565b3480156106de57600080fd5b506105246106ed366004613851565b61105e565b3480156106fe57600080fd5b50610557602d5481565b34801561071457600080fd5b5061055760185481565b34801561072a57600080fd5b5061052461073936600461370e565b6110a6565b34801561074a57600080fd5b5061042461075936600461370e565b60116020526000908152604090205460ff1681565b34801561077a57600080fd5b50610557602a5481565b34801561079057600080fd5b5061052461079f3660046137ff565b6110f7565b3480156107b057600080fd5b5061052461114c565b3480156107c557600080fd5b506105576107d436600461370e565b600a6020526000908152604090205481565b3480156107f257600080fd5b5061055761080136600461370e565b6001600160a01b03166000908152600a602052604090205490565b34801561082857600080fd5b506105246111b6565b34801561083d57600080fd5b5061052461084c36600461386e565b61122a565b34801561085d57600080fd5b50602554610557565b34801561087257600080fd5b506105246108813660046138b2565b61129c565b34801561089257600080fd5b5061055760285481565b3480156108a857600080fd5b506108b1611337565b60408051928352602083019190915201610430565b3480156108d257600080fd5b5061055760095481565b3480156108e857600080fd5b506000546001600160a01b03166104ec565b34801561090657600080fd5b50610557602c5481565b34801561091c57600080fd5b5061052461092b366004613838565b611416565b34801561093c57600080fd5b5061049f611491565b34801561095157600080fd5b50610524610960366004613838565b6114a0565b34801561097157600080fd5b5061055760195481565b34801561098757600080fd5b50610524610996366004613838565b6114cf565b3480156109a757600080fd5b506104246109b636600461370e565b60166020526000908152604090205460ff1681565b3480156109d757600080fd5b506104ec7f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c81565b348015610a0b57600080fd5b50610524610a1a3660046137ff565b6114fe565b348015610a2b57600080fd5b50610424610a3a366004613779565b611553565b348015610a4b57600080fd5b50610524610a5a366004613779565b611560565b348015610a6b57600080fd5b50610524611596565b348015610a8057600080fd5b50610524610a8f3660046138b2565b6116fa565b348015610aa057600080fd5b50610524610aaf36600461370e565b611790565b348015610ac057600080fd5b50610524610acf366004613989565b6117e1565b348015610ae057600080fd5b50610ae961182d565b60408051938452602084019290925290820152606001610430565b348015610b1057600080fd5b506105246118d4565b348015610b2557600080fd5b50600154600454600654600254600354600554604080519687526020870195909552938501929092526060840152608083015260a082015260c001610430565b348015610b7157600080fd5b50610424610b8036600461370e565b6001600160a01b031660009081526010602052604090205460ff1690565b348015610baa57600080fd5b50610524610bb93660046137ff565b611a4a565b348015610bca57600080fd5b50610557602b5481565b348015610be057600080fd5b50610557610bef36600461386e565b6001600160a01b039182166000908152600b6020908152604080832093909416825291909152205490565b348015610c2657600080fd5b506104ec610c35366004613838565b611a9f565b348015610c4657600080fd5b50610524611ac9565b348015610c5b57600080fd5b5061055760295481565b348015610c7157600080fd5b50610557610c8036600461370e565b60266020526000908152604090205481565b348015610c9e57600080fd5b50610524610cad36600461370e565b611aff565b348015610cbe57600080fd5b50610524610ccd366004613838565b611bbf565b6060600c8054610ce1906139cc565b80601f0160208091040260200160405190810160405280929190818152602001828054610d0d906139cc565b8015610d5a5780601f10610d2f57610100808354040283529160200191610d5a565b820191906000526020600020905b815481529060010190602001808311610d3d57829003601f168201915b5050505050905090565b6000610d71338484611cc6565b5060015b92915050565b6000546001600160a01b03163314610dae5760405162461bcd60e51b8152600401610da590613a00565b60405180910390fd5b60405163a9059cbb60e01b81526001600160a01b0384811660048301526024820183905283169063a9059cbb906044016020604051808303816000875af1158015610dfd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e219190613a1c565b50505050565b3360009081526016602052604090205460ff16610e565760405162461bcd60e51b8152600401610da590613a39565b6001600160a01b03919091166000908152602760205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314610eab5760405162461bcd60e51b8152600401610da590613a00565b6001600160a01b03919091166000908152601560205260409020805460ff1916911515919091179055565b6000610ee3848484611d28565b6001600160a01b0384166000908152600b6020908152604080832033845290915290205460001914610f63576001600160a01b0384166000908152600b60209081526040808320338452909152902054610f3e908390613a6e565b6001600160a01b0385166000908152600b602090815260408083203384529091529020555b5060019392505050565b3360009081526016602052604090205460ff16610fb55760405162461bcd60e51b8152600401610da59060208082526004908201526369736f6b60e01b604082015260600190565b6001600160a01b03919091166000908152601660205260409020805460ff1916911515919091179055565b3360009081526016602052604090205460ff166110245760405162461bcd60e51b81526020600482015260026024820152616e6f60f01b6044820152606401610da5565b602455565b3360009081526016602052604090205460ff166110585760405162461bcd60e51b8152600401610da590613a39565b43601955565b6000546001600160a01b031633146110885760405162461bcd60e51b8152600401610da590613a00565b601b8054911515600160a01b0260ff60a01b19909216919091179055565b3360009081526016602052604090205460ff166110d55760405162461bcd60e51b8152600401610da590613a39565b602080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146111215760405162461bcd60e51b8152600401610da590613a00565b6001600160a01b03919091166000908152601160205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146111765760405162461bcd60e51b8152600401610da590613a00565b601854156111b05760405162461bcd60e51b81526020600482015260076024820152661cdd185c9d195960ca1b6044820152606401610da5565b43601855565b6000546001600160a01b031633146111e05760405162461bcd60e51b8152600401610da590613a00565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b3360009081526016602052604090205460ff1661126e5760405162461bcd60e51b81526020600482015260026024820152616e6f60f01b6044820152606401610da5565b601a80546001600160a01b039384166001600160a01b031991821617909155601b8054929093169116179055565b3360009081526016602052604090205460ff166112cb5760405162461bcd60e51b8152600401610da590613a39565b60005b82518110156113325781601160008584815181106112ee576112ee613a81565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff19169115159190911790558061132a81613a97565b9150506112ce565b505050565b6000806000601a60009054906101000a90046001600160a01b03169050600080826001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015611395573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113b99190613ac7565b506001600160701b0391821693501690507f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c306001600160a01b03821610156114075782955081945061140e565b8195508294505b505050509091565b6000546001600160a01b031633146114405760405162461bcd60e51b8152600401610da590613a00565b62030d4081101580156114565750621e84808111155b61148c5760405162461bcd60e51b815260206004820152600760248201526632302d3230307760c81b6044820152606401610da5565b602955565b6060600d8054610ce1906139cc565b6000546001600160a01b031633146114ca5760405162461bcd60e51b8152600401610da590613a00565b602855565b6000546001600160a01b031633146114f95760405162461bcd60e51b8152600401610da590613a00565b600955565b6000546001600160a01b031633146115285760405162461bcd60e51b8152600401610da590613a00565b6001600160a01b03919091166000908152601460205260409020805460ff1916911515919091179055565b6000610d71338484611d28565b6040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015611332573d6000803e3d6000fd5b3360009081526016602052604090205460ff166115dd5760405162461bcd60e51b81526020600482015260056024820152646e6f206f6b60d81b6044820152606401610da5565b601a546001600160a01b03166000908152600a6020526040902054156116f857602454601a546001600160a01b03166000908152600a602052604081205490916127109161162b9190613b17565b6116359190613b2e565b601a546001600160a01b03166000908152600a602052604090205490915061165e908290613a6e565b601a80546001600160a01b039081166000908152600a60205260409020929092555461168e911661dead83612282565b601a60009054906101000a90046001600160a01b03166001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156116de57600080fd5b505af11580156116f2573d6000803e3d6000fd5b50505050505b565b3360009081526016602052604090205460ff166117295760405162461bcd60e51b8152600401610da590613a39565b60005b825181101561133257816010600085848151811061174c5761174c613a81565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff19169115159190911790558061178881613a97565b91505061172c565b3360009081526016602052604090205460ff166117bf5760405162461bcd60e51b8152600401610da590613a39565b602180546001600160a01b0319166001600160a01b0392909216919091179055565b3360009081526016602052604090205460ff166118105760405162461bcd60e51b8152600401610da590613a39565b600195909555600493909355600691909155600255600355600555565b600080600061183a611337565b601a546040516370a0823160e01b81526001600160a01b0391821660048201529295509093507f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c16906370a0823190602401602060405180830381865afa1580156118a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118cd9190613b50565b9050909192565b3360009081526016602052604090205460ff1661191b5760405162461bcd60e51b81526020600482015260056024820152646e6f206f6b60d81b6044820152606401610da5565b602454601b546001600160a01b03166000908152600a60205260408120549091612710916119499190613b17565b6119539190613b2e565b601b546001600160a01b03166000908152600a602052604090205490915061197c908290613a6e565b601b80546001600160a01b039081166000908152600a6020526040902092909255546119ac911661dead83612282565b601b60009054906101000a90046001600160a01b03166001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156119fc57600080fd5b505af1158015611a10573d6000803e3d6000fd5b50505050600160236000610e1042611a289190613b2e565b81526020810191909152604001600020805460ff191691151591909117905550565b6000546001600160a01b03163314611a745760405162461bcd60e51b8152600401610da590613a00565b6001600160a01b03919091166000908152601060205260409020805460ff1916911515919091179055565b60258181548110611aaf57600080fd5b6000918252602090912001546001600160a01b0316905081565b3360009081526016602052604090205460ff16611af85760405162461bcd60e51b8152600401610da590613a39565b6000601955565b6000546001600160a01b03163314611b295760405162461bcd60e51b8152600401610da590613a00565b6001600160a01b038116611b645760405162461bcd60e51b815260206004820152600260248201526106e360f41b6044820152606401610da5565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611be95760405162461bcd60e51b8152600401610da590613a00565b602b55565b6000806000611bfd85856122fa565b6040516bffffffffffffffffffffffff19606084811b8216602084015283901b1660348201529193509150869060480160405160208183030381529060405280519060200120604051602001611ca49291906001600160f81b0319815260609290921b6bffffffffffffffffffffffff1916600183015260158201527efb7f630766e6a796048ea87d01acd3068e8ff67d078148a3fa3f4a84f69bd5603582015260550190565b60408051601f1981840301815291905280516020909101209695505050505050565b6001600160a01b038381166000818152600b602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b03831660009081526011602052604090205460ff161580611d6857506001600160a01b03831660009081526010602052604090205460ff165b611da85760405162461bcd60e51b81526020600482015260116024820152706e6f742076616c6964206164647265737360781b6044820152606401610da5565b6001600160a01b0383166000908152600a602052604090205481811015611e055760405162461bcd60e51b81526020600482015260116024820152701b9bdd08195b9bdd59da08185b5bdd5b9d607a1b6044820152606401610da5565b6001600160a01b03841660009081526010602052604081205460ff16158015611e4757506001600160a01b03841660009081526010602052604090205460ff16155b15611e50575060015b601b5460009081906001600160a01b0388811691161480611e7e5750601b546001600160a01b038781169116145b15611ece57601b546001600160a01b0390811690871603611ea857611ea16123ef565b9150612024565b601b546001600160a01b0390811690881603611ec957611ec6612512565b90505b612024565b601a546000906001600160a01b038881169116148015611efd57503360009081526015602052604090205460ff165b8015611f115750326001600160a01b038916145b15611f8d57611f1f86612635565b90508015611f8d576001600160a01b03881660009081526010602052604090205460ff16611f845760405162461bcd60e51b81526020600482015260126024820152716f6e6c79207768697465206164647265737360701b6044820152606401610da5565b60019250600093505b601a546000906001600160a01b038a81169116148015611fbb57506013546001600160a01b03898116911614155b15611fd057611fc9876126a0565b9050611ff2565b6013546001600160a01b03908116908a1603611ff257611fef876127da565b90505b8015612021576001600160a01b0388166000908152601060205260409020546001935060ff1661202157600194505b50505b60195460000361217557601a546001600160a01b03888116911614806120575750601c546001600160a01b038881169116145b801561207c57506001600160a01b03861660009081526010602052604090205460ff16155b156120a9576001600160a01b0386166000908152601160205260409020805460ff19166001179055612175565b601b546001600160a01b0388811691161480156120df57506001600160a01b03861660009081526010602052604090205460ff16155b1561210c576001600160a01b0386166000908152601160205260409020805460ff19166001179055612175565b601b546001600160a01b03878116911614801561214257506001600160a01b03871660009081526010602052604090205460ff16155b801561214c575081155b15612175576001600160a01b0387166000908152601160205260409020805460ff191660011790555b6001600160a01b03871660009081526014602052604090205460ff16806121b457506001600160a01b03861660009081526014602052604090205460ff165b1561226b57601954600003612202576001600160a01b03871660009081526010602052604090205460ff1680156121f85750601a546001600160a01b038781169116145b1561220257436019555b6001600160a01b03871660009081526010602052604090205460ff1615801561224457506001600160a01b03861660009081526010602052604090205460ff16155b1561226b5760185460000361226b5760195460001080156122625750815b61226b57600080fd5b61227987878786858761288c565b50505050505050565b6001600160a01b0382166000908152600a60205260409020546122a6908290613b69565b6001600160a01b038084166000818152600a602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611d1b9085815260200190565b600080826001600160a01b0316846001600160a01b03160361236a5760405162461bcd60e51b815260206004820152602360248201527f50616e63616b654c6962726172793a204944454e544943414c5f41444452455360448201526253455360e81b6064820152608401610da5565b826001600160a01b0316846001600160a01b03161061238a57828461238d565b83835b90925090506001600160a01b0382166123e85760405162461bcd60e51b815260206004820152601c60248201527f50616e63616b654c6962726172793a205a45524f5f41444452455353000000006044820152606401610da5565b9250929050565b601b5460408051630240bc6b60e21b815290516000926001600160a01b031691839182918491630902f1ac916004808201926060929091908290030181865afa158015612440573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124649190613ac7565b50601d546001600160701b039283169450911691506001600160a01b0316600030821015612493575082612496565b50815b6040516370a0823160e01b81526001600160a01b038681166004830152600091908416906370a0823190602401602060405180830381865afa1580156124e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125049190613b50565b919091119695505050505050565b601b5460408051630240bc6b60e21b815290516000926001600160a01b031691839182918491630902f1ac916004808201926060929091908290030181865afa158015612563573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125879190613ac7565b50601d546001600160701b039283169450911691506001600160a01b03166000308210156125b65750826125b9565b50815b6040516370a0823160e01b81526001600160a01b038681166004830152600091908416906370a0823190602401602060405180830381865afa158015612603573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126279190613b50565b909110159695505050505050565b60008060008061264361182d565b9250925092506000808411801561265a5750600083115b15612677578261266a8588613b17565b6126749190613b2e565b90505b6126818185613b69565b82106126975761269382878686612c4d565b5094505b50505050919050565b6000806000806126ae61182d565b9250925092508281101561277457601a546001600160a01b03166000908152600a60205260409020546126e2908690613a6e565b601a60009054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612735573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127599190613b50565b6127639087613b17565b61276d9190613b2e565b93506127d2565b601b54600160a01b900460ff16156127d257600080841180156127975750600083115b15612697576127a68684613a6e565b6127b08588613b17565b6127ba9190613b2e565b90506127c68482613b69565b82101561269757600080fd5b505050919050565b60008060006127e761182d565b925050915081811161288557601a546001600160a01b03166000818152600a60209081526040918290205482516318160ddd60e01b815292519093926318160ddd9260048083019391928290030181865afa15801561284a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061286e9190613b50565b6128789086613b17565b6128829190613b2e565b92505b5050919050565b6001600160a01b0386166000908152600a60205260409020546128af8582613a6e565b6001600160a01b0388166000908152600a602052604081208290559091508080808080808a15612a5357891561293b576127106001548d6128f09190613b17565b6128fa9190613b2e565b96506127106006548d61290d9190613b17565b6129179190613b2e565b95506127106004548d61292a9190613b17565b6129349190613b2e565b94506129fa565b881561294f5761294a8e613036565b6129fa565b6001600160a01b038e1660009081526014602052604090205460ff161561298557600192506127106001548d6128f09190613b17565b6001600160a01b038d1660009081526014602052604090205460ff16156129f557600193506127106002548d6129bb9190613b17565b6129c59190613b2e565b96506127106005548d6129d89190613b17565b6129e29190613b2e565b95506127106003548d61292a9190613b17565b600191505b612a048688613b69565b90508015612a5357612a178e3083612282565b306000908152600a602052604090205460175460ff16158015612a375750845b8015612a435750600081115b15612a5157612a5181613107565b505b8380612a5c5750815b15612bd95760236000612a71610e1042613b2e565b815260208101919091526040016000205460ff16158015612aaa5750601a546001600160a01b03166000908152600a6020526040812054115b15612bd957601a546001600160a01b03166000908152600a602052604081205461271090612ad9906032613b17565b612ae39190613b2e565b601a546001600160a01b03166000908152600a6020526040902054909150612b0c908290613a6e565b601a80546001600160a01b039081166000908152600a602052604090209290925554612b3c911661dead83612282565b601a60009054906101000a90046001600160a01b03166001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612b8c57600080fd5b505af1158015612ba0573d6000803e3d6000fd5b50505050600160236000610e1042612bb89190613b2e565b81526020810191909152604001600020805460ff1916911515919091179055505b612be4602954613326565b80600754612bf29190613b69565b600755600854612c03908790613b69565b600855612c108582613b69565b90508415612c2757612c228e86613655565b600094505b612c3d8e8e838f612c389190613a6e565b612282565b5050505050505050505050505050565b6000806000601a60009054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ca5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cc99190613b50565b90506000601360009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d20573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d449190613b7c565b6001600160a01b031663017e7e586040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d81573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612da59190613b7c565b601a5460408051637464fc3d60e01b815290519293506001600160a01b0380851615159360009390911691637464fc3d9160048083019260209291908290030181865afa158015612dfa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e1e9190613b50565b90508115612fbc578015612fbc576000612e40612e3b898b613b17565b613666565b90506000612e4d83613666565b905080821115612fb95760135460009081906001600160a01b03167310ed43c718714eb63d5aa57b78b54704e256024d1901612ecb57612e8d8385613a6e565b612e979089613b17565b612ea2906008613b17565b9150612eaf836008613b17565b612eba856011613b17565b612ec49190613b69565b9050612f97565b6013546001600160a01b031673d99d1c33f9fc3444f8101754abc46c52416550d01901612f1457612efc8385613a6e565b612f069089613b17565b915082612eba856003613b17565b6013546001600160a01b031673e9d6f80028671279a28790bb4007b10b0595def01901612f6857612f458385613a6e565b612f4f9089613b17565b612f5a906003613b17565b915082612eba856005613b17565b612f728385613a6e565b612f7c9089613b17565b915082612f8a856005613b17565b612f949190613b69565b90505b612fa18183613b2e565b98508815612fb657612fb38989613b69565b97505b50505b50505b6000612fc8898c613a6e565b905084600003612ff3576103e8612fe2612e3b8c84613b17565b612fec9190613a6e565b9650613028565b613025896130018784613b17565b61300b9190613b2e565b89613016888e613b17565b6130209190613b2e565b6136d6565b96505b505050505094509492505050565b6001600160a01b03811660009081526026602052604081205490036131045760255415806130955750806001600160a01b0316602560008154811061307d5761307d613a81565b6000918252602090912001546001600160a01b031614155b1561310457803b80156130a6575050565b50602580546001600160a01b0383166000818152602660205260408120839055600183018455929092527f401968ff42a154441da5f6c4c935ac46b8671f0e062baaa62a7545ba53bb6e4c0180546001600160a01b03191690911790555b50565b6017805460ff19166001179055801561331957604080516002808252606082018352600092602083019080368337019050509050308160008151811061314f5761314f613a81565b6001600160a01b039283166020918202929092010152601d5482519116908290600190811061318057613180613a81565b6001600160a01b039283166020918202929092010152601354601254604051635c11d79560e01b815291831692635c11d795926131cc9287926000928892909116904290600401613b99565b600060405180830381600087803b1580156131e657600080fd5b505af11580156131fa573d6000803e3d6000fd5b50505050600060085411156132aa57601254601d5460085460075460205460215460405163172a36e960e11b81526001600160a01b0395861660048201526024810194909452604484019290925283166064830152821660848201523060a4820152911690632e546dd29060c401600060405180830381600087803b15801561328257600080fd5b505af1158015613296573d6000803e3d6000fd5b505060006008819055600755506133179050565b601254601d54604051631748b61760e31b81526001600160a01b03918216600482015230602482015291169063ba45b0b890604401600060405180830381600087803b1580156132f957600080fd5b505af115801561330d573d6000803e3d6000fd5b5050600060075550505b505b506017805460ff19169055565b6018546000036133335750565b43602d54602c546133449190613b69565b111561334d5750565b602b54601d546040516370a0823160e01b81523060048201526001600160a01b0390911690829082906370a0823190602401602060405180830381865afa15801561339c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133c09190613b50565b10156133cb57505050565b601b54604080516318160ddd60e01b815290516001600160a01b039092169160009183916318160ddd916004808201926020929091908290030181865afa15801561341a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061343e9190613b50565b90508060000361344f575050505050565b602554600090819081908180805a602854600954919250905b8d8510801561347657508584105b156136415785602a541061348a576000602a555b6025602a548154811061349f5761349f613a81565b60009182526020808320909101546001600160a01b0316808352602790915260409091205490995060ff161580156134f55750806134f28a6001600160a01b03166000908152600a602052604090205490565b10155b156135ff576040516370a0823160e01b81526001600160a01b038a811660048301528c16906370a0823190602401602060405180830381865afa158015613540573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135649190613b50565b97508188106135ff5789613578898f613b17565b6135829190613b2e565b965086156135ff5760405163a9059cbb60e01b81526001600160a01b038a81166004830152602482018990528d169063a9059cbb906044016020604051808303816000875af11580156135d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135fd9190613a1c565b505b5a61360a9084613a6e565b6136149086613b69565b94505a602a8054919450600061362983613a97565b9190505550838061363990613a97565b945050613468565b505043602c55505050505050505050505050565b6136628261dead83612282565b5050565b600060038211156136c75750806000613680600283613b2e565b61368b906001613b69565b90505b818110156136c1579050806002816136a68186613b2e565b6136b09190613b69565b6136ba9190613b2e565b905061368e565b50919050565b81156136d1575060015b919050565b60008183106136e557816136e7565b825b9392505050565b6001600160a01b038116811461310457600080fd5b80356136d1816136ee565b60006020828403121561372057600080fd5b81356136e7816136ee565b600060208083528351808285015260005b818110156137585785810183015185820160400152820161373c565b506000604082860101526040601f19601f8301168501019250505092915050565b6000806040838503121561378c57600080fd5b8235613797816136ee565b946020939093013593505050565b6000806000606084860312156137ba57600080fd5b83356137c5816136ee565b925060208401356137d5816136ee565b929592945050506040919091013590565b801515811461310457600080fd5b80356136d1816137e6565b6000806040838503121561381257600080fd5b823561381d816136ee565b9150602083013561382d816137e6565b809150509250929050565b60006020828403121561384a57600080fd5b5035919050565b60006020828403121561386357600080fd5b81356136e7816137e6565b6000806040838503121561388157600080fd5b823561388c816136ee565b9150602083013561382d816136ee565b634e487b7160e01b600052604160045260246000fd5b600080604083850312156138c557600080fd5b823567ffffffffffffffff808211156138dd57600080fd5b818501915085601f8301126138f157600080fd5b81356020828211156139055761390561389c565b8160051b604051601f19603f8301168101818110868211171561392a5761392a61389c565b60405292835281830193508481018201928984111561394857600080fd5b948201945b8386101561396d5761395e86613703565b8552948201949382019361394d565b965061397c90508782016137f4565b9450505050509250929050565b60008060008060008060c087890312156139a257600080fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b600181811c908216806139e057607f821691505b6020821081036136c157634e487b7160e01b600052602260045260246000fd5b602080825260029082015261216f60f01b604082015260600190565b600060208284031215613a2e57600080fd5b81516136e7816137e6565b60208082526005908201526434b9b2b93960d91b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b81810381811115610d7557610d75613a58565b634e487b7160e01b600052603260045260246000fd5b600060018201613aa957613aa9613a58565b5060010190565b80516001600160701b03811681146136d157600080fd5b600080600060608486031215613adc57600080fd5b613ae584613ab0565b9250613af360208501613ab0565b9150604084015163ffffffff81168114613b0c57600080fd5b809150509250925092565b8082028115828204841417610d7557610d75613a58565b600082613b4b57634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215613b6257600080fd5b5051919050565b80820180821115610d7557610d75613a58565b600060208284031215613b8e57600080fd5b81516136e7816136ee565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015613be95784516001600160a01b031683529383019391830191600101613bc4565b50506001600160a01b0396909616606085015250505060800152939250505056fea2646970667358221220bd47ce0a9b7270a430bdff256b22c204705f387207b3b378f88b7a7ae61e25ca64736f6c63430008120033

Deployed Bytecode Sourcemap

5404:24501:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6339:44;;;;;;;;;;-1:-1:-1;6339:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;706:14:1;;699:22;681:41;;669:2;654:18;6339:44:0;;;;;;;;6114:45;;;;;;;;;;-1:-1:-1;6114:45:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;6687:31;;;;;;;;;;-1:-1:-1;6687:31:0;;;;-1:-1:-1;;;6687:31:0;;;;;;9366:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;10025:151::-;;;;;;;;;;-1:-1:-1;10025:151:0;;;;;:::i;:::-;;:::i;6619:22::-;;;;;;;;;;-1:-1:-1;6619:22:0;;;;-1:-1:-1;;;;;6619:22:0;;;;;;-1:-1:-1;;;;;1770:32:1;;;1752:51;;1740:2;1725:18;6619:22:0;1606:203:1;25613:137:0;;;;;;;;;;-1:-1:-1;25613:137:0;;;;;:::i;:::-;;:::i;:::-;;27290:161;;;;;;;;;;-1:-1:-1;27290:161:0;;;;;:::i;:::-;;:::i;9501:87::-;;;;;;;;;;-1:-1:-1;9570:12:0;;9501:87;;;3064:25:1;;;3052:2;3037:18;9501:87:0;2918:177:1;23418:30:0;;;;;;;;;;;;;;;;6249:31;;;;;;;;;;-1:-1:-1;6249:31:0;;;;-1:-1:-1;;;;;6249:31:0;;;25375:113;;;;;;;;;;-1:-1:-1;25375:113:0;;;;;:::i;:::-;;:::i;10184:336::-;;;;;;;;;;-1:-1:-1;10184:336:0;;;;;:::i;:::-;;:::i;15950:132::-;;;;;;;;;;-1:-1:-1;15950:132:0;;;;;:::i;:::-;;:::i;26433:49::-;;;;;;;;;;-1:-1:-1;26433:49:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;9094:79;;;;;;;;;;-1:-1:-1;9158:9:0;;9094:79;;9158:9;;;;3469:36:1;;3457:2;3442:18;9094:79:0;3327:184:1;23455:121:0;;;;;;;;;;-1:-1:-1;23455:121:0;;;;;:::i;:::-;;:::i;6287:45::-;;;;;;;;;;-1:-1:-1;6287:45:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;6587:25;;;;;;;;;;-1:-1:-1;6587:25:0;;;;-1:-1:-1;;;;;6587:25:0;;;13664:132;;;;;;;;;;;;;:::i;25798:94::-;;;;;;;;;;-1:-1:-1;25798:94:0;;;;;:::i;:::-;;:::i;27767:38::-;;;;;;;;;;;;;;;;6513:30;;;;;;;;;;;;;;;;26047:138;;;;;;;;;;-1:-1:-1;26047:138:0;;;;;:::i;:::-;;:::i;6166:42::-;;;;;;;;;;-1:-1:-1;6166:42:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;27640:29;;;;;;;;;;;;;;;;24890:110;;;;;;;;;;-1:-1:-1;24890:110:0;;;;;:::i;:::-;;:::i;25900:139::-;;;;;;;;;;;;;:::i;5847:44::-;;;;;;;;;;-1:-1:-1;5847:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;9598:111;;;;;;;;;;-1:-1:-1;9598:111:0;;;;;:::i;:::-;-1:-1:-1;;;;;9683:18:0;9656:7;9683:18;;;:9;:18;;;;;;;9598:111;2348:148;;;;;;;;;;;;;:::i;10711:164::-;;;;;;;;;;-1:-1:-1;10711:164:0;;;;;:::i;:::-;;:::i;26491:104::-;;;;;;;;;;-1:-1:-1;26569:11:0;:18;26491:104;;25008:230;;;;;;;;;;-1:-1:-1;25008:230:0;;;;;:::i;:::-;;:::i;27066:62::-;;;;;;;;;;;;;;;;18879:405;;;;;;;;;;;;;:::i;:::-;;;;5842:25:1;;;5898:2;5883:18;;5876:34;;;;5815:18;18879:405:0;5668:248:1;5705:35:0;;;;;;;;;;;;;;;;8956:79;;;;;;;;;;-1:-1:-1;8999:7:0;2231:6;-1:-1:-1;;;;;2231:6:0;8956:79;;27724:36;;;;;;;;;;;;;;;;27459:173;;;;;;;;;;-1:-1:-1;27459:173:0;;;;;:::i;:::-;;:::i;9230:83::-;;;;;;;;;;;;;:::i;27178:104::-;;;;;;;;;;-1:-1:-1;27178:104:0;;;;;:::i;:::-;;:::i;6550:30::-;;;;;;;;;;;;;;;;29789:113;;;;;;;;;;-1:-1:-1;29789:113:0;;;;;:::i;:::-;;:::i;6390:35::-;;;;;;;;;;-1:-1:-1;6390:35:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;6648:30;;;;;;;;;;;;;;;25251:116;;;;;;;;;;-1:-1:-1;25251:116:0;;;;;:::i;:::-;;:::i;9717:157::-;;;;;;;;;;-1:-1:-1;9717:157:0;;;;;:::i;:::-;;:::i;25496:109::-;;;;;;;;;;-1:-1:-1;25496:109:0;;;;;:::i;:::-;;:::i;23588:421::-;;;;;;;;;;;;;:::i;24646:236::-;;;;;;;;;;-1:-1:-1;24646:236:0;;;;;:::i;:::-;;:::i;26193:140::-;;;;;;;;;;-1:-1:-1;26193:140:0;;;;;:::i;:::-;;:::i;16090:379::-;;;;;;;;;;-1:-1:-1;16090:379:0;;;;;:::i;:::-;;:::i;18662:209::-;;;;;;;;;;;;;:::i;:::-;;;;6651:25:1;;;6707:2;6692:18;;6685:34;;;;6735:18;;;6728:34;6639:2;6624:18;18662:209:0;6449:319:1;24015:386:0;;;;;;;;;;;;;:::i;15780:164::-;;;;;;;;;;-1:-1:-1;15870:6:0;;15878:10;;15890:11;;15903:7;;15911:11;;15923:12;;15780:164;;;7060:25:1;;;7116:2;7101:18;;7094:34;;;;7144:18;;;7137:34;;;;7202:2;7187:18;;7180:34;7245:3;7230:19;;7223:35;7289:3;7274:19;;7267:35;7047:3;7032:19;15780:164:0;6773:535:1;24533:105:0;;;;;;;;;;-1:-1:-1;24533:105:0;;;;;:::i;:::-;-1:-1:-1;;;;;24611:19:0;24588:4;24611:19;;;:13;:19;;;;;;;;;24533:105;24409:116;;;;;;;;;;-1:-1:-1;24409:116:0;;;;;:::i;:::-;;:::i;27676:41::-;;;;;;;;;;;;;;;;9882:135;;;;;;;;;;-1:-1:-1;9882:135:0;;;;;:::i;:::-;-1:-1:-1;;;;;9982:18:0;;;9955:7;9982:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;9882:135;26341:28;;;;;;;;;;-1:-1:-1;26341:28:0;;;;;:::i;:::-;;:::i;13522:136::-;;;;;;;;;;;;;:::i;27135:34::-;;;;;;;;;;;;;;;;26376:50;;;;;;;;;;-1:-1:-1;26376:50:0;;;;;:::i;:::-;;;;;;;;;;;;;;2504:208;;;;;;;;;;-1:-1:-1;2504:208:0;;;;;:::i;:::-;;:::i;29673:108::-;;;;;;;;;;-1:-1:-1;29673:108:0;;;;;:::i;:::-;;:::i;9366:79::-;9405:13;9434:5;9427:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9366:79;:::o;10025:151::-;10092:4;10109:37;10118:10;10130:7;10139:6;10109:8;:37::i;:::-;-1:-1:-1;10164:4:0;10025:151;;;;;:::o;25613:137::-;2293:6;;-1:-1:-1;;;;;2293:6:0;2303:10;2293:20;2285:35;;;;-1:-1:-1;;;2285:35:0;;;;;;;:::i;:::-;;;;;;;;;25706:36:::1;::::0;-1:-1:-1;;;25706:36:0;;-1:-1:-1;;;;;8220:32:1;;;25706:36:0::1;::::0;::::1;8202:51:1::0;8269:18;;;8262:34;;;25706:22:0;::::1;::::0;::::1;::::0;8175:18:1;;25706:36:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;25613:137:::0;;;:::o;27290:161::-;27380:10;27374:17;;;;:5;:17;;;;;;;;27366:34;;;;-1:-1:-1;;;27366:34:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27411:23:0;;;;;;;;:17;:23;;;;;:32;;-1:-1:-1;;27411:32:0;;;;;;;;;;27290:161::o;25375:113::-;2293:6;;-1:-1:-1;;;;;2293:6:0;2303:10;2293:20;2285:35;;;;-1:-1:-1;;;2285:35:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25453:18:0;;;::::1;;::::0;;;:12:::1;:18;::::0;;;;:27;;-1:-1:-1;;25453:27:0::1;::::0;::::1;;::::0;;;::::1;::::0;;25375:113::o;10184:336::-;10282:4;10299:36;10309:6;10317:9;10328:6;10299:9;:36::i;:::-;-1:-1:-1;;;;;10350:19:0;;6502:1;10350:19;;;:11;:19;;;;;;;;10370:10;10350:31;;;;;;;;-1:-1:-1;;10350:38:0;10346:145;;-1:-1:-1;;;;;10439:19:0;;;;;;:11;:19;;;;;;;;10459:10;10439:31;;;;;;;;:40;;10473:6;;10439:40;:::i;:::-;-1:-1:-1;;;;;10405:19:0;;;;;;:11;:19;;;;;;;;10425:10;10405:31;;;;;;;:74;10346:145;-1:-1:-1;10508:4:0;10184:336;;;;;:::o;15950:132::-;16024:10;16018:17;;;;:5;:17;;;;;;;;16010:33;;;;-1:-1:-1;;;16010:33:0;;;;;;9357:2:1;9339:21;;;9396:1;9376:18;;;9369:29;-1:-1:-1;;;9429:2:1;9414:18;;9407:34;9473:2;9458:18;;9155:327;16010:33:0;-1:-1:-1;;;;;16054:13:0;;;;;;;;:5;:13;;;;;:18;;-1:-1:-1;;16054:18:0;;;;;;;;;;15950:132::o;23455:121::-;23524:10;23518:17;;;;:5;:17;;;;;;;;23510:31;;;;-1:-1:-1;;;23510:31:0;;9689:2:1;23510:31:0;;;9671:21:1;9728:1;9708:18;;;9701:29;-1:-1:-1;;;9746:18:1;;;9739:32;9788:18;;23510:31:0;9487:325:1;23510:31:0;23552:11;:16;23455:121::o;13664:132::-;13726:10;13720:17;;;;:5;:17;;;;;;;;13712:34;;;;-1:-1:-1;;;13712:34:0;;;;;;;:::i;:::-;13776:12;13758:15;:30;13664:132::o;25798:94::-;2293:6;;-1:-1:-1;;;;;2293:6:0;2303:10;2293:20;2285:35;;;;-1:-1:-1;;;2285:35:0;;;;;;;:::i;:::-;25863:12:::1;:21:::0;;;::::1;;-1:-1:-1::0;;;25863:21:0::1;-1:-1:-1::0;;;;25863:21:0;;::::1;::::0;;;::::1;::::0;;25798:94::o;26047:138::-;26120:10;26114:17;;;;:5;:17;;;;;;;;26106:34;;;;-1:-1:-1;;;26106:34:0;;;;;;;:::i;:::-;26151:13;:26;;-1:-1:-1;;;;;;26151:26:0;-1:-1:-1;;;;;26151:26:0;;;;;;;;;;26047:138::o;24890:110::-;2293:6;;-1:-1:-1;;;;;2293:6:0;2303:10;2293:20;2285:35;;;;-1:-1:-1;;;2285:35:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24967:16:0;;;::::1;;::::0;;;:10:::1;:16;::::0;;;;:25;;-1:-1:-1;;24967:25:0::1;::::0;::::1;;::::0;;;::::1;::::0;;24890:110::o;25900:139::-;2293:6;;-1:-1:-1;;;;;2293:6:0;2303:10;2293:20;2285:35;;;;-1:-1:-1;;;2285:35:0;;;;;;;:::i;:::-;25963:15:::1;::::0;25958:20;25950:40:::1;;;::::0;-1:-1:-1;;;25950:40:0;;10019:2:1;25950:40:0::1;::::0;::::1;10001:21:1::0;10058:1;10038:18;;;10031:29;-1:-1:-1;;;10076:18:1;;;10069:37;10123:18;;25950:40:0::1;9817:330:1::0;25950:40:0::1;26019:12;26001:15;:30:::0;25900:139::o;2348:148::-;2293:6;;-1:-1:-1;;;;;2293:6:0;2303:10;2293:20;2285:35;;;;-1:-1:-1;;;2285:35:0;;;;;;;:::i;:::-;2455:1:::1;2439:6:::0;;2418:40:::1;::::0;-1:-1:-1;;;;;2439:6:0;;::::1;::::0;2418:40:::1;::::0;2455:1;;2418:40:::1;2486:1;2469:19:::0;;-1:-1:-1;;;;;;2469:19:0::1;::::0;;2348:148::o;10711:164::-;10795:10;10789:17;;;;:5;:17;;;;;;;;10781:31;;;;-1:-1:-1;;;10781:31:0;;9689:2:1;10781:31:0;;;9671:21:1;9728:1;9708:18;;;9701:29;-1:-1:-1;;;9746:18:1;;;9739:32;9788:18;;10781:31:0;9487:325:1;10781:31:0;10823:9;:18;;-1:-1:-1;;;;;10823:18:0;;;-1:-1:-1;;;;;;10823:18:0;;;;;;;10852:6;:15;;;;;;;;;;;10711:164::o;25008:230::-;25106:10;25100:17;;;;:5;:17;;;;;;;;25092:34;;;;-1:-1:-1;;;25092:34:0;;;;;;;:::i;:::-;25142:6;25137:94;25158:4;:11;25154:1;:15;25137:94;;;25213:6;25191:10;:19;25202:4;25207:1;25202:7;;;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;25191:19:0;;;;;;;;;;;-1:-1:-1;25191:19:0;:28;;-1:-1:-1;;25191:28:0;;;;;;;;;;25171:3;;;;:::i;:::-;;;;25137:94;;;;25008:230;;:::o;18879:405::-;18925:14;18941:13;18966:18;18997:9;;;;;;;;;-1:-1:-1;;;;;18997:9:0;18966:41;;19019:7;19028:10;19043:8;-1:-1:-1;;;;;19043:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;19018:47:0;;;;-1:-1:-1;19018:47:0;;-1:-1:-1;19097:5:0;19138:4;-1:-1:-1;;;;;19117:26:0;;;19113:164;;;19169:2;19160:11;;19194:2;19186:10;;19113:164;;;19238:2;19229:11;;19263:2;19255:10;;19113:164;18955:329;;;;18879:405;;:::o;27459:173::-;2293:6;;-1:-1:-1;;;;;2293:6:0;2303:10;2293:20;2285:35;;;;-1:-1:-1;;;2285:35:0;;;;;;;:::i;:::-;27549:6:::1;27536:9;:19;;:43;;;;;27572:7;27559:9;:20;;27536:43;27528:63;;;::::0;-1:-1:-1;;;27528:63:0;;11274:2:1;27528:63:0::1;::::0;::::1;11256:21:1::0;11313:1;11293:18;;;11286:29;-1:-1:-1;;;11331:18:1;;;11324:37;11378:18;;27528:63:0::1;11072:330:1::0;27528:63:0::1;27602:10;:22:::0;27459:173::o;9230:83::-;9271:13;9300:7;9293:14;;;;;:::i;27178:104::-;2293:6;;-1:-1:-1;;;;;2293:6:0;2303:10;2293:20;2285:35;;;;-1:-1:-1;;;2285:35:0;;;;;;;:::i;:::-;27250:15:::1;:24:::0;27178:104::o;29789:113::-;2293:6;;-1:-1:-1;;;;;2293:6:0;2303:10;2293:20;2285:35;;;;-1:-1:-1;;;2285:35:0;;;;;;;:::i;:::-;29865:20:::1;:29:::0;29789:113::o;25251:116::-;2293:6;;-1:-1:-1;;;;;2293:6:0;2303:10;2293:20;2285:35;;;;-1:-1:-1;;;2285:35:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25331:19:0;;;::::1;;::::0;;;:13:::1;:19;::::0;;;;:28;;-1:-1:-1;;25331:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;25251:116::o;9717:157::-;9787:4;9804:40;9814:10;9826:9;9837:6;9804:9;:40::i;25496:109::-;25567:30;;-1:-1:-1;;;;;25567:22:0;;;:30;;;;;25590:6;;25567:30;;;;25590:6;25567:22;:30;;;;;;;;;;;;;;;;;;;23588:421;23641:10;23635:17;;;;:5;:17;;;;;;;;23627:34;;;;-1:-1:-1;;;23627:34:0;;11609:2:1;23627:34:0;;;11591:21:1;11648:1;11628:18;;;11621:29;-1:-1:-1;;;11666:18:1;;;11659:35;11711:18;;23627:34:0;11407:328:1;23627:34:0;23686:9;;-1:-1:-1;;;;;23686:9:0;23697:1;23676:20;;;:9;:20;;;;;;:22;23673:301;;23755:11;;23742:9;;-1:-1:-1;;;;;23742:9:0;23714:15;23732:20;;;:9;:20;;;;;;23714:15;;23769:5;;23732:34;;23755:11;23732:34;:::i;:::-;:42;;;;:::i;:::-;23826:9;;-1:-1:-1;;;;;23826:9:0;23816:20;;;;:9;:20;;;;;;23714:60;;-1:-1:-1;23816:30:0;;23714:60;;23816:30;:::i;:::-;23803:9;;;-1:-1:-1;;;;;23803:9:0;;;23793:20;;;;:9;:20;;;;;:53;;;;23879:9;23865:50;;23879:9;23898:6;23907:7;23865:13;:50::i;:::-;23944:9;;;;;;;;;-1:-1:-1;;;;;23944:9:0;-1:-1:-1;;;;;23934:25:0;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23699:275;23673:301;23588:421::o;24646:236::-;24747:10;24741:17;;;;:5;:17;;;;;;;;24733:34;;;;-1:-1:-1;;;24733:34:0;;;;;;;:::i;:::-;24783:6;24778:97;24799:4;:11;24795:1;:15;24778:97;;;24857:6;24832:13;:22;24846:4;24851:1;24846:7;;;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;24832:22:0;;;;;;;;;;;-1:-1:-1;24832:22:0;:31;;-1:-1:-1;;24832:31:0;;;;;;;;;;24812:3;;;;:::i;:::-;;;;24778:97;;26193:140;26267:10;26261:17;;;;:5;:17;;;;;;;;26253:34;;;;-1:-1:-1;;;26253:34:0;;;;;;;:::i;:::-;26298:14;:27;;-1:-1:-1;;;;;;26298:27:0;-1:-1:-1;;;;;26298:27:0;;;;;;;;;;26193:140::o;16090:379::-;16241:10;16235:17;;;;:5;:17;;;;;;;;16227:34;;;;-1:-1:-1;;;16227:34:0;;;;;;;:::i;:::-;16272:6;:16;;;;16299:10;:24;;;;16334:11;:26;;;;16371:7;:18;16400:11;:24;16435:12;:26;16090:379::o;18662:209::-;18707:14;18723:13;18738:20;18788:15;:13;:15::i;:::-;18853:9;;18829:34;;-1:-1:-1;;;18829:34:0;;-1:-1:-1;;;;;18853:9:0;;;18829:34;;;1752:51:1;18770:33:0;;-1:-1:-1;18770:33:0;;-1:-1:-1;18836:5:0;18829:23;;;;1725:18:1;;18829:34:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18814:49;;18662:209;;;:::o;24015:386::-;24069:10;24063:17;;;;:5;:17;;;;;;;;24055:34;;;;-1:-1:-1;;;24055:34:0;;11609:2:1;24055:34:0;;;11591:21:1;11648:1;11628:18;;;11621:29;-1:-1:-1;;;11666:18:1;;;11659:35;11711:18;;24055:34:0;11407:328:1;24055:34:0;24137:11;;24127:6;;-1:-1:-1;;;;;24127:6:0;24102:12;24117:17;;;:9;:17;;;;;;24102:12;;24151:5;;24117:31;;24137:11;24117:31;:::i;:::-;:39;;;;:::i;:::-;24205:6;;-1:-1:-1;;;;;24205:6:0;24195:17;;;;:9;:17;;;;;;24102:54;;-1:-1:-1;24195:27:0;;24102:54;;24195:27;:::i;:::-;24185:6;;;-1:-1:-1;;;;;24185:6:0;;;24175:17;;;;:9;:17;;;;;:47;;;;24255:6;24241:47;;24255:6;24271;24280:7;24241:13;:47::i;:::-;24317:6;;;;;;;;;-1:-1:-1;;;;;24317:6:0;-1:-1:-1;;;;;24307:22:0;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24387:4;24350:7;:34;24376:7;24358:15;:25;;;;:::i;:::-;24350:34;;;;;;;;;;;-1:-1:-1;24350:34:0;:41;;-1:-1:-1;;24350:41:0;;;;;;;;;;-1:-1:-1;24015:386:0:o;24409:116::-;2293:6;;-1:-1:-1;;;;;2293:6:0;2303:10;2293:20;2285:35;;;;-1:-1:-1;;;2285:35:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24489:19:0;;;::::1;;::::0;;;:13:::1;:19;::::0;;;;:28;;-1:-1:-1;;24489:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;24409:116::o;26341:28::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;26341:28:0;;-1:-1:-1;26341:28:0;:::o;13522:136::-;13590:10;13584:17;;;;:5;:17;;;;;;;;13576:34;;;;-1:-1:-1;;;13576:34:0;;;;;;;:::i;:::-;13639:1;13623:15;:17;13522:136::o;2504:208::-;2293:6;;-1:-1:-1;;;;;2293:6:0;2303:10;2293:20;2285:35;;;;-1:-1:-1;;;2285:35:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;2593:22:0;::::1;2585:37;;;::::0;-1:-1:-1;;;2585:37:0;;12526:2:1;2585:37:0::1;::::0;::::1;12508:21:1::0;12565:1;12545:18;;;12538:29;-1:-1:-1;;;12583:18:1;;;12576:32;12625:18;;2585:37:0::1;12324:325:1::0;2585:37:0::1;2659:6;::::0;;2638:38:::1;::::0;-1:-1:-1;;;;;2638:38:0;;::::1;::::0;2659:6;::::1;::::0;2638:38:::1;::::0;::::1;2687:6;:17:::0;;-1:-1:-1;;;;;;2687:17:0::1;-1:-1:-1::0;;;;;2687:17:0;;;::::1;::::0;;;::::1;::::0;;2504:208::o;29673:108::-;2293:6;;-1:-1:-1;;;;;2293:6:0;2303:10;2293:20;2285:35;;;;-1:-1:-1;;;2285:35:0;;;;;;;:::i;:::-;29747:17:::1;:26:::0;29673:108::o;4011:487::-;4100:12;4126:14;4142;4160:26;4171:6;4179;4160:10;:26::i;:::-;4332:32;;-1:-1:-1;;12881:2:1;12877:15;;;12873:24;;4332:32:0;;;12861:37:1;12932:15;;;12928:24;12914:12;;;12907:46;4125:61:0;;-1:-1:-1;4125:61:0;-1:-1:-1;4296:7:0;;12969:12:1;;4332:32:0;;;;;;;;;;;;4322:43;;;;;;4235:251;;;;;;;;-1:-1:-1;;;;;;13351:26:1;;13414:2;13410:15;;;;-1:-1:-1;;13406:53:1;13402:1;13393:11;;13386:74;13485:2;13476:12;;13469:28;13527:66;13522:2;13513:12;;13506:88;13619:2;13610:12;;12992:636;4235:251:0;;;;-1:-1:-1;;4235:251:0;;;;;;;;;4225:262;;4235:251;4225:262;;;;;4011:487;-1:-1:-1;;;;;;4011:487:0:o;10528:177::-;-1:-1:-1;;;;;10613:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;10665:32;;3064:25:1;;;10665:32:0;;3037:18:1;10665:32:0;;;;;;;;10528:177;;;:::o;10921:2595::-;-1:-1:-1;;;;;11044:16:0;;;;;;:10;:16;;;;;;;;11043:17;;:40;;-1:-1:-1;;;;;;11064:19:0;;;;;;:13;:19;;;;;;;;11043:40;11035:70;;;;-1:-1:-1;;;11035:70:0;;13835:2:1;11035:70:0;;;13817:21:1;13874:2;13854:18;;;13847:30;-1:-1:-1;;;13893:18:1;;;13886:47;13950:18;;11035:70:0;13633:341:1;11035:70:0;-1:-1:-1;;;;;9683:18:0;;11118:15;9683:18;;;:9;:18;;;;;;11170:17;;;;11162:47;;;;-1:-1:-1;;;11162:47:0;;14181:2:1;11162:47:0;;;14163:21:1;14220:2;14200:18;;;14193:30;-1:-1:-1;;;14239:18:1;;;14232:47;14296:18;;11162:47:0;13979:341:1;11162:47:0;-1:-1:-1;;;;;11250:19:0;;11222:12;11250:19;;;:13;:19;;;;;;;;11249:20;:42;;;;-1:-1:-1;;;;;;11274:17:0;;;;;;:13;:17;;;;;;;;11273:18;11249:42;11245:89;;;-1:-1:-1;11318:4:0;11245:89;11407:6;;11346:12;;;;-1:-1:-1;;;;;11399:14:0;;;11407:6;;11399:14;;:30;;-1:-1:-1;11423:6:0;;-1:-1:-1;;;;;11417:12:0;;;11423:6;;11417:12;11399:30;11395:1164;;;11455:6;;-1:-1:-1;;;;;11455:6:0;;;11449:12;;;;11445:174;;11492:18;:16;:18::i;:::-;11482:28;;11395:1164;;11445:174;11543:6;;-1:-1:-1;;;;;11543:6:0;;;11535:14;;;;11532:87;;11582:21;:19;:21::i;:::-;11569:34;;11532:87;11395:1164;;;11698:9;;11651:22;;-1:-1:-1;;;;;11692:15:0;;;11698:9;;11692:15;:43;;;;-1:-1:-1;11724:10:0;11711:24;;;;:12;:24;;;;;;;;11692:43;:64;;;;-1:-1:-1;11739:9:0;-1:-1:-1;;;;;11739:17:0;;;11692:64;11688:355;;;11794:23;11810:6;11794:15;:23::i;:::-;11777:40;-1:-1:-1;11840:18:0;;11836:192;;-1:-1:-1;;;;;11891:19:0;;;;;;:13;:19;;;;;;;;11883:50;;;;-1:-1:-1;;;11883:50:0;;14527:2:1;11883:50:0;;;14509:21:1;14566:2;14546:18;;;14539:30;-1:-1:-1;;;14585:18:1;;;14578:48;14643:18;;11883:50:0;14325:342:1;11883:50:0;11966:4;11956:14;;12003:5;11993:15;;11836:192;12111:9;;12059:25;;-1:-1:-1;;;;;12103:17:0;;;12111:9;;12103:17;:47;;;;-1:-1:-1;12138:11:0;;-1:-1:-1;;;;;12124:26:0;;;12138:11;;12124:26;;12103:47;12099:255;;;12191:23;12207:6;12191:15;:23::i;:::-;12171:43;;12099:255;;;12256:11;;-1:-1:-1;;;;;12256:11:0;;;12240:28;;;;12236:118;;12309:29;12331:6;12309:21;:29::i;:::-;12289:49;;12236:118;12374:21;;12370:178;;-1:-1:-1;;;;;12457:17:0;;;;;;:13;:17;;;;;;12429:4;;-1:-1:-1;12457:17:0;;12452:81;;12509:4;12499:14;;12452:81;11636:923;;11395:1164;12580:15;;12575:1;:20;12571:398;;12624:9;;-1:-1:-1;;;;;12616:17:0;;;12624:9;;12616:17;;:42;;-1:-1:-1;12645:13:0;;-1:-1:-1;;;;;12637:21:0;;;12645:13;;12637:21;12616:42;12615:66;;;;-1:-1:-1;;;;;;12664:17:0;;;;;;:13;:17;;;;;;;;12663:18;12615:66;12611:347;;;-1:-1:-1;;;;;12701:14:0;;;;;;:10;:14;;;;;:21;;-1:-1:-1;;12701:21:0;12718:4;12701:21;;;12611:347;;;12756:6;;-1:-1:-1;;;;;12748:14:0;;;12756:6;;12748:14;:36;;;;-1:-1:-1;;;;;;12767:17:0;;;;;;:13;:17;;;;;;;;12766:18;12748:36;12744:214;;;-1:-1:-1;;;;;12804:14:0;;;;;;:10;:14;;;;;:21;;-1:-1:-1;;12804:21:0;12821:4;12804:21;;;12744:214;;;12857:6;;-1:-1:-1;;;;;12851:12:0;;;12857:6;;12851:12;:36;;;;-1:-1:-1;;;;;;12868:19:0;;;;;;:13;:19;;;;;;;;12867:20;12851:36;:48;;;;;12892:7;12891:8;12851:48;12847:111;;;-1:-1:-1;;;;;12919:16:0;;;;;;:10;:16;;;;;:23;;-1:-1:-1;;12919:23:0;12938:4;12919:23;;;12847:111;-1:-1:-1;;;;;12985:19:0;;;;;;:13;:19;;;;;;;;;:40;;-1:-1:-1;;;;;;13008:17:0;;;;;;:13;:17;;;;;;;;12985:40;12981:453;;;13051:15;;13046:1;:20;13042:177;;-1:-1:-1;;;;;13091:19:0;;;;;;:13;:19;;;;;;;;:38;;;;-1:-1:-1;13120:9:0;;-1:-1:-1;;;;;13114:15:0;;;13120:9;;13114:15;13091:38;13087:117;;;13172:12;13154:15;:30;13087:117;-1:-1:-1;;;;;13238:19:0;;;;;;:13;:19;;;;;;;;13237:20;:42;;;;-1:-1:-1;;;;;;13262:17:0;;;;;;:13;:17;;;;;;;;13261:18;13237:42;13233:190;;;13309:15;;13304:1;:20;13300:108;;13361:15;;13357:1;:19;:30;;;;;13380:7;13357:30;13349:39;;;;;;13446:62;13461:4;13467:2;13471:6;13479:7;13488:10;13500:7;13446:14;:62::i;:::-;11024:2492;;;;10921:2595;;;:::o;23194:218::-;-1:-1:-1;;;;;23331:13:0;;;;;;:9;:13;;;;;;:23;;23347:7;;23331:23;:::i;:::-;-1:-1:-1;;;;;23315:13:0;;;;;;;:9;:13;;;;;;;:39;;;;23375:29;;;;;;;;;;23396:7;3064:25:1;;3052:2;3037:18;;2918:177;3574:345:0;3649:14;3665;3710:6;-1:-1:-1;;;;;3700:16:0;:6;-1:-1:-1;;;;;3700:16:0;;3692:64;;;;-1:-1:-1;;;3692:64:0;;15004:2:1;3692:64:0;;;14986:21:1;15043:2;15023:18;;;15016:30;15082:34;15062:18;;;15055:62;-1:-1:-1;;;15133:18:1;;;15126:33;15176:19;;3692:64:0;14802:399:1;3692:64:0;3795:6;-1:-1:-1;;;;;3786:15:0;:6;-1:-1:-1;;;;;3786:15:0;;:53;;3824:6;3832;3786:53;;;3805:6;3813;3786:53;3767:72;;-1:-1:-1;3767:72:0;-1:-1:-1;;;;;;3858:20:0;;3850:61;;;;-1:-1:-1;;;3850:61:0;;15408:2:1;3850:61:0;;;15390:21:1;15447:2;15427:18;;;15420:30;15486;15466:18;;;15459:58;15534:18;;3850:61:0;15206:352:1;3850:61:0;3574:345;;;;;:::o;14868:444::-;14969:6;;15011:19;;;-1:-1:-1;;;15011:19:0;;;;14919:10;;-1:-1:-1;;;;;14969:6:0;;14919:10;;;;14969:6;;15011:17;;:19;;;;;;;;;;;;;;;14969:6;15011:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;15064:12:0;;-1:-1:-1;;;;;14987:43:0;;;;-1:-1:-1;14987:43:0;;;-1:-1:-1;;;;;;15064:12:0;15043:18;15132:4;15111:26;;15107:104;;;-1:-1:-1;15158:2:0;15107:104;;;-1:-1:-1;15197:2:0;15107:104;15234:44;;-1:-1:-1;;;15234:44:0;;-1:-1:-1;;;;;1770:32:1;;;15234:44:0;;;1752:51:1;15223:8:0;;15234:28;;;;;;1725:18:1;;15234:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15297:7;;;;;14868:444;-1:-1:-1;;;;;;14868:444:0:o;15320:452::-;15427:6;;15469:19;;;-1:-1:-1;;;15469:19:0;;;;15374:13;;-1:-1:-1;;;;;15427:6:0;;15374:13;;;;15427:6;;15469:17;;:19;;;;;;;;;;;;;;;15427:6;15469:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;15520:12:0;;-1:-1:-1;;;;;15445:43:0;;;;-1:-1:-1;15445:43:0;;;-1:-1:-1;;;;;;15520:12:0;15499:18;15588:4;15567:26;;15563:104;;;-1:-1:-1;15614:2:0;15563:104;;;-1:-1:-1;15653:2:0;15563:104;15690:44;;-1:-1:-1;;;15690:44:0;;-1:-1:-1;;;;;1770:32:1;;;15690:44:0;;;1752:51:1;15679:8:0;;15690:28;;;;;;1725:18:1;;15690:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15756:8;;;;;15320:452;-1:-1:-1;;;;;;15320:452:0:o;13804:447::-;13868:17;13898:14;13914:13;13929:20;13953:14;:12;:14::i;:::-;13897:70;;;;;;13978:19;14021:1;14012:6;:10;:23;;;;;14034:1;14026:5;:9;14012:23;14008:93;;;14084:5;14066:15;14075:6;14066;:15;:::i;:::-;:23;;;;:::i;:::-;14052:37;;14008:93;14131:20;14140:11;14131:6;:20;:::i;:::-;14115:12;:36;14111:133;;14183:49;14196:12;14210:6;14218;14226:5;14183:12;:49::i;:::-;-1:-1:-1;14168:64:0;-1:-1:-1;14111:133:0;13886:365;;;;13804:447;;;:::o;14259:599::-;14323:17;14353:14;14369:13;14384:20;14408:14;:12;:14::i;:::-;14352:70;;;;;;14452:6;14437:12;:21;14433:418;;;14559:9;;-1:-1:-1;;;;;14559:9:0;14549:20;;;;:9;:20;;;;;;:29;;14572:6;;14549:29;:::i;:::-;14507:9;;;;;;;;;-1:-1:-1;;;;;14507:9:0;-1:-1:-1;;;;;14497:32:0;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14488:43;;:6;:43;:::i;:::-;14487:92;;;;:::i;:::-;14475:104;;14433:418;;;14601:12;;-1:-1:-1;;;14601:12:0;;;;14597:254;;;14630:19;14677:1;14668:6;:10;:23;;;;;14690:1;14682:5;:9;14668:23;14664:176;;;14745:14;14753:6;14745:5;:14;:::i;:::-;14726:15;14735:6;14726;:15;:::i;:::-;:34;;;;:::i;:::-;14712:48;-1:-1:-1;14803:20:0;14817:6;14712:48;14803:20;:::i;:::-;14787:12;:36;;14779:45;;;;;14597:254;14341:517;;;14259:599;;;:::o;19292:306::-;19362:17;19392:14;19409:20;19433:14;:12;:14::i;:::-;19391:56;;;;;19478:6;19462:12;:22;19458:133;;19569:9;;-1:-1:-1;;;;;19569:9:0;9656:7;9683:18;;;:9;:18;;;;;;;;;;19522:34;;-1:-1:-1;;;19522:34:0;;;;9683:18;;19569:9;19522:32;;:34;;;;;9683:18;;19522:34;;;;;19569:9;19522:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19513:43;;:6;:43;:::i;:::-;:66;;;;:::i;:::-;19501:78;;19458:133;19380:218;;19292:306;;;:::o;19606:2652::-;-1:-1:-1;;;;;19838:17:0;;19814:21;19838:17;;;:9;:17;;;;;;19866:24;19883:7;19838:17;19866:24;:::i;:::-;-1:-1:-1;;;;;19901:17:0;;;;;;:9;:17;;;;;:33;;;19866:24;;-1:-1:-1;19901:17:0;;;;;;20163:1280;;;;20195:17;20191:855;;;20264:5;20255:6;;20245:7;:16;;;;:::i;:::-;:24;;;;:::i;:::-;20233:36;;20323:5;20309:11;;20299:7;:21;;;;:::i;:::-;:29;;;;:::i;:::-;20288:40;;20378:5;20367:10;;20358:7;:19;;;;:::i;:::-;:25;;;;:::i;:::-;20347:36;;20191:855;;;20409:7;20405:641;;;20436:22;20451:6;20436:14;:22::i;:::-;20405:641;;;-1:-1:-1;;;;;20484:21:0;;;;;;:13;:21;;;;;;;;20480:566;;;20539:4;20531:12;;20593:5;20584:6;;20574:7;:16;;;;:::i;20480:566::-;-1:-1:-1;;;;;20738:24:0;;;;;;:13;:24;;;;;;;;20734:312;;;20798:4;20789:13;;20853:5;20843:7;;20833;:17;;;;:::i;:::-;:25;;;;:::i;:::-;20821:37;;20913:5;20898:12;;20888:7;:22;;;;:::i;:::-;:30;;;;:::i;:::-;20877:41;;20968:5;20956:11;;20948:7;:19;;;;:::i;20734:312::-;21026:4;21013:17;;20734:312;21074:20;21086:8;21074:9;:20;:::i;:::-;21062:32;-1:-1:-1;21113:13:0;;21109:323;;21146:47;21160:6;21176:4;21183:9;21146:13;:47::i;:::-;21261:4;21212:28;21243:24;;;:9;:24;;;;;;21291:6;;;;21290:7;:17;;;;;21301:6;21290:17;:45;;;;;21334:1;21311:20;:24;21290:45;21286:131;;;21359:38;21376:20;21359:16;:38::i;:::-;21127:305;21109:323;21459:6;:20;;;;21469:10;21459:20;21455:449;;;21500:7;:34;21508:25;21526:7;21508:15;:25;:::i;:::-;21500:34;;;;;;;;;;;-1:-1:-1;21500:34:0;;;;21499:35;:63;;;;-1:-1:-1;21548:9:0;;-1:-1:-1;;;;;21548:9:0;21561:1;9683:18;;;:9;:18;;;;;;21538:24;21499:63;21495:398;;;21607:9;;-1:-1:-1;;;;;21607:9:0;21582:12;21597:20;;;:9;:20;;;;;;21625:5;;21597:25;;21620:2;21597:25;:::i;:::-;:33;;;;:::i;:::-;21682:9;;-1:-1:-1;;;;;21682:9:0;21672:20;;;;:9;:20;;;;;;21582:48;;-1:-1:-1;21672:30:0;;21582:48;;21672:30;:::i;:::-;21659:9;;;-1:-1:-1;;;;;21659:9:0;;;21649:20;;;;:9;:20;;;;;:53;;;;21735:9;21721:50;;21735:9;21754:6;21763:7;21721:13;:50::i;:::-;21800:9;;;;;;;;;-1:-1:-1;;;;;21800:9:0;-1:-1:-1;;;;;21790:25:0;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21873:4;21836:7;:34;21862:7;21844:15;:25;;;;:::i;:::-;21836:34;;;;;;;;;;;-1:-1:-1;21836:34:0;:41;;-1:-1:-1;;21836:41:0;;;;;;;;;;-1:-1:-1;21495:398:0;21919:27;21935:10;;21919:15;:27::i;:::-;21975:9;21966:6;;:18;;;;:::i;:::-;21957:6;:27;22006:8;;:19;;22017:8;;22006:19;:::i;:::-;21995:8;:30;22046:20;22056:10;22046:9;:20;:::i;:::-;22036:30;-1:-1:-1;22080:12:0;;22077:100;;22107:32;22121:6;22128:10;22107:13;:32::i;:::-;22164:1;22153:12;;22077:100;22187:53;22201:6;22209:9;22230;22220:7;:19;;;;:::i;:::-;22187:13;:53::i;:::-;19803:2455;;;;;;;;19606:2652;;;;;;:::o;16477:2177::-;16622:17;16641:22;16676:23;16712:9;;;;;;;;;-1:-1:-1;;;;;16712:9:0;-1:-1:-1;;;;;16702:32:0;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16676:60;;16747:13;16776:11;;;;;;;;;-1:-1:-1;;;;;16776:11:0;-1:-1:-1;;;;;16776:19:0;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;16763:41:0;;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16887:9;;16877:28;;;-1:-1:-1;;;16877:28:0;;;;16747:59;;-1:-1:-1;;;;;;16830:19:0;;;;;;16817:10;;16887:9;;;;16877:26;;:28;;;;;;;;;;;;;;16887:9;16877:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16860:45;;16920:5;16916:1411;;;16946:11;;16942:1374;;16978:13;16994:18;17004:7;17009:2;17004;:7;:::i;:::-;16994:9;:18::i;:::-;16978:34;;17031:17;17051;17061:6;17051:9;:17::i;:::-;17031:37;;17099:9;17091:5;:17;17087:1214;;;17227:11;;17133:17;;;;-1:-1:-1;;;;;17227:11:0;-1:-1:-1;;17219:75:0;17215:924;;17354:17;17362:9;17354:5;:17;:::i;:::-;17335:37;;:15;:37;:::i;:::-;:41;;17375:1;17335:41;:::i;:::-;17323:53;-1:-1:-1;17431:13:0;:9;17443:1;17431:13;:::i;:::-;17417:10;:5;17425:2;17417:10;:::i;:::-;:28;;;;:::i;:::-;17403:42;;17215:924;;;17487:11;;-1:-1:-1;;;;;17487:11:0;-1:-1:-1;;17479:75:0;17475:664;;17614:17;17622:9;17614:5;:17;:::i;:::-;17595:37;;:15;:37;:::i;:::-;17583:49;-1:-1:-1;17685:9:0;17673;:5;17681:1;17673:9;:::i;17475:664::-;17736:11;;-1:-1:-1;;;;;17736:11:0;-1:-1:-1;;17728:75:0;17724:415;;17863:17;17871:9;17863:5;:17;:::i;:::-;17844:37;;:15;:37;:::i;:::-;:41;;17884:1;17844:41;:::i;:::-;17832:53;-1:-1:-1;17938:9:0;17926;:5;17934:1;17926:9;:::i;17724:415::-;18035:17;18043:9;18035:5;:17;:::i;:::-;18016:37;;:15;:37;:::i;:::-;18004:49;-1:-1:-1;18106:9:0;18094;:5;18102:1;18094:9;:::i;:::-;:21;;;;:::i;:::-;18080:35;;17724:415;18178:23;18190:11;18178:9;:23;:::i;:::-;18161:40;-1:-1:-1;18228:18:0;;18224:57;;18248:33;18267:14;18248:33;;:::i;:::-;;;18224:57;17110:1191;;17087:1214;16959:1357;;16942:1374;18337:15;18355:13;18366:2;18355:8;:13;:::i;:::-;18337:31;;18383:15;18402:1;18383:20;18379:268;;18462:4;18432:27;18442:16;18452:6;18442:7;:16;:::i;18432:27::-;:34;;;;:::i;:::-;18420:46;;18379:268;;;18511:124;18568:2;18539:25;18549:15;18539:7;:25;:::i;:::-;18538:32;;;;:::i;:::-;18618:2;18590:24;18599:15;18590:6;:24;:::i;:::-;18589:31;;;;:::i;:::-;18511:8;:124::i;:::-;18499:136;;18379:268;16665:1989;;;;;16477:2177;;;;;;;:::o;26603:455::-;-1:-1:-1;;;;;26668:20:0;;;;;;:15;:20;;;;;;26663:25;;26659:392;;26714:11;:18;26709:23;;:48;;;26754:3;-1:-1:-1;;;;;26736:21:0;:11;26748:1;26736:14;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;26736:14:0;:21;;26709:48;26705:335;;;26827:16;;26866:8;;26862:63;;26899:7;26603:455;:::o;26862:63::-;-1:-1:-1;26966:11:0;:18;;-1:-1:-1;;;;;26943:20:0;;;;;;:15;:20;;;;;:41;;;27003:21;;;;;;;;;;;;;-1:-1:-1;;;;;;27003:21:0;;;;;;26705:335;26603:455;:::o;22414:772::-;5781:6;:13;;-1:-1:-1;;5781:13:0;5790:4;5781:13;;;22492:55;;22529:7:::1;22492:55;22581:16;::::0;;22595:1:::1;22581:16:::0;;;;;::::1;::::0;;22557:21:::1;::::0;22581:16:::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;22581:16:0::1;22557:40;;22626:4;22608;22613:1;22608:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;22608:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;:23;22652:12:::1;::::0;22642:7;;22652:12;::::1;::::0;22642:4;;22652:12;;22642:7;::::1;;;;;:::i;:::-;-1:-1:-1::0;;;;;22642:22:0;;::::1;:7;::::0;;::::1;::::0;;;;;:22;22675:11:::1;::::0;22824:4:::1;::::0;22675:195:::1;::::0;-1:-1:-1;;;22675:195:0;;:11;;::::1;::::0;:65:::1;::::0;:195:::1;::::0;22755:11;;22675::::1;::::0;22797:4;;22824;;::::1;::::0;22844:15:::1;::::0;22675:195:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;22906:1;22895:8;;:12;22891:288;;;22923:4;::::0;22938:12:::1;::::0;22952:8:::1;::::0;22962:6:::1;::::0;22970:13:::1;::::0;22985:14:::1;::::0;22923:92:::1;::::0;-1:-1:-1;;;22923:92:0;;-1:-1:-1;;;;;22938:12:0;;::::1;22923:92;::::0;::::1;17129:34:1::0;17179:18;;;17172:34;;;;17222:18;;;17215:34;;;;22970:13:0;::::1;17265:18:1::0;;;17258:43;22985:14:0;::::1;17317:19:1::0;;;17310:44;23009:4:0::1;17370:19:1::0;;;17363:44;22923:4:0;::::1;::::0;:14:::1;::::0;17063:19:1;;22923:92:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;23041:1:0::1;23030:8;:12:::0;;;23057:6:::1;:10:::0;-1:-1:-1;22891:288:0::1;::::0;-1:-1:-1;22891:288:0::1;;23100:4;::::0;23114:12:::1;::::0;23100:42:::1;::::0;-1:-1:-1;;;23100:42:0;;-1:-1:-1;;;;;23114:12:0;;::::1;23100:42;::::0;::::1;17630:34:1::0;23136:4:0::1;17680:18:1::0;;;17673:43;23100:4:0;::::1;::::0;:13:::1;::::0;17565:18:1;;23100:42:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;23166:1:0::1;23157:6;:10:::0;-1:-1:-1;;22891:288:0::1;22481:705;5805:1;-1:-1:-1::0;5817:6:0;:14;;-1:-1:-1;;5817:14:0;;;22414:772::o;27814:1851::-;27880:15;;27875:1;:20;27871:59;;27814:1851;:::o;27871:59::-;27990:12;27968:19;;27944:21;;:43;;;;:::i;:::-;:58;27940:97;;;27814:1851;:::o;27940:97::-;28075:17;;28124:12;;28152:29;;-1:-1:-1;;;28152:29:0;;28175:4;28152:29;;;1752:51:1;-1:-1:-1;;;;;28124:12:0;;;;28075:17;;28124:12;;28152:14;;1725:18:1;;28152:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:47;28148:86;;;28216:7;;27814:1851;:::o;28148:86::-;28270:6;;28310:23;;;-1:-1:-1;;;28310:23:0;;;;-1:-1:-1;;;;;28270:6:0;;;;28244:16;;28270:6;;28310:21;;:23;;;;;;;;;;;;;;;28270:6;28310:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28288:45;;28353:14;28348:1;:19;28344:58;;28384:7;;;;27814:1851;:::o;28344:58::-;28529:11;:18;28414:19;;;;;;;;;28641:9;28685:15;;28741:20;;28623:27;;-1:-1:-1;28685:15:0;28774:837;28791:3;28781:7;:13;:46;;;;;28811:16;28798:10;:29;28781:46;28774:837;;;28866:16;28848:14;;:34;28844:93;;28920:1;28903:14;:18;28844:93;28965:11;28977:14;;28965:27;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;28965:27:0;29012:30;;;:17;:30;;;;;;;;28965:27;;-1:-1:-1;29012:30:0;;29011:31;:80;;;;;29072:19;29046:22;29056:11;-1:-1:-1;;;;;9683:18:0;9656:7;9683:18;;;:9;:18;;;;;;;9598:111;29046:22;:45;;29011:80;29007:443;;;29127:32;;-1:-1:-1;;;29127:32:0;;-1:-1:-1;;;;;1770:32:1;;;29127::0;;;1752:51:1;29127:19:0;;;;;1725:18:1;;29127:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29112:47;;29198:13;29182:12;:29;29178:257;;29278:14;29245:30;29263:12;29245:15;:30;:::i;:::-;:47;;;;:::i;:::-;29236:56;-1:-1:-1;29319:10:0;;29315:101;;29358:34;;-1:-1:-1;;;29358:34:0;;-1:-1:-1;;;;;8220:32:1;;;29358:34:0;;;8202:51:1;8269:18;;;8262:34;;;29358:13:0;;;;;8175:18:1;;29358:34:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;29315:101;29497:9;29487:19;;:7;:19;:::i;:::-;29476:31;;:7;:31;:::i;:::-;29466:41;;29532:9;29556:14;:16;;29522:19;;-1:-1:-1;29556:14:0;:16;;;:::i;:::-;;;;;;29587:12;;;;;:::i;:::-;;;;28774:837;;;-1:-1:-1;;29645:12:0;29621:21;:36;-1:-1:-1;;;;;;;;;;;;27814:1851:0:o;22264:142::-;22349:49;22363:6;22378;22386:11;22349:13;:49::i;:::-;22264:142;;:::o;3133:303::-;3178:6;3205:1;3201;:5;3197:232;;;-1:-1:-1;3227:1:0;3243:6;3252:5;3256:1;3227;3252:5;:::i;:::-;:9;;3260:1;3252:9;:::i;:::-;3243:18;;3276:92;3287:1;3283;:5;3276:92;;;3313:1;-1:-1:-1;3313:1:0;3351;3313;3338:5;3313:1;3338;:5;:::i;:::-;:9;;;;:::i;:::-;3337:15;;;;:::i;:::-;3333:19;;3276:92;;;3208:171;3133:303;;;:::o;3197:232::-;3389:6;;3385:44;;-1:-1:-1;3416:1:0;3385:44;3133:303;;;:::o;3029:96::-;3081:6;3108:1;3104;:5;:13;;3116:1;3104:13;;;3112:1;3104:13;3100:17;3029:96;-1:-1:-1;;;3029:96:0:o;14:131:1:-;-1:-1:-1;;;;;89:31:1;;79:42;;69:70;;135:1;132;125:12;150:134;218:20;;247:31;218:20;247:31;:::i;289:247::-;348:6;401:2;389:9;380:7;376:23;372:32;369:52;;;417:1;414;407:12;369:52;456:9;443:23;475:31;500:5;475:31;:::i;733:548::-;845:4;874:2;903;892:9;885:21;935:6;929:13;978:6;973:2;962:9;958:18;951:34;1003:1;1013:140;1027:6;1024:1;1021:13;1013:140;;;1122:14;;;1118:23;;1112:30;1088:17;;;1107:2;1084:26;1077:66;1042:10;;1013:140;;;1017:3;1202:1;1197:2;1188:6;1177:9;1173:22;1169:31;1162:42;1272:2;1265;1261:7;1256:2;1248:6;1244:15;1240:29;1229:9;1225:45;1221:54;1213:62;;;;733:548;;;;:::o;1286:315::-;1354:6;1362;1415:2;1403:9;1394:7;1390:23;1386:32;1383:52;;;1431:1;1428;1421:12;1383:52;1470:9;1457:23;1489:31;1514:5;1489:31;:::i;:::-;1539:5;1591:2;1576:18;;;;1563:32;;-1:-1:-1;;;1286:315:1:o;1814:456::-;1891:6;1899;1907;1960:2;1948:9;1939:7;1935:23;1931:32;1928:52;;;1976:1;1973;1966:12;1928:52;2015:9;2002:23;2034:31;2059:5;2034:31;:::i;:::-;2084:5;-1:-1:-1;2141:2:1;2126:18;;2113:32;2154:33;2113:32;2154:33;:::i;:::-;1814:456;;2206:7;;-1:-1:-1;;;2260:2:1;2245:18;;;;2232:32;;1814:456::o;2275:118::-;2361:5;2354:13;2347:21;2340:5;2337:32;2327:60;;2383:1;2380;2373:12;2398:128;2463:20;;2492:28;2463:20;2492:28;:::i;2531:382::-;2596:6;2604;2657:2;2645:9;2636:7;2632:23;2628:32;2625:52;;;2673:1;2670;2663:12;2625:52;2712:9;2699:23;2731:31;2756:5;2731:31;:::i;:::-;2781:5;-1:-1:-1;2838:2:1;2823:18;;2810:32;2851:30;2810:32;2851:30;:::i;:::-;2900:7;2890:17;;;2531:382;;;;;:::o;3516:180::-;3575:6;3628:2;3616:9;3607:7;3603:23;3599:32;3596:52;;;3644:1;3641;3634:12;3596:52;-1:-1:-1;3667:23:1;;3516:180;-1:-1:-1;3516:180:1:o;3701:241::-;3757:6;3810:2;3798:9;3789:7;3785:23;3781:32;3778:52;;;3826:1;3823;3816:12;3778:52;3865:9;3852:23;3884:28;3906:5;3884:28;:::i;3947:388::-;4015:6;4023;4076:2;4064:9;4055:7;4051:23;4047:32;4044:52;;;4092:1;4089;4082:12;4044:52;4131:9;4118:23;4150:31;4175:5;4150:31;:::i;:::-;4200:5;-1:-1:-1;4257:2:1;4242:18;;4229:32;4270:33;4229:32;4270:33;:::i;4340:127::-;4401:10;4396:3;4392:20;4389:1;4382:31;4432:4;4429:1;4422:15;4456:4;4453:1;4446:15;4472:1191;4562:6;4570;4623:2;4611:9;4602:7;4598:23;4594:32;4591:52;;;4639:1;4636;4629:12;4591:52;4679:9;4666:23;4708:18;4749:2;4741:6;4738:14;4735:34;;;4765:1;4762;4755:12;4735:34;4803:6;4792:9;4788:22;4778:32;;4848:7;4841:4;4837:2;4833:13;4829:27;4819:55;;4870:1;4867;4860:12;4819:55;4906:2;4893:16;4928:4;4951:2;4947;4944:10;4941:36;;;4957:18;;:::i;:::-;5003:2;5000:1;4996:10;5035:2;5029:9;5098:2;5094:7;5089:2;5085;5081:11;5077:25;5069:6;5065:38;5153:6;5141:10;5138:22;5133:2;5121:10;5118:18;5115:46;5112:72;;;5164:18;;:::i;:::-;5200:2;5193:22;5250:18;;;5284:15;;;;-1:-1:-1;5326:11:1;;;5322:20;;;5354:19;;;5351:39;;;5386:1;5383;5376:12;5351:39;5410:11;;;;5430:148;5446:6;5441:3;5438:15;5430:148;;;5512:23;5531:3;5512:23;:::i;:::-;5500:36;;5463:12;;;;5556;;;;5430:148;;;5597:6;-1:-1:-1;5622:35:1;;-1:-1:-1;5638:18:1;;;5622:35;:::i;:::-;5612:45;;;;;;4472:1191;;;;;:::o;5921:523::-;6025:6;6033;6041;6049;6057;6065;6118:3;6106:9;6097:7;6093:23;6089:33;6086:53;;;6135:1;6132;6125:12;6086:53;-1:-1:-1;;6158:23:1;;;6228:2;6213:18;;6200:32;;-1:-1:-1;6279:2:1;6264:18;;6251:32;;6330:2;6315:18;;6302:32;;-1:-1:-1;6381:3:1;6366:19;;6353:33;;-1:-1:-1;6433:3:1;6418:19;6405:33;;-1:-1:-1;5921:523:1;-1:-1:-1;5921:523:1:o;7313:380::-;7392:1;7388:12;;;;7435;;;7456:61;;7510:4;7502:6;7498:17;7488:27;;7456:61;7563:2;7555:6;7552:14;7532:18;7529:38;7526:161;;7609:10;7604:3;7600:20;7597:1;7590:31;7644:4;7641:1;7634:15;7672:4;7669:1;7662:15;7698:325;7900:2;7882:21;;;7939:1;7919:18;;;7912:29;-1:-1:-1;;;7972:2:1;7957:18;;7950:32;8014:2;7999:18;;7698:325::o;8307:245::-;8374:6;8427:2;8415:9;8406:7;8402:23;8398:32;8395:52;;;8443:1;8440;8433:12;8395:52;8475:9;8469:16;8494:28;8516:5;8494:28;:::i;8557:328::-;8759:2;8741:21;;;8798:1;8778:18;;;8771:29;-1:-1:-1;;;8831:2:1;8816:18;;8809:35;8876:2;8861:18;;8557:328::o;8890:127::-;8951:10;8946:3;8942:20;8939:1;8932:31;8982:4;8979:1;8972:15;9006:4;9003:1;8996:15;9022:128;9089:9;;;9110:11;;;9107:37;;;9124:18;;:::i;10152:127::-;10213:10;10208:3;10204:20;10201:1;10194:31;10244:4;10241:1;10234:15;10268:4;10265:1;10258:15;10284:135;10323:3;10344:17;;;10341:43;;10364:18;;:::i;:::-;-1:-1:-1;10411:1:1;10400:13;;10284:135::o;10424:188::-;10503:13;;-1:-1:-1;;;;;10545:42:1;;10535:53;;10525:81;;10602:1;10599;10592:12;10617:450;10704:6;10712;10720;10773:2;10761:9;10752:7;10748:23;10744:32;10741:52;;;10789:1;10786;10779:12;10741:52;10812:40;10842:9;10812:40;:::i;:::-;10802:50;;10871:49;10916:2;10905:9;10901:18;10871:49;:::i;:::-;10861:59;;10963:2;10952:9;10948:18;10942:25;11007:10;11000:5;10996:22;10989:5;10986:33;10976:61;;11033:1;11030;11023:12;10976:61;11056:5;11046:15;;;10617:450;;;;;:::o;11740:168::-;11813:9;;;11844;;11861:15;;;11855:22;;11841:37;11831:71;;11882:18;;:::i;11913:217::-;11953:1;11979;11969:132;;12023:10;12018:3;12014:20;12011:1;12004:31;12058:4;12055:1;12048:15;12086:4;12083:1;12076:15;11969:132;-1:-1:-1;12115:9:1;;11913:217::o;12135:184::-;12205:6;12258:2;12246:9;12237:7;12233:23;12229:32;12226:52;;;12274:1;12271;12264:12;12226:52;-1:-1:-1;12297:16:1;;12135:184;-1:-1:-1;12135:184:1:o;14672:125::-;14737:9;;;14758:10;;;14755:36;;;14771:18;;:::i;15563:251::-;15633:6;15686:2;15674:9;15665:7;15661:23;15657:32;15654:52;;;15702:1;15699;15692:12;15654:52;15734:9;15728:16;15753:31;15778:5;15753:31;:::i;15819:980::-;16081:4;16129:3;16118:9;16114:19;16160:6;16149:9;16142:25;16186:2;16224:6;16219:2;16208:9;16204:18;16197:34;16267:3;16262:2;16251:9;16247:18;16240:31;16291:6;16326;16320:13;16357:6;16349;16342:22;16395:3;16384:9;16380:19;16373:26;;16434:2;16426:6;16422:15;16408:29;;16455:1;16465:195;16479:6;16476:1;16473:13;16465:195;;;16544:13;;-1:-1:-1;;;;;16540:39:1;16528:52;;16635:15;;;;16600:12;;;;16576:1;16494:9;16465:195;;;-1:-1:-1;;;;;;;16716:32:1;;;;16711:2;16696:18;;16689:60;-1:-1:-1;;;16780:3:1;16765:19;16758:35;16677:3;15819:980;-1:-1:-1;;;15819:980:1:o

Swarm Source

ipfs://e82067376feeb0bb35380c13c7c49f6d6e5b0d0ba7df40ff41737af5a39a43dc

Block Transaction Gas Used Reward
view all blocks produced
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
View All Validatorset

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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.