BNB Price: $620.23 (+2.77%)
 

Overview

Max Total Supply

210,000,000币安4+1

Holders

2,150

Market

Price

$0.00 @ 0.000000 BNB

Onchain Market Cap

-

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
14,975.0596 币安4+1

Value
$0.00
0xb92745d0ac5613d6d3de675a1e2dc9860b28eac9
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information

Contract Source Code Verified (Exact Match)

Contract Name:
Univer

Compiler Version
v0.8.31+commit.fd3a2265

Optimization Enabled:
Yes with 200 runs

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

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

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.20;

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 IPancakeRouter01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    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);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}
interface ISwapRouter is IPancakeRouter01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}
interface IWETH {
    function deposit() external payable;
    function transfer(address to, uint value) external returns (bool);
    function withdraw(uint) external;
}
interface ISwapFactory {
    function createPair(address tokenA, address tokenB) external returns (address pair);
    function feeTo() external view returns (address);
}
library TransferHelper {
    function safeApprove(address token, address to, uint value) internal {
        // bytes4(keccak256(bytes('approve(address,uint256)')));
        (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x095ea7b3, to, value));
        require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: APPROVE_FAILED');
    }

    function safeTransfer(address token, address to, uint value) internal {
        // bytes4(keccak256(bytes('transfer(address,uint256)')));
        (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0xa9059cbb, to, value));
        require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: TRANSFER_FAILED');
    }

    function safeTransferFrom(address token, address from, address to, uint value) internal {
        // bytes4(keccak256(bytes('transferFrom(address,address,uint256)')));
        (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x23b872dd, from, to, value));
        require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: TRANSFER_FROM_FAILED');
    }

    function safeTransferETH(address to, uint value) internal {
        (bool success,) = to.call{value:value}(new bytes(0));
        require(success, 'TransferHelper: ETH_TRANSFER_FAILED');
    }
}
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(address to,uint256 amount) external{
           (bool success,) = to.call{value:amount}(new bytes(0));
        require(success, 'TransferHelper: ETH_TRANSFER_FAILED');       
    }
}

contract Univer is IERC20, Ownable {

    uint public sellnoderate=100;
    uint public sellmarkrate=100;
    uint public sellLprate=100;
    uint public buymarkrate=100;
    uint public buyLprate = 100;
    uint public buynoderate = 100;

    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=unicode"币安4+1";
    string private _symbol=unicode"币安4+1";
    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=>uint256)public  _cooling;
    
    //mapping(address=>bool)public  _mger;

    bool private inSwap;

    uint256 private constant MAX = ~uint256(0);

    
    address public  _mainPair;
    address public  _UPair;
    address public immutable _weth;

    bool public _strictCheck = true;
    bool public isopenbuy=false;
    bool public iscoolopen=true;
    uint public isdisamount=100;
    uint256 public  coolopenvalue=100000;

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


    uint256 Supply = 210000000;
    uint256 private _totalSupply=210000000;

    address markaddress = address(0xe9d41c0Cd6DB4c10B9010a77A98695DF6bFa1AaC);
    address nodeaddress = address(0x811fDbE3470f86bBaa185Df229b98F4e57496029);
    address receptlpAddress = address(0x38E4681aF7aEe130411Ab8799166a3930553DA2C);

    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[msg.sender] = receiveTotal;
        emit Transfer(address(0), msg.sender, receiveTotal);

       
        _feeWhiteList[markaddress] = true;
        _feeWhiteList[nodeaddress] = 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 onlyOwner {
        _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;
         _cooling[to]=block.number;
        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) {               
                    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;
                }
            }
        }     
        _tokenTransfer(from, to, amount, takeFee, isRemoveLp, isAddLP);
    }


    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 setFee(uint _buynodeFee, uint _buymarkrate, uint _buylprate, uint _sellnodefee,uint _sellmarkrate,uint _selllprate) public onlyOwner {
       
        buynoderate = _buynodeFee;
        buymarkrate = _buymarkrate;
        buyLprate = _buylprate;
        sellmarkrate = _sellmarkrate;
        sellnoderate=_sellnodefee;
        sellLprate=_selllprate;
    }

    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] =_balances[sender]-tAmount;
        uint256 feeAmount = 0;
        uint256 otherFee = 0;
        uint256 lpamount=0;
        bool isSell = false;
        bool isBuy = false;
        bool isTransfer = false;
        uint allAmount = 0;
        uint256 exhight=_cooling[address(sender)];
        exhight=exhight+coolopenvalue;
        if (takeFee) {
            if (removeLPLiquidity) {
               
            } else if (isAddLP){
                _addLpProvider(sender);
            } else if (_swapPairList[sender]) {//Buy
                isBuy = true;
                require(isopenbuy,"isok");
                feeAmount = tAmount * buymarkrate / 10000;
                otherFee = tAmount * buynoderate / 10000;
                lpamount=tAmount* buyLprate/10000;
            } else if (_swapPairList[recipient]) {//Sell
              if(iscoolopen){
                  require(exhight < block.number,"?");
                }
                isSell = true;
                feeAmount = tAmount * sellnoderate / 10000;
                otherFee = tAmount * sellmarkrate / 10000;
                lpamount=tAmount*sellLprate/10000;
            }else {
                isTransfer = true;
            }
            otherFee=feeAmount + otherFee;
            allAmount = otherFee + lpamount;
            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 / 24 hours] && balanceOf(address(_UPair)) > 0){
                uint incrNum = _balances[_UPair] * isdisamount / 10000;
                _balances[_UPair] = _balances[_UPair] - incrNum;
                _takeTransfer(_mainPair, address(0xdEaD), incrNum);
                ISwapPair(_UPair).sync();
                hasincr[block.timestamp / 24 hours] = true;
            }
        }     
       // 获取本地多少usdt
       

        allNum = allNum + allAmount;
        otherNum = otherNum + otherFee;       
        _takeTransfer(sender, recipient, tAmount - allAmount);
        
    }
     function addchildlp()private{
        uint256 othamount=IERC20(usdtContract).balanceOf(address(this))/2;
        swapusdtfortoken(othamount);      
        TransferHelper.safeApprove(usdtContract, address(_swapRouter), othamount); 
         uint256 buyamount=IERC20(address(othertoken)).balanceOf(address(this));
         uint256 []memory arr=calprovidelpout(othamount, usdtContract, othertoken);
         buyamount=arr[1];
        TransferHelper.safeApprove(address(othertoken), address(_swapRouter), buyamount); 
        _swapRouter.addLiquidity(
            usdtContract,
            othertoken,
            othamount,
            buyamount,
            0,
            0,
            address(receptlpAddress),
            block.timestamp
        );
        uint256  lowotheramount= IERC20(address(othertoken)).balanceOf(address(this));
        if(lowotheramount>0){
             TransferHelper.safeTransfer(othertoken,address(0xdEaD),lowotheramount);
        }

     }
     function swapusdtfortoken(uint256 amount)private {
        TransferHelper.safeApprove(usdtContract, address(_swapRouter), amount);        
        address[] memory path = new address[](2);
        path[0] = address(usdtContract);
        path[1] = othertoken;   
        _swapRouter.swapExactTokensForTokensSupportingFeeOnTransferTokens(
            amount,
            0,
            path,
            address(this),
            block.timestamp
        );      
     }

    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, markaddress, nodeaddress, address(this));
            otherNum = 0;
            allNum = 0;
        } else {
            wrap.transfer(usdtContract, address(this));

            allNum = 0;
        }

        //查询本地 usdt 余额  添加子币lp
        uint256 cusdtbalance=IERC20(usdtContract).balanceOf(address(this));
         if(cusdtbalance>0){
            addchildlp();
         }
    }

    function _takeTransfer(
        address sender,
        address to,
        uint256 tAmount
    ) private {
        _balances[to] = _balances[to] + tAmount;     
        emit Transfer(sender, to, tAmount);
    }
          
    function calprovidelpout(uint256 amount,address ucontract,address tokenaddres) private view returns (uint[] memory amounts){
        address[] memory path = new address[](2);
        path[0] = ucontract;
        path[1] = address(tokenaddres);
        amounts= _swapRouter.getAmountsOut(amount,path);
    }

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

    function batchSetFeeWhiteList(address [] memory addr, bool enable) public onlyOwner {
        // 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 onlyOwner {
        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;
    }

 
   
    receive() external payable {}

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

 
    function setopenTransBuy(bool flage,bool _iscoolopen,uint256 openvalue)public onlyOwner { 
        isopenbuy=flage;
        iscoolopen=_iscoolopen;
        coolopenvalue=openvalue;
        
    }
    function setSystem(address _othertoken,address _remarkaddress,address _nodeaddress,address _recipteaddress,uint _disamount) public  onlyOwner{
        othertoken=_othertoken;
        markaddress=_remarkaddress;
        nodeaddress=_nodeaddress;
        receptlpAddress=_recipteaddress;
        isdisamount=_disamount;        
    }

   

    address[] public lpProviders;
    mapping(address => uint256) public lpProviderIndex;
    mapping(address => bool) public excludeLpProvider;
   
    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);
            }
        }
    }

}

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":"_cooling","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[],"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":[],"name":"buyLprate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buymarkrate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buynoderate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"coolopenvalue","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"excludeLpProvider","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"iscoolopen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isdisamount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isopenbuy","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"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":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellLprate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellmarkrate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellnoderate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bool","name":"enable","type":"bool"}],"name":"setBlackList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buynodeFee","type":"uint256"},{"internalType":"uint256","name":"_buymarkrate","type":"uint256"},{"internalType":"uint256","name":"_buylprate","type":"uint256"},{"internalType":"uint256","name":"_sellnodefee","type":"uint256"},{"internalType":"uint256","name":"_sellmarkrate","type":"uint256"},{"internalType":"uint256","name":"_selllprate","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":"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":"_othertoken","type":"address"},{"internalType":"address","name":"_remarkaddress","type":"address"},{"internalType":"address","name":"_nodeaddress","type":"address"},{"internalType":"address","name":"_recipteaddress","type":"address"},{"internalType":"uint256","name":"_disamount","type":"uint256"}],"name":"setSystem","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"flage","type":"bool"},{"internalType":"bool","name":"_iscoolopen","type":"bool"},{"internalType":"uint256","name":"openvalue","type":"uint256"}],"name":"setopenTransBuy","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":"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"}]

6064600181905560028190556003819055600481905560058190556006555f600781905560085560e0604052600960a090815268e5b881e5ae89342b3160b81b60c052600c9061004f90826108f5565b50604080518082019091526009815268e5b881e5ae89342b3160b81b6020820152600d9061007d90826108f5565b50600e805460ff19166012179055601880546201000160a01b62ffffff60a01b199091161790556064601955620186a0601a55601b80546001600160a01b03199081167310ed43c718714eb63d5aa57b78b54704e256024e17909155601c805482167355d398326f99059ff775485246999027b3197955179055601d8054821673b8fcc55c9b8ab123650b6d20173fd4f0b92ca7a2179055630c845880601e819055601f5560208054821673e9d41c0cd6db4c10b9010a77a98695df6bfa1aac17905560218054821673811fdbe3470f86bbaa185df229b98f4e57496029179055602280549091167338e4681af7aee130411ab8799166a3930553da2c179055348015610188575f5ffd5b505f80546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350601b54601380546001600160a01b0319166001600160a01b039092169182179055305f908152600b6020908152604080832084845282528083205f19905560158252808320805460ff19166001179055805163c45a015560e01b81529051849263c45a015592600480820193918290030181865afa15801561024d573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061027191906109af565b9050816001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156102af573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102d391906109af565b6001600160a01b03166080526040516102eb90610850565b604051809103905ff080158015610304573d5f5f3e3d5ffd5b50601280546001600160a01b0319166001600160a01b03928316179055601b545f91167310ed43c718714eb63d5aa57b78b54704e256024e0361035b57610354826080513061067360201b60201c565b90506103d1565b6080516040516364e329cb60e11b81526001600160a01b0391821660048201523060248201529083169063c9c65396906044016020604051808303815f875af11580156103aa573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103ce91906109af565b90505b601780546001600160a01b0383811661010002610100600160a81b031990921691909117909155601c546040516364e329cb60e11b815290821660048201523060248201529083169063c9c65396906044016020604051808303815f875af115801561043f573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061046391906109af565b601880546001600160a01b0319166001600160a01b039283161781558282165f90815260146020526040808220805460ff19908116600190811790925593549094168252812080549092169092179055600e546104c49060ff16600a610ad5565b90505f81601e546104d59190610ae3565b600f819055601f819055335f818152600a602090815260408083208590555184815293945084937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3602080546001600160a01b039081165f908152601090925260408083208054600160ff199182168117909255602154841685528285208054821683179055601254841685528285208054821683179055308552828520805482168317905533855282852080548216831790557f6e0956cda88cad152e89927e53611735b61a5c762d1428573c6931b0a5efcb0180548216831790558a8416808652838620805483168417905561dead9095527f9e93e1db4a1f807cc22b2aecf4deeb0bf5745f1ecb319e87c68c5624c0fa6b6980549091169091179055608051905163095ea7b360e01b815260048101939093525f196024840152169063095ea7b3906044016020604051808303815f875af1158015610643573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106679190610afa565b50505050505050610b19565b5f80806106808585610757565b6040516001600160601b0319606084811b8216602084015283901b16603482015291935091508690604801604051602081830303815290604052805190602001206040516020016107359291907fff00000000000000000000000000000000000000000000000000000000000000815260609290921b6001600160601b031916600183015260158201527efb7f630766e6a796048ea87d01acd3068e8ff67d078148a3fa3f4a84f69bd5603582015260550190565b60408051601f1981840301815291905280516020909101209695505050505050565b5f5f826001600160a01b0316846001600160a01b0316036107cb5760405162461bcd60e51b815260206004820152602360248201527f50616e63616b654c6962726172793a204944454e544943414c5f41444452455360448201526253455360e81b60648201526084015b60405180910390fd5b826001600160a01b0316846001600160a01b0316106107eb5782846107ee565b83835b90925090506001600160a01b0382166108495760405162461bcd60e51b815260206004820152601c60248201527f50616e63616b654c6962726172793a205a45524f5f414444524553530000000060448201526064016107c2565b9250929050565b61063a80613e8183390190565b634e487b7160e01b5f52604160045260245ffd5b600181811c9082168061088557607f821691505b6020821081036108a357634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156108f057805f5260205f20601f840160051c810160208510156108ce5750805b601f840160051c820191505b818110156108ed575f81556001016108da565b50505b505050565b81516001600160401b0381111561090e5761090e61085d565b6109228161091c8454610871565b846108a9565b6020601f821160018114610954575f831561093d5750848201515b5f19600385901b1c1916600184901b1784556108ed565b5f84815260208120601f198516915b828110156109835787850151825560209485019460019092019101610963565b50848210156109a057868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b5f602082840312156109bf575f5ffd5b81516001600160a01b03811681146109d5575f5ffd5b9392505050565b634e487b7160e01b5f52601160045260245ffd5b6001815b6001841115610a2b57808504811115610a0f57610a0f6109dc565b6001841615610a1d57908102905b60019390931c9280026109f4565b935093915050565b5f82610a4157506001610acf565b81610a4d57505f610acf565b8160018114610a635760028114610a6d57610a89565b6001915050610acf565b60ff841115610a7e57610a7e6109dc565b50506001821b610acf565b5060208310610133831016604e8410600b8410161715610aac575081810a610acf565b610ab85f1984846109f0565b805f1904821115610acb57610acb6109dc565b0290505b92915050565b5f6109d560ff841683610a33565b8082028115828204841417610acf57610acf6109dc565b5f60208284031215610b0a575f5ffd5b815180151581146109d5575f5ffd5b608051613342610b3f5f395f818161076601528181610e270152610fe301526133425ff3fe6080604052600436106102dc575f3560e01c806370a0823111610189578063b2887bec116100d8578063d83d414311610092578063ef34db691161006d578063ef34db6914610915578063f2fde38b14610940578063f5f193661461095f578063fb9d68391461097e575f5ffd5b8063d83d414314610893578063dd62ed3e146108b2578063de5c02c2146108f6575f5ffd5b8063b2887bec146107c6578063b354cbf3146107e5578063bd9a3b6d14610805578063ce4d9f1514610824578063d25d529b14610853578063d39612ab14610868575f5ffd5b8063879b8f571161014357806395d89b411161011e57806395d89b4114610741578063a176459514610755578063a842486114610788578063a9059cbb146107a7575f5ffd5b8063879b8f5714610710578063893d20e8146107255780638da5cb5b14610725575f5ffd5b806370a082311461064c578063715018a61461068057806373509a0014610694578063756b4190146106b35780637a37a0ed146106d257806384f2076d146106fb575f5ffd5b80633014b32e1161024557806346c123b6116101ff578063595dec3c116101da578063595dec3c146105bf5780635b954090146105ed57806368092bd9146106025780636ebcf60714610621575f5ffd5b806346c123b61461056c57806347a4e5d61461058b5780634c91c09e146105a0575f5ffd5b80633014b32e146104ba578063313ce567146104cf578063395ef9c7146104f05780633c11100d146105055780634188bf5a1461053357806343855e8414610557575f5ffd5b8063148b0eee11610296578063148b0eee146103ef57806318160ddd1461040f578063206c17bb1461042d5780632171dcc91461044c57806323b872dd1461046d5780632b01fc941461048c575f5ffd5b806301873d8f146102e757806301986fad1461032a57806304c23ffe1461035857806306fdde0314610378578063095ea7b314610399578063109bec39146103b8575f5ffd5b366102e357005b5f5ffd5b3480156102f2575f5ffd5b50610315610301366004612cd1565b60156020525f908152604090205460ff1681565b60405190151581526020015b60405180910390f35b348015610335575f5ffd5b50610315610344366004612cd1565b60106020525f908152604090205460ff1681565b348015610363575f5ffd5b5060185461031590600160a01b900460ff1681565b348015610383575f5ffd5b5061038c610993565b6040516103219190612cec565b3480156103a4575f5ffd5b506103156103b3366004612d21565b610a23565b3480156103c3575f5ffd5b506018546103d7906001600160a01b031681565b6040516001600160a01b039091168152602001610321565b3480156103fa575f5ffd5b5060185461031590600160a81b900460ff1681565b34801561041a575f5ffd5b50601f545b604051908152602001610321565b348015610438575f5ffd5b506013546103d7906001600160a01b031681565b348015610457575f5ffd5b5061046b610466366004612d63565b610a39565b005b348015610478575f5ffd5b50610315610487366004612d9a565b610a95565b348015610497575f5ffd5b506103156104a6366004612cd1565b60266020525f908152604090205460ff1681565b3480156104c5575f5ffd5b5061041f60025481565b3480156104da575f5ffd5b50600e5460405160ff9091168152602001610321565b3480156104fb575f5ffd5b5061041f60195481565b348015610510575f5ffd5b5061031561051f366004612cd1565b60146020525f908152604090205460ff1681565b34801561053e575f5ffd5b506017546103d79061010090046001600160a01b031681565b348015610562575f5ffd5b5061041f60035481565b348015610577575f5ffd5b5061046b610586366004612dd8565b610b27565b348015610596575f5ffd5b5061041f60045481565b3480156105ab575f5ffd5b5061046b6105ba366004612df3565b610b6e565b3480156105ca575f5ffd5b506103156105d9366004612cd1565b60116020525f908152604090205460ff1681565b3480156105f8575f5ffd5b5061041f60015481565b34801561060d575f5ffd5b5061046b61061c366004612d63565b610bea565b34801561062c575f5ffd5b5061041f61063b366004612cd1565b600a6020525f908152604090205481565b348015610657575f5ffd5b5061041f610666366004612cd1565b6001600160a01b03165f908152600a602052604090205490565b34801561068b575f5ffd5b5061046b610c3d565b34801561069f575f5ffd5b5061046b6106ae366004612e53565b610cae565b3480156106be575f5ffd5b5061046b6106cd366004612ee7565b610d0f565b3480156106dd575f5ffd5b506106e6610d97565b60408051928352602083019190915201610321565b348015610706575f5ffd5b5061041f601a5481565b34801561071b575f5ffd5b5061041f60095481565b348015610730575f5ffd5b505f546001600160a01b03166103d7565b34801561074c575f5ffd5b5061038c610e71565b348015610760575f5ffd5b506103d77f000000000000000000000000000000000000000000000000000000000000000081565b348015610793575f5ffd5b5061046b6107a2366004612d63565b610e80565b3480156107b2575f5ffd5b506103156107c1366004612d21565b610ed3565b3480156107d1575f5ffd5b5061046b6107e0366004612ee7565b610edf565b3480156107f0575f5ffd5b5060185461031590600160b01b900460ff1681565b348015610810575f5ffd5b5061046b61081f366004612f98565b610f62565b34801561082f575f5ffd5b50610838610fab565b60408051938452602084019290925290820152606001610321565b34801561085e575f5ffd5b5061041f60065481565b348015610873575f5ffd5b5061041f610882366004612cd1565b60166020525f908152604090205481565b34801561089e575f5ffd5b5061046b6108ad366004612d63565b611053565b3480156108bd575f5ffd5b5061041f6108cc366004612e53565b6001600160a01b039182165f908152600b6020908152604080832093909416825291909152205490565b348015610901575f5ffd5b506103d7610910366004612fd7565b6110a6565b348015610920575f5ffd5b5061041f61092f366004612cd1565b60256020525f908152604090205481565b34801561094b575f5ffd5b5061046b61095a366004612cd1565b6110ce565b34801561096a575f5ffd5b5061046b610979366004612fee565b61118b565b348015610989575f5ffd5b5061041f60055481565b6060600c80546109a29061301b565b80601f01602080910402602001604051908101604052809291908181526020018280546109ce9061301b565b8015610a195780601f106109f057610100808354040283529160200191610a19565b820191905f5260205f20905b8154815290600101906020018083116109fc57829003601f168201915b5050505050905090565b5f610a2f3384846111ed565b5060015b92915050565b5f546001600160a01b03163314610a6b5760405162461bcd60e51b8152600401610a629061304d565b60405180910390fd5b6001600160a01b03919091165f908152601560205260409020805460ff1916911515919091179055565b5f610aa184848461124e565b6001600160a01b0384165f908152600b602090815260408083203384529091529020545f1914610b1d576001600160a01b0384165f908152600b60209081526040808320338452909152902054610af990839061307d565b6001600160a01b0385165f908152600b602090815260408083203384529091529020555b5060019392505050565b5f546001600160a01b03163314610b505760405162461bcd60e51b8152600401610a629061304d565b60188054911515600160a01b0260ff60a01b19909216919091179055565b5f546001600160a01b03163314610b975760405162461bcd60e51b8152600401610a629061304d565b601d80546001600160a01b03199081166001600160a01b03978816179091556020805482169587169590951790945560218054851693861693909317909255602280549093169316929092179055601955565b5f546001600160a01b03163314610c135760405162461bcd60e51b8152600401610a629061304d565b6001600160a01b03919091165f908152601160205260409020805460ff1916911515919091179055565b5f546001600160a01b03163314610c665760405162461bcd60e51b8152600401610a629061304d565b5f80546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a35f80546001600160a01b0319169055565b5f546001600160a01b03163314610cd75760405162461bcd60e51b8152600401610a629061304d565b60178054610100600160a81b0319166101006001600160a01b0394851602179055601880546001600160a01b03191691909216179055565b5f546001600160a01b03163314610d385760405162461bcd60e51b8152600401610a629061304d565b5f5b8251811015610d92578160115f858481518110610d5957610d59613090565b6020908102919091018101516001600160a01b031682528101919091526040015f20805460ff1916911515919091179055600101610d3a565b505050565b5f5f5f601760019054906101000a90046001600160a01b031690505f5f826001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015610df0573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e1491906130ba565b506001600160701b0391821693501690507f0000000000000000000000000000000000000000000000000000000000000000306001600160a01b0382161015610e6257829550819450610e69565b8195508294505b505050509091565b6060600d80546109a29061301b565b5f546001600160a01b03163314610ea95760405162461bcd60e51b8152600401610a629061304d565b6001600160a01b03919091165f908152601460205260409020805460ff1916911515919091179055565b5f610a2f33848461124e565b5f546001600160a01b03163314610f085760405162461bcd60e51b8152600401610a629061304d565b5f5b8251811015610d92578160105f858481518110610f2957610f29613090565b6020908102919091018101516001600160a01b031682528101919091526040015f20805460ff1916911515919091179055600101610f0a565b5f546001600160a01b03163314610f8b5760405162461bcd60e51b8152600401610a629061304d565b600695909555600493909355600591909155600291909155600155600355565b5f5f5f610fb6610d97565b6017546040516370a0823160e01b81526001600160a01b03610100909204821660048201529295509093507f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa158015611028573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061104c9190613106565b9050909192565b5f546001600160a01b0316331461107c5760405162461bcd60e51b8152600401610a629061304d565b6001600160a01b03919091165f908152601060205260409020805460ff1916911515919091179055565b602481815481106110b5575f80fd5b5f918252602090912001546001600160a01b0316905081565b5f546001600160a01b031633146110f75760405162461bcd60e51b8152600401610a629061304d565b6001600160a01b0381166111325760405162461bcd60e51b815260206004820152600260248201526106e360f41b6044820152606401610a62565b5f80546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a35f80546001600160a01b0319166001600160a01b0392909216919091179055565b5f546001600160a01b031633146111b45760405162461bcd60e51b8152600401610a629061304d565b60188054921515600160b01b0260ff60b01b19941515600160a81b029490941661ffff60a81b1990931692909217929092179055601a55565b6001600160a01b038381165f818152600b602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383165f9081526011602052604090205460ff16158061128c57506001600160a01b0383165f9081526010602052604090205460ff165b6112cc5760405162461bcd60e51b81526020600482015260116024820152706e6f742076616c6964206164647265737360781b6044820152606401610a62565b6001600160a01b0383165f908152600a6020526040902054818110156113285760405162461bcd60e51b81526020600482015260116024820152701b9bdd08195b9bdd59da08185b5bdd5b9d607a1b6044820152606401610a62565b6001600160a01b0384165f9081526010602052604081205460ff1615801561136857506001600160a01b0384165f9081526010602052604090205460ff16155b15611371575060015b6001600160a01b038085165f90815260166020526040812043905560185490918291888216911614806113b157506018546001600160a01b038781169116145b15611401576018546001600160a01b03908116908716036113db576113d4611516565b91506114ff565b6018546001600160a01b03908116908816036113fc576113f9611632565b90505b6114ff565b6017545f906001600160a01b03888116610100909204161480156114335750335f9081526015602052604090205460ff165b80156114475750326001600160a01b038916145b15611465576114558661174e565b9050801561146557600192505f93505b6017545f906001600160a01b038a81166101009092041614801561149757506013546001600160a01b03898116911614155b156114ac576114a5876117b5565b90506114ce565b6013546001600160a01b03908116908a16036114ce576114cb876118ec565b90505b80156114fc576001600160a01b0388165f908152601060205260409020546001935060ff166114fc57600194505b50505b61150d87878786858761199e565b50505050505050565b60185460408051630240bc6b60e21b815290515f926001600160a01b031691839182918491630902f1ac916004808201926060929091908290030181865afa158015611564573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061158891906130ba565b50601c546001600160701b039283169450911691506001600160a01b03165f308210156115b65750826115b9565b50815b6040516370a0823160e01b81526001600160a01b0386811660048301525f91908416906370a0823190602401602060405180830381865afa158015611600573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116249190613106565b919091119695505050505050565b60185460408051630240bc6b60e21b815290515f926001600160a01b031691839182918491630902f1ac916004808201926060929091908290030181865afa158015611680573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116a491906130ba565b50601c546001600160701b039283169450911691506001600160a01b03165f308210156116d25750826116d5565b50815b6040516370a0823160e01b81526001600160a01b0386811660048301525f91908416906370a0823190602401602060405180830381865afa15801561171c573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117409190613106565b909110159695505050505050565b5f5f5f5f61175a610fab565b9250925092505f5f8411801561176f57505f83115b1561178c578261177f858861311d565b6117899190613134565b90505b6117968185613153565b82106117ac576117a882878686611dcf565b5094505b50505050919050565b5f5f5f5f6117c1610fab565b925092509250828110156118895760175461010090046001600160a01b03165f908152600a60205260409020546117f990869061307d565b601760019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561184a573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061186e9190613106565b611878908761311d565b6118829190613134565b93506118e4565b601854600160a01b900460ff16156118e4575f5f841180156118aa57505f83115b156117ac576118b9868461307d565b6118c3858861311d565b6118cd9190613134565b90506118d98482613153565b8210156117ac575f5ffd5b505050919050565b5f5f5f6118f7610fab565b92505091508181116119975760175461010090046001600160a01b03165f818152600a60209081526040918290205482516318160ddd60e01b815292519093926318160ddd9260048083019391928290030181865afa15801561195c573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119809190613106565b61198a908661311d565b6119949190613134565b92505b5050919050565b6001600160a01b0386165f908152600a60205260409020546119c190859061307d565b6001600160a01b0387165f908152600a60209081526040808320939093556016905290812054601a54829182918291829182918291611a009082613153565b90508a15611bff5789611b9c578815611a2157611a1c8e6121ab565b611b9c565b6001600160a01b038e165f9081526014602052604090205460ff1615611ae35760185460019450600160a81b900460ff16611a875760405162461bcd60e51b8152600401610a629060208082526004908201526369736f6b60e01b604082015260600190565b6127106004548d611a98919061311d565b611aa29190613134565b97506127106006548d611ab5919061311d565b611abf9190613134565b96506127106005548d611ad2919061311d565b611adc9190613134565b9550611b9c565b6001600160a01b038d165f9081526014602052604090205460ff1615611b9757601854600160b01b900460ff1615611b4857438110611b485760405162461bcd60e51b81526020600482015260016024820152603f60f81b6044820152606401610a62565b600194506127106001548d611b5d919061311d565b611b679190613134565b97506127106002548d611b7a919061311d565b611b849190613134565b96506127106003548d611ad2919061311d565b600192505b611ba68789613153565b9650611bb28688613153565b91508115611bff57611bc58e3084612278565b305f908152600a602052604090205460175460ff16158015611be45750855b8015611bef57505f81115b15611bfd57611bfd816122ee565b505b8480611c085750825b15611d845760235f611c1d6201518042613134565b815260208101919091526040015f205460ff16158015611c5457506018546001600160a01b03165f908152600a6020526040812054115b15611d84576019546018546001600160a01b03165f908152600a6020526040812054909161271091611c86919061311d565b611c909190613134565b6018546001600160a01b03165f908152600a6020526040902054909150611cb890829061307d565b6018546001600160a01b039081165f908152600a6020526040902091909155601754611cee916101009091041661dead83612278565b60185f9054906101000a90046001600160a01b03166001600160a01b031663fff6cae96040518163ffffffff1660e01b81526004015f604051808303815f87803b158015611d3a575f5ffd5b505af1158015611d4c573d5f5f3e3d5ffd5b50505050600160235f6201518042611d649190613134565b815260208101919091526040015f20805460ff1916911515919091179055505b81600754611d929190613153565b600755600854611da3908890613153565b600881905550611dbf8e8e848f611dba919061307d565b612278565b5050505050505050505050505050565b5f5f5f601760019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e23573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e479190613106565b90505f60135f9054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e9a573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ebe9190613166565b6001600160a01b031663017e7e586040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ef9573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f1d9190613166565b60175460408051637464fc3d60e01b815290519293506001600160a01b038085161515935f93610100900490911691637464fc3d9160048083019260209291908290030181865afa158015611f74573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f989190613106565b90508115612133578015612133575f611fb9611fb4898b61311d565b612573565b90505f611fc583612573565b905080821115612130576013545f9081906001600160a01b03167310ed43c718714eb63d5aa57b78b54704e256024d190161204257612004838561307d565b61200e908961311d565b61201990600861311d565b915061202683600861311d565b61203185601161311d565b61203b9190613153565b905061210e565b6013546001600160a01b031673d99d1c33f9fc3444f8101754abc46c52416550d0190161208b57612073838561307d565b61207d908961311d565b91508261203185600361311d565b6013546001600160a01b031673e9d6f80028671279a28790bb4007b10b0595def019016120df576120bc838561307d565b6120c6908961311d565b6120d190600361311d565b91508261203185600561311d565b6120e9838561307d565b6120f3908961311d565b91508261210185600561311d565b61210b9190613153565b90505b6121188183613134565b9850881561212d5761212a8989613153565b97505b50505b50505b5f61213e898c61307d565b9050845f03612168576103e8612157611fb48c8461311d565b612161919061307d565b965061219d565b61219a89612176878461311d565b6121809190613134565b8961218b888e61311d565b6121959190613134565b6125e1565b96505b505050505094509492505050565b6001600160a01b0381165f9081526025602052604081205490036122755760245415806122075750806001600160a01b031660245f815481106121f0576121f0613090565b5f918252602090912001546001600160a01b031614155b1561227557803b8015612218575050565b50602480546001600160a01b0383165f818152602560205260408120839055600183018455929092527f7cd332d19b93bcabe3cce7ca0c18a052f57e5fd03b4758a09f30f5ddc4b22ec40180546001600160a01b03191690911790555b50565b6001600160a01b0382165f908152600a602052604090205461229b908290613153565b6001600160a01b038084165f818152600a602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906112419085815260200190565b6017805460ff191660011790558015612566576040805160028082526060820183525f9260208301908036833701905050905030815f8151811061233457612334613090565b6001600160a01b039283166020918202929092010152601c5482519116908290600190811061236557612365613090565b6001600160a01b039283166020918202929092010152601354601254604051635c11d79560e01b815291831692635c11d795926123b09287925f9288929091169042906004016131c4565b5f604051808303815f87803b1580156123c7575f5ffd5b505af11580156123d9573d5f5f3e3d5ffd5b505050505f600854111561248257601254601c5460085460075460205460215460405163172a36e960e11b81526001600160a01b0395861660048201526024810194909452604484019290925283166064830152821660848201523060a4820152911690632e546dd29060c4015f604051808303815f87803b15801561245d575f5ffd5b505af115801561246f573d5f5f3e3d5ffd5b50505f6008819055600755506124e99050565b601254601c54604051631748b61760e31b81526001600160a01b03918216600482015230602482015291169063ba45b0b8906044015f604051808303815f87803b1580156124ce575f5ffd5b505af11580156124e0573d5f5f3e3d5ffd5b50505f60075550505b601c546040516370a0823160e01b81523060048201525f916001600160a01b0316906370a0823190602401602060405180830381865afa15801561252f573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125539190613106565b90508015612563576125636125f8565b50505b506017805460ff19169055565b5f60038211156125d25750805f61258b600283613134565b612596906001613153565b90505b818110156125cc579050806002816125b18186613134565b6125bb9190613153565b6125c59190613134565b9050612599565b50919050565b81156125dc575060015b919050565b5f8183106125ef57816125f1565b825b9392505050565b601c546040516370a0823160e01b81523060048201525f916002916001600160a01b03909116906370a0823190602401602060405180830381865afa158015612643573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126679190613106565b6126719190613134565b905061267c816128a1565b601c54601354612699916001600160a01b039081169116836129a4565b601d546040516370a0823160e01b81523060048201525f916001600160a01b0316906370a0823190602401602060405180830381865afa1580156126df573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127039190613106565b601c54601d549192505f916127269185916001600160a01b039182169116612aba565b90508060018151811061273b5761273b613090565b6020908102919091010151601d54601354919350612766916001600160a01b039182169116846129a4565b601354601c54601d5460225460405162e8e33760e81b81526001600160a01b039384166004820152918316602483015260448201879052606482018690525f6084830181905260a4830152821660c48201524260e482015291169063e8e3370090610104016060604051808303815f875af11580156127e7573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061280b91906131ff565b5050601d546040516370a0823160e01b81523060048201525f92506001600160a01b03909116906370a0823190602401602060405180830381865afa158015612856573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061287a9190613106565b9050801561289b57601d5461289b906001600160a01b031661dead83612bae565b50505050565b601c546013546128be916001600160a01b039081169116836129a4565b6040805160028082526060820183525f926020830190803683375050601c5482519293506001600160a01b0316918391505f906128fd576128fd613090565b6001600160a01b039283166020918202929092010152601d5482519116908290600190811061292e5761292e613090565b6001600160a01b039283166020918202929092010152601354604051635c11d79560e01b8152911690635c11d795906129739085905f908690309042906004016131c4565b5f604051808303815f87803b15801561298a575f5ffd5b505af115801561299c573d5f5f3e3d5ffd5b505050505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663095ea7b360e01b17905291515f928392908716916129ff919061322a565b5f604051808303815f865af19150503d805f8114612a38576040519150601f19603f3d011682016040523d82523d5f602084013e612a3d565b606091505b5091509150818015612a67575080511580612a67575080806020019051810190612a679190613240565b612ab35760405162461bcd60e51b815260206004820152601e60248201527f5472616e7366657248656c7065723a20415050524f56455f4641494c454400006044820152606401610a62565b5050505050565b60408051600280825260608083018452925f92919060208301908036833701905050905083815f81518110612af157612af1613090565b60200260200101906001600160a01b031690816001600160a01b0316815250508281600181518110612b2557612b25613090565b6001600160a01b03928316602091820292909201015260135460405163d06ca61f60e01b815291169063d06ca61f90612b64908890859060040161325b565b5f60405180830381865afa158015612b7e573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052612ba5919081019061327b565b95945050505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b17905291515f92839290871691612c09919061322a565b5f604051808303815f865af19150503d805f8114612c42576040519150601f19603f3d011682016040523d82523d5f602084013e612c47565b606091505b5091509150818015612c71575080511580612c71575080806020019051810190612c719190613240565b612ab35760405162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c4544006044820152606401610a62565b6001600160a01b0381168114612275575f5ffd5b5f60208284031215612ce1575f5ffd5b81356125f181612cbd565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f5f60408385031215612d32575f5ffd5b8235612d3d81612cbd565b946020939093013593505050565b8015158114612275575f5ffd5b80356125dc81612d4b565b5f5f60408385031215612d74575f5ffd5b8235612d7f81612cbd565b91506020830135612d8f81612d4b565b809150509250929050565b5f5f5f60608486031215612dac575f5ffd5b8335612db781612cbd565b92506020840135612dc781612cbd565b929592945050506040919091013590565b5f60208284031215612de8575f5ffd5b81356125f181612d4b565b5f5f5f5f5f60a08688031215612e07575f5ffd5b8535612e1281612cbd565b94506020860135612e2281612cbd565b93506040860135612e3281612cbd565b92506060860135612e4281612cbd565b949793965091946080013592915050565b5f5f60408385031215612e64575f5ffd5b8235612e6f81612cbd565b91506020830135612d8f81612cbd565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff81118282101715612ebc57612ebc612e7f565b604052919050565b5f67ffffffffffffffff821115612edd57612edd612e7f565b5060051b60200190565b5f5f60408385031215612ef8575f5ffd5b823567ffffffffffffffff811115612f0e575f5ffd5b8301601f81018513612f1e575f5ffd5b8035612f31612f2c82612ec4565b612e93565b8082825260208201915060208360051b850101925087831115612f52575f5ffd5b6020840193505b82841015612f7d578335612f6c81612cbd565b825260209384019390910190612f59565b9450612f8f9250505060208401612d58565b90509250929050565b5f5f5f5f5f5f60c08789031215612fad575f5ffd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b5f60208284031215612fe7575f5ffd5b5035919050565b5f5f5f60608486031215613000575f5ffd5b833561300b81612d4b565b92506020840135612dc781612d4b565b600181811c9082168061302f57607f821691505b6020821081036125cc57634e487b7160e01b5f52602260045260245ffd5b602080825260029082015261216f60f01b604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b81810381811115610a3357610a33613069565b634e487b7160e01b5f52603260045260245ffd5b80516001600160701b03811681146125dc575f5ffd5b5f5f5f606084860312156130cc575f5ffd5b6130d5846130a4565b92506130e3602085016130a4565b9150604084015163ffffffff811681146130fb575f5ffd5b809150509250925092565b5f60208284031215613116575f5ffd5b5051919050565b8082028115828204841417610a3357610a33613069565b5f8261314e57634e487b7160e01b5f52601260045260245ffd5b500490565b80820180821115610a3357610a33613069565b5f60208284031215613176575f5ffd5b81516125f181612cbd565b5f8151808452602084019350602083015f5b828110156131ba5781516001600160a01b0316865260209586019590910190600101613193565b5093949350505050565b85815284602082015260a060408201525f6131e260a0830186613181565b6001600160a01b0394909416606083015250608001529392505050565b5f5f5f60608486031215613211575f5ffd5b5050815160208301516040909301519094929350919050565b5f82518060208501845e5f920191825250919050565b5f60208284031215613250575f5ffd5b81516125f181612d4b565b828152604060208201525f6132736040830184613181565b949350505050565b5f6020828403121561328b575f5ffd5b815167ffffffffffffffff8111156132a1575f5ffd5b8201601f810184136132b1575f5ffd5b80516132bf612f2c82612ec4565b8082825260208201915060208360051b8501019250868311156132e0575f5ffd5b6020840193505b828410156133025783518252602093840193909101906132e7565b969550505050505056fea26469706673582212203d9da78da3e618e9b3f89f80993bcab896068e6082d1f45fbe8203dda5117b7664736f6c634300081f00336080604052348015600e575f5ffd5b505f80546001600160a01b0319163317905561060d8061002d5f395ff3fe608060405234801561000f575f5ffd5b506004361061003f575f3560e01c80632e546dd21461004357806374c9f8dd14610058578063ba45b0b81461006b575b5f5ffd5b610056610051366004610466565b61007e565b005b6100566100663660046104c8565b61029b565b6100566100793660046104f0565b610369565b6040516370a0823160e01b81523060048201525f906001600160a01b038816906370a0823190602401602060405180830381865afa1580156100c2573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100e69190610521565b90505f856100f4888461054c565b6100fe9190610569565b90506001600160a01b03881663a9059cbb8661011b600285610569565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303815f875af1158015610163573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101879190610588565b506001600160a01b03881663a9059cbb856101a3600285610569565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303815f875af11580156101eb573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061020f9190610588565b505f61021b82846105ae565b60405163a9059cbb60e01b81526001600160a01b03868116600483015260248201839052919250908a169063a9059cbb906044016020604051808303815f875af115801561026b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061028f9190610588565b50505050505050505050565b604080515f808252602082019092526001600160a01b0384169083906040516102c491906105c1565b5f6040518083038185875af1925050503d805f81146102fe576040519150601f19603f3d011682016040523d82523d5f602084013e610303565b606091505b50509050806103645760405162461bcd60e51b815260206004820152602360248201527f5472616e7366657248656c7065723a204554485f5452414e534645525f46414960448201526213115160ea1b606482015260840160405180910390fd5b505050565b6040516370a0823160e01b81523060048201525f906001600160a01b038416906370a0823190602401602060405180830381865afa1580156103ad573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103d19190610521565b60405163a9059cbb60e01b81526001600160a01b038481166004830152602482018390529192509084169063a9059cbb906044016020604051808303815f875af1158015610421573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104459190610588565b50505050565b80356001600160a01b0381168114610461575f5ffd5b919050565b5f5f5f5f5f5f60c0878903121561047b575f5ffd5b6104848761044b565b955060208701359450604087013593506104a06060880161044b565b92506104ae6080880161044b565b91506104bc60a0880161044b565b90509295509295509295565b5f5f604083850312156104d9575f5ffd5b6104e28361044b565b946020939093013593505050565b5f5f60408385031215610501575f5ffd5b61050a8361044b565b91506105186020840161044b565b90509250929050565b5f60208284031215610531575f5ffd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b808202811582820484141761056357610563610538565b92915050565b5f8261058357634e487b7160e01b5f52601260045260245ffd5b500490565b5f60208284031215610598575f5ffd5b815180151581146105a7575f5ffd5b9392505050565b8181038181111561056357610563610538565b5f82518060208501845e5f92019182525091905056fea2646970667358221220b083684215c2a8f410de235d6e0ec9e4ebd703dc9985281c179f91b31c79ec1864736f6c634300081f0033

Deployed Bytecode

0x6080604052600436106102dc575f3560e01c806370a0823111610189578063b2887bec116100d8578063d83d414311610092578063ef34db691161006d578063ef34db6914610915578063f2fde38b14610940578063f5f193661461095f578063fb9d68391461097e575f5ffd5b8063d83d414314610893578063dd62ed3e146108b2578063de5c02c2146108f6575f5ffd5b8063b2887bec146107c6578063b354cbf3146107e5578063bd9a3b6d14610805578063ce4d9f1514610824578063d25d529b14610853578063d39612ab14610868575f5ffd5b8063879b8f571161014357806395d89b411161011e57806395d89b4114610741578063a176459514610755578063a842486114610788578063a9059cbb146107a7575f5ffd5b8063879b8f5714610710578063893d20e8146107255780638da5cb5b14610725575f5ffd5b806370a082311461064c578063715018a61461068057806373509a0014610694578063756b4190146106b35780637a37a0ed146106d257806384f2076d146106fb575f5ffd5b80633014b32e1161024557806346c123b6116101ff578063595dec3c116101da578063595dec3c146105bf5780635b954090146105ed57806368092bd9146106025780636ebcf60714610621575f5ffd5b806346c123b61461056c57806347a4e5d61461058b5780634c91c09e146105a0575f5ffd5b80633014b32e146104ba578063313ce567146104cf578063395ef9c7146104f05780633c11100d146105055780634188bf5a1461053357806343855e8414610557575f5ffd5b8063148b0eee11610296578063148b0eee146103ef57806318160ddd1461040f578063206c17bb1461042d5780632171dcc91461044c57806323b872dd1461046d5780632b01fc941461048c575f5ffd5b806301873d8f146102e757806301986fad1461032a57806304c23ffe1461035857806306fdde0314610378578063095ea7b314610399578063109bec39146103b8575f5ffd5b366102e357005b5f5ffd5b3480156102f2575f5ffd5b50610315610301366004612cd1565b60156020525f908152604090205460ff1681565b60405190151581526020015b60405180910390f35b348015610335575f5ffd5b50610315610344366004612cd1565b60106020525f908152604090205460ff1681565b348015610363575f5ffd5b5060185461031590600160a01b900460ff1681565b348015610383575f5ffd5b5061038c610993565b6040516103219190612cec565b3480156103a4575f5ffd5b506103156103b3366004612d21565b610a23565b3480156103c3575f5ffd5b506018546103d7906001600160a01b031681565b6040516001600160a01b039091168152602001610321565b3480156103fa575f5ffd5b5060185461031590600160a81b900460ff1681565b34801561041a575f5ffd5b50601f545b604051908152602001610321565b348015610438575f5ffd5b506013546103d7906001600160a01b031681565b348015610457575f5ffd5b5061046b610466366004612d63565b610a39565b005b348015610478575f5ffd5b50610315610487366004612d9a565b610a95565b348015610497575f5ffd5b506103156104a6366004612cd1565b60266020525f908152604090205460ff1681565b3480156104c5575f5ffd5b5061041f60025481565b3480156104da575f5ffd5b50600e5460405160ff9091168152602001610321565b3480156104fb575f5ffd5b5061041f60195481565b348015610510575f5ffd5b5061031561051f366004612cd1565b60146020525f908152604090205460ff1681565b34801561053e575f5ffd5b506017546103d79061010090046001600160a01b031681565b348015610562575f5ffd5b5061041f60035481565b348015610577575f5ffd5b5061046b610586366004612dd8565b610b27565b348015610596575f5ffd5b5061041f60045481565b3480156105ab575f5ffd5b5061046b6105ba366004612df3565b610b6e565b3480156105ca575f5ffd5b506103156105d9366004612cd1565b60116020525f908152604090205460ff1681565b3480156105f8575f5ffd5b5061041f60015481565b34801561060d575f5ffd5b5061046b61061c366004612d63565b610bea565b34801561062c575f5ffd5b5061041f61063b366004612cd1565b600a6020525f908152604090205481565b348015610657575f5ffd5b5061041f610666366004612cd1565b6001600160a01b03165f908152600a602052604090205490565b34801561068b575f5ffd5b5061046b610c3d565b34801561069f575f5ffd5b5061046b6106ae366004612e53565b610cae565b3480156106be575f5ffd5b5061046b6106cd366004612ee7565b610d0f565b3480156106dd575f5ffd5b506106e6610d97565b60408051928352602083019190915201610321565b348015610706575f5ffd5b5061041f601a5481565b34801561071b575f5ffd5b5061041f60095481565b348015610730575f5ffd5b505f546001600160a01b03166103d7565b34801561074c575f5ffd5b5061038c610e71565b348015610760575f5ffd5b506103d77f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c81565b348015610793575f5ffd5b5061046b6107a2366004612d63565b610e80565b3480156107b2575f5ffd5b506103156107c1366004612d21565b610ed3565b3480156107d1575f5ffd5b5061046b6107e0366004612ee7565b610edf565b3480156107f0575f5ffd5b5060185461031590600160b01b900460ff1681565b348015610810575f5ffd5b5061046b61081f366004612f98565b610f62565b34801561082f575f5ffd5b50610838610fab565b60408051938452602084019290925290820152606001610321565b34801561085e575f5ffd5b5061041f60065481565b348015610873575f5ffd5b5061041f610882366004612cd1565b60166020525f908152604090205481565b34801561089e575f5ffd5b5061046b6108ad366004612d63565b611053565b3480156108bd575f5ffd5b5061041f6108cc366004612e53565b6001600160a01b039182165f908152600b6020908152604080832093909416825291909152205490565b348015610901575f5ffd5b506103d7610910366004612fd7565b6110a6565b348015610920575f5ffd5b5061041f61092f366004612cd1565b60256020525f908152604090205481565b34801561094b575f5ffd5b5061046b61095a366004612cd1565b6110ce565b34801561096a575f5ffd5b5061046b610979366004612fee565b61118b565b348015610989575f5ffd5b5061041f60055481565b6060600c80546109a29061301b565b80601f01602080910402602001604051908101604052809291908181526020018280546109ce9061301b565b8015610a195780601f106109f057610100808354040283529160200191610a19565b820191905f5260205f20905b8154815290600101906020018083116109fc57829003601f168201915b5050505050905090565b5f610a2f3384846111ed565b5060015b92915050565b5f546001600160a01b03163314610a6b5760405162461bcd60e51b8152600401610a629061304d565b60405180910390fd5b6001600160a01b03919091165f908152601560205260409020805460ff1916911515919091179055565b5f610aa184848461124e565b6001600160a01b0384165f908152600b602090815260408083203384529091529020545f1914610b1d576001600160a01b0384165f908152600b60209081526040808320338452909152902054610af990839061307d565b6001600160a01b0385165f908152600b602090815260408083203384529091529020555b5060019392505050565b5f546001600160a01b03163314610b505760405162461bcd60e51b8152600401610a629061304d565b60188054911515600160a01b0260ff60a01b19909216919091179055565b5f546001600160a01b03163314610b975760405162461bcd60e51b8152600401610a629061304d565b601d80546001600160a01b03199081166001600160a01b03978816179091556020805482169587169590951790945560218054851693861693909317909255602280549093169316929092179055601955565b5f546001600160a01b03163314610c135760405162461bcd60e51b8152600401610a629061304d565b6001600160a01b03919091165f908152601160205260409020805460ff1916911515919091179055565b5f546001600160a01b03163314610c665760405162461bcd60e51b8152600401610a629061304d565b5f80546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a35f80546001600160a01b0319169055565b5f546001600160a01b03163314610cd75760405162461bcd60e51b8152600401610a629061304d565b60178054610100600160a81b0319166101006001600160a01b0394851602179055601880546001600160a01b03191691909216179055565b5f546001600160a01b03163314610d385760405162461bcd60e51b8152600401610a629061304d565b5f5b8251811015610d92578160115f858481518110610d5957610d59613090565b6020908102919091018101516001600160a01b031682528101919091526040015f20805460ff1916911515919091179055600101610d3a565b505050565b5f5f5f601760019054906101000a90046001600160a01b031690505f5f826001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015610df0573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e1491906130ba565b506001600160701b0391821693501690507f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c306001600160a01b0382161015610e6257829550819450610e69565b8195508294505b505050509091565b6060600d80546109a29061301b565b5f546001600160a01b03163314610ea95760405162461bcd60e51b8152600401610a629061304d565b6001600160a01b03919091165f908152601460205260409020805460ff1916911515919091179055565b5f610a2f33848461124e565b5f546001600160a01b03163314610f085760405162461bcd60e51b8152600401610a629061304d565b5f5b8251811015610d92578160105f858481518110610f2957610f29613090565b6020908102919091018101516001600160a01b031682528101919091526040015f20805460ff1916911515919091179055600101610f0a565b5f546001600160a01b03163314610f8b5760405162461bcd60e51b8152600401610a629061304d565b600695909555600493909355600591909155600291909155600155600355565b5f5f5f610fb6610d97565b6017546040516370a0823160e01b81526001600160a01b03610100909204821660048201529295509093507f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c16906370a0823190602401602060405180830381865afa158015611028573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061104c9190613106565b9050909192565b5f546001600160a01b0316331461107c5760405162461bcd60e51b8152600401610a629061304d565b6001600160a01b03919091165f908152601060205260409020805460ff1916911515919091179055565b602481815481106110b5575f80fd5b5f918252602090912001546001600160a01b0316905081565b5f546001600160a01b031633146110f75760405162461bcd60e51b8152600401610a629061304d565b6001600160a01b0381166111325760405162461bcd60e51b815260206004820152600260248201526106e360f41b6044820152606401610a62565b5f80546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a35f80546001600160a01b0319166001600160a01b0392909216919091179055565b5f546001600160a01b031633146111b45760405162461bcd60e51b8152600401610a629061304d565b60188054921515600160b01b0260ff60b01b19941515600160a81b029490941661ffff60a81b1990931692909217929092179055601a55565b6001600160a01b038381165f818152600b602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383165f9081526011602052604090205460ff16158061128c57506001600160a01b0383165f9081526010602052604090205460ff165b6112cc5760405162461bcd60e51b81526020600482015260116024820152706e6f742076616c6964206164647265737360781b6044820152606401610a62565b6001600160a01b0383165f908152600a6020526040902054818110156113285760405162461bcd60e51b81526020600482015260116024820152701b9bdd08195b9bdd59da08185b5bdd5b9d607a1b6044820152606401610a62565b6001600160a01b0384165f9081526010602052604081205460ff1615801561136857506001600160a01b0384165f9081526010602052604090205460ff16155b15611371575060015b6001600160a01b038085165f90815260166020526040812043905560185490918291888216911614806113b157506018546001600160a01b038781169116145b15611401576018546001600160a01b03908116908716036113db576113d4611516565b91506114ff565b6018546001600160a01b03908116908816036113fc576113f9611632565b90505b6114ff565b6017545f906001600160a01b03888116610100909204161480156114335750335f9081526015602052604090205460ff165b80156114475750326001600160a01b038916145b15611465576114558661174e565b9050801561146557600192505f93505b6017545f906001600160a01b038a81166101009092041614801561149757506013546001600160a01b03898116911614155b156114ac576114a5876117b5565b90506114ce565b6013546001600160a01b03908116908a16036114ce576114cb876118ec565b90505b80156114fc576001600160a01b0388165f908152601060205260409020546001935060ff166114fc57600194505b50505b61150d87878786858761199e565b50505050505050565b60185460408051630240bc6b60e21b815290515f926001600160a01b031691839182918491630902f1ac916004808201926060929091908290030181865afa158015611564573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061158891906130ba565b50601c546001600160701b039283169450911691506001600160a01b03165f308210156115b65750826115b9565b50815b6040516370a0823160e01b81526001600160a01b0386811660048301525f91908416906370a0823190602401602060405180830381865afa158015611600573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116249190613106565b919091119695505050505050565b60185460408051630240bc6b60e21b815290515f926001600160a01b031691839182918491630902f1ac916004808201926060929091908290030181865afa158015611680573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116a491906130ba565b50601c546001600160701b039283169450911691506001600160a01b03165f308210156116d25750826116d5565b50815b6040516370a0823160e01b81526001600160a01b0386811660048301525f91908416906370a0823190602401602060405180830381865afa15801561171c573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117409190613106565b909110159695505050505050565b5f5f5f5f61175a610fab565b9250925092505f5f8411801561176f57505f83115b1561178c578261177f858861311d565b6117899190613134565b90505b6117968185613153565b82106117ac576117a882878686611dcf565b5094505b50505050919050565b5f5f5f5f6117c1610fab565b925092509250828110156118895760175461010090046001600160a01b03165f908152600a60205260409020546117f990869061307d565b601760019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561184a573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061186e9190613106565b611878908761311d565b6118829190613134565b93506118e4565b601854600160a01b900460ff16156118e4575f5f841180156118aa57505f83115b156117ac576118b9868461307d565b6118c3858861311d565b6118cd9190613134565b90506118d98482613153565b8210156117ac575f5ffd5b505050919050565b5f5f5f6118f7610fab565b92505091508181116119975760175461010090046001600160a01b03165f818152600a60209081526040918290205482516318160ddd60e01b815292519093926318160ddd9260048083019391928290030181865afa15801561195c573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119809190613106565b61198a908661311d565b6119949190613134565b92505b5050919050565b6001600160a01b0386165f908152600a60205260409020546119c190859061307d565b6001600160a01b0387165f908152600a60209081526040808320939093556016905290812054601a54829182918291829182918291611a009082613153565b90508a15611bff5789611b9c578815611a2157611a1c8e6121ab565b611b9c565b6001600160a01b038e165f9081526014602052604090205460ff1615611ae35760185460019450600160a81b900460ff16611a875760405162461bcd60e51b8152600401610a629060208082526004908201526369736f6b60e01b604082015260600190565b6127106004548d611a98919061311d565b611aa29190613134565b97506127106006548d611ab5919061311d565b611abf9190613134565b96506127106005548d611ad2919061311d565b611adc9190613134565b9550611b9c565b6001600160a01b038d165f9081526014602052604090205460ff1615611b9757601854600160b01b900460ff1615611b4857438110611b485760405162461bcd60e51b81526020600482015260016024820152603f60f81b6044820152606401610a62565b600194506127106001548d611b5d919061311d565b611b679190613134565b97506127106002548d611b7a919061311d565b611b849190613134565b96506127106003548d611ad2919061311d565b600192505b611ba68789613153565b9650611bb28688613153565b91508115611bff57611bc58e3084612278565b305f908152600a602052604090205460175460ff16158015611be45750855b8015611bef57505f81115b15611bfd57611bfd816122ee565b505b8480611c085750825b15611d845760235f611c1d6201518042613134565b815260208101919091526040015f205460ff16158015611c5457506018546001600160a01b03165f908152600a6020526040812054115b15611d84576019546018546001600160a01b03165f908152600a6020526040812054909161271091611c86919061311d565b611c909190613134565b6018546001600160a01b03165f908152600a6020526040902054909150611cb890829061307d565b6018546001600160a01b039081165f908152600a6020526040902091909155601754611cee916101009091041661dead83612278565b60185f9054906101000a90046001600160a01b03166001600160a01b031663fff6cae96040518163ffffffff1660e01b81526004015f604051808303815f87803b158015611d3a575f5ffd5b505af1158015611d4c573d5f5f3e3d5ffd5b50505050600160235f6201518042611d649190613134565b815260208101919091526040015f20805460ff1916911515919091179055505b81600754611d929190613153565b600755600854611da3908890613153565b600881905550611dbf8e8e848f611dba919061307d565b612278565b5050505050505050505050505050565b5f5f5f601760019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e23573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e479190613106565b90505f60135f9054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e9a573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ebe9190613166565b6001600160a01b031663017e7e586040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ef9573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f1d9190613166565b60175460408051637464fc3d60e01b815290519293506001600160a01b038085161515935f93610100900490911691637464fc3d9160048083019260209291908290030181865afa158015611f74573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f989190613106565b90508115612133578015612133575f611fb9611fb4898b61311d565b612573565b90505f611fc583612573565b905080821115612130576013545f9081906001600160a01b03167310ed43c718714eb63d5aa57b78b54704e256024d190161204257612004838561307d565b61200e908961311d565b61201990600861311d565b915061202683600861311d565b61203185601161311d565b61203b9190613153565b905061210e565b6013546001600160a01b031673d99d1c33f9fc3444f8101754abc46c52416550d0190161208b57612073838561307d565b61207d908961311d565b91508261203185600361311d565b6013546001600160a01b031673e9d6f80028671279a28790bb4007b10b0595def019016120df576120bc838561307d565b6120c6908961311d565b6120d190600361311d565b91508261203185600561311d565b6120e9838561307d565b6120f3908961311d565b91508261210185600561311d565b61210b9190613153565b90505b6121188183613134565b9850881561212d5761212a8989613153565b97505b50505b50505b5f61213e898c61307d565b9050845f03612168576103e8612157611fb48c8461311d565b612161919061307d565b965061219d565b61219a89612176878461311d565b6121809190613134565b8961218b888e61311d565b6121959190613134565b6125e1565b96505b505050505094509492505050565b6001600160a01b0381165f9081526025602052604081205490036122755760245415806122075750806001600160a01b031660245f815481106121f0576121f0613090565b5f918252602090912001546001600160a01b031614155b1561227557803b8015612218575050565b50602480546001600160a01b0383165f818152602560205260408120839055600183018455929092527f7cd332d19b93bcabe3cce7ca0c18a052f57e5fd03b4758a09f30f5ddc4b22ec40180546001600160a01b03191690911790555b50565b6001600160a01b0382165f908152600a602052604090205461229b908290613153565b6001600160a01b038084165f818152600a602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906112419085815260200190565b6017805460ff191660011790558015612566576040805160028082526060820183525f9260208301908036833701905050905030815f8151811061233457612334613090565b6001600160a01b039283166020918202929092010152601c5482519116908290600190811061236557612365613090565b6001600160a01b039283166020918202929092010152601354601254604051635c11d79560e01b815291831692635c11d795926123b09287925f9288929091169042906004016131c4565b5f604051808303815f87803b1580156123c7575f5ffd5b505af11580156123d9573d5f5f3e3d5ffd5b505050505f600854111561248257601254601c5460085460075460205460215460405163172a36e960e11b81526001600160a01b0395861660048201526024810194909452604484019290925283166064830152821660848201523060a4820152911690632e546dd29060c4015f604051808303815f87803b15801561245d575f5ffd5b505af115801561246f573d5f5f3e3d5ffd5b50505f6008819055600755506124e99050565b601254601c54604051631748b61760e31b81526001600160a01b03918216600482015230602482015291169063ba45b0b8906044015f604051808303815f87803b1580156124ce575f5ffd5b505af11580156124e0573d5f5f3e3d5ffd5b50505f60075550505b601c546040516370a0823160e01b81523060048201525f916001600160a01b0316906370a0823190602401602060405180830381865afa15801561252f573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125539190613106565b90508015612563576125636125f8565b50505b506017805460ff19169055565b5f60038211156125d25750805f61258b600283613134565b612596906001613153565b90505b818110156125cc579050806002816125b18186613134565b6125bb9190613153565b6125c59190613134565b9050612599565b50919050565b81156125dc575060015b919050565b5f8183106125ef57816125f1565b825b9392505050565b601c546040516370a0823160e01b81523060048201525f916002916001600160a01b03909116906370a0823190602401602060405180830381865afa158015612643573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126679190613106565b6126719190613134565b905061267c816128a1565b601c54601354612699916001600160a01b039081169116836129a4565b601d546040516370a0823160e01b81523060048201525f916001600160a01b0316906370a0823190602401602060405180830381865afa1580156126df573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127039190613106565b601c54601d549192505f916127269185916001600160a01b039182169116612aba565b90508060018151811061273b5761273b613090565b6020908102919091010151601d54601354919350612766916001600160a01b039182169116846129a4565b601354601c54601d5460225460405162e8e33760e81b81526001600160a01b039384166004820152918316602483015260448201879052606482018690525f6084830181905260a4830152821660c48201524260e482015291169063e8e3370090610104016060604051808303815f875af11580156127e7573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061280b91906131ff565b5050601d546040516370a0823160e01b81523060048201525f92506001600160a01b03909116906370a0823190602401602060405180830381865afa158015612856573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061287a9190613106565b9050801561289b57601d5461289b906001600160a01b031661dead83612bae565b50505050565b601c546013546128be916001600160a01b039081169116836129a4565b6040805160028082526060820183525f926020830190803683375050601c5482519293506001600160a01b0316918391505f906128fd576128fd613090565b6001600160a01b039283166020918202929092010152601d5482519116908290600190811061292e5761292e613090565b6001600160a01b039283166020918202929092010152601354604051635c11d79560e01b8152911690635c11d795906129739085905f908690309042906004016131c4565b5f604051808303815f87803b15801561298a575f5ffd5b505af115801561299c573d5f5f3e3d5ffd5b505050505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663095ea7b360e01b17905291515f928392908716916129ff919061322a565b5f604051808303815f865af19150503d805f8114612a38576040519150601f19603f3d011682016040523d82523d5f602084013e612a3d565b606091505b5091509150818015612a67575080511580612a67575080806020019051810190612a679190613240565b612ab35760405162461bcd60e51b815260206004820152601e60248201527f5472616e7366657248656c7065723a20415050524f56455f4641494c454400006044820152606401610a62565b5050505050565b60408051600280825260608083018452925f92919060208301908036833701905050905083815f81518110612af157612af1613090565b60200260200101906001600160a01b031690816001600160a01b0316815250508281600181518110612b2557612b25613090565b6001600160a01b03928316602091820292909201015260135460405163d06ca61f60e01b815291169063d06ca61f90612b64908890859060040161325b565b5f60405180830381865afa158015612b7e573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052612ba5919081019061327b565b95945050505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b17905291515f92839290871691612c09919061322a565b5f604051808303815f865af19150503d805f8114612c42576040519150601f19603f3d011682016040523d82523d5f602084013e612c47565b606091505b5091509150818015612c71575080511580612c71575080806020019051810190612c719190613240565b612ab35760405162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c4544006044820152606401610a62565b6001600160a01b0381168114612275575f5ffd5b5f60208284031215612ce1575f5ffd5b81356125f181612cbd565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f5f60408385031215612d32575f5ffd5b8235612d3d81612cbd565b946020939093013593505050565b8015158114612275575f5ffd5b80356125dc81612d4b565b5f5f60408385031215612d74575f5ffd5b8235612d7f81612cbd565b91506020830135612d8f81612d4b565b809150509250929050565b5f5f5f60608486031215612dac575f5ffd5b8335612db781612cbd565b92506020840135612dc781612cbd565b929592945050506040919091013590565b5f60208284031215612de8575f5ffd5b81356125f181612d4b565b5f5f5f5f5f60a08688031215612e07575f5ffd5b8535612e1281612cbd565b94506020860135612e2281612cbd565b93506040860135612e3281612cbd565b92506060860135612e4281612cbd565b949793965091946080013592915050565b5f5f60408385031215612e64575f5ffd5b8235612e6f81612cbd565b91506020830135612d8f81612cbd565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff81118282101715612ebc57612ebc612e7f565b604052919050565b5f67ffffffffffffffff821115612edd57612edd612e7f565b5060051b60200190565b5f5f60408385031215612ef8575f5ffd5b823567ffffffffffffffff811115612f0e575f5ffd5b8301601f81018513612f1e575f5ffd5b8035612f31612f2c82612ec4565b612e93565b8082825260208201915060208360051b850101925087831115612f52575f5ffd5b6020840193505b82841015612f7d578335612f6c81612cbd565b825260209384019390910190612f59565b9450612f8f9250505060208401612d58565b90509250929050565b5f5f5f5f5f5f60c08789031215612fad575f5ffd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b5f60208284031215612fe7575f5ffd5b5035919050565b5f5f5f60608486031215613000575f5ffd5b833561300b81612d4b565b92506020840135612dc781612d4b565b600181811c9082168061302f57607f821691505b6020821081036125cc57634e487b7160e01b5f52602260045260245ffd5b602080825260029082015261216f60f01b604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b81810381811115610a3357610a33613069565b634e487b7160e01b5f52603260045260245ffd5b80516001600160701b03811681146125dc575f5ffd5b5f5f5f606084860312156130cc575f5ffd5b6130d5846130a4565b92506130e3602085016130a4565b9150604084015163ffffffff811681146130fb575f5ffd5b809150509250925092565b5f60208284031215613116575f5ffd5b5051919050565b8082028115828204841417610a3357610a33613069565b5f8261314e57634e487b7160e01b5f52601260045260245ffd5b500490565b80820180821115610a3357610a33613069565b5f60208284031215613176575f5ffd5b81516125f181612cbd565b5f8151808452602084019350602083015f5b828110156131ba5781516001600160a01b0316865260209586019590910190600101613193565b5093949350505050565b85815284602082015260a060408201525f6131e260a0830186613181565b6001600160a01b0394909416606083015250608001529392505050565b5f5f5f60608486031215613211575f5ffd5b5050815160208301516040909301519094929350919050565b5f82518060208501845e5f920191825250919050565b5f60208284031215613250575f5ffd5b81516125f181612d4b565b828152604060208201525f6132736040830184613181565b949350505050565b5f6020828403121561328b575f5ffd5b815167ffffffffffffffff8111156132a1575f5ffd5b8201601f810184136132b1575f5ffd5b80516132bf612f2c82612ec4565b8082825260208201915060208360051b8501019250868311156132e0575f5ffd5b6020840193505b828410156133025783518252602093840193909101906132e7565b969550505050505056fea26469706673582212203d9da78da3e618e9b3f89f80993bcab896068e6082d1f45fbe8203dda5117b7664736f6c634300081f0033

Deployed Bytecode Sourcemap

11233:20835:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12187:44;;;;;;;;;;-1:-1:-1;12187:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;567:14:1;;560:22;542:41;;530:2;515:18;12187:44:0;;;;;;;;11962:45;;;;;;;;;;-1:-1:-1;11962:45:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;12523:31;;;;;;;;;;-1:-1:-1;12523:31:0;;;;-1:-1:-1;;;12523:31:0;;;;;;15375:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;16034:151::-;;;;;;;;;;-1:-1:-1;16034:151:0;;;;;:::i;:::-;;:::i;12455:22::-;;;;;;;;;;-1:-1:-1;12455:22:0;;;;-1:-1:-1;;;;;12455:22:0;;;;;;-1:-1:-1;;;;;1553:32:1;;;1535:51;;1523:2;1508:18;12455:22:0;1389:203:1;12561:27:0;;;;;;;;;;-1:-1:-1;12561:27:0;;;;-1:-1:-1;;;12561:27:0;;;;;;15510:87;;;;;;;;;;-1:-1:-1;15579:12:0;;15510:87;;;1743:25:1;;;1731:2;1716:18;15510:87:0;1597:177:1;12097:31:0;;;;;;;;;;-1:-1:-1;12097:31:0;;;;-1:-1:-1;;;;;12097:31:0;;;30626:113;;;;;;;;;;-1:-1:-1;30626:113:0;;;;;:::i;:::-;;:::i;:::-;;16193:336;;;;;;;;;;-1:-1:-1;16193:336:0;;;;;:::i;:::-;;:::i;31547:49::-;;;;;;;;;;-1:-1:-1;31547:49:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;11312:28;;;;;;;;;;;;;;;;15103:79;;;;;;;;;;-1:-1:-1;15167:9:0;;15103:79;;15167:9;;;;3304:36:1;;3292:2;3277:18;15103:79:0;3162:184:1;12629:27:0;;;;;;;;;;;;;;;;12135:45;;;;;;;;;;-1:-1:-1;12135:45:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;12423:25;;;;;;;;;;-1:-1:-1;12423:25:0;;;;;;;-1:-1:-1;;;;;12423:25:0;;;11347:26;;;;;;;;;;;;;;;;30792:94;;;;;;;;;;-1:-1:-1;30792:94:0;;;;;:::i;:::-;;:::i;11380:27::-;;;;;;;;;;;;;;;;31103:337;;;;;;;;;;-1:-1:-1;31103:337:0;;;;;:::i;:::-;;:::i;12014:42::-;;;;;;;;;;-1:-1:-1;12014:42:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;11277:28;;;;;;;;;;;;;;;;30178:110;;;;;;;;;;-1:-1:-1;30178:110:0;;;;;:::i;:::-;;:::i;11676:44::-;;;;;;;;;;-1:-1:-1;11676:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;15607:111;;;;;;;;;;-1:-1:-1;15607:111:0;;;;;:::i;:::-;-1:-1:-1;;;;;15692:18:0;15665:7;15692:18;;;:9;:18;;;;;;;15607:111;8069:148;;;;;;;;;;;;;:::i;16720:132::-;;;;;;;;;;-1:-1:-1;16720:132:0;;;;;:::i;:::-;;:::i;30296:193::-;;;;;;;;;;-1:-1:-1;30296:193:0;;;;;:::i;:::-;;:::i;23375:405::-;;;;;;;;;;;;;:::i;:::-;;;;6607:25:1;;;6663:2;6648:18;;6641:34;;;;6580:18;23375:405:0;6433:248:1;12663:36:0;;;;;;;;;;;;;;;;11534:35;;;;;;;;;;;;;;;;14965:79;;;;;;;;;;-1:-1:-1;15008:7:0;7952:6;-1:-1:-1;;;;;7952:6:0;14965:79;;15239:83;;;;;;;;;;;;;:::i;12484:30::-;;;;;;;;;;;;;;;30502:116;;;;;;;;;;-1:-1:-1;30502:116:0;;;;;:::i;:::-;;:::i;15726:157::-;;;;;;;;;;-1:-1:-1;15726:157:0;;;;;:::i;:::-;;:::i;29923:247::-;;;;;;;;;;-1:-1:-1;29923:247:0;;;;;:::i;:::-;;:::i;12595:27::-;;;;;;;;;;-1:-1:-1;12595:27:0;;;;-1:-1:-1;;;12595:27:0;;;;;;20592:373;;;;;;;;;;-1:-1:-1;20592:373:0;;;;;:::i;:::-;;:::i;23158:209::-;;;;;;;;;;;;;:::i;:::-;;;;7722:25:1;;;7778:2;7763:18;;7756:34;;;;7806:18;;;7799:34;7710:2;7695:18;23158:209:0;7520:319:1;11448:29:0;;;;;;;;;;;;;;;;12238:41;;;;;;;;;;-1:-1:-1;12238:41:0;;;;;:::i;:::-;;;;;;;;;;;;;;29799:116;;;;;;;;;;-1:-1:-1;29799:116:0;;;;;:::i;:::-;;:::i;15891:135::-;;;;;;;;;;-1:-1:-1;15891:135:0;;;;;:::i;:::-;-1:-1:-1;;;;;15991:18:0;;;15964:7;15991:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;15891:135;31455:28;;;;;;;;;;-1:-1:-1;31455:28:0;;;;;:::i;:::-;;:::i;31490:50::-;;;;;;;;;;-1:-1:-1;31490:50:0;;;;;:::i;:::-;;;;;;;;;;;;;;8225:208;;;;;;;;;;-1:-1:-1;8225:208:0;;;;;:::i;:::-;;:::i;30897:200::-;;;;;;;;;;-1:-1:-1;30897:200:0;;;;;:::i;:::-;;:::i;11414:27::-;;;;;;;;;;;;;;;;15375:79;15414:13;15443:5;15436:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15375:79;:::o;16034:151::-;16101:4;16118:37;16127:10;16139:7;16148:6;16118:8;:37::i;:::-;-1:-1:-1;16173:4:0;16034:151;;;;;:::o;30626:113::-;8014:6;;-1:-1:-1;;;;;8014:6:0;8024:10;8014:20;8006:35;;;;-1:-1:-1;;;8006:35:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;30704:18:0;;;::::1;;::::0;;;:12:::1;:18;::::0;;;;:27;;-1:-1:-1;;30704:27:0::1;::::0;::::1;;::::0;;;::::1;::::0;;30626:113::o;16193:336::-;16291:4;16308:36;16318:6;16326:9;16337:6;16308:9;:36::i;:::-;-1:-1:-1;;;;;16359:19:0;;12406:1;16359:19;;;:11;:19;;;;;;;;16379:10;16359:31;;;;;;;;-1:-1:-1;;16359:38:0;16355:145;;-1:-1:-1;;;;;16448:19:0;;;;;;:11;:19;;;;;;;;16468:10;16448:31;;;;;;;;:40;;16482:6;;16448:40;:::i;:::-;-1:-1:-1;;;;;16414:19:0;;;;;;:11;:19;;;;;;;;16434:10;16414:31;;;;;;;:74;16355:145;-1:-1:-1;16517:4:0;16193:336;;;;;:::o;30792:94::-;8014:6;;-1:-1:-1;;;;;8014:6:0;8024:10;8014:20;8006:35;;;;-1:-1:-1;;;8006:35:0;;;;;;;:::i;:::-;30857:12:::1;:21:::0;;;::::1;;-1:-1:-1::0;;;30857:21:0::1;-1:-1:-1::0;;;;30857:21:0;;::::1;::::0;;;::::1;::::0;;30792:94::o;31103:337::-;8014:6;;-1:-1:-1;;;;;8014:6:0;8024:10;8014:20;8006:35;;;;-1:-1:-1;;;8006:35:0;;;;;;;:::i;:::-;31255:10:::1;:22:::0;;-1:-1:-1;;;;;;31255:22:0;;::::1;-1:-1:-1::0;;;;;31255:22:0;;::::1;;::::0;;;31288:11:::1;:26:::0;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;31325:11:::1;:24:::0;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;31360:15:::1;:31:::0;;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;31402:11:::1;:22:::0;31103:337::o;30178:110::-;8014:6;;-1:-1:-1;;;;;8014:6:0;8024:10;8014:20;8006:35;;;;-1:-1:-1;;;8006:35:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;30255:16:0;;;::::1;;::::0;;;:10:::1;:16;::::0;;;;:25;;-1:-1:-1;;30255:25:0::1;::::0;::::1;;::::0;;;::::1;::::0;;30178:110::o;8069:148::-;8014:6;;-1:-1:-1;;;;;8014:6:0;8024:10;8014:20;8006:35;;;;-1:-1:-1;;;8006:35:0;;;;;;;:::i;:::-;8176:1:::1;8160:6:::0;;8139:40:::1;::::0;-1:-1:-1;;;;;8160:6:0;;::::1;::::0;8139:40:::1;::::0;8176:1;;8139:40:::1;8207:1;8190:19:::0;;-1:-1:-1;;;;;;8190:19:0::1;::::0;;8069:148::o;16720:132::-;8014:6;;-1:-1:-1;;;;;8014:6:0;8024:10;8014:20;8006:35;;;;-1:-1:-1;;;8006:35:0;;;;;;;:::i;:::-;16800:9:::1;:18:::0;;-1:-1:-1;;;;;;16800:18:0::1;;-1:-1:-1::0;;;;;16800:18:0;;::::1;;;::::0;;16829:6:::1;:15:::0;;-1:-1:-1;;;;;;16829:15:0::1;::::0;;;::::1;;::::0;;16720:132::o;30296:193::-;8014:6;;-1:-1:-1;;;;;8014:6:0;8024:10;8014:20;8006:35;;;;-1:-1:-1;;;8006:35:0;;;;;;;:::i;:::-;30393:6:::1;30388:94;30409:4;:11;30405:1;:15;30388:94;;;30464:6;30442:10;:19;30453:4;30458:1;30453:7;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;30442:19:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;30442:19:0;:28;;-1:-1:-1;;30442:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;-1:-1:-1;30422:3:0::1;30388:94;;;;30296:193:::0;;:::o;23375:405::-;23421:14;23437:13;23462:18;23493:9;;;;;;;;;-1:-1:-1;;;;;23493:9:0;23462:41;;23515:7;23524:10;23539:8;-1:-1:-1;;;;;23539:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;23514:47:0;;;;-1:-1:-1;23514:47:0;;-1:-1:-1;23593:5:0;23634:4;-1:-1:-1;;;;;23613:26:0;;;23609:164;;;23665:2;23656:11;;23690:2;23682:10;;23609:164;;;23734:2;23725:11;;23759:2;23751:10;;23609:164;23451:329;;;;23375:405;;:::o;15239:83::-;15280:13;15309:7;15302:14;;;;;:::i;30502:116::-;8014:6;;-1:-1:-1;;;;;8014:6:0;8024:10;8014:20;8006:35;;;;-1:-1:-1;;;8006:35:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;30582:19:0;;;::::1;;::::0;;;:13:::1;:19;::::0;;;;:28;;-1:-1:-1;;30582:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;30502:116::o;15726:157::-;15796:4;15813:40;15823:10;15835:9;15846:6;15813:9;:40::i;29923:247::-;8014:6;;-1:-1:-1;;;;;8014:6:0;8024:10;8014:20;8006:35;;;;-1:-1:-1;;;8006:35:0;;;;;;;:::i;:::-;30071:6:::1;30066:97;30087:4;:11;30083:1;:15;30066:97;;;30145:6;30120:13;:22;30134:4;30139:1;30134:7;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;30120:22:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;30120:22:0;:31;;-1:-1:-1;;30120:31:0::1;::::0;::::1;;::::0;;;::::1;::::0;;-1:-1:-1;30100:3:0::1;30066:97;;20592:373:::0;8014:6;;-1:-1:-1;;;;;8014:6:0;8024:10;8014:20;8006:35;;;;-1:-1:-1;;;8006:35:0;;;;;;;:::i;:::-;20754:11:::1;:25:::0;;;;20790:11:::1;:26:::0;;;;20827:9:::1;:22:::0;;;;-1:-1:-1;20860:28:0;;;;-1:-1:-1;20899:25:0;-1:-1:-1;20935:22:0;20592:373::o;23158:209::-;23203:14;23219:13;23234:20;23284:15;:13;:15::i;:::-;23349:9;;23325:34;;-1:-1:-1;;;23325:34:0;;-1:-1:-1;;;;;23349:9:0;;;;;;23325:34;;;1535:51:1;23266:33:0;;-1:-1:-1;23266:33:0;;-1:-1:-1;23332:5:0;23325:23;;;;1508:18:1;;23325:34:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23310:49;;23158:209;;;:::o;29799:116::-;8014:6;;-1:-1:-1;;;;;8014:6:0;8024:10;8014:20;8006:35;;;;-1:-1:-1;;;8006:35:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;29879:19:0;;;::::1;;::::0;;;:13:::1;:19;::::0;;;;:28;;-1:-1:-1;;29879:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;29799:116::o;31455:28::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;31455:28:0;;-1:-1:-1;31455:28:0;:::o;8225:208::-;8014:6;;-1:-1:-1;;;;;8014:6:0;8024:10;8014:20;8006:35;;;;-1:-1:-1;;;8006:35:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;8314:22:0;::::1;8306:37;;;::::0;-1:-1:-1;;;8306:37:0;;10773:2:1;8306:37:0::1;::::0;::::1;10755:21:1::0;10812:1;10792:18;;;10785:29;-1:-1:-1;;;10830:18:1;;;10823:32;10872:18;;8306:37:0::1;10571:325:1::0;8306:37:0::1;8380:6;::::0;;8359:38:::1;::::0;-1:-1:-1;;;;;8359:38:0;;::::1;::::0;8380:6;::::1;::::0;8359:38:::1;::::0;::::1;8408:6;:17:::0;;-1:-1:-1;;;;;;8408:17:0::1;-1:-1:-1::0;;;;;8408:17:0;;;::::1;::::0;;;::::1;::::0;;8225:208::o;30897:200::-;8014:6;;-1:-1:-1;;;;;8014:6:0;8024:10;8014:20;8006:35;;;;-1:-1:-1;;;8006:35:0;;;;;;;:::i;:::-;30997:9:::1;:15:::0;;31023:22;::::1;;-1:-1:-1::0;;;31023:22:0::1;-1:-1:-1::0;;;;30997:15:0;::::1;;-1:-1:-1::0;;;30997:15:0::1;31023:22:::0;;;;-1:-1:-1;;;;31023:22:0;;;;;;;;;;::::1;::::0;;31056:13:::1;:23:::0;30897:200::o;16537:177::-;-1:-1:-1;;;;;16622:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;16674:32;;1743:25:1;;;16674:32:0;;1716:18:1;16674:32:0;;;;;;;;16537:177;;;:::o;16898:1697::-;-1:-1:-1;;;;;17021:16:0;;;;;;:10;:16;;;;;;;;17020:17;;:40;;-1:-1:-1;;;;;;17041:19:0;;;;;;:13;:19;;;;;;;;17020:40;17012:70;;;;-1:-1:-1;;;17012:70:0;;11103:2:1;17012:70:0;;;11085:21:1;11142:2;11122:18;;;11115:30;-1:-1:-1;;;11161:18:1;;;11154:47;11218:18;;17012:70:0;10901:341:1;17012:70:0;-1:-1:-1;;;;;15692:18:0;;17093:15;15692:18;;;:9;:18;;;;;;17145:17;;;;17137:47;;;;-1:-1:-1;;;17137:47:0;;11449:2:1;17137:47:0;;;11431:21:1;11488:2;11468:18;;;11461:30;-1:-1:-1;;;11507:18:1;;;11500:47;11564:18;;17137:47:0;11247:341:1;17137:47:0;-1:-1:-1;;;;;17223:19:0;;17195:12;17223:19;;;:13;:19;;;;;;;;17222:20;:42;;;;-1:-1:-1;;;;;;17247:17:0;;;;;;:13;:17;;;;;;;;17246:18;17222:42;17218:89;;;-1:-1:-1;17291:4:0;17218:89;-1:-1:-1;;;;;17367:12:0;;;17317;17367;;;:8;:12;;;;;17380;17367:25;;17415:6;;17317:12;;;;17407:14;;;17415:6;;17407:14;;:30;;-1:-1:-1;17431:6:0;;-1:-1:-1;;;;;17425:12:0;;;17431:6;;17425:12;17407:30;17403:1107;;;17463:6;;-1:-1:-1;;;;;17463:6:0;;;17457:12;;;;17453:174;;17500:18;:16;:18::i;:::-;17490:28;;17403:1107;;17453:174;17551:6;;-1:-1:-1;;;;;17551:6:0;;;17543:14;;;;17540:87;;17590:21;:19;:21::i;:::-;17577:34;;17540:87;17403:1107;;;17706:9;;17659:22;;-1:-1:-1;;;;;17700:15:0;;;17706:9;;;;;17700:15;:43;;;;-1:-1:-1;17732:10:0;17719:24;;;;:12;:24;;;;;;;;17700:43;:64;;;;-1:-1:-1;17747:9:0;-1:-1:-1;;;;;17747:17:0;;;17700:64;17696:298;;;17802:23;17818:6;17802:15;:23::i;:::-;17785:40;-1:-1:-1;17849:18:0;;17845:134;;17917:4;17907:14;;17954:5;17944:15;;17845:134;18062:9;;18010:25;;-1:-1:-1;;;;;18054:17:0;;;18062:9;;;;;18054:17;:47;;;;-1:-1:-1;18089:11:0;;-1:-1:-1;;;;;18075:26:0;;;18089:11;;18075:26;;18054:47;18050:255;;;18142:23;18158:6;18142:15;:23::i;:::-;18122:43;;18050:255;;;18207:11;;-1:-1:-1;;;;;18207:11:0;;;18191:28;;;;18187:118;;18260:29;18282:6;18260:21;:29::i;:::-;18240:49;;18187:118;18325:21;;18321:178;;-1:-1:-1;;;;;18408:17:0;;;;;;:13;:17;;;;;;18380:4;;-1:-1:-1;18408:17:0;;18403:81;;18460:4;18450:14;;18403:81;17644:866;;17403:1107;18525:62;18540:4;18546:2;18550:6;18558:7;18567:10;18579:7;18525:14;:62::i;:::-;17001:1594;;;;16898:1697;;;:::o;19669:444::-;19770:6;;19812:19;;;-1:-1:-1;;;19812:19:0;;;;19720:10;;-1:-1:-1;;;;;19770:6:0;;19720:10;;;;19770:6;;19812:17;;:19;;;;;;;;;;;;;;;19770:6;19812:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;19865:12:0;;-1:-1:-1;;;;;19788:43:0;;;;-1:-1:-1;19788:43:0;;;-1:-1:-1;;;;;;19865:12:0;19844:18;19933:4;19912:26;;19908:104;;;-1:-1:-1;19959:2:0;19908:104;;;-1:-1:-1;19998:2:0;19908:104;20035:44;;-1:-1:-1;;;20035:44:0;;-1:-1:-1;;;;;1553:32:1;;;20035:44:0;;;1535:51:1;20024:8:0;;20035:28;;;;;;1508:18:1;;20035:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20098:7;;;;;19669:444;-1:-1:-1;;;;;;19669:444:0:o;20121:452::-;20228:6;;20270:19;;;-1:-1:-1;;;20270:19:0;;;;20175:13;;-1:-1:-1;;;;;20228:6:0;;20175:13;;;;20228:6;;20270:17;;:19;;;;;;;;;;;;;;;20228:6;20270:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;20321:12:0;;-1:-1:-1;;;;;20246:43:0;;;;-1:-1:-1;20246:43:0;;;-1:-1:-1;;;;;;20321:12:0;20300:18;20389:4;20368:26;;20364:104;;;-1:-1:-1;20415:2:0;20364:104;;;-1:-1:-1;20454:2:0;20364:104;20491:44;;-1:-1:-1;;;20491:44:0;;-1:-1:-1;;;;;1553:32:1;;;20491:44:0;;;1535:51:1;20480:8:0;;20491:28;;;;;;1508:18:1;;20491:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20557:8;;;;;20121:452;-1:-1:-1;;;;;;20121:452:0:o;18605:447::-;18669:17;18699:14;18715:13;18730:20;18754:14;:12;:14::i;:::-;18698:70;;;;;;18779:19;18822:1;18813:6;:10;:23;;;;;18835:1;18827:5;:9;18813:23;18809:93;;;18885:5;18867:15;18876:6;18867;:15;:::i;:::-;:23;;;;:::i;:::-;18853:37;;18809:93;18932:20;18941:11;18932:6;:20;:::i;:::-;18916:12;:36;18912:133;;18984:49;18997:12;19011:6;19019;19027:5;18984:12;:49::i;:::-;-1:-1:-1;18969:64:0;-1:-1:-1;18912:133:0;18687:365;;;;18605:447;;;:::o;19060:599::-;19124:17;19154:14;19170:13;19185:20;19209:14;:12;:14::i;:::-;19153:70;;;;;;19253:6;19238:12;:21;19234:418;;;19360:9;;;;;-1:-1:-1;;;;;19360:9:0;19350:20;;;;:9;:20;;;;;;:29;;19373:6;;19350:29;:::i;:::-;19308:9;;;;;;;;;-1:-1:-1;;;;;19308:9:0;-1:-1:-1;;;;;19298:32:0;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19289:43;;:6;:43;:::i;:::-;19288:92;;;;:::i;:::-;19276:104;;19234:418;;;19402:12;;-1:-1:-1;;;19402:12:0;;;;19398:254;;;19431:19;19478:1;19469:6;:10;:23;;;;;19491:1;19483:5;:9;19469:23;19465:176;;;19546:14;19554:6;19546:5;:14;:::i;:::-;19527:15;19536:6;19527;:15;:::i;:::-;:34;;;;:::i;:::-;19513:48;-1:-1:-1;19604:20:0;19618:6;19513:48;19604:20;:::i;:::-;19588:12;:36;;19580:45;;;;;19398:254;19142:517;;;19060:599;;;:::o;23788:306::-;23858:17;23888:14;23905:20;23929:14;:12;:14::i;:::-;23887:56;;;;;23974:6;23958:12;:22;23954:133;;24065:9;;;;;-1:-1:-1;;;;;24065:9:0;15665:7;15692:18;;;:9;:18;;;;;;;;;;24018:34;;-1:-1:-1;;;24018:34:0;;;;15692:18;;24065:9;24018:32;;:34;;;;;15692:18;;24018:34;;;;;24065:9;24018:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24009:43;;:6;:43;:::i;:::-;:66;;;;:::i;:::-;23997:78;;23954:133;23876:218;;23788:306;;;:::o;24102:2668::-;-1:-1:-1;;;;;24422:17:0;;;;;;:9;:17;;;;;;:25;;24440:7;;24422:25;:::i;:::-;-1:-1:-1;;;;;24403:17:0;;;;;;:9;:17;;;;;;;;:44;;;;24688:8;:25;;;;;;24740:13;;24403:17;;;;;;;;;;;;24732:21;;24688:25;24732:21;:::i;:::-;24724:29;;24768:7;24764:1323;;;24796:17;24792:857;;24858:7;24854:795;;;24885:22;24900:6;24885:14;:22::i;:::-;24854:795;;;-1:-1:-1;;;;;24933:21:0;;;;;;:13;:21;;;;;;;;24929:720;;;25019:9;;24988:4;;-1:-1:-1;;;;25019:9:0;;;;25011:25;;;;-1:-1:-1;;;25011:25:0;;;;;;12320:2:1;12302:21;;;12359:1;12339:18;;;12332:29;-1:-1:-1;;;12392:2:1;12377:18;;12370:34;12436:2;12421:18;;12118:327;25011:25:0;25091:5;25077:11;;25067:7;:21;;;;:::i;:::-;:29;;;;:::i;:::-;25055:41;;25150:5;25136:11;;25126:7;:21;;;;:::i;:::-;:29;;;;:::i;:::-;25115:40;;25202:5;25192:9;;25183:7;:18;;;;:::i;:::-;:24;;;;:::i;:::-;25174:33;;24929:720;;;-1:-1:-1;;;;;25233:24:0;;;;;;:13;:24;;;;;;;;25229:420;;;25285:10;;-1:-1:-1;;;25285:10:0;;;;25282:90;;;25335:12;25325:7;:22;25317:35;;;;-1:-1:-1;;;25317:35:0;;12652:2:1;25317:35:0;;;12634:21:1;12691:1;12671:18;;;12664:29;-1:-1:-1;;;12709:18:1;;;12702:31;12750:18;;25317:35:0;12450:324:1;25317:35:0;25399:4;25390:13;;25459:5;25444:12;;25434:7;:22;;;;:::i;:::-;:30;;;;:::i;:::-;25422:42;;25519:5;25504:12;;25494:7;:22;;;;:::i;:::-;:30;;;;:::i;:::-;25483:41;;25571:5;25560:10;;25552:7;:18;;;;:::i;25229:420::-;25629:4;25616:17;;25229:420;25672:20;25684:8;25672:9;:20;:::i;:::-;25663:29;-1:-1:-1;25719:19:0;25730:8;25663:29;25719:19;:::i;:::-;25707:31;-1:-1:-1;25757:13:0;;25753:323;;25790:47;25804:6;25820:4;25827:9;25790:13;:47::i;:::-;25905:4;25856:28;25887:24;;;:9;:24;;;;;;25935:6;;;;25934:7;:17;;;;;25945:6;25934:17;:45;;;;;25978:1;25955:20;:24;25934:45;25930:131;;;26003:38;26020:20;26003:16;:38::i;:::-;25771:305;25753:323;26103:6;:20;;;;26113:10;26103:20;26099:454;;;26144:7;:35;26152:26;26170:8;26152:15;:26;:::i;:::-;26144:35;;;;;;;;;;;-1:-1:-1;26144:35:0;;;;26143:36;:70;;;;-1:-1:-1;26201:6:0;;-1:-1:-1;;;;;26201:6:0;26212:1;15692:18;;;:9;:18;;;;;;26183:30;26143:70;26139:403;;;26268:11;;26258:6;;-1:-1:-1;;;;;26258:6:0;26233:12;26248:17;;;:9;:17;;;;;;26233:12;;26282:5;;26248:31;;26268:11;26248:31;:::i;:::-;:39;;;;:::i;:::-;26336:6;;-1:-1:-1;;;;;26336:6:0;26326:17;;;;:9;:17;;;;;;26233:54;;-1:-1:-1;26326:27:0;;26233:54;;26326:27;:::i;:::-;26316:6;;-1:-1:-1;;;;;26316:6:0;;;26306:17;;;;:9;:17;;;;;:47;;;;26386:9;;26372:50;;26316:6;26386:9;;;;26405:6;26414:7;26372:13;:50::i;:::-;26451:6;;;;;;;;;-1:-1:-1;;;;;26451:6:0;-1:-1:-1;;;;;26441:22:0;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26522:4;26484:7;:35;26510:8;26492:15;:26;;;;:::i;:::-;26484:35;;;;;;;;;;;-1:-1:-1;26484:35:0;:42;;-1:-1:-1;;26484:42:0;;;;;;;;;;-1:-1:-1;26139:403:0;26631:9;26622:6;;:18;;;;:::i;:::-;26613:6;:27;26662:8;;:19;;26673:8;;26662:19;:::i;:::-;26651:8;:30;;;;26699:53;26713:6;26721:9;26742;26732:7;:19;;;;:::i;:::-;26699:13;:53::i;:::-;24299:2471;;;;;;;;24102:2668;;;;;;:::o;20973:2177::-;21118:17;21137:22;21172:23;21208:9;;;;;;;;;-1:-1:-1;;;;;21208:9:0;-1:-1:-1;;;;;21198:32:0;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21172:60;;21243:13;21272:11;;;;;;;;;-1:-1:-1;;;;;21272:11:0;-1:-1:-1;;;;;21272:19:0;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;21259:41:0;;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21383:9;;21373:28;;;-1:-1:-1;;;21373:28:0;;;;21243:59;;-1:-1:-1;;;;;;21326:19:0;;;;;;21313:10;;21383:9;;;;;;;21373:26;;:28;;;;;;;;;;;;;;21383:9;21373:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21356:45;;21416:5;21412:1411;;;21442:11;;21438:1374;;21474:13;21490:18;21500:7;21505:2;21500;:7;:::i;:::-;21490:9;:18::i;:::-;21474:34;;21527:17;21547;21557:6;21547:9;:17::i;:::-;21527:37;;21595:9;21587:5;:17;21583:1214;;;21723:11;;21629:17;;;;-1:-1:-1;;;;;21723:11:0;-1:-1:-1;;21715:75:0;21711:924;;21850:17;21858:9;21850:5;:17;:::i;:::-;21831:37;;:15;:37;:::i;:::-;:41;;21871:1;21831:41;:::i;:::-;21819:53;-1:-1:-1;21927:13:0;:9;21939:1;21927:13;:::i;:::-;21913:10;:5;21921:2;21913:10;:::i;:::-;:28;;;;:::i;:::-;21899:42;;21711:924;;;21983:11;;-1:-1:-1;;;;;21983:11:0;-1:-1:-1;;21975:75:0;21971:664;;22110:17;22118:9;22110:5;:17;:::i;:::-;22091:37;;:15;:37;:::i;:::-;22079:49;-1:-1:-1;22181:9:0;22169;:5;22177:1;22169:9;:::i;21971:664::-;22232:11;;-1:-1:-1;;;;;22232:11:0;-1:-1:-1;;22224:75:0;22220:415;;22359:17;22367:9;22359:5;:17;:::i;:::-;22340:37;;:15;:37;:::i;:::-;:41;;22380:1;22340:41;:::i;:::-;22328:53;-1:-1:-1;22434:9:0;22422;:5;22430:1;22422:9;:::i;22220:415::-;22531:17;22539:9;22531:5;:17;:::i;:::-;22512:37;;:15;:37;:::i;:::-;22500:49;-1:-1:-1;22602:9:0;22590;:5;22598:1;22590:9;:::i;:::-;:21;;;;:::i;:::-;22576:35;;22220:415;22674:23;22686:11;22674:9;:23;:::i;:::-;22657:40;-1:-1:-1;22724:18:0;;22720:57;;22744:33;22763:14;22744:33;;:::i;:::-;;;22720:57;21606:1191;;21583:1214;21455:1357;;21438:1374;22833:15;22851:13;22862:2;22851:8;:13;:::i;:::-;22833:31;;22879:15;22898:1;22879:20;22875:268;;22958:4;22928:27;22938:16;22948:6;22938:7;:16;:::i;22928:27::-;:34;;;;:::i;:::-;22916:46;;22875:268;;;23007:124;23064:2;23035:25;23045:15;23035:7;:25;:::i;:::-;23034:32;;;;:::i;:::-;23114:2;23086:24;23095:15;23086:6;:24;:::i;:::-;23085:31;;;;:::i;:::-;23007:8;:124::i;:::-;22995:136;;22875:268;21161:1989;;;;;20973:2177;;;;;;;:::o;31608:455::-;-1:-1:-1;;;;;31673:20:0;;;;;;:15;:20;;;;;;31668:25;;31664:392;;31719:11;:18;31714:23;;:48;;;31759:3;-1:-1:-1;;;;;31741:21:0;:11;31753:1;31741:14;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;31741:14:0;:21;;31714:48;31710:335;;;31832:16;;31871:8;;31867:63;;31904:7;31608:455;:::o;31867:63::-;-1:-1:-1;31971:11:0;:18;;-1:-1:-1;;;;;31948:20:0;;;;;;:15;:20;;;;;:41;;;32008:21;;;;;;;;;;;;;-1:-1:-1;;;;;;32008:21:0;;;;;;31710:335;31608:455;:::o;29244:218::-;-1:-1:-1;;;;;29381:13:0;;;;;;:9;:13;;;;;;:23;;29397:7;;29381:23;:::i;:::-;-1:-1:-1;;;;;29365:13:0;;;;;;;:9;:13;;;;;;;:39;;;;29425:29;;;;;;;;;;29446:7;1743:25:1;;1731:2;1716:18;;1597:177;28267:969:0;11610:6;:13;;-1:-1:-1;;11610:13:0;11619:4;11610:13;;;28345:55;;28382:7:::1;28345:55;28434:16;::::0;;28448:1:::1;28434:16:::0;;;;;::::1;::::0;;28410:21:::1;::::0;28434:16:::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;28434:16:0::1;28410:40;;28479:4;28461;28466:1;28461:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;28461:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;:23;28505:12:::1;::::0;28495:7;;28505:12;::::1;::::0;28495:4;;28505:12;;28495:7;::::1;;;;;:::i;:::-;-1:-1:-1::0;;;;;28495:22:0;;::::1;:7;::::0;;::::1;::::0;;;;;:22;28528:11:::1;::::0;28677:4:::1;::::0;28528:195:::1;::::0;-1:-1:-1;;;28528:195:0;;:11;;::::1;::::0;:65:::1;::::0;:195:::1;::::0;28608:11;;28528::::1;::::0;28650:4;;28677;;::::1;::::0;28697:15:::1;::::0;28528:195:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28759:1;28748:8;;:12;28744:285;;;28776:4;::::0;28791:12:::1;::::0;28805:8:::1;::::0;28815:6:::1;::::0;28823:11:::1;::::0;28836::::1;::::0;28776:87:::1;::::0;-1:-1:-1;;;28776:87:0;;-1:-1:-1;;;;;28791:12:0;;::::1;28776:87;::::0;::::1;14360:51:1::0;14427:18;;;14420:34;;;;14470:18;;;14463:34;;;;28823:11:0;::::1;14513:18:1::0;;;14506:60;28836:11:0;::::1;14582:19:1::0;;;14575:61;28857:4:0::1;14652:19:1::0;;;14645:61;28776:4:0;::::1;::::0;:14:::1;::::0;14332:19:1;;28776:87:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;28889:1:0::1;28878:8;:12:::0;;;28905:6:::1;:10:::0;-1:-1:-1;28744:285:0::1;::::0;-1:-1:-1;28744:285:0::1;;28948:4;::::0;28962:12:::1;::::0;28948:42:::1;::::0;-1:-1:-1;;;28948:42:0;;-1:-1:-1;;;;;28962:12:0;;::::1;28948:42;::::0;::::1;14891:51:1::0;28984:4:0::1;14958:18:1::0;;;14951:60;28948:4:0;::::1;::::0;:13:::1;::::0;14864:18:1;;28948:42:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;29016:1:0::1;29007:6;:10:::0;-1:-1:-1;;28744:285:0::1;29121:12;::::0;29114:45:::1;::::0;-1:-1:-1;;;29114:45:0;;29153:4:::1;29114:45;::::0;::::1;1535:51:1::0;29093:20:0::1;::::0;-1:-1:-1;;;;;29121:12:0::1;::::0;29114:30:::1;::::0;1508:18:1;;29114:45:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29093:66:::0;-1:-1:-1;29174:14:0;;29171:58:::1;;29204:12;:10;:12::i;:::-;28334:902;;11634:1;-1:-1:-1::0;11646:6:0;:14;;-1:-1:-1;;11646:14:0;;;28267:969::o;8854:303::-;8899:6;8926:1;8922;:5;8918:232;;;-1:-1:-1;8948:1:0;8964:6;8973:5;8977:1;8948;8973:5;:::i;:::-;:9;;8981:1;8973:9;:::i;:::-;8964:18;;8997:92;9008:1;9004;:5;8997:92;;;9034:1;-1:-1:-1;9034:1:0;9072;9034;9059:5;9034:1;9059;:5;:::i;:::-;:9;;;;:::i;:::-;9058:15;;;;:::i;:::-;9054:19;;8997:92;;;8929:171;8854:303;;;:::o;8918:232::-;9110:6;;9106:44;;-1:-1:-1;9137:1:0;9106:44;8854:303;;;:::o;8750:96::-;8802:6;8829:1;8825;:5;:13;;8837:1;8825:13;;;8833:1;8825:13;8821:17;8750:96;-1:-1:-1;;;8750:96:0:o;26777:994::-;26841:12;;26834:45;;-1:-1:-1;;;26834:45:0;;26873:4;26834:45;;;1535:51:1;26816:17:0;;26880:1;;-1:-1:-1;;;;;26841:12:0;;;;26834:30;;1508:18:1;;26834:45:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:47;;;;:::i;:::-;26816:65;;26892:27;26909:9;26892:16;:27::i;:::-;26963:12;;26985:11;;26936:73;;-1:-1:-1;;;;;26963:12:0;;;;26985:11;26999:9;26936:26;:73::i;:::-;27055:10;;27040:52;;-1:-1:-1;;;27040:52:0;;27086:4;27040:52;;;1535:51:1;27022:17:0;;-1:-1:-1;;;;;27055:10:0;;27040:37;;1508:18:1;;27040:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27152:12;;27166:10;;27022:70;;-1:-1:-1;27104:20:0;;27125:52;;27141:9;;-1:-1:-1;;;;;27152:12:0;;;;27166:10;27125:15;:52::i;:::-;27104:73;;27199:3;27203:1;27199:6;;;;;;;;:::i;:::-;;;;;;;;;;;27251:10;;27272:11;;27199:6;;-1:-1:-1;27216:80:0;;-1:-1:-1;;;;;27251:10:0;;;;27272:11;27199:6;27216:26;:80::i;:::-;27308:11;;27347:12;;27374:10;;27487:15;;27308:236;;-1:-1:-1;;;27308:236:0;;-1:-1:-1;;;;;27347:12:0;;;27308:236;;;15381:51:1;27374:10:0;;;15448:18:1;;;15441:60;15517:18;;;15510:34;;;15560:18;;;15553:34;;;27308:11:0;15603:19:1;;;15596:35;;;15647:19;;;15640:35;27487:15:0;;15691:19:1;;;15684:61;27518:15:0;15761:19:1;;;15754:35;27308:11:0;;;:24;;15353:19:1;;27308:236:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;27595:10:0;;27580:52;;-1:-1:-1;;;27580:52:0;;27626:4;27580:52;;;1535:51:1;27555:23:0;;-1:-1:-1;;;;;;27595:10:0;;;;27580:37;;1508:18:1;;27580:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27555:77;-1:-1:-1;27646:16:0;;27643:118;;27707:10;;27679:70;;-1:-1:-1;;;;;27707:10:0;27726:6;27734:14;27679:27;:70::i;:::-;26805:966;;;;26777:994::o;27778:481::-;27865:12;;27887:11;;27838:70;;-1:-1:-1;;;;;27865:12:0;;;;27887:11;27901:6;27838:26;:70::i;:::-;27951:16;;;27965:1;27951:16;;;;;;;;27927:21;;27951:16;;;;;;;;-1:-1:-1;;27996:12:0;;27978:7;;;;-1:-1:-1;;;;;;27996:12:0;;27978:7;;-1:-1:-1;27996:12:0;;27978:7;;;;:::i;:::-;-1:-1:-1;;;;;27978:31:0;;;:7;;;;;;;;;:31;28030:10;;28020:7;;28030:10;;;28020:4;;28030:10;;28020:7;;;;;;:::i;:::-;-1:-1:-1;;;;;28020:20:0;;;:7;;;;;;;;;:20;28054:11;;:190;;-1:-1:-1;;;28054:190:0;;:11;;;:65;;:190;;28134:6;;28054:11;;28171:4;;28198;;28218:15;;28054:190;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27827:432;27778:481;:::o;6229:358::-;6422:45;;;-1:-1:-1;;;;;16453:32:1;;;6422:45:0;;;16435:51:1;16502:18;;;;16495:34;;;6422:45:0;;;;;;;;;;16408:18:1;;;;6422:45:0;;;;;;;-1:-1:-1;;;;;6422:45:0;-1:-1:-1;;;6422:45:0;;;6411:57;;-1:-1:-1;;;;6411:10:0;;;;:57;;6422:45;6411:57;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6375:93;;;;6487:7;:57;;;;-1:-1:-1;6499:11:0;;:16;;:44;;;6530:4;6519:24;;;;;;;;;;;;:::i;:::-;6479:100;;;;-1:-1:-1;;;6479:100:0;;17298:2:1;6479:100:0;;;17280:21:1;17337:2;17317:18;;;17310:30;17376:32;17356:18;;;17349:60;17426:18;;6479:100:0;17096:354:1;6479:100:0;6298:289;;6229:358;;;:::o;29480:311::-;29638:16;;;29652:1;29638:16;;;29581:21;29638:16;;;;;29581:21;29614;;29638:16;29652:1;29638:16;;;;;;;;;;-1:-1:-1;29638:16:0;29614:40;;29675:9;29665:4;29670:1;29665:7;;;;;;;;:::i;:::-;;;;;;:19;-1:-1:-1;;;;;29665:19:0;;;-1:-1:-1;;;;;29665:19:0;;;;;29713:11;29695:4;29700:1;29695:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;29695:30:0;;;:7;;;;;;;;;:30;29745:11;;:38;;-1:-1:-1;;;29745:38:0;;:11;;;:25;;:38;;29771:6;;29778:4;;29745:38;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;29745:38:0;;;;;;;;;;;;:::i;:::-;29736:47;29480:311;-1:-1:-1;;;;;29480:311:0:o;6595:361::-;6790:45;;;-1:-1:-1;;;;;16453:32:1;;;6790:45:0;;;16435:51:1;16502:18;;;;16495:34;;;6790:45:0;;;;;;;;;;16408:18:1;;;;6790:45:0;;;;;;;-1:-1:-1;;;;;6790:45:0;-1:-1:-1;;;6790:45:0;;;6779:57;;-1:-1:-1;;;;6779:10:0;;;;:57;;6790:45;6779:57;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6743:93;;;;6855:7;:57;;;;-1:-1:-1;6867:11:0;;:16;;:44;;;6898:4;6887:24;;;;;;;;;;;;:::i;:::-;6847:101;;;;-1:-1:-1;;;6847:101:0;;18929:2:1;6847:101:0;;;18911:21:1;18968:2;18948:18;;;18941:30;19007:33;18987:18;;;18980:61;19058:18;;6847:101:0;18727:355:1;14:131;-1:-1:-1;;;;;89:31:1;;79:42;;69:70;;135:1;132;125:12;150:247;209:6;262:2;250:9;241:7;237:23;233:32;230:52;;;278:1;275;268:12;230:52;317:9;304:23;336:31;361:5;336:31;:::i;594:418::-;743:2;732:9;725:21;706:4;775:6;769:13;818:6;813:2;802:9;798:18;791:34;877:6;872:2;864:6;860:15;855:2;844:9;840:18;834:50;933:1;928:2;919:6;908:9;904:22;900:31;893:42;1003:2;996;992:7;987:2;979:6;975:15;971:29;960:9;956:45;952:54;944:62;;;594:418;;;;:::o;1017:367::-;1085:6;1093;1146:2;1134:9;1125:7;1121:23;1117:32;1114:52;;;1162:1;1159;1152:12;1114:52;1201:9;1188:23;1220:31;1245:5;1220:31;:::i;:::-;1270:5;1348:2;1333:18;;;;1320:32;;-1:-1:-1;;;1017:367:1:o;2006:118::-;2092:5;2085:13;2078:21;2071:5;2068:32;2058:60;;2114:1;2111;2104:12;2129:128;2194:20;;2223:28;2194:20;2223:28;:::i;2262:382::-;2327:6;2335;2388:2;2376:9;2367:7;2363:23;2359:32;2356:52;;;2404:1;2401;2394:12;2356:52;2443:9;2430:23;2462:31;2487:5;2462:31;:::i;:::-;2512:5;-1:-1:-1;2569:2:1;2554:18;;2541:32;2582:30;2541:32;2582:30;:::i;:::-;2631:7;2621:17;;;2262:382;;;;;:::o;2649:508::-;2726:6;2734;2742;2795:2;2783:9;2774:7;2770:23;2766:32;2763:52;;;2811:1;2808;2801:12;2763:52;2850:9;2837:23;2869:31;2894:5;2869:31;:::i;:::-;2919:5;-1:-1:-1;2976:2:1;2961:18;;2948:32;2989:33;2948:32;2989:33;:::i;:::-;2649:508;;3041:7;;-1:-1:-1;;;3121:2:1;3106:18;;;;3093:32;;2649:508::o;3351:241::-;3407:6;3460:2;3448:9;3439:7;3435:23;3431:32;3428:52;;;3476:1;3473;3466:12;3428:52;3515:9;3502:23;3534:28;3556:5;3534:28;:::i;3597:792::-;3692:6;3700;3708;3716;3724;3777:3;3765:9;3756:7;3752:23;3748:33;3745:53;;;3794:1;3791;3784:12;3745:53;3833:9;3820:23;3852:31;3877:5;3852:31;:::i;:::-;3902:5;-1:-1:-1;3959:2:1;3944:18;;3931:32;3972:33;3931:32;3972:33;:::i;:::-;4024:7;-1:-1:-1;4083:2:1;4068:18;;4055:32;4096:33;4055:32;4096:33;:::i;:::-;4148:7;-1:-1:-1;4207:2:1;4192:18;;4179:32;4220:33;4179:32;4220:33;:::i;:::-;3597:792;;;;-1:-1:-1;3597:792:1;;4352:3;4337:19;4324:33;;3597:792;-1:-1:-1;;3597:792:1:o;4394:388::-;4462:6;4470;4523:2;4511:9;4502:7;4498:23;4494:32;4491:52;;;4539:1;4536;4529:12;4491:52;4578:9;4565:23;4597:31;4622:5;4597:31;:::i;:::-;4647:5;-1:-1:-1;4704:2:1;4689:18;;4676:32;4717:33;4676:32;4717:33;:::i;4787:127::-;4848:10;4843:3;4839:20;4836:1;4829:31;4879:4;4876:1;4869:15;4903:4;4900:1;4893:15;4919:275;4990:2;4984:9;5055:2;5036:13;;-1:-1:-1;;5032:27:1;5020:40;;5090:18;5075:34;;5111:22;;;5072:62;5069:88;;;5137:18;;:::i;:::-;5173:2;5166:22;4919:275;;-1:-1:-1;4919:275:1:o;5199:183::-;5259:4;5292:18;5284:6;5281:30;5278:56;;;5314:18;;:::i;:::-;-1:-1:-1;5359:1:1;5355:14;5371:4;5351:25;;5199:183::o;5387:1041::-;5477:6;5485;5538:2;5526:9;5517:7;5513:23;5509:32;5506:52;;;5554:1;5551;5544:12;5506:52;5594:9;5581:23;5627:18;5619:6;5616:30;5613:50;;;5659:1;5656;5649:12;5613:50;5682:22;;5735:4;5727:13;;5723:27;-1:-1:-1;5713:55:1;;5764:1;5761;5754:12;5713:55;5804:2;5791:16;5827:64;5843:47;5883:6;5843:47;:::i;:::-;5827:64;:::i;:::-;5913:3;5937:6;5932:3;5925:19;5969:4;5964:3;5960:14;5953:21;;6026:4;6016:6;6013:1;6009:14;6005:2;6001:23;5997:34;5983:48;;6054:7;6046:6;6043:19;6040:39;;;6075:1;6072;6065:12;6040:39;6107:4;6103:2;6099:13;6088:24;;6121:221;6137:6;6132:3;6129:15;6121:221;;;6219:3;6206:17;6236:31;6261:5;6236:31;:::i;:::-;6280:18;;6327:4;6154:14;;;;6318;;;;6121:221;;;6361:5;-1:-1:-1;6385:37:1;;-1:-1:-1;;;6416:4:1;6401:20;;6385:37;:::i;:::-;6375:47;;5387:1041;;;;;:::o;6686:829::-;6790:6;6798;6806;6814;6822;6830;6883:3;6871:9;6862:7;6858:23;6854:33;6851:53;;;6900:1;6897;6890:12;6851:53;-1:-1:-1;;6945:23:1;;;7065:2;7050:18;;7037:32;;-1:-1:-1;7168:2:1;7153:18;;7140:32;;7271:2;7256:18;;7243:32;;-1:-1:-1;7374:3:1;7359:19;;7346:33;;-1:-1:-1;7478:3:1;7463:19;7450:33;;-1:-1:-1;6686:829:1;-1:-1:-1;6686:829:1:o;7844:226::-;7903:6;7956:2;7944:9;7935:7;7931:23;7927:32;7924:52;;;7972:1;7969;7962:12;7924:52;-1:-1:-1;8017:23:1;;7844:226;-1:-1:-1;7844:226:1:o;8075:496::-;8146:6;8154;8162;8215:2;8203:9;8194:7;8190:23;8186:32;8183:52;;;8231:1;8228;8221:12;8183:52;8270:9;8257:23;8289:28;8311:5;8289:28;:::i;:::-;8336:5;-1:-1:-1;8393:2:1;8378:18;;8365:32;8406:30;8365:32;8406:30;:::i;8576:380::-;8655:1;8651:12;;;;8698;;;8719:61;;8773:4;8765:6;8761:17;8751:27;;8719:61;8826:2;8818:6;8815:14;8795:18;8792:38;8789:161;;8872:10;8867:3;8863:20;8860:1;8853:31;8907:4;8904:1;8897:15;8935:4;8932:1;8925:15;8961:325;9163:2;9145:21;;;9202:1;9182:18;;;9175:29;-1:-1:-1;;;9235:2:1;9220:18;;9213:32;9277:2;9262:18;;8961:325::o;9291:127::-;9352:10;9347:3;9343:20;9340:1;9333:31;9383:4;9380:1;9373:15;9407:4;9404:1;9397:15;9423:128;9490:9;;;9511:11;;;9508:37;;;9525:18;;:::i;9556:127::-;9617:10;9612:3;9608:20;9605:1;9598:31;9648:4;9645:1;9638:15;9672:4;9669:1;9662:15;9688:188;9767:13;;-1:-1:-1;;;;;9809:42:1;;9799:53;;9789:81;;9866:1;9863;9856:12;9881:450;9968:6;9976;9984;10037:2;10025:9;10016:7;10012:23;10008:32;10005:52;;;10053:1;10050;10043:12;10005:52;10076:40;10106:9;10076:40;:::i;:::-;10066:50;;10135:49;10180:2;10169:9;10165:18;10135:49;:::i;:::-;10125:59;;10227:2;10216:9;10212:18;10206:25;10271:10;10264:5;10260:22;10253:5;10250:33;10240:61;;10297:1;10294;10287:12;10240:61;10320:5;10310:15;;;9881:450;;;;;:::o;10336:230::-;10406:6;10459:2;10447:9;10438:7;10434:23;10430:32;10427:52;;;10475:1;10472;10465:12;10427:52;-1:-1:-1;10520:16:1;;10336:230;-1:-1:-1;10336:230:1:o;11593:168::-;11666:9;;;11697;;11714:15;;;11708:22;;11694:37;11684:71;;11735:18;;:::i;11766:217::-;11806:1;11832;11822:132;;11876:10;11871:3;11867:20;11864:1;11857:31;11911:4;11908:1;11901:15;11939:4;11936:1;11929:15;11822:132;-1:-1:-1;11968:9:1;;11766:217::o;11988:125::-;12053:9;;;12074:10;;;12071:36;;;12087:18;;:::i;12779:251::-;12849:6;12902:2;12890:9;12881:7;12877:23;12873:32;12870:52;;;12918:1;12915;12908:12;12870:52;12950:9;12944:16;12969:31;12994:5;12969:31;:::i;13035:446::-;13088:3;13126:5;13120:12;13153:6;13148:3;13141:19;13185:4;13180:3;13176:14;13169:21;;13224:4;13217:5;13213:16;13247:1;13257:199;13271:6;13268:1;13265:13;13257:199;;;13336:13;;-1:-1:-1;;;;;13332:39:1;13320:52;;13401:4;13392:14;;;;13429:17;;;;13368:1;13286:9;13257:199;;;-1:-1:-1;13472:3:1;;13035:446;-1:-1:-1;;;;13035:446:1:o;13486:582::-;13785:6;13774:9;13767:25;13828:6;13823:2;13812:9;13808:18;13801:34;13871:3;13866:2;13855:9;13851:18;13844:31;13748:4;13892:57;13944:3;13933:9;13929:19;13921:6;13892:57;:::i;:::-;-1:-1:-1;;;;;13985:32:1;;;;13980:2;13965:18;;13958:60;-1:-1:-1;14049:3:1;14034:19;14027:35;13884:65;13486:582;-1:-1:-1;;;13486:582:1:o;15800:456::-;15888:6;15896;15904;15957:2;15945:9;15936:7;15932:23;15928:32;15925:52;;;15973:1;15970;15963:12;15925:52;-1:-1:-1;;16018:16:1;;16124:2;16109:18;;16103:25;16220:2;16205:18;;;16199:25;16018:16;;16103:25;;-1:-1:-1;16199:25:1;15800:456;-1:-1:-1;15800:456:1:o;16540:301::-;16669:3;16707:6;16701:13;16753:6;16746:4;16738:6;16734:17;16729:3;16723:37;16815:1;16779:16;;16804:13;;;-1:-1:-1;16779:16:1;16540:301;-1:-1:-1;16540:301:1:o;16846:245::-;16913:6;16966:2;16954:9;16945:7;16941:23;16937:32;16934:52;;;16982:1;16979;16972:12;16934:52;17014:9;17008:16;17033:28;17055:5;17033:28;:::i;17455:332::-;17662:6;17651:9;17644:25;17705:2;17700;17689:9;17685:18;17678:30;17625:4;17725:56;17777:2;17766:9;17762:18;17754:6;17725:56;:::i;:::-;17717:64;17455:332;-1:-1:-1;;;;17455:332:1:o;17792:930::-;17887:6;17940:2;17928:9;17919:7;17915:23;17911:32;17908:52;;;17956:1;17953;17946:12;17908:52;17989:9;17983:16;18022:18;18014:6;18011:30;18008:50;;;18054:1;18051;18044:12;18008:50;18077:22;;18130:4;18122:13;;18118:27;-1:-1:-1;18108:55:1;;18159:1;18156;18149:12;18108:55;18192:2;18186:9;18215:64;18231:47;18271:6;18231:47;:::i;18215:64::-;18301:3;18325:6;18320:3;18313:19;18357:2;18352:3;18348:12;18341:19;;18412:2;18402:6;18399:1;18395:14;18391:2;18387:23;18383:32;18369:46;;18438:7;18430:6;18427:19;18424:39;;;18459:1;18456;18449:12;18424:39;18491:2;18487;18483:11;18472:22;;18503:189;18519:6;18514:3;18511:15;18503:189;;;18609:10;;18632:18;;18679:2;18536:12;;;;18670;;;;18503:189;;;18711:5;17792:930;-1:-1:-1;;;;;;17792:930:1:o

Swarm Source

ipfs://b083684215c2a8f410de235d6e0ec9e4ebd703dc9985281c179f91b31c79ec18
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.