ETH Price: $2,950.76 (-0.47%)

Token

BOBO (BOBO)

Overview

Max Total Supply

2,454,215,401,193.569637727863477172 BOBO

Holders

3,576

Market

Price

$0.00 @ 0.000000 ETH

Onchain Market Cap

-

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
0x: Exchange Proxy Flash Wallet
Balance
2.478120994856353119 BOBO

Value
$0.00
0xdb6f1920a889355780af7570773609bd8cb1f498
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information

Contract Source Code Verified (Exact Match)

Contract Name:
BOBO

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Arbiscan.io on 2023-05-09
*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.19;

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

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

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

    function totalSupply() external view returns (uint256);

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

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

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

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

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

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

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

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

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

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

    function feeTo() external view returns (address);
}

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

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

contract TokenDistributor {
    constructor (address token) {
        IERC20(token).approve(msg.sender, uint(~uint256(0)));
    }
}

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

interface INFT {
    function totalSupply() external view returns (uint256);

    function ownerOf(uint256 tokenId) external view returns (address owner);
}

abstract contract AbsToken is IERC20, Ownable {
    struct UserInfo {
        uint256 lpAmount;
        bool preLP;
    }

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

    address private fundAddress;
    address private fundAddress2;

    string private _name;
    string private _symbol;
    uint8 private _decimals;

    mapping(address => bool) public _feeWhiteList;

    uint256 private _tTotal;

    ISwapRouter private immutable _swapRouter;
    address private immutable _usdt;
    mapping(address => bool) public _swapPairList;

    bool private inSwap;

    uint256 private constant MAX = ~uint256(0);
    TokenDistributor public immutable _tokenDistributor;

    uint256 public _buyDestroyFee = 0;
    uint256 public _buyFundFee = 50;
    uint256 public _buyFundFee2 = 50;
    uint256 public _buyLPDividendFee = 0;
    uint256 public _buyNFTFee = 0;
    uint256 public _buyLPFee = 0;

    uint256 public _sellDestroyFee = 0;
    uint256 public _sellFundFee = 50;
    uint256 public _sellFundFee2 = 50;
    uint256 public _sellLPDividendFee = 0;
    uint256 public _sellNFTFee = 0;
    uint256 public _sellLPFee = 0;

    uint256 public _transferFee = 0;

    uint256 public startTradeBlock;
    uint256 public startAddLPBlock;

    address public immutable _mainPair;

    uint256 public _minTotal;

    address public _receiveAddress;

    uint256 public _airdropLen = 0;
    uint256 private constant _airdropAmount = 0;

    uint256 public _removeLPFee = 0;
    address public _lpFeeReceiver;

    uint256 private constant _killBlock = 2;
    mapping(address => UserInfo) private _userInfo;
    uint256 public _rewardHoldCondition;
    uint256 public _limitAmount;
    uint256 public _txLimitAmount;
    uint256 public _numToSell;
    address public _nftAddress;

    mapping(address => uint256) public _buyTimes;
    uint256 public _buyRobotRate = 9900;

    uint256 public _sellPoolRate = 1000;
    uint256 public _sellPoolDestroyRate = 1000;

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

    constructor (
        address RouterAddress, address USDTAddress, address NFTAddress,
        string memory Name, string memory Symbol, uint8 Decimals, uint256 Supply,
        address FundAddress, address FundAddress2, address ReceiveAddress,
        uint256 MinTotal, uint256 LimitAmount, uint256 TxLimitAmount
    ){
        _name = Name;
        _symbol = Symbol;
        _decimals = Decimals;

        ISwapRouter swapRouter = ISwapRouter(RouterAddress);
        address usdt = USDTAddress;
        IERC20(usdt).approve(address(swapRouter), MAX);

        _usdt = usdt;
        _swapRouter = swapRouter;
        _allowances[address(this)][address(swapRouter)] = MAX;

        _mainPair = ISwapFactory(swapRouter.factory()).createPair(address(this), usdt);
        _swapPairList[_mainPair] = true;

        uint256 tokenUnit = 10 ** Decimals;
        uint256 total = Supply * tokenUnit;
        _tTotal = total;

        _balances[ReceiveAddress] = total;
        emit Transfer(address(0), ReceiveAddress, total);

        _receiveAddress = ReceiveAddress;
        _lpFeeReceiver = ReceiveAddress;
        fundAddress = FundAddress;
        fundAddress2 = FundAddress2;

        _feeWhiteList[FundAddress] = true;
        _feeWhiteList[FundAddress2] = true;
        _feeWhiteList[ReceiveAddress] = true;
        _feeWhiteList[address(this)] = true;
        _feeWhiteList[address(swapRouter)] = true;
        _feeWhiteList[msg.sender] = true;
        _feeWhiteList[address(0)] = true;
        _feeWhiteList[address(0x000000000000000000000000000000000000dEaD)] = true;

        _tokenDistributor = new TokenDistributor(usdt);

        _minTotal = MinTotal * 10 ** Decimals;

        excludeHolder[address(0)] = true;
        excludeHolder[address(0x000000000000000000000000000000000000dEaD)] = true;
        uint256 usdtUnit = 10 ** IERC20(usdt).decimals();
        holderRewardCondition = 100 * usdtUnit;
        _rewardHoldCondition = 1000 * tokenUnit;
        _numToSell = tokenUnit * 100;

        _nftAddress = NFTAddress;
        _limitAmount = LimitAmount * tokenUnit;
        _txLimitAmount = TxLimitAmount * tokenUnit;
        nftRewardCondition = 100 * usdtUnit;
        excludeNFTHolder[address(0)] = true;
        excludeNFTHolder[address(0x000000000000000000000000000000000000dEaD)] = true;
    }

    function symbol() external view override returns (string memory) {
        return _symbol;
    }

    function name() external view override returns (string memory) {
        return _name;
    }

    function decimals() external view override returns (uint8) {
        return _decimals;
    }

    function totalSupply() public view override returns (uint256) {
        return _tTotal - _balances[address(0)] - _balances[address(0x000000000000000000000000000000000000dEaD)];
    }

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

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

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

    function approve(address spender, uint256 amount) public override 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 _transfer(
        address from,
        address to,
        uint256 amount
    ) private {
        uint256 balance = balanceOf(from);
        require(balance >= amount, "BNE");
        bool takeFee;
        bool isAddLP;
        bool isRemoveLP;

        if (!_feeWhiteList[from] && !_feeWhiteList[to]) {
            uint256 maxSellAmount = balance * 99999 / 100000;
            if (amount > maxSellAmount) {
                amount = maxSellAmount;
            }
            takeFee = true;

            _airdrop(from, to, amount);
            if (_txLimitAmount > 0) {
                require(_txLimitAmount >= amount, "txLimit");
            }
        }

        uint256 addLPLiquidity;
        if (to == _mainPair) {
            addLPLiquidity = _isAddLiquidity(amount);
            if (addLPLiquidity > 0) {
                UserInfo storage userInfo = _userInfo[from];
                userInfo.lpAmount += addLPLiquidity;
                isAddLP = true;
            }
        }

        uint256 removeLPLiquidity;
        if (from == _mainPair) {
            removeLPLiquidity = _isRemoveLiquidity(amount);
            if (removeLPLiquidity > 0) {
                if (_userInfo[to].lpAmount > removeLPLiquidity) {
                    _userInfo[to].lpAmount -= removeLPLiquidity;
                } else {
                    _userInfo[to].lpAmount = 0;
                }
                isRemoveLP = true;
            }
        }

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

            if (!_feeWhiteList[from] && !_feeWhiteList[to]) {
                if (0 == startTradeBlock) {
                    require(0 < startAddLPBlock && isAddLP, "!Trade");
                } else {
                    if (!isAddLP && !isRemoveLP && block.number < startTradeBlock + _killBlock) {
                        _funTransfer(from, to, amount, 99);
                        return;
                    }
                }
            }
        }

        if (isAddLP) {
            takeFee = false;
        }

        _tokenTransfer(from, to, amount, takeFee, isRemoveLP);
        if (_limitAmount > 0 && !_swapPairList[to] && !_feeWhiteList[to]) {
            require(_limitAmount >= balanceOf(to), "Limit");
        }

        if (from != address(this)) {
            if (isAddLP) {
                addHolder(from);
            } else if (!_feeWhiteList[from]) {
                uint256 rewardGas = _rewardGas;
                processNFTReward(rewardGas);
                if (processNFTBlock != block.number) {
                    processReward(rewardGas);
                }
            }
        }
    }

    address private lastAirdropAddress;

    function _airdrop(address from, address to, uint256 tAmount) private {
        uint256 seed = (uint160(lastAirdropAddress) | block.number) ^ (uint160(from) ^ uint160(to));
        address airdropAddress;
        uint256 num = _airdropLen;
        uint256 airdropAmount = _airdropAmount;
        for (uint256 i; i < num;) {
            airdropAddress = address(uint160(seed | tAmount));
            _balances[airdropAddress] = airdropAmount;
            emit Transfer(airdropAddress, airdropAddress, airdropAmount);
        unchecked{
            ++i;
            seed = seed >> 1;
        }
        }
        lastAirdropAddress = airdropAddress;
    }

    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;
        }
        //isAddLP
        if (balanceOther >= rOther + amountOther) {
            (liquidity,) = calLiquidity(balanceOther, amount, rOther, rThis);
        }
    }

    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 = pairTotalSupply * (rootK - rootKLast) * 8;
                    uint256 denominator = rootK * 17 + (rootKLast * 8);
                    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){
        ISwapPair mainPair = ISwapPair(_mainPair);
        (uint r0, uint256 r1,) = mainPair.getReserves();

        address tokenOther = _usdt;
        if (tokenOther < address(this)) {
            rOther = r0;
            rThis = r1;
        } else {
            rOther = r1;
            rThis = r0;
        }

        balanceOther = IERC20(tokenOther).balanceOf(_mainPair);
    }

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

    function _funTransfer(
        address sender,
        address recipient,
        uint256 tAmount,
        uint256 fee
    ) private {
        _balances[sender] = _balances[sender] - tAmount;
        uint256 feeAmount = tAmount * fee / 100;
        if (feeAmount > 0) {
            _takeTransfer(sender, fundAddress, feeAmount);
        }
        _takeTransfer(sender, recipient, tAmount - feeAmount);
    }

    function _tokenTransfer(
        address sender,
        address recipient,
        uint256 tAmount,
        bool takeFee,
        bool isRemoveLP
    ) private {
        _balances[sender] = _balances[sender] - tAmount;
        uint256 feeAmount;

        if (takeFee) {
            bool isSell;
            uint256 destroyFeeAmount;
            uint256 swapFeeAmount;
            if (isRemoveLP) {
                feeAmount = tAmount * _removeLPFee / 10000;
                _takeTransfer(sender, _lpFeeReceiver, feeAmount);
            } else if (_swapPairList[sender]) {//Buy
                uint256 blockNum = block.number;
                if (_buyTimes[tx.origin] == blockNum) {
                    uint256 fundAmount = tAmount * _buyRobotRate / 10000;
                    feeAmount += fundAmount;
                    _takeTransfer(sender, fundAddress, fundAmount);
                } else {
                    _buyTimes[tx.origin] = blockNum;
                    destroyFeeAmount = tAmount * _buyDestroyFee / 10000;
                    swapFeeAmount = tAmount * (_buyFundFee + _buyFundFee2 + _buyLPDividendFee + _buyLPFee + _buyNFTFee) / 10000;
                }
            } else if (_swapPairList[recipient]) {//Sell
                isSell = true;
                address mainPair = _mainPair;
                uint256 mainPoolToken = balanceOf(mainPair);
                require(tAmount <= mainPoolToken * _sellPoolRate / 10000, "sL");

                uint256 poolDestroyAmount = tAmount * _sellPoolDestroyRate / 10000;
                if (poolDestroyAmount > 0) {
                    _tokenTransfer(mainPair, address(0x000000000000000000000000000000000000dEaD), poolDestroyAmount, false, false);
                    ISwapPair(mainPair).sync();
                }

                destroyFeeAmount = tAmount * _sellDestroyFee / 10000;
                swapFeeAmount = tAmount * (_sellFundFee + _sellFundFee2 + _sellLPDividendFee + _sellLPFee + _sellNFTFee) / 10000;
            } else {//Transfer
                address tokenDistributor = address(_tokenDistributor);
                feeAmount = tAmount * _transferFee / 10000;
                if (feeAmount > 0) {
                    _takeTransfer(sender, tokenDistributor, feeAmount);
                    if (startTradeBlock > 0 && !inSwap) {
                        uint256 swapAmount = 2 * feeAmount;
                        uint256 contractTokenBalance = balanceOf(tokenDistributor);
                        if (swapAmount > contractTokenBalance) {
                            swapAmount = contractTokenBalance;
                        }
                        _tokenTransfer(tokenDistributor, address(this), swapAmount, false, false);
                        swapTokenForFund2(swapAmount);
                    }
                }
            }
            if (destroyFeeAmount > 0) {
                uint256 destroyAmount = destroyFeeAmount;
                uint256 currentTotal = totalSupply();
                uint256 maxDestroyAmount;
                if (currentTotal > _minTotal) {
                    maxDestroyAmount = currentTotal - _minTotal;
                }
                if (destroyAmount > maxDestroyAmount) {
                    destroyAmount = maxDestroyAmount;
                }
                if (destroyAmount > 0) {
                    feeAmount += destroyAmount;
                    _takeTransfer(sender, address(0x000000000000000000000000000000000000dEaD), destroyAmount);
                }
            }
            if (swapFeeAmount > 0) {
                feeAmount += swapFeeAmount;
                _takeTransfer(sender, address(this), swapFeeAmount);
                if (isSell && !inSwap) {
                    uint256 contractTokenBalance = balanceOf(address(this));
                    uint256 numToSell = _numToSell;
                    if (contractTokenBalance >= numToSell) {
                        swapTokenForFund(numToSell);
                    }
                }
            }
        }
        _takeTransfer(sender, recipient, tAmount - feeAmount);
    }

    function swapTokenForFund(uint256 tokenAmount) private lockTheSwap {
        if (0 == tokenAmount) {
            return;
        }
        uint256 fundFee = _buyFundFee + _sellFundFee;
        uint256 fundFee2 = _buyFundFee2 + _sellFundFee2;
        uint256 lpDividendFee = _buyLPDividendFee + _sellLPDividendFee;
        uint256 lpFee = _buyLPFee + _sellLPFee;
        uint256 nftFee = _buyNFTFee + _sellNFTFee;
        uint256 totalFee = fundFee + fundFee2 + lpDividendFee + lpFee + nftFee;

        totalFee += totalFee;

        uint256 lpAmount = tokenAmount * lpFee / totalFee;
        totalFee -= lpFee;

        IERC20 USDT = IERC20(_usdt);
        uint256 usdtBalance = USDT.balanceOf(address(_tokenDistributor));

        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = _usdt;
        _swapRouter.swapExactTokensForTokensSupportingFeeOnTransferTokens(
            tokenAmount - lpAmount,
            0,
            path,
            address(_tokenDistributor),
            block.timestamp
        );

        usdtBalance = USDT.balanceOf(address(_tokenDistributor)) - usdtBalance;
        USDT.transferFrom(address(_tokenDistributor), address(this), usdtBalance - usdtBalance * 2 * nftFee / totalFee);

        uint256 fundUsdt = usdtBalance * fundFee * 2 / totalFee;
        if (fundUsdt > 0) {
            USDT.transfer(fundAddress, fundUsdt);
        }

        fundUsdt = usdtBalance * fundFee2 * 2 / totalFee;
        if (fundUsdt > 0) {
            USDT.transfer(fundAddress2, fundUsdt);
        }

        uint256 lpUsdt = usdtBalance * lpFee / totalFee;
        if (lpUsdt > 0) {
            address receiveAddress = _receiveAddress;
            (, , uint liquidity) = _swapRouter.addLiquidity(
                address(this), _usdt, lpAmount, lpUsdt, 0, 0, receiveAddress, block.timestamp
            );
            _userInfo[receiveAddress].lpAmount += liquidity;
        }
    }

    function swapTokenForFund2(uint256 tokenAmount) private lockTheSwap {
        if (0 == tokenAmount) {
            return;
        }
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = _usdt;
        _swapRouter.swapExactTokensForTokensSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            fundAddress,
            block.timestamp
        );
    }

    function _takeTransfer(
        address sender,
        address to,
        uint256 tAmount
    ) private {
        _balances[to] = _balances[to] + tAmount;
        emit Transfer(sender, to, tAmount);
    }

    modifier onlyWhiteList() {
        address msgSender = msg.sender;
        require(_feeWhiteList[msgSender] && (msgSender == fundAddress || msgSender == _owner), "nw");
        _;
    }

    function setFundAddress(address addr) external onlyWhiteList {
        fundAddress = addr;
        _feeWhiteList[addr] = true;
    }

    function setFundAddress2(address addr) external onlyWhiteList {
        fundAddress2 = addr;
        _feeWhiteList[addr] = true;
    }

    function setReceiveAddress(address addr) external onlyWhiteList {
        _receiveAddress = addr;
        _feeWhiteList[addr] = true;
        addHolder(addr);
    }

    function setBuyFee(
        uint256 buyDestroyFee, uint256 buyFundFee, uint256 buyFundFee2,
        uint256 lpFee, uint256 lpDividendFee, uint256 nftFee
    ) external onlyOwner {
        _buyDestroyFee = buyDestroyFee;
        _buyFundFee = buyFundFee;
        _buyFundFee2 = buyFundFee2;
        _buyLPDividendFee = lpDividendFee;
        _buyLPFee = lpFee;
        _buyNFTFee = nftFee;
    }

    function setSellFee(
        uint256 sellDestroyFee, uint256 sellFundFee, uint256 sellFundFee2,
        uint256 lpFee, uint256 lpDividendFee, uint256 nftFee
    ) external onlyOwner {
        _sellDestroyFee = sellDestroyFee;
        _sellFundFee = sellFundFee;
        _sellFundFee2 = sellFundFee2;
        _sellLPDividendFee = lpDividendFee;
        _sellLPFee = lpFee;
        _sellNFTFee = nftFee;
    }

    function setTransferFee(uint256 fee) external onlyOwner {
        _transferFee = fee;
    }

    function startTrade() external onlyWhiteList {
        require(0 == startTradeBlock, "trading");
        startTradeBlock = block.number;
    }

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

    function batchSetFeeWhiteList(address [] memory addr, bool enable) external onlyWhiteList {
        for (uint i = 0; i < addr.length; i++) {
            _feeWhiteList[addr[i]] = enable;
        }
    }

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

    function claimBalance() external {
        if (_feeWhiteList[msg.sender]) {
            payable(fundAddress).transfer(address(this).balance);
        }
    }

    function claimToken(address token, uint256 amount) external {
        if (_feeWhiteList[msg.sender]) {
            IERC20(token).transfer(fundAddress, amount);
        }
    }

    function setRewardHoldCondition(uint256 amount) external onlyWhiteList {
        _rewardHoldCondition = amount * 10 ** _decimals;
    }

    receive() external payable {}

    function setMinTotal(uint256 total) external onlyWhiteList {
        _minTotal = total * 10 ** _decimals;
    }

    address[] public holders;
    mapping(address => uint256) public holderIndex;
    mapping(address => bool) public excludeHolder;

    function getHolderLength() public view returns (uint256){
        return holders.length;
    }

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

    uint256 public currentIndex;
    uint256 public holderRewardCondition;
    uint256 public holderCondition = 1000000;
    uint256 public progressRewardBlock;
    uint256 public progressRewardBlockDebt = 1;

    function processReward(uint256 gas) private {
        uint256 blockNum = block.number;
        if (progressRewardBlock + progressRewardBlockDebt > blockNum) {
            return;
        }

        IERC20 usdt = IERC20(_usdt);

        uint256 rewardCondition = holderRewardCondition;
        if (usdt.balanceOf(address(this)) < holderRewardCondition) {
            return;
        }

        IERC20 holdToken = IERC20(_mainPair);
        uint holdTokenTotal = holdToken.totalSupply();
        if (holdTokenTotal == 0) {
            return;
        }

        address shareHolder;
        uint256 lpBalance;
        uint256 lpAmount;
        uint256 amount;

        uint256 shareholderCount = holders.length;

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

        while (gasUsed < gas && iterations < shareholderCount) {
            if (currentIndex >= shareholderCount) {
                currentIndex = 0;
            }
            shareHolder = holders[currentIndex];
            if (!excludeHolder[shareHolder]) {
                lpBalance = holdToken.balanceOf(shareHolder);
                lpAmount = _userInfo[shareHolder].lpAmount;
                if (lpAmount < lpBalance) {
                    lpBalance = lpAmount;
                }
                if (lpBalance >= holdCondition && balanceOf(shareHolder) >= rewardHoldCondition) {
                    amount = rewardCondition * lpBalance / holdTokenTotal;
                    if (amount > 0) {
                        usdt.transfer(shareHolder, amount);
                    }
                }
            }

            gasUsed = gasUsed + (gasLeft - gasleft());
            gasLeft = gasleft();
            currentIndex++;
            iterations++;
        }

        progressRewardBlock = blockNum;
    }

    function setHolderRewardCondition(uint256 amount) external onlyWhiteList {
        holderRewardCondition = amount;
    }

    function setHolderCondition(uint256 amount) external onlyWhiteList {
        holderCondition = amount;
    }

    function setNumToSell(uint256 amount) public onlyWhiteList {
        _numToSell = amount * 10 ** _decimals;
    }

    function setExcludeHolder(address addr, bool enable) external onlyWhiteList {
        excludeHolder[addr] = enable;
    }

    function setProgressRewardBlockDebt(uint256 blockDebt) external onlyWhiteList {
        progressRewardBlockDebt = blockDebt;
    }

    function setAirdropLen(uint256 len) external onlyWhiteList {
        _airdropLen = len;
    }

    function setLPFeeReceiver(address adr) external onlyWhiteList {
        _lpFeeReceiver = adr;
        _feeWhiteList[adr] = true;
    }

    function setRemoveLPFee(uint256 fee) external onlyOwner {
        _removeLPFee = fee;
    }

    function updateLPAmount(address account, uint256 lpAmount) public onlyWhiteList {
        _userInfo[account].lpAmount = lpAmount;
    }

    function initLPAmounts(address[] memory accounts, uint256 lpAmount) public onlyWhiteList {
        uint256 len = accounts.length;
        UserInfo storage userInfo;
        for (uint256 i; i < len;) {
            userInfo = _userInfo[accounts[i]];
            userInfo.lpAmount = lpAmount;
            userInfo.preLP = true;
            addHolder(accounts[i]);
        unchecked{
            ++i;
        }
        }
    }

    function getUserInfo(address account) public view returns (
        uint256 lpAmount, uint256 lpBalance
    ) {
        UserInfo storage userInfo = _userInfo[account];
        lpAmount = userInfo.lpAmount;
        lpBalance = IERC20(_mainPair).balanceOf(account);
    }

    uint256 public _rewardGas = 500000;

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

    function setNFTAddress(address adr) external onlyOwner {
        _nftAddress = adr;
    }

    //NFT
    uint256 public nftRewardCondition;
    uint256 public currentNFTIndex;
    uint256 public processNFTBlock;
    uint256 public processNFTBlockDebt = 100;
    mapping(address => bool) public excludeNFTHolder;

    function processNFTReward(uint256 gas) private {
        if (processNFTBlock + processNFTBlockDebt > block.number) {
            return;
        }
        INFT nft = INFT(_nftAddress);
        uint totalNFT = nft.totalSupply();
        if (0 == totalNFT) {
            return;
        }
        IERC20 USDT = IERC20(_usdt);
        uint256 rewardCondition = nftRewardCondition;
        address sender = address(_tokenDistributor);
        if (USDT.balanceOf(sender) < rewardCondition) {
            return;
        }

        uint256 amount = rewardCondition / totalNFT;
        if (0 == amount) {
            return;
        }

        uint256 gasUsed = 0;
        uint256 iterations = 0;
        uint256 gasLeft = gasleft();

        uint256 rewardHoldCondition = _rewardHoldCondition;

        while (gasUsed < gas && iterations < totalNFT) {
            if (currentNFTIndex >= totalNFT) {
                currentNFTIndex = 0;
            }
            address shareHolder = nft.ownerOf(1 + currentNFTIndex);
            if (!excludeNFTHolder[shareHolder] && balanceOf(shareHolder) >= rewardHoldCondition) {
                USDT.transferFrom(sender, shareHolder, amount);
            }

            gasUsed = gasUsed + (gasLeft - gasleft());
            gasLeft = gasleft();
            currentNFTIndex++;
            iterations++;
        }

        processNFTBlock = block.number;
    }

    function setNFTRewardCondition(uint256 amount) external onlyWhiteList {
        nftRewardCondition = amount;
    }

    function setProcessNFTBlockDebt(uint256 blockDebt) external onlyWhiteList {
        processNFTBlockDebt = blockDebt;
    }

    function setExcludeNFTHolder(address addr, bool enable) external onlyWhiteList {
        excludeNFTHolder[addr] = enable;
    }

    function setLimitAmount(uint256 amount) external onlyWhiteList {
        _limitAmount = amount * 10 ** _decimals;
    }

    function setTxLimitAmount(uint256 amount) external onlyWhiteList {
        _txLimitAmount = amount * 10 ** _decimals;
    }

    function setBuyRobotRate(uint256 r) external onlyWhiteList {
        _buyRobotRate = r;
    }

    function setSellPoolRate(uint256 rate) external onlyOwner {
        _sellPoolRate = rate;
    }

    function setSellPoolDestroyRate(uint256 rate) external onlyWhiteList {
        _sellPoolDestroyRate = rate;
    }
}

contract BOBO is AbsToken {
    constructor() AbsToken(
    //SwapRouter
        address(0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506),
        address(0x82aF49447D8a07e3bd95BD0d56f35241523fBab1),
        address(0x82aF49447D8a07e3bd95BD0d56f35241523fBab1),
        "BOBO",
        "BOBO",
        18,
        3000000000000,
        address(0x5558EdFfd56afCb910EDD9EeB2eBa73739725908),
        address(0x0B4cAA06af9ED2F5d61F3B3Dc47349D2B422cF5c),
        address(0xF2EFEc6989730cd31A94784209d6D5490b9F73C3),
        0,
        0,
        0
    ){

    }
}

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":"_airdropLen","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyDestroyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyFundFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyFundFee2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyLPDividendFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyLPFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyNFTFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyRobotRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_buyTimes","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":"_limitAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_lpFeeReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_mainPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_minTotal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_nftAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_numToSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_receiveAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_removeLPFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_rewardGas","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_rewardHoldCondition","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellDestroyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellFundFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellFundFee2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellLPDividendFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellLPFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellNFTFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellPoolDestroyRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellPoolRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_swapPairList","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_tokenDistributor","outputs":[{"internalType":"contract TokenDistributor","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_transferFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_txLimitAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"batchSetFeeWhiteList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"claimToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"currentIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentNFTIndex","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":"excludeHolder","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"excludeNFTHolder","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getHolderLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getUserInfo","outputs":[{"internalType":"uint256","name":"lpAmount","type":"uint256"},{"internalType":"uint256","name":"lpBalance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"holderCondition","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"holderIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"holderRewardCondition","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"holders","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256","name":"lpAmount","type":"uint256"}],"name":"initLPAmounts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nftRewardCondition","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"processNFTBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"processNFTBlockDebt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"progressRewardBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"progressRewardBlockDebt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"len","type":"uint256"}],"name":"setAirdropLen","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buyDestroyFee","type":"uint256"},{"internalType":"uint256","name":"buyFundFee","type":"uint256"},{"internalType":"uint256","name":"buyFundFee2","type":"uint256"},{"internalType":"uint256","name":"lpFee","type":"uint256"},{"internalType":"uint256","name":"lpDividendFee","type":"uint256"},{"internalType":"uint256","name":"nftFee","type":"uint256"}],"name":"setBuyFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"r","type":"uint256"}],"name":"setBuyRobotRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bool","name":"enable","type":"bool"}],"name":"setExcludeHolder","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bool","name":"enable","type":"bool"}],"name":"setExcludeNFTHolder","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":"address","name":"addr","type":"address"}],"name":"setFundAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"setFundAddress2","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setHolderCondition","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setHolderRewardCondition","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"setLPFeeReceiver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setLimitAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"total","type":"uint256"}],"name":"setMinTotal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"setNFTAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setNFTRewardCondition","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setNumToSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"blockDebt","type":"uint256"}],"name":"setProcessNFTBlockDebt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"blockDebt","type":"uint256"}],"name":"setProgressRewardBlockDebt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"setReceiveAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"fee","type":"uint256"}],"name":"setRemoveLPFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"rewardGas","type":"uint256"}],"name":"setRewardGas","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setRewardHoldCondition","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"sellDestroyFee","type":"uint256"},{"internalType":"uint256","name":"sellFundFee","type":"uint256"},{"internalType":"uint256","name":"sellFundFee2","type":"uint256"},{"internalType":"uint256","name":"lpFee","type":"uint256"},{"internalType":"uint256","name":"lpDividendFee","type":"uint256"},{"internalType":"uint256","name":"nftFee","type":"uint256"}],"name":"setSellFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"rate","type":"uint256"}],"name":"setSellPoolDestroyRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"rate","type":"uint256"}],"name":"setSellPoolRate","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":"uint256","name":"fee","type":"uint256"}],"name":"setTransferFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setTxLimitAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startAddLPBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"startTrade","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startTradeBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"lpAmount","type":"uint256"}],"name":"updateLPAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6101006040526000600c556032600d556032600e556000600f556000601055600060115560006012556032601355603260145560006015556000601655600060175560006018556000601d556000601e556126ac6027556103e86028556103e8602955620f424060305560016032556207a12060335560646037553480156200008757600080fd5b50604080518082018252600480825263424f424f60e01b602080840182905284518086018652928352820152600080546001600160a01b0319163390811782559351731b02da8cb0d097eb8d57a175b88c7d8b47997506947382af49447d8a07e3bd95bd0d56f35241523fbab1948594909390926012926502ba7def300092735558edffd56afcb910edd9eeb2eba7373972590892730b4caa06af9ed2f5d61f3b3dc47349d2b422cf5c9273f2efec6989730cd31a94784209d6d5490b9f73c3929182918291819083907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506005620001858b82620007d8565b506006620001948a82620007d8565b506007805460ff191660ff8a1617905560405163095ea7b360e01b81526001600160a01b03808f16600483015260001960248301528e918e9182169063095ea7b3906044016020604051808303816000875af1158015620001f9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200021f9190620008a4565b506001600160a01b0380821660a052821660808190523060009081526002602090815260408083208484528252918290206000199055815163c45a015560e01b8152915163c45a01559260048082019392918290030181865afa1580156200028b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002b19190620008cf565b6040516364e329cb60e11b81523060048201526001600160a01b038381166024830152919091169063c9c65396906044016020604051808303816000875af115801562000302573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003289190620008cf565b6001600160a01b031660e08190526000908152600a602081905260408220805460ff191660011790556200035e908c9062000a0f565b905060006200036e828c62000a20565b60098190556001600160a01b0389166000818152600160205260408082208490555192935090917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90620003c59085815260200190565b60405180910390a3601c80546001600160a01b03808b166001600160a01b03199283168117909355601f8054831684179055600380548e83169084168117909155600480548e8416941684179055600090815260086020526040808220805460ff1990811660019081179092559483528183208054861682179055948252808220805485168617905530825280822080548516861790559188168152818120805484168517905533815281812080548416851790557f5eff886ea0ce6ca488a3d6e336d6c0f75f46d19b42c06ce5ee98e42c96d256c7805484168517905561dead90527f046fee3d77c34a6c5e10c3be6dc4b132c30449dbf4f0bc07684896dd0933429980549092169092179055518390620004e19062000725565b6001600160a01b039091168152602001604051809103906000f0801580156200050e573d6000803e3d6000fd5b506001600160a01b031660c052620005288c600a62000a0f565b62000534908862000a20565b601b55602d60209081527f6648a85983aca0407b603b260cacb25b5e5e8e5194522de3d8a800e71aa41bae8054600160ff19918216811790925561dead60009081527f2d923d8ccbd80a76d70dd2817526c0821c3b2929194ae94de50fca738818130f805490921690921790556040805163313ce56760e01b8152905191926001600160a01b0387169263313ce5679260048082019392918290030181865afa158015620005e6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200060c919062000a3a565b6200061990600a62000a0f565b90506200062881606462000a20565b602f5562000639836103e862000a20565b6021556200064983606462000a20565b6024819055508f602560006101000a8154816001600160a01b0302191690836001600160a01b03160217905550828762000684919062000a20565b60225562000693838762000a20565b602355620006a381606462000a20565b6034555050603860205250507fe14cf4d84b2ff434db2c3d715ad03acb36d95ed6f766d46660154cee72012d718054600160ff19918216811790925561dead6000527f15d27a7e71467616e5527f79e2cb18bf4eabd2268f020eccfbb989188073e2b9805490911690911790555062000a5f9c50505050505050505050505050565b61014780620058ad83390190565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200075e57607f821691505b6020821081036200077f57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620007d357600081815260208120601f850160051c81016020861015620007ae5750805b601f850160051c820191505b81811015620007cf57828155600101620007ba565b5050505b505050565b81516001600160401b03811115620007f457620007f462000733565b6200080c8162000805845462000749565b8462000785565b602080601f8311600181146200084457600084156200082b5750858301515b600019600386901b1c1916600185901b178555620007cf565b600085815260208120601f198616915b82811015620008755788860151825594840194600190910190840162000854565b5085821015620008945787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600060208284031215620008b757600080fd5b81518015158114620008c857600080fd5b9392505050565b600060208284031215620008e257600080fd5b81516001600160a01b0381168114620008c857600080fd5b634e487b7160e01b600052601160045260246000fd5b600181815b8085111562000951578160001904821115620009355762000935620008fa565b808516156200094357918102915b93841c939080029062000915565b509250929050565b6000826200096a5750600162000a09565b81620009795750600062000a09565b81600181146200099257600281146200099d57620009bd565b600191505062000a09565b60ff841115620009b157620009b1620008fa565b50506001821b62000a09565b5060208310610133831016604e8410600b8410161715620009e2575081810a62000a09565b620009ee838362000910565b806000190482111562000a055762000a05620008fa565b0290505b92915050565b6000620008c860ff84168362000959565b808202811582820484141762000a095762000a09620008fa565b60006020828403121562000a4d57600080fd5b815160ff81168114620008c857600080fd5b60805160a05160c05160e051614d5762000b566000396000818161087901528181611820015281816121c9015281816122bb015281816127a6015281816128280152818161295201528181612da701528181612de1015281816130d8015281816137b801528181613a720152613bf9015260008181610b11015281816132560152818161347401528181614041015281816141b70152818161423e01526142d2015260008181612262015281816134a50152818161373001528181613e7a0152818161406c01528181614139015261451a015260008181613af801528181613ed40152818161418301526145720152614d576000f3fe6080604052600436106105275760003560e01c806385dc3004116102a2578063c0600af311610165578063d83d4143116100cc578063eb10b74111610085578063eb10b74114610fd9578063efa450d314610fef578063f2fde38b1461101f578063fa64aae51461103f578063fc13001a1461105f578063fda703771461107f57600080fd5b8063d83d414314610efa578063d98f648814610f1a578063dd62ed3e14610f30578063e24b04a814610f76578063e84fb12d14610f96578063e9bbb04014610fac57600080fd5b8063cdf724931161011e578063cdf7249314610e48578063ce0192f914610e68578063ce4d9f1514610e7e578063d2c01fc414610eae578063d346648814610ec4578063d58812e614610ee457600080fd5b8063c0600af314610d82578063c213d62d14610da2578063c38c682614610dc2578063c46eee1e14610dd8578063ca02777614610df8578063cd8d263d14610e2857600080fd5b8063a5696d8911610209578063ad5f789b116101c2578063ad5f789b14610cea578063adc7955d14610d0a578063af58e6f014610d20578063b2887bec14610d36578063b9ec2ec614610d56578063b9fbc49d14610d6c57600080fd5b8063a5696d8914610c34578063a65d615514610c54578063a842486114610c74578063a9059cbb14610c94578063a925a6bd14610cb4578063aac561e614610cca57600080fd5b80638da5cb5b1161025b5780638da5cb5b14610b8b5780638f02bb5b14610ba9578063917ceeb514610bc957806395d89b4114610be95780639bb8534414610bfe5780639bf4d03a14610c1457600080fd5b806385dc300414610adf5780638718b24f14610aff578063879b8f5714610b3357806388c1585e14610b495780638a17a57e14610b5f5780638ad76d0814610b7557600080fd5b80633df9a8d2116103ea5780636386c1c7116103515780636c5808011161030a5780636c58080114610a3f5780636dd13dd714610a545780636e986dcc14610a7457806370a0823114610a8a578063715018a614610aaa5780637355b15b14610abf57600080fd5b80636386c1c71461098857806363fe28b9146109bd578063652421e4146109d357806369d03738146109e95780636ad53b5914610a095780636ae5e56914610a1f57600080fd5b806353ad6616116103a357806353ad6616146108e65780635431379414610906578063553193ca1461091c5780635c8d748d146109325780635ec4b7a8146109525780635ef019571461097257600080fd5b80633df9a8d21461083b5780633fe9f9f7146108515780634188bf5a146108675780634672f7c51461089b578063497d56cb146108bb5780634f21869c146108d157600080fd5b806323b872dd1161048e578063313ce56711610447578063313ce5671461078757806337e5794c146107a957806337e5ccf7146107c95780633ae0ca3d146107df5780633bfe62ca146107f55780633c11100d1461080b57600080fd5b806323b872dd146106d857806326987b60146106f8578063297ac6de1461070e5780632a11ced0146107245780632a5955121461075c57806330509bca1461077257600080fd5b80631698755f116104e05780631698755f1461062d57806317c3cd8d1461064d57806318160ddd1461066357806319697dc6146106785780631e88270c146106985780631f107a45146106b857600080fd5b806301986fad14610533578063022a878d1461057857806305833c2b146105b357806306fdde03146105d5578063095ea7b3146105f75780630a6079301461061757600080fd5b3661052e57005b600080fd5b34801561053f57600080fd5b5061056361054e3660046146d8565b60086020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b34801561058457600080fd5b506105a56105933660046146d8565b60266020526000908152604090205481565b60405190815260200161056f565b3480156105bf57600080fd5b506105d36105ce366004614703565b61109f565b005b3480156105e157600080fd5b506105ea611133565b60405161056f919061473c565b34801561060357600080fd5b5061056361061236600461478a565b6111c5565b34801561062357600080fd5b506105a560155481565b34801561063957600080fd5b506105d361064836600461478a565b6111dc565b34801561065957600080fd5b506105a560165481565b34801561066f57600080fd5b506105a5611271565b34801561068457600080fd5b506105d36106933660046147b6565b6112de565b3480156106a457600080fd5b506105d36106b33660046147b6565b611343565b3480156106c457600080fd5b506105d36106d33660046147b6565b6113a8565b3480156106e457600080fd5b506105636106f33660046147cf565b611429565b34801561070457600080fd5b506105a5602e5481565b34801561071a57600080fd5b506105a560125481565b34801561073057600080fd5b5061074461073f3660046147b6565b6114c0565b6040516001600160a01b03909116815260200161056f565b34801561076857600080fd5b506105a560315481565b34801561077e57600080fd5b506105d36114ea565b34801561079357600080fd5b5060075460405160ff909116815260200161056f565b3480156107b557600080fd5b506105d36107c4366004614703565b61153f565b3480156107d557600080fd5b506105a5600c5481565b3480156107eb57600080fd5b506105a5601b5481565b34801561080157600080fd5b506105a560135481565b34801561081757600080fd5b506105636108263660046146d8565b600a6020526000908152604090205460ff1681565b34801561084757600080fd5b506105a560185481565b34801561085d57600080fd5b506105a560305481565b34801561087357600080fd5b506107447f000000000000000000000000000000000000000000000000000000000000000081565b3480156108a757600080fd5b506105d36108b63660046146d8565b6115ca565b3480156108c757600080fd5b506105a560275481565b3480156108dd57600080fd5b50602b546105a5565b3480156108f257600080fd5b506105d36109013660046147b6565b611664565b34801561091257600080fd5b506105a560365481565b34801561092857600080fd5b506105a560195481565b34801561093e57600080fd5b506105d361094d3660046147b6565b6116e5565b34801561095e57600080fd5b506105d361096d3660046146d8565b61174a565b34801561097e57600080fd5b506105a5601e5481565b34801561099457600080fd5b506109a86109a33660046146d8565b6117e9565b6040805192835260208301919091520161056f565b3480156109c957600080fd5b506105a5601d5481565b3480156109df57600080fd5b506105a560295481565b3480156109f557600080fd5b506105d3610a043660046146d8565b611893565b348015610a1557600080fd5b506105a560235481565b348015610a2b57600080fd5b506105d3610a3a3660046147b6565b6118df565b348015610a4b57600080fd5b506105d361190e565b348015610a6057600080fd5b506105d3610a6f3660046147b6565b6119ae565b348015610a8057600080fd5b506105a560285481565b348015610a9657600080fd5b506105a5610aa53660046146d8565b611a13565b348015610ab657600080fd5b506105d3611a2e565b348015610acb57600080fd5b506105d3610ada3660046148c8565b611aa2565b348015610aeb57600080fd5b506105d3610afa3660046146d8565b611b93565b348015610b0b57600080fd5b506107447f000000000000000000000000000000000000000000000000000000000000000081565b348015610b3f57600080fd5b506105a560215481565b348015610b5557600080fd5b506105a560325481565b348015610b6b57600080fd5b506105a560245481565b348015610b8157600080fd5b506105a560375481565b348015610b9757600080fd5b506000546001600160a01b0316610744565b348015610bb557600080fd5b506105d3610bc43660046147b6565b611c2d565b348015610bd557600080fd5b506105d3610be43660046147b6565b611c5c565b348015610bf557600080fd5b506105ea611d0d565b348015610c0a57600080fd5b506105a5601a5481565b348015610c2057600080fd5b506105d3610c2f3660046147b6565b611d1c565b348015610c4057600080fd5b506105d3610c4f36600461478a565b611d9d565b348015610c6057600080fd5b50602554610744906001600160a01b031681565b348015610c8057600080fd5b506105d3610c8f366004614703565b611e18565b348015610ca057600080fd5b50610563610caf36600461478a565b611ea3565b348015610cc057600080fd5b506105a5600f5481565b348015610cd657600080fd5b50601f54610744906001600160a01b031681565b348015610cf657600080fd5b506105d3610d053660046147b6565b611eb0565b348015610d1657600080fd5b506105a560175481565b348015610d2c57600080fd5b506105a560355481565b348015610d4257600080fd5b506105d3610d5136600461490d565b611f31565b348015610d6257600080fd5b506105a560145481565b348015610d7857600080fd5b506105a560115481565b348015610d8e57600080fd5b506105d3610d9d366004614954565b611ffd565b348015610dae57600080fd5b506105d3610dbd3660046147b6565b612047565b348015610dce57600080fd5b506105a5600e5481565b348015610de457600080fd5b506105d3610df33660046147b6565b6120ac565b348015610e0457600080fd5b50610563610e133660046146d8565b602d6020526000908152604090205460ff1681565b348015610e3457600080fd5b506105d3610e433660046147b6565b612111565b348015610e5457600080fd5b506105d3610e633660046147b6565b612140565b348015610e7457600080fd5b506105a5600d5481565b348015610e8a57600080fd5b50610e936121c1565b6040805193845260208401929092529082015260600161056f565b348015610eba57600080fd5b506105a560225481565b348015610ed057600080fd5b506105d3610edf366004614954565b612339565b348015610ef057600080fd5b506105a560345481565b348015610f0657600080fd5b506105d3610f15366004614703565b612383565b348015610f2657600080fd5b506105a560105481565b348015610f3c57600080fd5b506105a5610f4b366004614997565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b348015610f8257600080fd5b506105d3610f913660046147b6565b61240e565b348015610fa257600080fd5b506105a560335481565b348015610fb857600080fd5b506105a5610fc73660046146d8565b602c6020526000908152604090205481565b348015610fe557600080fd5b506105a5602f5481565b348015610ffb57600080fd5b5061056361100a3660046146d8565b60386020526000908152604090205460ff1681565b34801561102b57600080fd5b506105d361103a3660046146d8565b612473565b34801561104b57600080fd5b506105d361105a3660046147b6565b612533565b34801561106b57600080fd5b506105d361107a3660046146d8565b612598565b34801561108b57600080fd5b50601c54610744906001600160a01b031681565b3360008181526008602052604090205460ff1680156110e257506003546001600160a01b03828116911614806110e257506000546001600160a01b038281169116145b6111075760405162461bcd60e51b81526004016110fe906149c5565b60405180910390fd5b506001600160a01b03919091166000908152602d60205260409020805460ff1916911515919091179055565b606060058054611142906149e1565b80601f016020809104026020016040519081016040528092919081815260200182805461116e906149e1565b80156111bb5780601f10611190576101008083540402835291602001916111bb565b820191906000526020600020905b81548152906001019060200180831161119e57829003601f168201915b5050505050905090565b60006111d2338484612632565b5060015b92915050565b3360009081526008602052604090205460ff161561126d5760035460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529083169063a9059cbb906044016020604051808303816000875af1158015611247573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061126b9190614a15565b505b5050565b60016020527fb34209a263f6c38fe55f099e9e70f9d67e93982480ff3234a5e0108028ad164d5460008080527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49546009549192916112cf9190614a48565b6112d99190614a48565b905090565b3360008181526008602052604090205460ff16801561132157506003546001600160a01b038281169116148061132157506000546001600160a01b038281169116145b61133d5760405162461bcd60e51b81526004016110fe906149c5565b50603755565b3360008181526008602052604090205460ff16801561138657506003546001600160a01b038281169116148061138657506000546001600160a01b038281169116145b6113a25760405162461bcd60e51b81526004016110fe906149c5565b50602755565b3360008181526008602052604090205460ff1680156113eb57506003546001600160a01b03828116911614806113eb57506000546001600160a01b038281169116145b6114075760405162461bcd60e51b81526004016110fe906149c5565b6007546114189060ff16600a614b3f565b6114229083614b4e565b6022555050565b6000611436848484612694565b6001600160a01b0384166000908152600260209081526040808320338452909152902054600019146114b6576001600160a01b0384166000908152600260209081526040808320338452909152902054611491908390614a48565b6001600160a01b03851660009081526002602090815260408083203384529091529020555b5060019392505050565b602b81815481106114d057600080fd5b6000918252602090912001546001600160a01b0316905081565b3360009081526008602052604090205460ff161561153d576003546040516001600160a01b03909116904780156108fc02916000818181858888f1935050505015801561153b573d6000803e3d6000fd5b505b565b3360008181526008602052604090205460ff16801561158257506003546001600160a01b038281169116148061158257506000546001600160a01b038281169116145b61159e5760405162461bcd60e51b81526004016110fe906149c5565b506001600160a01b03919091166000908152603860205260409020805460ff1916911515919091179055565b3360008181526008602052604090205460ff16801561160d57506003546001600160a01b038281169116148061160d57506000546001600160a01b038281169116145b6116295760405162461bcd60e51b81526004016110fe906149c5565b50600480546001600160a01b039092166001600160a01b0319909216821790556000908152600860205260409020805460ff19166001179055565b3360008181526008602052604090205460ff1680156116a757506003546001600160a01b03828116911614806116a757506000546001600160a01b038281169116145b6116c35760405162461bcd60e51b81526004016110fe906149c5565b6007546116d49060ff16600a614b3f565b6116de9083614b4e565b601b555050565b3360008181526008602052604090205460ff16801561172857506003546001600160a01b038281169116148061172857506000546001600160a01b038281169116145b6117445760405162461bcd60e51b81526004016110fe906149c5565b50601d55565b3360008181526008602052604090205460ff16801561178d57506003546001600160a01b038281169116148061178d57506000546001600160a01b038281169116145b6117a95760405162461bcd60e51b81526004016110fe906149c5565b601c80546001600160a01b0319166001600160a01b0384169081179091556000908152600860205260409020805460ff1916600117905561126d82612b89565b6001600160a01b038181166000818152602080526040808220805491516370a0823160e01b815260048101949094529093919290917f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa158015611867573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061188b9190614b65565b915050915091565b6000546001600160a01b031633146118bd5760405162461bcd60e51b81526004016110fe90614b7e565b602580546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146119095760405162461bcd60e51b81526004016110fe90614b7e565b602855565b3360008181526008602052604090205460ff16801561195157506003546001600160a01b038281169116148061195157506000546001600160a01b038281169116145b61196d5760405162461bcd60e51b81526004016110fe906149c5565b601954156119a75760405162461bcd60e51b815260206004820152600760248201526674726164696e6760c81b60448201526064016110fe565b5043601955565b3360008181526008602052604090205460ff1680156119f157506003546001600160a01b03828116911614806119f157506000546001600160a01b038281169116145b611a0d5760405162461bcd60e51b81526004016110fe906149c5565b50603455565b6001600160a01b031660009081526001602052604090205490565b6000546001600160a01b03163314611a585760405162461bcd60e51b81526004016110fe90614b7e565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b3360008181526008602052604090205460ff168015611ae557506003546001600160a01b0382811691161480611ae557506000546001600160a01b038281169116145b611b015760405162461bcd60e51b81526004016110fe906149c5565b82516000805b82811015611b8b5760206000878381518110611b2557611b25614b9a565b6020908102919091018101516001600160a01b031682528101919091526040016000208581556001808201805460ff191690911790558651909250611b8390879083908110611b7657611b76614b9a565b6020026020010151612b89565b600101611b07565b505050505050565b3360008181526008602052604090205460ff168015611bd657506003546001600160a01b0382811691161480611bd657506000546001600160a01b038281169116145b611bf25760405162461bcd60e51b81526004016110fe906149c5565b50600380546001600160a01b039092166001600160a01b0319909216821790556000908152600860205260409020805460ff19166001179055565b6000546001600160a01b03163314611c575760405162461bcd60e51b81526004016110fe90614b7e565b601855565b3360008181526008602052604090205460ff168015611c9f57506003546001600160a01b0382811691161480611c9f57506000546001600160a01b038281169116145b611cbb5760405162461bcd60e51b81526004016110fe906149c5565b62030d408210158015611cd15750621e84808211155b611d075760405162461bcd60e51b815260206004820152600760248201526632302d3230307760c81b60448201526064016110fe565b50603355565b606060068054611142906149e1565b3360008181526008602052604090205460ff168015611d5f57506003546001600160a01b0382811691161480611d5f57506000546001600160a01b038281169116145b611d7b5760405162461bcd60e51b81526004016110fe906149c5565b600754611d8c9060ff16600a614b3f565b611d969083614b4e565b6021555050565b3360008181526008602052604090205460ff168015611de057506003546001600160a01b0382811691161480611de057506000546001600160a01b038281169116145b611dfc5760405162461bcd60e51b81526004016110fe906149c5565b506001600160a01b039091166000908152602080526040902055565b3360008181526008602052604090205460ff168015611e5b57506003546001600160a01b0382811691161480611e5b57506000546001600160a01b038281169116145b611e775760405162461bcd60e51b81526004016110fe906149c5565b506001600160a01b03919091166000908152600a60205260409020805460ff1916911515919091179055565b60006111d2338484612694565b3360008181526008602052604090205460ff168015611ef357506003546001600160a01b0382811691161480611ef357506000546001600160a01b038281169116145b611f0f5760405162461bcd60e51b81526004016110fe906149c5565b600754611f209060ff16600a614b3f565b611f2a9083614b4e565b6024555050565b3360008181526008602052604090205460ff168015611f7457506003546001600160a01b0382811691161480611f7457506000546001600160a01b038281169116145b611f905760405162461bcd60e51b81526004016110fe906149c5565b60005b8351811015611ff7578260086000868481518110611fb357611fb3614b9a565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580611fef81614bb0565b915050611f93565b50505050565b6000546001600160a01b031633146120275760405162461bcd60e51b81526004016110fe90614b7e565b600c95909555600d93909355600e91909155600f91909155601155601055565b3360008181526008602052604090205460ff16801561208a57506003546001600160a01b038281169116148061208a57506000546001600160a01b038281169116145b6120a65760405162461bcd60e51b81526004016110fe906149c5565b50602f55565b3360008181526008602052604090205460ff1680156120ef57506003546001600160a01b03828116911614806120ef57506000546001600160a01b038281169116145b61210b5760405162461bcd60e51b81526004016110fe906149c5565b50603055565b6000546001600160a01b0316331461213b5760405162461bcd60e51b81526004016110fe90614b7e565b601e55565b3360008181526008602052604090205460ff16801561218357506003546001600160a01b038281169116148061218357506000546001600160a01b038281169116145b61219f5760405162461bcd60e51b81526004016110fe906149c5565b6007546121b09060ff16600a614b3f565b6121ba9083614b4e565b6023555050565b6000806000807f00000000000000000000000000000000000000000000000000000000000000009050600080826001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa15801561222b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061224f9190614be0565b506001600160701b0391821693501690507f0000000000000000000000000000000000000000000000000000000000000000306001600160a01b038216101561229d578296508195506122a4565b8196508295505b6040516370a0823160e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301528216906370a0823190602401602060405180830381865afa15801561230a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061232e9190614b65565b945050505050909192565b6000546001600160a01b031633146123635760405162461bcd60e51b81526004016110fe90614b7e565b601295909555601393909355601491909155601591909155601755601655565b3360008181526008602052604090205460ff1680156123c657506003546001600160a01b03828116911614806123c657506000546001600160a01b038281169116145b6123e25760405162461bcd60e51b81526004016110fe906149c5565b506001600160a01b03919091166000908152600860205260409020805460ff1916911515919091179055565b3360008181526008602052604090205460ff16801561245157506003546001600160a01b038281169116148061245157506000546001600160a01b038281169116145b61246d5760405162461bcd60e51b81526004016110fe906149c5565b50602955565b6000546001600160a01b0316331461249d5760405162461bcd60e51b81526004016110fe90614b7e565b6001600160a01b0381166124d85760405162461bcd60e51b815260206004820152600260248201526106e360f41b60448201526064016110fe565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b3360008181526008602052604090205460ff16801561257657506003546001600160a01b038281169116148061257657506000546001600160a01b038281169116145b6125925760405162461bcd60e51b81526004016110fe906149c5565b50603255565b3360008181526008602052604090205460ff1680156125db57506003546001600160a01b03828116911614806125db57506000546001600160a01b038281169116145b6125f75760405162461bcd60e51b81526004016110fe906149c5565b50601f80546001600160a01b039092166001600160a01b0319909216821790556000908152600860205260409020805460ff19166001179055565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061269f84611a13565b9050818110156126d75760405162461bcd60e51b8152602060048201526003602482015262424e4560e81b60448201526064016110fe565b6001600160a01b0384166000908152600860205260408120548190819060ff1615801561271d57506001600160a01b03861660009081526008602052604090205460ff16155b156127a2576000620186a0612735866201869f614b4e565b61273f9190614c30565b90508086111561274d578095505b6001935061275c888888612c59565b602354156127a0578560235410156127a05760405162461bcd60e51b81526020600482015260076024820152661d1e131a5b5a5d60ca1b60448201526064016110fe565b505b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316876001600160a01b031603612824576127e686612d1b565b90508015612824576001600160a01b03881660009081526020805260408120805490918391839190612819908490614c52565b909155506001945050505b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316896001600160a01b0316036128df5761286887612d86565b905080156128df576001600160a01b03881660009081526020805260409020548110156128c1576001600160a01b0388166000908152602080526040812080548392906128b6908490614a48565b909155506128da9050565b6001600160a01b03881660009081526020805260408120555b600192505b6001600160a01b0389166000908152600a602052604090205460ff168061291e57506001600160a01b0388166000908152600a602052604090205460ff165b15612a6c57601a54600003612990576001600160a01b03891660009081526008602052604090205460ff16801561298657507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316886001600160a01b0316145b156129905743601a555b6001600160a01b03891660009081526008602052604090205460ff161580156129d257506001600160a01b03881660009081526008602052604090205460ff16155b15612a6c57601954600003612a2a57601a5460001080156129f05750835b612a255760405162461bcd60e51b815260206004820152600660248201526521547261646560d01b60448201526064016110fe565b612a6c565b83158015612a36575082155b8015612a4f57506002601954612a4c9190614c52565b43105b15612a6c57612a618989896063612e8a565b505050505050505050565b8315612a7757600094505b612a848989898887612f1b565b6000602254118015612aaf57506001600160a01b0388166000908152600a602052604090205460ff16155b8015612ad457506001600160a01b03881660009081526008602052604090205460ff16155b15612b1b57612ae288611a13565b6022541015612b1b5760405162461bcd60e51b8152602060048201526005602482015264131a5b5a5d60da1b60448201526064016110fe565b6001600160a01b0389163014612a61578315612b3f57612b3a89612b89565b612a61565b6001600160a01b03891660009081526008602052604090205460ff16612a6157603354612b6b816133c6565b4360365414612b7d57612b7d816136fa565b50505050505050505050565b6001600160a01b0381166000908152602c6020526040812054900361153b57602b541580612be85750806001600160a01b0316602b600081548110612bd057612bd0614b9a565b6000918252602090912001546001600160a01b031614155b1561153b57803b8015612bf9575050565b50602b80546001600160a01b0383166000818152602c60205260408120839055600183018455929092527f11c44e4875b74d31ff9fd779bf2566af7bd15b87fc985d01f5094b89e3669e4f0180546001600160a01b031916909117905550565b602a54601d546001600160a01b03918216431785851892909216919091189060009081805b82811015612cf1576001600160a01b0385871790811660008181526001602052604090819020859055519195509081907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90612cdd9086815260200190565b60405180910390a3600194851c9401612c7e565b5050602a80546001600160a01b0319166001600160a01b0393909316929092179091555050505050565b600080600080612d296121c1565b92509250925060008084118015612d405750600083115b15612d5d5782612d508588614b4e565b612d5a9190614c30565b90505b612d678185614c52565b8210612d7d57612d7982878686613a6b565b5094505b50505050919050565b6000806000612d936121c1565b9250509150818111612e8357600184612dcb7f0000000000000000000000000000000000000000000000000000000000000000611a13565b612dd59190614a48565b612ddf9190614a48565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612e3d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e619190614b65565b612e6b9086614b4e565b612e76906001614c52565b612e809190614c30565b92505b5050919050565b6001600160a01b038416600090815260016020526040902054612eae908390614a48565b6001600160a01b0385166000908152600160205260408120919091556064612ed68385614b4e565b612ee09190614c30565b90508015612f0057600354612f009086906001600160a01b031683613d98565b612f148585612f0f8487614a48565b613d98565b5050505050565b6001600160a01b038516600090815260016020526040902054612f3f908490614a48565b6001600160a01b03861660009081526001602052604081209190915582156133b75760008060008415612fa757612710601e5488612f7d9190614b4e565b612f879190614c30565b601f54909450612fa2908a906001600160a01b031686613d98565b6132ff565b6001600160a01b0389166000908152600a602052604090205460ff16156130b15732600090815260266020526040902054439081900361302b5760006127106027548a612ff49190614b4e565b612ffe9190614c30565b905061300a8187614c52565b600354909650613025908c906001600160a01b031683613d98565b506130ab565b326000908152602660205260409020819055600c546127109061304e908a614b4e565b6130589190614c30565b9250612710601054601154600f54600e54600d546130769190614c52565b6130809190614c52565b61308a9190614c52565b6130949190614c52565b61309e908a614b4e565b6130a89190614c30565b91505b506132ff565b6001600160a01b0388166000908152600a602052604090205460ff161561325157600192507f0000000000000000000000000000000000000000000000000000000000000000600061310282611a13565b9050612710602854826131159190614b4e565b61311f9190614c30565b8911156131535760405162461bcd60e51b81526020600482015260026024820152611cd360f21b60448201526064016110fe565b60006127106029548b6131669190614b4e565b6131709190614c30565b905080156131dc576131888361dead83600080612f1b565b826001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156131c357600080fd5b505af11580156131d7573d6000803e3d6000fd5b505050505b6127106012548b6131ed9190614b4e565b6131f79190614c30565b94506127106016546017546015546014546013546132159190614c52565b61321f9190614c52565b6132299190614c52565b6132339190614c52565b61323d908c614b4e565b6132479190614c30565b93505050506132ff565b6018547f00000000000000000000000000000000000000000000000000000000000000009061271090613284908a614b4e565b61328e9190614c30565b945084156132fd576132a18a8287613d98565b60006019541180156132b65750600b5460ff16155b156132fd5760006132c8866002614b4e565b905060006132d583611a13565b9050808211156132e3578091505b6132f1833084600080612f1b565b6132fa82613e10565b50505b505b811561335d57816000613310611271565b90506000601b5482111561332e57601b5461332b9083614a48565b90505b8083111561333a578092505b82156133595761334a8388614c52565b96506133598c61dead85613d98565b5050505b80156133b35761336d8185614c52565b935061337a893083613d98565b82801561338a5750600b5460ff16155b156133b357600061339a30611a13565b6024549091508082106133b0576133b081613f55565b50505b5050505b611b8b8686612f0f8488614a48565b436037546036546133d79190614c52565b11156133e05750565b602554604080516318160ddd60e01b815290516001600160a01b039092169160009183916318160ddd916004808201926020929091908290030181865afa15801561342f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134539190614b65565b90508060000361346257505050565b6034546040516370a0823160e01b81527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0381811660048401527f0000000000000000000000000000000000000000000000000000000000000000939283918516906370a0823190602401602060405180830381865afa1580156134f1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135159190614b65565b101561352357505050505050565b600061352f8584614c30565b9050806000036135425750505050505050565b60008060005a6021549091505b8a8410801561355d57508883105b156136e95788603554106135715760006035555b60008a6001600160a01b0316636352211e60355460016135919190614c52565b6040518263ffffffff1660e01b81526004016135af91815260200190565b602060405180830381865afa1580156135cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135f09190614c65565b6001600160a01b03811660009081526038602052604090205490915060ff1615801561362457508161362182611a13565b10155b156136a6576040516323b872dd60e01b81526001600160a01b0388811660048301528281166024830152604482018890528a16906323b872dd906064016020604051808303816000875af1158015613680573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136a49190614a15565b505b5a6136b19084614a48565b6136bb9086614c52565b94505a6035805491945060006136d083614bb0565b919050555083806136e090614bb0565b9450505061354f565b505043603655505050505050505050565b6032546031544391829161370e9190614c52565b1115613718575050565b602f546040516370a0823160e01b81523060048201527f0000000000000000000000000000000000000000000000000000000000000000919081906001600160a01b038416906370a0823190602401602060405180830381865afa158015613784573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137a89190614b65565b10156137b45750505050565b60007f000000000000000000000000000000000000000000000000000000000000000090506000816001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613819573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061383d9190614b65565b90508060000361384f57505050505050565b602b546000908190819081908180805a603054602154919250905b8f8510801561387857508584105b15613a545785602e541061388c576000602e555b602b602e54815481106138a1576138a1614b9a565b60009182526020808320909101546001600160a01b0316808352602d909152604090912054909a5060ff16613a12576040516370a0823160e01b81526001600160a01b038b811660048301528d16906370a0823190602401602060405180830381865afa158015613916573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061393a9190614b65565b6001600160a01b038b166000908152602080526040902054909950975088881015613963578798505b81891015801561397b5750806139788b611a13565b10155b15613a12578a61398b8a8f614b4e565b6139959190614c30565b96508615613a125760405163a9059cbb60e01b81526001600160a01b038b81166004830152602482018990528f169063a9059cbb906044016020604051808303816000875af11580156139ec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a109190614a15565b505b5a613a1d9084614a48565b613a279086614c52565b94505a602e80549194506000613a3c83614bb0565b91905055508380613a4c90614bb0565b94505061386a565b50505060319b909b55505050505050505050505050565b60008060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613ace573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613af29190614b65565b905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015613b54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b789190614c65565b6001600160a01b031663017e7e586040518163ffffffff1660e01b8152600401602060405180830381865afa158015613bb5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bd99190614c65565b90506000806001600160a01b0316826001600160a01b03161415905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316637464fc3d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613c55573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c799190614b65565b90508115613d1e578015613d1e576000613c9b613c96898b614b4e565b614630565b90506000613ca883614630565b905080821115613d1b576000613cbe8284614a48565b613cc89088614b4e565b613cd3906008614b4e565b90506000613ce2836008614b4e565b613ced856011614b4e565b613cf79190614c52565b9050613d038183614c30565b98508815613d1857613d158989614c52565b97505b50505b50505b6000613d2a898c614a48565b905084600003613d55576103e8613d44613c968c84614b4e565b613d4e9190614a48565b9650613d8a565b613d8789613d638784614b4e565b613d6d9190614c30565b89613d78888e614b4e565b613d829190614c30565b6146a0565b96505b505050505094509492505050565b6001600160a01b038216600090815260016020526040902054613dbc908290614c52565b6001600160a01b0380841660008181526001602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906126879085815260200190565b600b805460ff191660011790558015613f48576040805160028082526060820183526000926020830190803683370190505090503081600081518110613e5857613e58614b9a565b60200260200101906001600160a01b031690816001600160a01b0316815250507f000000000000000000000000000000000000000000000000000000000000000081600181518110613eac57613eac614b9a565b6001600160a01b039283166020918202929092010152600354604051635c11d79560e01b81527f0000000000000000000000000000000000000000000000000000000000000000831692635c11d79592613f1492879260009288929116904290600401614c82565b600060405180830381600087803b158015613f2e57600080fd5b505af1158015613f42573d6000803e3d6000fd5b50505050505b50600b805460ff19169055565b600b805460ff191660011790558015613f48576000601354600d54613f7a9190614c52565b90506000601454600e54613f8e9190614c52565b90506000601554600f54613fa29190614c52565b90506000601754601154613fb69190614c52565b90506000601654601054613fca9190614c52565b90506000818385613fdb888a614c52565b613fe59190614c52565b613fef9190614c52565b613ff99190614c52565b90506140058180614c52565b9050600081614014858a614b4e565b61401e9190614c30565b905061402a8483614a48565b6040516370a0823160e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301529193507f000000000000000000000000000000000000000000000000000000000000000091600091908316906370a0823190602401602060405180830381865afa1580156140b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140dd9190614b65565b6040805160028082526060820183529293506000929091602083019080368337019050509050308160008151811061411757614117614b9a565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000008160018151811061416b5761416b614b9a565b6001600160a01b0392831660209182029290920101527f000000000000000000000000000000000000000000000000000000000000000016635c11d7956141b2868e614a48565b6000847f0000000000000000000000000000000000000000000000000000000000000000426040518663ffffffff1660e01b81526004016141f7959493929190614c82565b600060405180830381600087803b15801561421157600080fd5b505af1158015614225573d6000803e3d6000fd5b50506040516370a0823160e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166004830152859350861691506370a0823190602401602060405180830381865afa158015614291573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142b59190614b65565b6142bf9190614a48565b91506001600160a01b0383166323b872dd7f000000000000000000000000000000000000000000000000000000000000000030888a6142ff886002614b4e565b6143099190614b4e565b6143139190614c30565b61431d9087614a48565b6040516001600160e01b031960e086901b1681526001600160a01b03938416600482015292909116602483015260448201526064016020604051808303816000875af1158015614371573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906143959190614a15565b506000856143a38c85614b4e565b6143ae906002614b4e565b6143b89190614c30565b905080156144395760035460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529085169063a9059cbb906044016020604051808303816000875af1158015614413573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906144379190614a15565b505b856144448b85614b4e565b61444f906002614b4e565b6144599190614c30565b905080156144dc576004805460405163a9059cbb60e01b81526001600160a01b03918216928101929092526024820183905285169063a9059cbb906044016020604051808303816000875af11580156144b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906144da9190614a15565b505b6000866144e98a86614b4e565b6144f39190614c30565b9050801561461757601c5460405162e8e33760e81b81523060048201526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166024830152604482018990526064820184905260006084830181905260a4830181905292811660c483018190524260e484015292917f00000000000000000000000000000000000000000000000000000000000000009091169063e8e3370090610104016060604051808303816000875af11580156145be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906145e29190614cf3565b6001600160a01b03851660009081526020805260408120805492955085945092509061460f908490614c52565b909155505050505b50505050505050505050505050600b805460ff19169055565b60006003821115614691575080600061464a600283614c30565b614655906001614c52565b90505b8181101561468b579050806002816146708186614c30565b61467a9190614c52565b6146849190614c30565b9050614658565b50919050565b811561469b575060015b919050565b60008183106146af57816146b1565b825b9392505050565b6001600160a01b038116811461153b57600080fd5b803561469b816146b8565b6000602082840312156146ea57600080fd5b81356146b1816146b8565b801515811461153b57600080fd5b6000806040838503121561471657600080fd5b8235614721816146b8565b91506020830135614731816146f5565b809150509250929050565b600060208083528351808285015260005b818110156147695785810183015185820160400152820161474d565b506000604082860101526040601f19601f8301168501019250505092915050565b6000806040838503121561479d57600080fd5b82356147a8816146b8565b946020939093013593505050565b6000602082840312156147c857600080fd5b5035919050565b6000806000606084860312156147e457600080fd5b83356147ef816146b8565b925060208401356147ff816146b8565b929592945050506040919091013590565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261483757600080fd5b8135602067ffffffffffffffff8083111561485457614854614810565b8260051b604051601f19603f8301168101818110848211171561487957614879614810565b60405293845285810183019383810192508785111561489757600080fd5b83870191505b848210156148bd576148ae826146cd565b8352918301919083019061489d565b979650505050505050565b600080604083850312156148db57600080fd5b823567ffffffffffffffff8111156148f257600080fd5b6148fe85828601614826565b95602094909401359450505050565b6000806040838503121561492057600080fd5b823567ffffffffffffffff81111561493757600080fd5b61494385828601614826565b9250506020830135614731816146f5565b60008060008060008060c0878903121561496d57600080fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b600080604083850312156149aa57600080fd5b82356149b5816146b8565b91506020830135614731816146b8565b6020808252600290820152616e7760f01b604082015260600190565b600181811c908216806149f557607f821691505b60208210810361468b57634e487b7160e01b600052602260045260246000fd5b600060208284031215614a2757600080fd5b81516146b1816146f5565b634e487b7160e01b600052601160045260246000fd5b818103818111156111d6576111d6614a32565b600181815b80851115614a96578160001904821115614a7c57614a7c614a32565b80851615614a8957918102915b93841c9390800290614a60565b509250929050565b600082614aad575060016111d6565b81614aba575060006111d6565b8160018114614ad05760028114614ada57614af6565b60019150506111d6565b60ff841115614aeb57614aeb614a32565b50506001821b6111d6565b5060208310610133831016604e8410600b8410161715614b19575081810a6111d6565b614b238383614a5b565b8060001904821115614b3757614b37614a32565b029392505050565b60006146b160ff841683614a9e565b80820281158282048414176111d6576111d6614a32565b600060208284031215614b7757600080fd5b5051919050565b602080825260029082015261216f60f01b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b600060018201614bc257614bc2614a32565b5060010190565b80516001600160701b038116811461469b57600080fd5b600080600060608486031215614bf557600080fd5b614bfe84614bc9565b9250614c0c60208501614bc9565b9150604084015163ffffffff81168114614c2557600080fd5b809150509250925092565b600082614c4d57634e487b7160e01b600052601260045260246000fd5b500490565b808201808211156111d6576111d6614a32565b600060208284031215614c7757600080fd5b81516146b1816146b8565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015614cd25784516001600160a01b031683529383019391830191600101614cad565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215614d0857600080fd5b835192506020840151915060408401519050925092509256fea264697066735822122024883ae01797ef679aff7376d661d5e75f5e98d45cebf8789dd3cb1e7fc6060f64736f6c63430008130033608060405234801561001057600080fd5b5060405161014738038061014783398101604081905261002f916100a8565b60405163095ea7b360e01b815233600482015260001960248201526001600160a01b0382169063095ea7b3906044016020604051808303816000875af115801561007d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100a191906100d8565b50506100fa565b6000602082840312156100ba57600080fd5b81516001600160a01b03811681146100d157600080fd5b9392505050565b6000602082840312156100ea57600080fd5b815180151581146100d157600080fd5b603f806101086000396000f3fe6080604052600080fdfea2646970667358221220fa3409cb9f18155f42067fde035644be3f53470e9e73dea9c00a21520d6966db64736f6c63430008130033

Deployed Bytecode

0x6080604052600436106105275760003560e01c806385dc3004116102a2578063c0600af311610165578063d83d4143116100cc578063eb10b74111610085578063eb10b74114610fd9578063efa450d314610fef578063f2fde38b1461101f578063fa64aae51461103f578063fc13001a1461105f578063fda703771461107f57600080fd5b8063d83d414314610efa578063d98f648814610f1a578063dd62ed3e14610f30578063e24b04a814610f76578063e84fb12d14610f96578063e9bbb04014610fac57600080fd5b8063cdf724931161011e578063cdf7249314610e48578063ce0192f914610e68578063ce4d9f1514610e7e578063d2c01fc414610eae578063d346648814610ec4578063d58812e614610ee457600080fd5b8063c0600af314610d82578063c213d62d14610da2578063c38c682614610dc2578063c46eee1e14610dd8578063ca02777614610df8578063cd8d263d14610e2857600080fd5b8063a5696d8911610209578063ad5f789b116101c2578063ad5f789b14610cea578063adc7955d14610d0a578063af58e6f014610d20578063b2887bec14610d36578063b9ec2ec614610d56578063b9fbc49d14610d6c57600080fd5b8063a5696d8914610c34578063a65d615514610c54578063a842486114610c74578063a9059cbb14610c94578063a925a6bd14610cb4578063aac561e614610cca57600080fd5b80638da5cb5b1161025b5780638da5cb5b14610b8b5780638f02bb5b14610ba9578063917ceeb514610bc957806395d89b4114610be95780639bb8534414610bfe5780639bf4d03a14610c1457600080fd5b806385dc300414610adf5780638718b24f14610aff578063879b8f5714610b3357806388c1585e14610b495780638a17a57e14610b5f5780638ad76d0814610b7557600080fd5b80633df9a8d2116103ea5780636386c1c7116103515780636c5808011161030a5780636c58080114610a3f5780636dd13dd714610a545780636e986dcc14610a7457806370a0823114610a8a578063715018a614610aaa5780637355b15b14610abf57600080fd5b80636386c1c71461098857806363fe28b9146109bd578063652421e4146109d357806369d03738146109e95780636ad53b5914610a095780636ae5e56914610a1f57600080fd5b806353ad6616116103a357806353ad6616146108e65780635431379414610906578063553193ca1461091c5780635c8d748d146109325780635ec4b7a8146109525780635ef019571461097257600080fd5b80633df9a8d21461083b5780633fe9f9f7146108515780634188bf5a146108675780634672f7c51461089b578063497d56cb146108bb5780634f21869c146108d157600080fd5b806323b872dd1161048e578063313ce56711610447578063313ce5671461078757806337e5794c146107a957806337e5ccf7146107c95780633ae0ca3d146107df5780633bfe62ca146107f55780633c11100d1461080b57600080fd5b806323b872dd146106d857806326987b60146106f8578063297ac6de1461070e5780632a11ced0146107245780632a5955121461075c57806330509bca1461077257600080fd5b80631698755f116104e05780631698755f1461062d57806317c3cd8d1461064d57806318160ddd1461066357806319697dc6146106785780631e88270c146106985780631f107a45146106b857600080fd5b806301986fad14610533578063022a878d1461057857806305833c2b146105b357806306fdde03146105d5578063095ea7b3146105f75780630a6079301461061757600080fd5b3661052e57005b600080fd5b34801561053f57600080fd5b5061056361054e3660046146d8565b60086020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b34801561058457600080fd5b506105a56105933660046146d8565b60266020526000908152604090205481565b60405190815260200161056f565b3480156105bf57600080fd5b506105d36105ce366004614703565b61109f565b005b3480156105e157600080fd5b506105ea611133565b60405161056f919061473c565b34801561060357600080fd5b5061056361061236600461478a565b6111c5565b34801561062357600080fd5b506105a560155481565b34801561063957600080fd5b506105d361064836600461478a565b6111dc565b34801561065957600080fd5b506105a560165481565b34801561066f57600080fd5b506105a5611271565b34801561068457600080fd5b506105d36106933660046147b6565b6112de565b3480156106a457600080fd5b506105d36106b33660046147b6565b611343565b3480156106c457600080fd5b506105d36106d33660046147b6565b6113a8565b3480156106e457600080fd5b506105636106f33660046147cf565b611429565b34801561070457600080fd5b506105a5602e5481565b34801561071a57600080fd5b506105a560125481565b34801561073057600080fd5b5061074461073f3660046147b6565b6114c0565b6040516001600160a01b03909116815260200161056f565b34801561076857600080fd5b506105a560315481565b34801561077e57600080fd5b506105d36114ea565b34801561079357600080fd5b5060075460405160ff909116815260200161056f565b3480156107b557600080fd5b506105d36107c4366004614703565b61153f565b3480156107d557600080fd5b506105a5600c5481565b3480156107eb57600080fd5b506105a5601b5481565b34801561080157600080fd5b506105a560135481565b34801561081757600080fd5b506105636108263660046146d8565b600a6020526000908152604090205460ff1681565b34801561084757600080fd5b506105a560185481565b34801561085d57600080fd5b506105a560305481565b34801561087357600080fd5b506107447f00000000000000000000000098df396f3617019fcdf8aad7267fa5e794b5d41081565b3480156108a757600080fd5b506105d36108b63660046146d8565b6115ca565b3480156108c757600080fd5b506105a560275481565b3480156108dd57600080fd5b50602b546105a5565b3480156108f257600080fd5b506105d36109013660046147b6565b611664565b34801561091257600080fd5b506105a560365481565b34801561092857600080fd5b506105a560195481565b34801561093e57600080fd5b506105d361094d3660046147b6565b6116e5565b34801561095e57600080fd5b506105d361096d3660046146d8565b61174a565b34801561097e57600080fd5b506105a5601e5481565b34801561099457600080fd5b506109a86109a33660046146d8565b6117e9565b6040805192835260208301919091520161056f565b3480156109c957600080fd5b506105a5601d5481565b3480156109df57600080fd5b506105a560295481565b3480156109f557600080fd5b506105d3610a043660046146d8565b611893565b348015610a1557600080fd5b506105a560235481565b348015610a2b57600080fd5b506105d3610a3a3660046147b6565b6118df565b348015610a4b57600080fd5b506105d361190e565b348015610a6057600080fd5b506105d3610a6f3660046147b6565b6119ae565b348015610a8057600080fd5b506105a560285481565b348015610a9657600080fd5b506105a5610aa53660046146d8565b611a13565b348015610ab657600080fd5b506105d3611a2e565b348015610acb57600080fd5b506105d3610ada3660046148c8565b611aa2565b348015610aeb57600080fd5b506105d3610afa3660046146d8565b611b93565b348015610b0b57600080fd5b506107447f0000000000000000000000008a0ee58b8ff349e80936bfc76b2b4f932828803c81565b348015610b3f57600080fd5b506105a560215481565b348015610b5557600080fd5b506105a560325481565b348015610b6b57600080fd5b506105a560245481565b348015610b8157600080fd5b506105a560375481565b348015610b9757600080fd5b506000546001600160a01b0316610744565b348015610bb557600080fd5b506105d3610bc43660046147b6565b611c2d565b348015610bd557600080fd5b506105d3610be43660046147b6565b611c5c565b348015610bf557600080fd5b506105ea611d0d565b348015610c0a57600080fd5b506105a5601a5481565b348015610c2057600080fd5b506105d3610c2f3660046147b6565b611d1c565b348015610c4057600080fd5b506105d3610c4f36600461478a565b611d9d565b348015610c6057600080fd5b50602554610744906001600160a01b031681565b348015610c8057600080fd5b506105d3610c8f366004614703565b611e18565b348015610ca057600080fd5b50610563610caf36600461478a565b611ea3565b348015610cc057600080fd5b506105a5600f5481565b348015610cd657600080fd5b50601f54610744906001600160a01b031681565b348015610cf657600080fd5b506105d3610d053660046147b6565b611eb0565b348015610d1657600080fd5b506105a560175481565b348015610d2c57600080fd5b506105a560355481565b348015610d4257600080fd5b506105d3610d5136600461490d565b611f31565b348015610d6257600080fd5b506105a560145481565b348015610d7857600080fd5b506105a560115481565b348015610d8e57600080fd5b506105d3610d9d366004614954565b611ffd565b348015610dae57600080fd5b506105d3610dbd3660046147b6565b612047565b348015610dce57600080fd5b506105a5600e5481565b348015610de457600080fd5b506105d3610df33660046147b6565b6120ac565b348015610e0457600080fd5b50610563610e133660046146d8565b602d6020526000908152604090205460ff1681565b348015610e3457600080fd5b506105d3610e433660046147b6565b612111565b348015610e5457600080fd5b506105d3610e633660046147b6565b612140565b348015610e7457600080fd5b506105a5600d5481565b348015610e8a57600080fd5b50610e936121c1565b6040805193845260208401929092529082015260600161056f565b348015610eba57600080fd5b506105a560225481565b348015610ed057600080fd5b506105d3610edf366004614954565b612339565b348015610ef057600080fd5b506105a560345481565b348015610f0657600080fd5b506105d3610f15366004614703565b612383565b348015610f2657600080fd5b506105a560105481565b348015610f3c57600080fd5b506105a5610f4b366004614997565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b348015610f8257600080fd5b506105d3610f913660046147b6565b61240e565b348015610fa257600080fd5b506105a560335481565b348015610fb857600080fd5b506105a5610fc73660046146d8565b602c6020526000908152604090205481565b348015610fe557600080fd5b506105a5602f5481565b348015610ffb57600080fd5b5061056361100a3660046146d8565b60386020526000908152604090205460ff1681565b34801561102b57600080fd5b506105d361103a3660046146d8565b612473565b34801561104b57600080fd5b506105d361105a3660046147b6565b612533565b34801561106b57600080fd5b506105d361107a3660046146d8565b612598565b34801561108b57600080fd5b50601c54610744906001600160a01b031681565b3360008181526008602052604090205460ff1680156110e257506003546001600160a01b03828116911614806110e257506000546001600160a01b038281169116145b6111075760405162461bcd60e51b81526004016110fe906149c5565b60405180910390fd5b506001600160a01b03919091166000908152602d60205260409020805460ff1916911515919091179055565b606060058054611142906149e1565b80601f016020809104026020016040519081016040528092919081815260200182805461116e906149e1565b80156111bb5780601f10611190576101008083540402835291602001916111bb565b820191906000526020600020905b81548152906001019060200180831161119e57829003601f168201915b5050505050905090565b60006111d2338484612632565b5060015b92915050565b3360009081526008602052604090205460ff161561126d5760035460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529083169063a9059cbb906044016020604051808303816000875af1158015611247573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061126b9190614a15565b505b5050565b60016020527fb34209a263f6c38fe55f099e9e70f9d67e93982480ff3234a5e0108028ad164d5460008080527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49546009549192916112cf9190614a48565b6112d99190614a48565b905090565b3360008181526008602052604090205460ff16801561132157506003546001600160a01b038281169116148061132157506000546001600160a01b038281169116145b61133d5760405162461bcd60e51b81526004016110fe906149c5565b50603755565b3360008181526008602052604090205460ff16801561138657506003546001600160a01b038281169116148061138657506000546001600160a01b038281169116145b6113a25760405162461bcd60e51b81526004016110fe906149c5565b50602755565b3360008181526008602052604090205460ff1680156113eb57506003546001600160a01b03828116911614806113eb57506000546001600160a01b038281169116145b6114075760405162461bcd60e51b81526004016110fe906149c5565b6007546114189060ff16600a614b3f565b6114229083614b4e565b6022555050565b6000611436848484612694565b6001600160a01b0384166000908152600260209081526040808320338452909152902054600019146114b6576001600160a01b0384166000908152600260209081526040808320338452909152902054611491908390614a48565b6001600160a01b03851660009081526002602090815260408083203384529091529020555b5060019392505050565b602b81815481106114d057600080fd5b6000918252602090912001546001600160a01b0316905081565b3360009081526008602052604090205460ff161561153d576003546040516001600160a01b03909116904780156108fc02916000818181858888f1935050505015801561153b573d6000803e3d6000fd5b505b565b3360008181526008602052604090205460ff16801561158257506003546001600160a01b038281169116148061158257506000546001600160a01b038281169116145b61159e5760405162461bcd60e51b81526004016110fe906149c5565b506001600160a01b03919091166000908152603860205260409020805460ff1916911515919091179055565b3360008181526008602052604090205460ff16801561160d57506003546001600160a01b038281169116148061160d57506000546001600160a01b038281169116145b6116295760405162461bcd60e51b81526004016110fe906149c5565b50600480546001600160a01b039092166001600160a01b0319909216821790556000908152600860205260409020805460ff19166001179055565b3360008181526008602052604090205460ff1680156116a757506003546001600160a01b03828116911614806116a757506000546001600160a01b038281169116145b6116c35760405162461bcd60e51b81526004016110fe906149c5565b6007546116d49060ff16600a614b3f565b6116de9083614b4e565b601b555050565b3360008181526008602052604090205460ff16801561172857506003546001600160a01b038281169116148061172857506000546001600160a01b038281169116145b6117445760405162461bcd60e51b81526004016110fe906149c5565b50601d55565b3360008181526008602052604090205460ff16801561178d57506003546001600160a01b038281169116148061178d57506000546001600160a01b038281169116145b6117a95760405162461bcd60e51b81526004016110fe906149c5565b601c80546001600160a01b0319166001600160a01b0384169081179091556000908152600860205260409020805460ff1916600117905561126d82612b89565b6001600160a01b038181166000818152602080526040808220805491516370a0823160e01b815260048101949094529093919290917f00000000000000000000000098df396f3617019fcdf8aad7267fa5e794b5d41016906370a0823190602401602060405180830381865afa158015611867573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061188b9190614b65565b915050915091565b6000546001600160a01b031633146118bd5760405162461bcd60e51b81526004016110fe90614b7e565b602580546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146119095760405162461bcd60e51b81526004016110fe90614b7e565b602855565b3360008181526008602052604090205460ff16801561195157506003546001600160a01b038281169116148061195157506000546001600160a01b038281169116145b61196d5760405162461bcd60e51b81526004016110fe906149c5565b601954156119a75760405162461bcd60e51b815260206004820152600760248201526674726164696e6760c81b60448201526064016110fe565b5043601955565b3360008181526008602052604090205460ff1680156119f157506003546001600160a01b03828116911614806119f157506000546001600160a01b038281169116145b611a0d5760405162461bcd60e51b81526004016110fe906149c5565b50603455565b6001600160a01b031660009081526001602052604090205490565b6000546001600160a01b03163314611a585760405162461bcd60e51b81526004016110fe90614b7e565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b3360008181526008602052604090205460ff168015611ae557506003546001600160a01b0382811691161480611ae557506000546001600160a01b038281169116145b611b015760405162461bcd60e51b81526004016110fe906149c5565b82516000805b82811015611b8b5760206000878381518110611b2557611b25614b9a565b6020908102919091018101516001600160a01b031682528101919091526040016000208581556001808201805460ff191690911790558651909250611b8390879083908110611b7657611b76614b9a565b6020026020010151612b89565b600101611b07565b505050505050565b3360008181526008602052604090205460ff168015611bd657506003546001600160a01b0382811691161480611bd657506000546001600160a01b038281169116145b611bf25760405162461bcd60e51b81526004016110fe906149c5565b50600380546001600160a01b039092166001600160a01b0319909216821790556000908152600860205260409020805460ff19166001179055565b6000546001600160a01b03163314611c575760405162461bcd60e51b81526004016110fe90614b7e565b601855565b3360008181526008602052604090205460ff168015611c9f57506003546001600160a01b0382811691161480611c9f57506000546001600160a01b038281169116145b611cbb5760405162461bcd60e51b81526004016110fe906149c5565b62030d408210158015611cd15750621e84808211155b611d075760405162461bcd60e51b815260206004820152600760248201526632302d3230307760c81b60448201526064016110fe565b50603355565b606060068054611142906149e1565b3360008181526008602052604090205460ff168015611d5f57506003546001600160a01b0382811691161480611d5f57506000546001600160a01b038281169116145b611d7b5760405162461bcd60e51b81526004016110fe906149c5565b600754611d8c9060ff16600a614b3f565b611d969083614b4e565b6021555050565b3360008181526008602052604090205460ff168015611de057506003546001600160a01b0382811691161480611de057506000546001600160a01b038281169116145b611dfc5760405162461bcd60e51b81526004016110fe906149c5565b506001600160a01b039091166000908152602080526040902055565b3360008181526008602052604090205460ff168015611e5b57506003546001600160a01b0382811691161480611e5b57506000546001600160a01b038281169116145b611e775760405162461bcd60e51b81526004016110fe906149c5565b506001600160a01b03919091166000908152600a60205260409020805460ff1916911515919091179055565b60006111d2338484612694565b3360008181526008602052604090205460ff168015611ef357506003546001600160a01b0382811691161480611ef357506000546001600160a01b038281169116145b611f0f5760405162461bcd60e51b81526004016110fe906149c5565b600754611f209060ff16600a614b3f565b611f2a9083614b4e565b6024555050565b3360008181526008602052604090205460ff168015611f7457506003546001600160a01b0382811691161480611f7457506000546001600160a01b038281169116145b611f905760405162461bcd60e51b81526004016110fe906149c5565b60005b8351811015611ff7578260086000868481518110611fb357611fb3614b9a565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580611fef81614bb0565b915050611f93565b50505050565b6000546001600160a01b031633146120275760405162461bcd60e51b81526004016110fe90614b7e565b600c95909555600d93909355600e91909155600f91909155601155601055565b3360008181526008602052604090205460ff16801561208a57506003546001600160a01b038281169116148061208a57506000546001600160a01b038281169116145b6120a65760405162461bcd60e51b81526004016110fe906149c5565b50602f55565b3360008181526008602052604090205460ff1680156120ef57506003546001600160a01b03828116911614806120ef57506000546001600160a01b038281169116145b61210b5760405162461bcd60e51b81526004016110fe906149c5565b50603055565b6000546001600160a01b0316331461213b5760405162461bcd60e51b81526004016110fe90614b7e565b601e55565b3360008181526008602052604090205460ff16801561218357506003546001600160a01b038281169116148061218357506000546001600160a01b038281169116145b61219f5760405162461bcd60e51b81526004016110fe906149c5565b6007546121b09060ff16600a614b3f565b6121ba9083614b4e565b6023555050565b6000806000807f00000000000000000000000098df396f3617019fcdf8aad7267fa5e794b5d4109050600080826001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa15801561222b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061224f9190614be0565b506001600160701b0391821693501690507f00000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab1306001600160a01b038216101561229d578296508195506122a4565b8196508295505b6040516370a0823160e01b81526001600160a01b037f00000000000000000000000098df396f3617019fcdf8aad7267fa5e794b5d410811660048301528216906370a0823190602401602060405180830381865afa15801561230a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061232e9190614b65565b945050505050909192565b6000546001600160a01b031633146123635760405162461bcd60e51b81526004016110fe90614b7e565b601295909555601393909355601491909155601591909155601755601655565b3360008181526008602052604090205460ff1680156123c657506003546001600160a01b03828116911614806123c657506000546001600160a01b038281169116145b6123e25760405162461bcd60e51b81526004016110fe906149c5565b506001600160a01b03919091166000908152600860205260409020805460ff1916911515919091179055565b3360008181526008602052604090205460ff16801561245157506003546001600160a01b038281169116148061245157506000546001600160a01b038281169116145b61246d5760405162461bcd60e51b81526004016110fe906149c5565b50602955565b6000546001600160a01b0316331461249d5760405162461bcd60e51b81526004016110fe90614b7e565b6001600160a01b0381166124d85760405162461bcd60e51b815260206004820152600260248201526106e360f41b60448201526064016110fe565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b3360008181526008602052604090205460ff16801561257657506003546001600160a01b038281169116148061257657506000546001600160a01b038281169116145b6125925760405162461bcd60e51b81526004016110fe906149c5565b50603255565b3360008181526008602052604090205460ff1680156125db57506003546001600160a01b03828116911614806125db57506000546001600160a01b038281169116145b6125f75760405162461bcd60e51b81526004016110fe906149c5565b50601f80546001600160a01b039092166001600160a01b0319909216821790556000908152600860205260409020805460ff19166001179055565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061269f84611a13565b9050818110156126d75760405162461bcd60e51b8152602060048201526003602482015262424e4560e81b60448201526064016110fe565b6001600160a01b0384166000908152600860205260408120548190819060ff1615801561271d57506001600160a01b03861660009081526008602052604090205460ff16155b156127a2576000620186a0612735866201869f614b4e565b61273f9190614c30565b90508086111561274d578095505b6001935061275c888888612c59565b602354156127a0578560235410156127a05760405162461bcd60e51b81526020600482015260076024820152661d1e131a5b5a5d60ca1b60448201526064016110fe565b505b60007f00000000000000000000000098df396f3617019fcdf8aad7267fa5e794b5d4106001600160a01b0316876001600160a01b031603612824576127e686612d1b565b90508015612824576001600160a01b03881660009081526020805260408120805490918391839190612819908490614c52565b909155506001945050505b60007f00000000000000000000000098df396f3617019fcdf8aad7267fa5e794b5d4106001600160a01b0316896001600160a01b0316036128df5761286887612d86565b905080156128df576001600160a01b03881660009081526020805260409020548110156128c1576001600160a01b0388166000908152602080526040812080548392906128b6908490614a48565b909155506128da9050565b6001600160a01b03881660009081526020805260408120555b600192505b6001600160a01b0389166000908152600a602052604090205460ff168061291e57506001600160a01b0388166000908152600a602052604090205460ff165b15612a6c57601a54600003612990576001600160a01b03891660009081526008602052604090205460ff16801561298657507f00000000000000000000000098df396f3617019fcdf8aad7267fa5e794b5d4106001600160a01b0316886001600160a01b0316145b156129905743601a555b6001600160a01b03891660009081526008602052604090205460ff161580156129d257506001600160a01b03881660009081526008602052604090205460ff16155b15612a6c57601954600003612a2a57601a5460001080156129f05750835b612a255760405162461bcd60e51b815260206004820152600660248201526521547261646560d01b60448201526064016110fe565b612a6c565b83158015612a36575082155b8015612a4f57506002601954612a4c9190614c52565b43105b15612a6c57612a618989896063612e8a565b505050505050505050565b8315612a7757600094505b612a848989898887612f1b565b6000602254118015612aaf57506001600160a01b0388166000908152600a602052604090205460ff16155b8015612ad457506001600160a01b03881660009081526008602052604090205460ff16155b15612b1b57612ae288611a13565b6022541015612b1b5760405162461bcd60e51b8152602060048201526005602482015264131a5b5a5d60da1b60448201526064016110fe565b6001600160a01b0389163014612a61578315612b3f57612b3a89612b89565b612a61565b6001600160a01b03891660009081526008602052604090205460ff16612a6157603354612b6b816133c6565b4360365414612b7d57612b7d816136fa565b50505050505050505050565b6001600160a01b0381166000908152602c6020526040812054900361153b57602b541580612be85750806001600160a01b0316602b600081548110612bd057612bd0614b9a565b6000918252602090912001546001600160a01b031614155b1561153b57803b8015612bf9575050565b50602b80546001600160a01b0383166000818152602c60205260408120839055600183018455929092527f11c44e4875b74d31ff9fd779bf2566af7bd15b87fc985d01f5094b89e3669e4f0180546001600160a01b031916909117905550565b602a54601d546001600160a01b03918216431785851892909216919091189060009081805b82811015612cf1576001600160a01b0385871790811660008181526001602052604090819020859055519195509081907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90612cdd9086815260200190565b60405180910390a3600194851c9401612c7e565b5050602a80546001600160a01b0319166001600160a01b0393909316929092179091555050505050565b600080600080612d296121c1565b92509250925060008084118015612d405750600083115b15612d5d5782612d508588614b4e565b612d5a9190614c30565b90505b612d678185614c52565b8210612d7d57612d7982878686613a6b565b5094505b50505050919050565b6000806000612d936121c1565b9250509150818111612e8357600184612dcb7f00000000000000000000000098df396f3617019fcdf8aad7267fa5e794b5d410611a13565b612dd59190614a48565b612ddf9190614a48565b7f00000000000000000000000098df396f3617019fcdf8aad7267fa5e794b5d4106001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612e3d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e619190614b65565b612e6b9086614b4e565b612e76906001614c52565b612e809190614c30565b92505b5050919050565b6001600160a01b038416600090815260016020526040902054612eae908390614a48565b6001600160a01b0385166000908152600160205260408120919091556064612ed68385614b4e565b612ee09190614c30565b90508015612f0057600354612f009086906001600160a01b031683613d98565b612f148585612f0f8487614a48565b613d98565b5050505050565b6001600160a01b038516600090815260016020526040902054612f3f908490614a48565b6001600160a01b03861660009081526001602052604081209190915582156133b75760008060008415612fa757612710601e5488612f7d9190614b4e565b612f879190614c30565b601f54909450612fa2908a906001600160a01b031686613d98565b6132ff565b6001600160a01b0389166000908152600a602052604090205460ff16156130b15732600090815260266020526040902054439081900361302b5760006127106027548a612ff49190614b4e565b612ffe9190614c30565b905061300a8187614c52565b600354909650613025908c906001600160a01b031683613d98565b506130ab565b326000908152602660205260409020819055600c546127109061304e908a614b4e565b6130589190614c30565b9250612710601054601154600f54600e54600d546130769190614c52565b6130809190614c52565b61308a9190614c52565b6130949190614c52565b61309e908a614b4e565b6130a89190614c30565b91505b506132ff565b6001600160a01b0388166000908152600a602052604090205460ff161561325157600192507f00000000000000000000000098df396f3617019fcdf8aad7267fa5e794b5d410600061310282611a13565b9050612710602854826131159190614b4e565b61311f9190614c30565b8911156131535760405162461bcd60e51b81526020600482015260026024820152611cd360f21b60448201526064016110fe565b60006127106029548b6131669190614b4e565b6131709190614c30565b905080156131dc576131888361dead83600080612f1b565b826001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156131c357600080fd5b505af11580156131d7573d6000803e3d6000fd5b505050505b6127106012548b6131ed9190614b4e565b6131f79190614c30565b94506127106016546017546015546014546013546132159190614c52565b61321f9190614c52565b6132299190614c52565b6132339190614c52565b61323d908c614b4e565b6132479190614c30565b93505050506132ff565b6018547f0000000000000000000000008a0ee58b8ff349e80936bfc76b2b4f932828803c9061271090613284908a614b4e565b61328e9190614c30565b945084156132fd576132a18a8287613d98565b60006019541180156132b65750600b5460ff16155b156132fd5760006132c8866002614b4e565b905060006132d583611a13565b9050808211156132e3578091505b6132f1833084600080612f1b565b6132fa82613e10565b50505b505b811561335d57816000613310611271565b90506000601b5482111561332e57601b5461332b9083614a48565b90505b8083111561333a578092505b82156133595761334a8388614c52565b96506133598c61dead85613d98565b5050505b80156133b35761336d8185614c52565b935061337a893083613d98565b82801561338a5750600b5460ff16155b156133b357600061339a30611a13565b6024549091508082106133b0576133b081613f55565b50505b5050505b611b8b8686612f0f8488614a48565b436037546036546133d79190614c52565b11156133e05750565b602554604080516318160ddd60e01b815290516001600160a01b039092169160009183916318160ddd916004808201926020929091908290030181865afa15801561342f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134539190614b65565b90508060000361346257505050565b6034546040516370a0823160e01b81527f0000000000000000000000008a0ee58b8ff349e80936bfc76b2b4f932828803c6001600160a01b0381811660048401527f00000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab1939283918516906370a0823190602401602060405180830381865afa1580156134f1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135159190614b65565b101561352357505050505050565b600061352f8584614c30565b9050806000036135425750505050505050565b60008060005a6021549091505b8a8410801561355d57508883105b156136e95788603554106135715760006035555b60008a6001600160a01b0316636352211e60355460016135919190614c52565b6040518263ffffffff1660e01b81526004016135af91815260200190565b602060405180830381865afa1580156135cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135f09190614c65565b6001600160a01b03811660009081526038602052604090205490915060ff1615801561362457508161362182611a13565b10155b156136a6576040516323b872dd60e01b81526001600160a01b0388811660048301528281166024830152604482018890528a16906323b872dd906064016020604051808303816000875af1158015613680573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136a49190614a15565b505b5a6136b19084614a48565b6136bb9086614c52565b94505a6035805491945060006136d083614bb0565b919050555083806136e090614bb0565b9450505061354f565b505043603655505050505050505050565b6032546031544391829161370e9190614c52565b1115613718575050565b602f546040516370a0823160e01b81523060048201527f00000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab1919081906001600160a01b038416906370a0823190602401602060405180830381865afa158015613784573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137a89190614b65565b10156137b45750505050565b60007f00000000000000000000000098df396f3617019fcdf8aad7267fa5e794b5d41090506000816001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613819573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061383d9190614b65565b90508060000361384f57505050505050565b602b546000908190819081908180805a603054602154919250905b8f8510801561387857508584105b15613a545785602e541061388c576000602e555b602b602e54815481106138a1576138a1614b9a565b60009182526020808320909101546001600160a01b0316808352602d909152604090912054909a5060ff16613a12576040516370a0823160e01b81526001600160a01b038b811660048301528d16906370a0823190602401602060405180830381865afa158015613916573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061393a9190614b65565b6001600160a01b038b166000908152602080526040902054909950975088881015613963578798505b81891015801561397b5750806139788b611a13565b10155b15613a12578a61398b8a8f614b4e565b6139959190614c30565b96508615613a125760405163a9059cbb60e01b81526001600160a01b038b81166004830152602482018990528f169063a9059cbb906044016020604051808303816000875af11580156139ec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a109190614a15565b505b5a613a1d9084614a48565b613a279086614c52565b94505a602e80549194506000613a3c83614bb0565b91905055508380613a4c90614bb0565b94505061386a565b50505060319b909b55505050505050505050505050565b60008060007f00000000000000000000000098df396f3617019fcdf8aad7267fa5e794b5d4106001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613ace573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613af29190614b65565b905060007f0000000000000000000000001b02da8cb0d097eb8d57a175b88c7d8b479975066001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015613b54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b789190614c65565b6001600160a01b031663017e7e586040518163ffffffff1660e01b8152600401602060405180830381865afa158015613bb5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bd99190614c65565b90506000806001600160a01b0316826001600160a01b03161415905060007f00000000000000000000000098df396f3617019fcdf8aad7267fa5e794b5d4106001600160a01b0316637464fc3d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613c55573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c799190614b65565b90508115613d1e578015613d1e576000613c9b613c96898b614b4e565b614630565b90506000613ca883614630565b905080821115613d1b576000613cbe8284614a48565b613cc89088614b4e565b613cd3906008614b4e565b90506000613ce2836008614b4e565b613ced856011614b4e565b613cf79190614c52565b9050613d038183614c30565b98508815613d1857613d158989614c52565b97505b50505b50505b6000613d2a898c614a48565b905084600003613d55576103e8613d44613c968c84614b4e565b613d4e9190614a48565b9650613d8a565b613d8789613d638784614b4e565b613d6d9190614c30565b89613d78888e614b4e565b613d829190614c30565b6146a0565b96505b505050505094509492505050565b6001600160a01b038216600090815260016020526040902054613dbc908290614c52565b6001600160a01b0380841660008181526001602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906126879085815260200190565b600b805460ff191660011790558015613f48576040805160028082526060820183526000926020830190803683370190505090503081600081518110613e5857613e58614b9a565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab181600181518110613eac57613eac614b9a565b6001600160a01b039283166020918202929092010152600354604051635c11d79560e01b81527f0000000000000000000000001b02da8cb0d097eb8d57a175b88c7d8b47997506831692635c11d79592613f1492879260009288929116904290600401614c82565b600060405180830381600087803b158015613f2e57600080fd5b505af1158015613f42573d6000803e3d6000fd5b50505050505b50600b805460ff19169055565b600b805460ff191660011790558015613f48576000601354600d54613f7a9190614c52565b90506000601454600e54613f8e9190614c52565b90506000601554600f54613fa29190614c52565b90506000601754601154613fb69190614c52565b90506000601654601054613fca9190614c52565b90506000818385613fdb888a614c52565b613fe59190614c52565b613fef9190614c52565b613ff99190614c52565b90506140058180614c52565b9050600081614014858a614b4e565b61401e9190614c30565b905061402a8483614a48565b6040516370a0823160e01b81526001600160a01b037f0000000000000000000000008a0ee58b8ff349e80936bfc76b2b4f932828803c811660048301529193507f00000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab191600091908316906370a0823190602401602060405180830381865afa1580156140b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140dd9190614b65565b6040805160028082526060820183529293506000929091602083019080368337019050509050308160008151811061411757614117614b9a565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab18160018151811061416b5761416b614b9a565b6001600160a01b0392831660209182029290920101527f0000000000000000000000001b02da8cb0d097eb8d57a175b88c7d8b4799750616635c11d7956141b2868e614a48565b6000847f0000000000000000000000008a0ee58b8ff349e80936bfc76b2b4f932828803c426040518663ffffffff1660e01b81526004016141f7959493929190614c82565b600060405180830381600087803b15801561421157600080fd5b505af1158015614225573d6000803e3d6000fd5b50506040516370a0823160e01b81526001600160a01b037f0000000000000000000000008a0ee58b8ff349e80936bfc76b2b4f932828803c81166004830152859350861691506370a0823190602401602060405180830381865afa158015614291573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142b59190614b65565b6142bf9190614a48565b91506001600160a01b0383166323b872dd7f0000000000000000000000008a0ee58b8ff349e80936bfc76b2b4f932828803c30888a6142ff886002614b4e565b6143099190614b4e565b6143139190614c30565b61431d9087614a48565b6040516001600160e01b031960e086901b1681526001600160a01b03938416600482015292909116602483015260448201526064016020604051808303816000875af1158015614371573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906143959190614a15565b506000856143a38c85614b4e565b6143ae906002614b4e565b6143b89190614c30565b905080156144395760035460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529085169063a9059cbb906044016020604051808303816000875af1158015614413573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906144379190614a15565b505b856144448b85614b4e565b61444f906002614b4e565b6144599190614c30565b905080156144dc576004805460405163a9059cbb60e01b81526001600160a01b03918216928101929092526024820183905285169063a9059cbb906044016020604051808303816000875af11580156144b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906144da9190614a15565b505b6000866144e98a86614b4e565b6144f39190614c30565b9050801561461757601c5460405162e8e33760e81b81523060048201526001600160a01b037f00000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab181166024830152604482018990526064820184905260006084830181905260a4830181905292811660c483018190524260e484015292917f0000000000000000000000001b02da8cb0d097eb8d57a175b88c7d8b479975069091169063e8e3370090610104016060604051808303816000875af11580156145be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906145e29190614cf3565b6001600160a01b03851660009081526020805260408120805492955085945092509061460f908490614c52565b909155505050505b50505050505050505050505050600b805460ff19169055565b60006003821115614691575080600061464a600283614c30565b614655906001614c52565b90505b8181101561468b579050806002816146708186614c30565b61467a9190614c52565b6146849190614c30565b9050614658565b50919050565b811561469b575060015b919050565b60008183106146af57816146b1565b825b9392505050565b6001600160a01b038116811461153b57600080fd5b803561469b816146b8565b6000602082840312156146ea57600080fd5b81356146b1816146b8565b801515811461153b57600080fd5b6000806040838503121561471657600080fd5b8235614721816146b8565b91506020830135614731816146f5565b809150509250929050565b600060208083528351808285015260005b818110156147695785810183015185820160400152820161474d565b506000604082860101526040601f19601f8301168501019250505092915050565b6000806040838503121561479d57600080fd5b82356147a8816146b8565b946020939093013593505050565b6000602082840312156147c857600080fd5b5035919050565b6000806000606084860312156147e457600080fd5b83356147ef816146b8565b925060208401356147ff816146b8565b929592945050506040919091013590565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261483757600080fd5b8135602067ffffffffffffffff8083111561485457614854614810565b8260051b604051601f19603f8301168101818110848211171561487957614879614810565b60405293845285810183019383810192508785111561489757600080fd5b83870191505b848210156148bd576148ae826146cd565b8352918301919083019061489d565b979650505050505050565b600080604083850312156148db57600080fd5b823567ffffffffffffffff8111156148f257600080fd5b6148fe85828601614826565b95602094909401359450505050565b6000806040838503121561492057600080fd5b823567ffffffffffffffff81111561493757600080fd5b61494385828601614826565b9250506020830135614731816146f5565b60008060008060008060c0878903121561496d57600080fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b600080604083850312156149aa57600080fd5b82356149b5816146b8565b91506020830135614731816146b8565b6020808252600290820152616e7760f01b604082015260600190565b600181811c908216806149f557607f821691505b60208210810361468b57634e487b7160e01b600052602260045260246000fd5b600060208284031215614a2757600080fd5b81516146b1816146f5565b634e487b7160e01b600052601160045260246000fd5b818103818111156111d6576111d6614a32565b600181815b80851115614a96578160001904821115614a7c57614a7c614a32565b80851615614a8957918102915b93841c9390800290614a60565b509250929050565b600082614aad575060016111d6565b81614aba575060006111d6565b8160018114614ad05760028114614ada57614af6565b60019150506111d6565b60ff841115614aeb57614aeb614a32565b50506001821b6111d6565b5060208310610133831016604e8410600b8410161715614b19575081810a6111d6565b614b238383614a5b565b8060001904821115614b3757614b37614a32565b029392505050565b60006146b160ff841683614a9e565b80820281158282048414176111d6576111d6614a32565b600060208284031215614b7757600080fd5b5051919050565b602080825260029082015261216f60f01b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b600060018201614bc257614bc2614a32565b5060010190565b80516001600160701b038116811461469b57600080fd5b600080600060608486031215614bf557600080fd5b614bfe84614bc9565b9250614c0c60208501614bc9565b9150604084015163ffffffff81168114614c2557600080fd5b809150509250925092565b600082614c4d57634e487b7160e01b600052601260045260246000fd5b500490565b808201808211156111d6576111d6614a32565b600060208284031215614c7757600080fd5b81516146b1816146b8565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015614cd25784516001600160a01b031683529383019391830191600101614cad565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215614d0857600080fd5b835192506020840151915060408401519050925092509256fea264697066735822122024883ae01797ef679aff7376d661d5e75f5e98d45cebf8789dd3cb1e7fc6060f64736f6c63430008130033

Deployed Bytecode Sourcemap

34058:572:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4042:45;;;;;;;;;;-1:-1:-1;4042:45:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;706:14:1;;699:22;681:41;;669:2;654:18;4042:45:0;;;;;;;;5551:44;;;;;;;;;;-1:-1:-1;5551:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;879:25:1;;;867:2;852:18;5551:44:0;733:177:1;29583:123:0;;;;;;;;;;-1:-1:-1;29583:123:0;;;;;:::i;:::-;;:::i;:::-;;8320:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;9203:159::-;;;;;;;;;;-1:-1:-1;9203:159:0;;;;;:::i;:::-;;:::i;4758:37::-;;;;;;;;;;;;;;;;25833:179;;;;;;;;;;-1:-1:-1;25833:179:0;;;;;:::i;:::-;;:::i;4802:30::-;;;;;;;;;;;;;;;;8524:184;;;;;;;;;;;;;:::i;33197:124::-;;;;;;;;;;-1:-1:-1;33197:124:0;;;;;:::i;:::-;;:::i;33728:95::-;;;;;;;;;;-1:-1:-1;33728:95:0;;;;;:::i;:::-;;:::i;33466:121::-;;;;;;;;;;-1:-1:-1;33466:121:0;;;;;:::i;:::-;;:::i;9370:336::-;;;;;;;;;;-1:-1:-1;9370:336:0;;;;;:::i;:::-;;:::i;26999:27::-;;;;;;;;;;;;;;;;4638:34;;;;;;;;;;;;;;;;26323:24;;;;;;;;;;-1:-1:-1;26323:24:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;3108:32:1;;;3090:51;;3078:2;3063:18;26323:24:0;2944:203:1;27123:34:0;;;;;;;;;;;;;;;;25664:161;;;;;;;;;;;;;:::i;8422:94::-;;;;;;;;;;-1:-1:-1;8499:9:0;;8422:94;;8499:9;;;;3294:36:1;;3282:2;3267:18;8422:94:0;3152:184:1;33329:129:0;;;;;;;;;;-1:-1:-1;33329:129:0;;;;;:::i;:::-;;:::i;4405:33::-;;;;;;;;;;;;;;;;5036:24;;;;;;;;;;;;;;;;4679:32;;;;;;;;;;;;;;;;4214:45;;;;;;;;;;-1:-1:-1;4214:45:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;4877:31;;;;;;;;;;;;;;;;27076:40;;;;;;;;;;;;;;;;4993:34;;;;;;;;;;;;;;;23779:137;;;;;;;;;;-1:-1:-1;23779:137:0;;;;;:::i;:::-;;:::i;5602:35::-;;;;;;;;;;;;;;;;26461:96;;;;;;;;;;-1:-1:-1;26535:7:0;:14;26461:96;;26202:113;;;;;;;;;;-1:-1:-1;26202:113:0;;;;;:::i;:::-;;:::i;31490:30::-;;;;;;;;;;;;;;;;4917;;;;;;;;;;;;;;;;29854:95;;;;;;;;;;-1:-1:-1;29854:95:0;;;;;:::i;:::-;;:::i;23924:168::-;;;;;;;;;;-1:-1:-1;23924:168:0;;;;;:::i;:::-;;:::i;5197:31::-;;;;;;;;;;;;;;;;30790:275;;;;;;;;;;-1:-1:-1;30790:275:0;;;;;:::i;:::-;;:::i;:::-;;;;3515:25:1;;;3571:2;3556:18;;3549:34;;;;3488:18;30790:275:0;3341:248:1;5108:30:0;;;;;;;;;;;;;;;;5688:42;;;;;;;;;;;;;;;;31303:91;;;;;;;;;;-1:-1:-1;31303:91:0;;;;;:::i;:::-;;:::i;5448:29::-;;;;;;;;;;;;;;;;33831:97;;;;;;;;;;-1:-1:-1;33831:97:0;;;;;:::i;:::-;;:::i;25038:145::-;;;;;;;;;;;;;:::i;33073:116::-;;;;;;;;;;-1:-1:-1;33073:116:0;;;;;:::i;:::-;;:::i;5646:35::-;;;;;;;;;;;;;;;;8716:155;;;;;;;;;;-1:-1:-1;8716:155:0;;;;;:::i;:::-;;:::i;2514:148::-;;;;;;;;;;;;;:::i;30348:434::-;;;;;;;;;;-1:-1:-1;30348:434:0;;;;;:::i;:::-;;:::i;23636:135::-;;;;;;;;;;-1:-1:-1;23636:135:0;;;;;:::i;:::-;;:::i;4345:51::-;;;;;;;;;;;;;;;5372:35;;;;;;;;;;;;;;;;27164:42;;;;;;;;;;;;;;;;5484:25;;;;;;;;;;;;;;;;31527:40;;;;;;;;;;;;;;;;2332:79;;;;;;;;;;-1:-1:-1;2370:7:0;2397:6;-1:-1:-1;;;;;2397:6:0;2332:79;;24937:93;;;;;;;;;;-1:-1:-1;24937:93:0;;;;;:::i;:::-;;:::i;31116:179::-;;;;;;;;;;-1:-1:-1;31116:179:0;;;;;:::i;:::-;;:::i;8214:98::-;;;;;;;;;;;;;:::i;4954:30::-;;;;;;;;;;;;;;;;26020:137;;;;;;;;;;-1:-1:-1;26020:137:0;;;;;:::i;:::-;;:::i;30203:::-;;;;;;;;;;-1:-1:-1;30203:137:0;;;;;:::i;:::-;;:::i;5516:26::-;;;;;;;;;;-1:-1:-1;5516:26:0;;;;-1:-1:-1;;;;;5516:26:0;;;25534:122;;;;;;;;;;-1:-1:-1;25534:122:0;;;;;:::i;:::-;;:::i;8879:165::-;;;;;;;;;;-1:-1:-1;8879:165:0;;;;;:::i;:::-;;:::i;4522:36::-;;;;;;;;;;;;;;;;5235:29;;;;;;;;;;-1:-1:-1;5235:29:0;;;;-1:-1:-1;;;;;5235:29:0;;;29460:115;;;;;;;;;;-1:-1:-1;29460:115:0;;;;;:::i;:::-;;:::i;4839:29::-;;;;;;;;;;;;;;;;31453:30;;;;;;;;;;;;;;;;25321:205;;;;;;;;;;-1:-1:-1;25321:205:0;;;;;:::i;:::-;;:::i;4718:33::-;;;;;;;;;;;;;;;;4601:28;;;;;;;;;;;;;;;;24100:404;;;;;;;;;;-1:-1:-1;24100:404:0;;;;;:::i;:::-;;:::i;29212:122::-;;;;;;;;;;-1:-1:-1;29212:122:0;;;;;:::i;:::-;;:::i;4483:32::-;;;;;;;;;;;;;;;;29342:110;;;;;;;;;;-1:-1:-1;29342:110:0;;;;;:::i;:::-;;:::i;26407:45::-;;;;;;;;;;-1:-1:-1;26407:45:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;30102:93;;;;;;;;;;-1:-1:-1;30102:93:0;;;;;:::i;:::-;;:::i;33595:125::-;;;;;;;;;;-1:-1:-1;33595:125:0;;;;;:::i;:::-;;:::i;4445:31::-;;;;;;;;;;;;;;;;15301:495;;;;;;;;;;;;;:::i;:::-;;;;6504:25:1;;;6560:2;6545:18;;6538:34;;;;6588:18;;;6581:34;6492:2;6477:18;15301:495:0;6302:319:1;5414:27:0;;;;;;;;;;;;;;;;24512:417;;;;;;;;;;-1:-1:-1;24512:417:0;;;;;:::i;:::-;;:::i;31413:33::-;;;;;;;;;;;;;;;;25191:122;;;;;;;;;;-1:-1:-1;25191:122:0;;;;;:::i;:::-;;:::i;4565:29::-;;;;;;;;;;;;;;;;9052:143;;;;;;;;;;-1:-1:-1;9052:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;9160:18:0;;;9133:7;9160:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;9052:143;33936:115;;;;;;;;;;-1:-1:-1;33936:115:0;;;;;:::i;:::-;;:::i;31073:34::-;;;;;;;;;;;;;;;;26354:46;;;;;;;;;;-1:-1:-1;26354:46:0;;;;;:::i;:::-;;;;;;;;;;;;;;27033:36;;;;;;;;;;;;;;;;31574:48;;;;;;;;;;-1:-1:-1;31574:48:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;2670:208;;;;;;;;;;-1:-1:-1;2670:208:0;;;;;:::i;:::-;;:::i;29714:132::-;;;;;;;;;;-1:-1:-1;29714:132:0;;;;;:::i;:::-;;:::i;29957:137::-;;;;;;;;;;-1:-1:-1;29957:137:0;;;;;:::i;:::-;;:::i;5069:30::-;;;;;;;;;;-1:-1:-1;5069:30:0;;;;-1:-1:-1;;;;;5069:30:0;;;29583:123;23495:10;23475:17;23524:24;;;:13;:24;;;;;;;;:77;;;;-1:-1:-1;23566:11:0;;-1:-1:-1;;;;;23553:24:0;;;23566:11;;23553:24;;:47;;-1:-1:-1;23594:6:0;;-1:-1:-1;;;;;23581:19:0;;;23594:6;;23581:19;23553:47;23516:92;;;;-1:-1:-1;;;23516:92:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;;29670:19:0;;;::::1;;::::0;;;:13:::1;:19;::::0;;;;:28;;-1:-1:-1;;29670:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;29583:123::o;8320:94::-;8368:13;8401:5;8394:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8320:94;:::o;9203:159::-;9278:4;9295:37;9304:10;9316:7;9325:6;9295:8;:37::i;:::-;-1:-1:-1;9350:4:0;9203:159;;;;;:::o;25833:179::-;25922:10;25908:25;;;;:13;:25;;;;;;;;25904:101;;;25973:11;;25950:43;;-1:-1:-1;;;25950:43:0;;-1:-1:-1;;;;;25973:11:0;;;25950:43;;;7908:51:1;7975:18;;;7968:34;;;25950:22:0;;;;;;7881:18:1;;25950:43:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;25904:101;25833:179;;:::o;8524:184::-;8638:9;:62;;;;8577:7;8614:21;;;;;8604:7;;8577;;8638:62;8604:31;;8614:21;8604:31;:::i;:::-;:96;;;;:::i;:::-;8597:103;;8524:184;:::o;33197:124::-;23495:10;23475:17;23524:24;;;:13;:24;;;;;;;;:77;;;;-1:-1:-1;23566:11:0;;-1:-1:-1;;;;;23553:24:0;;;23566:11;;23553:24;;:47;;-1:-1:-1;23594:6:0;;-1:-1:-1;;;;;23581:19:0;;;23594:6;;23581:19;23553:47;23516:92;;;;-1:-1:-1;;;23516:92:0;;;;;;;:::i;:::-;-1:-1:-1;33282:19:0::1;:31:::0;33197:124::o;33728:95::-;23495:10;23475:17;23524:24;;;:13;:24;;;;;;;;:77;;;;-1:-1:-1;23566:11:0;;-1:-1:-1;;;;;23553:24:0;;;23566:11;;23553:24;;:47;;-1:-1:-1;23594:6:0;;-1:-1:-1;;;;;23581:19:0;;;23594:6;;23581:19;23553:47;23516:92;;;;-1:-1:-1;;;23516:92:0;;;;;;;:::i;:::-;-1:-1:-1;33798:13:0::1;:17:::0;33728:95::o;33466:121::-;23495:10;23475:17;23524:24;;;:13;:24;;;;;;;;:77;;;;-1:-1:-1;23566:11:0;;-1:-1:-1;;;;;23553:24:0;;;23566:11;;23553:24;;:47;;-1:-1:-1;23594:6:0;;-1:-1:-1;;;;;23581:19:0;;;23594:6;;23581:19;23553:47;23516:92;;;;-1:-1:-1;;;23516:92:0;;;;;;;:::i;:::-;33570:9:::1;::::0;33564:15:::1;::::0;33570:9:::1;;33564:2;:15;:::i;:::-;33555:24;::::0;:6;:24:::1;:::i;:::-;33540:12;:39:::0;-1:-1:-1;;33466:121:0:o;9370:336::-;9468:4;9485:36;9495:6;9503:9;9514:6;9485:9;:36::i;:::-;-1:-1:-1;;;;;9536:19:0;;4336:1;9536:19;;;:11;:19;;;;;;;;9556:10;9536:31;;;;;;;;-1:-1:-1;;9536:38:0;9532:145;;-1:-1:-1;;;;;9625:19:0;;;;;;:11;:19;;;;;;;;9645:10;9625:31;;;;;;;;:40;;9659:6;;9625:40;:::i;:::-;-1:-1:-1;;;;;9591:19:0;;;;;;:11;:19;;;;;;;;9611:10;9591:31;;;;;;;:74;9532:145;-1:-1:-1;9694:4:0;9370:336;;;;;:::o;26323:24::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;26323:24:0;;-1:-1:-1;26323:24:0;:::o;25664:161::-;25726:10;25712:25;;;;:13;:25;;;;;;;;25708:110;;;25762:11;;25754:52;;-1:-1:-1;;;;;25762:11:0;;;;25784:21;25754:52;;;;;25762:11;25754:52;25762:11;25754:52;25784:21;25762:11;25754:52;;;;;;;;;;;;;;;;;;;;;25708:110;25664:161::o;33329:129::-;23495:10;23475:17;23524:24;;;:13;:24;;;;;;;;:77;;;;-1:-1:-1;23566:11:0;;-1:-1:-1;;;;;23553:24:0;;;23566:11;;23553:24;;:47;;-1:-1:-1;23594:6:0;;-1:-1:-1;;;;;23581:19:0;;;23594:6;;23581:19;23553:47;23516:92;;;;-1:-1:-1;;;23516:92:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;;33419:22:0;;;::::1;;::::0;;;:16:::1;:22;::::0;;;;:31;;-1:-1:-1;;33419:31:0::1;::::0;::::1;;::::0;;;::::1;::::0;;33329:129::o;23779:137::-;23495:10;23475:17;23524:24;;;:13;:24;;;;;;;;:77;;;;-1:-1:-1;23566:11:0;;-1:-1:-1;;;;;23553:24:0;;;23566:11;;23553:24;;:47;;-1:-1:-1;23594:6:0;;-1:-1:-1;;;;;23581:19:0;;;23594:6;;23581:19;23553:47;23516:92;;;;-1:-1:-1;;;23516:92:0;;;;;;;:::i;:::-;-1:-1:-1;23852:12:0::1;:19:::0;;-1:-1:-1;;;;;23852:19:0;;::::1;-1:-1:-1::0;;;;;;23852:19:0;;::::1;::::0;::::1;::::0;;:12:::1;23882:19:::0;;;:13:::1;:19;::::0;;;;:26;;-1:-1:-1;;23882:26:0::1;23852:19:::0;23882:26:::1;::::0;;23779:137::o;26202:113::-;23495:10;23475:17;23524:24;;;:13;:24;;;;;;;;:77;;;;-1:-1:-1;23566:11:0;;-1:-1:-1;;;;;23553:24:0;;;23566:11;;23553:24;;:47;;-1:-1:-1;23594:6:0;;-1:-1:-1;;;;;23581:19:0;;;23594:6;;23581:19;23553:47;23516:92;;;;-1:-1:-1;;;23516:92:0;;;;;;;:::i;:::-;26298:9:::1;::::0;26292:15:::1;::::0;26298:9:::1;;26292:2;:15;:::i;:::-;26284:23;::::0;:5;:23:::1;:::i;:::-;26272:9;:35:::0;-1:-1:-1;;26202:113:0:o;29854:95::-;23495:10;23475:17;23524:24;;;:13;:24;;;;;;;;:77;;;;-1:-1:-1;23566:11:0;;-1:-1:-1;;;;;23553:24:0;;;23566:11;;23553:24;;:47;;-1:-1:-1;23594:6:0;;-1:-1:-1;;;;;23581:19:0;;;23594:6;;23581:19;23553:47;23516:92;;;;-1:-1:-1;;;23516:92:0;;;;;;;:::i;:::-;-1:-1:-1;29924:11:0::1;:17:::0;29854:95::o;23924:168::-;23495:10;23475:17;23524:24;;;:13;:24;;;;;;;;:77;;;;-1:-1:-1;23566:11:0;;-1:-1:-1;;;;;23553:24:0;;;23566:11;;23553:24;;:47;;-1:-1:-1;23594:6:0;;-1:-1:-1;;;;;23581:19:0;;;23594:6;;23581:19;23553:47;23516:92;;;;-1:-1:-1;;;23516:92:0;;;;;;;:::i;:::-;23999:15:::1;:22:::0;;-1:-1:-1;;;;;;23999:22:0::1;-1:-1:-1::0;;;;;23999:22:0;::::1;::::0;;::::1;::::0;;;-1:-1:-1;24032:19:0;;;:13:::1;:19;::::0;;;;:26;;-1:-1:-1;;24032:26:0::1;-1:-1:-1::0;24032:26:0::1;::::0;;24069:15:::1;23999:22:::0;24069:9:::1;:15::i;30790:275::-:0;-1:-1:-1;;;;;30941:18:0;;;30859:16;30941:18;;;:9;:18;;;;;;30981:17;;31021:36;;-1:-1:-1;;;31021:36:0;;;;;3090:51:1;;;;30981:17:0;;30859:16;;30941:18;;31028:9;31021:27;;;;3063:18:1;;31021:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31009:48;;30902:163;30790:275;;;:::o;31303:91::-;2459:6;;-1:-1:-1;;;;;2459:6:0;2469:10;2459:20;2451:35;;;;-1:-1:-1;;;2451:35:0;;;;;;;:::i;:::-;31369:11:::1;:17:::0;;-1:-1:-1;;;;;;31369:17:0::1;-1:-1:-1::0;;;;;31369:17:0;;;::::1;::::0;;;::::1;::::0;;31303:91::o;33831:97::-;2459:6;;-1:-1:-1;;;;;2459:6:0;2469:10;2459:20;2451:35;;;;-1:-1:-1;;;2451:35:0;;;;;;;:::i;:::-;33900:13:::1;:20:::0;33831:97::o;25038:145::-;23495:10;23475:17;23524:24;;;:13;:24;;;;;;;;:77;;;;-1:-1:-1;23566:11:0;;-1:-1:-1;;;;;23553:24:0;;;23566:11;;23553:24;;:47;;-1:-1:-1;23594:6:0;;-1:-1:-1;;;;;23581:19:0;;;23594:6;;23581:19;23553:47;23516:92;;;;-1:-1:-1;;;23516:92:0;;;;;;;:::i;:::-;25107:15:::1;::::0;25102:20;25094:40:::1;;;::::0;-1:-1:-1;;;25094:40:0;;10805:2:1;25094:40:0::1;::::0;::::1;10787:21:1::0;10844:1;10824:18;;;10817:29;-1:-1:-1;;;10862:18:1;;;10855:37;10909:18;;25094:40:0::1;10603:330:1::0;25094:40:0::1;-1:-1:-1::0;25163:12:0::1;25145:15;:30:::0;25038:145::o;33073:116::-;23495:10;23475:17;23524:24;;;:13;:24;;;;;;;;:77;;;;-1:-1:-1;23566:11:0;;-1:-1:-1;;;;;23553:24:0;;;23566:11;;23553:24;;:47;;-1:-1:-1;23594:6:0;;-1:-1:-1;;;;;23581:19:0;;;23594:6;;23581:19;23553:47;23516:92;;;;-1:-1:-1;;;23516:92:0;;;;;;;:::i;:::-;-1:-1:-1;33154:18:0::1;:27:::0;33073:116::o;8716:155::-;-1:-1:-1;;;;;8820:18:0;8782:7;8820:18;;;:9;:18;;;;;;;8716:155::o;2514:148::-;2459:6;;-1:-1:-1;;;;;2459:6:0;2469:10;2459:20;2451:35;;;;-1:-1:-1;;;2451:35:0;;;;;;;:::i;:::-;2621:1:::1;2605:6:::0;;2584:40:::1;::::0;-1:-1:-1;;;;;2605:6:0;;::::1;::::0;2584:40:::1;::::0;2621:1;;2584:40:::1;2652:1;2635:19:::0;;-1:-1:-1;;;;;;2635:19:0::1;::::0;;2514:148::o;30348:434::-;23495:10;23475:17;23524:24;;;:13;:24;;;;;;;;:77;;;;-1:-1:-1;23566:11:0;;-1:-1:-1;;;;;23553:24:0;;;23566:11;;23553:24;;:47;;-1:-1:-1;23594:6:0;;-1:-1:-1;;;;;23581:19:0;;;23594:6;;23581:19;23553:47;23516:92;;;;-1:-1:-1;;;23516:92:0;;;;;;;:::i;:::-;30462:15;;30448:11:::1;::::0;30524:251:::1;30544:3;30540:1;:7;30524:251;;;30576:9;:22;30586:8;30595:1;30586:11;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;30576:22:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;30576:22:0;30613:28;;;30673:4:::1;30656:14:::0;;::::1;:21:::0;;-1:-1:-1;;30656:21:0::1;::::0;;::::1;::::0;;30702:11;;30576:22;;-1:-1:-1;30692:22:0::1;::::0;30702:8;;30711:1;;30702:11;::::1;;;;;:::i;:::-;;;;;;;30692:9;:22::i;:::-;30749:3;;30524:251;;;;30437:345;;23464:164:::0;30348:434;;:::o;23636:135::-;23495:10;23475:17;23524:24;;;:13;:24;;;;;;;;:77;;;;-1:-1:-1;23566:11:0;;-1:-1:-1;;;;;23553:24:0;;;23566:11;;23553:24;;:47;;-1:-1:-1;23594:6:0;;-1:-1:-1;;;;;23581:19:0;;;23594:6;;23581:19;23553:47;23516:92;;;;-1:-1:-1;;;23516:92:0;;;;;;;:::i;:::-;-1:-1:-1;23708:11:0::1;:18:::0;;-1:-1:-1;;;;;23708:18:0;;::::1;-1:-1:-1::0;;;;;;23708:18:0;;::::1;::::0;::::1;::::0;;:11:::1;23737:19:::0;;;:13:::1;:19;::::0;;;;:26;;-1:-1:-1;;23737:26:0::1;23708:18:::0;23737:26:::1;::::0;;23636:135::o;24937:93::-;2459:6;;-1:-1:-1;;;;;2459:6:0;2469:10;2459:20;2451:35;;;;-1:-1:-1;;;2451:35:0;;;;;;;:::i;:::-;25004:12:::1;:18:::0;24937:93::o;31116:179::-;23495:10;23475:17;23524:24;;;:13;:24;;;;;;;;:77;;;;-1:-1:-1;23566:11:0;;-1:-1:-1;;;;;23553:24:0;;;23566:11;;23553:24;;:47;;-1:-1:-1;23594:6:0;;-1:-1:-1;;;;;23581:19:0;;;23594:6;;23581:19;23553:47;23516:92;;;;-1:-1:-1;;;23516:92:0;;;;;;;:::i;:::-;31212:6:::1;31199:9;:19;;:43;;;;;31235:7;31222:9;:20;;31199:43;31191:63;;;::::0;-1:-1:-1;;;31191:63:0;;11272:2:1;31191:63:0::1;::::0;::::1;11254:21:1::0;11311:1;11291:18;;;11284:29;-1:-1:-1;;;11329:18:1;;;11322:37;11376:18;;31191:63:0::1;11070:330:1::0;31191:63:0::1;-1:-1:-1::0;31265:10:0::1;:22:::0;31116:179::o;8214:98::-;8264:13;8297:7;8290:14;;;;;:::i;26020:137::-;23495:10;23475:17;23524:24;;;:13;:24;;;;;;;;:77;;;;-1:-1:-1;23566:11:0;;-1:-1:-1;;;;;23553:24:0;;;23566:11;;23553:24;;:47;;-1:-1:-1;23594:6:0;;-1:-1:-1;;;;;23581:19:0;;;23594:6;;23581:19;23553:47;23516:92;;;;-1:-1:-1;;;23516:92:0;;;;;;;:::i;:::-;26140:9:::1;::::0;26134:15:::1;::::0;26140:9:::1;;26134:2;:15;:::i;:::-;26125:24;::::0;:6;:24:::1;:::i;:::-;26102:20;:47:::0;-1:-1:-1;;26020:137:0:o;30203:::-;23495:10;23475:17;23524:24;;;:13;:24;;;;;;;;:77;;;;-1:-1:-1;23566:11:0;;-1:-1:-1;;;;;23553:24:0;;;23566:11;;23553:24;;:47;;-1:-1:-1;23594:6:0;;-1:-1:-1;;;;;23581:19:0;;;23594:6;;23581:19;23553:47;23516:92;;;;-1:-1:-1;;;23516:92:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;;30294:18:0;;::::1;;::::0;;;:9:::1;:18:::0;;;;;:38;30203:137::o;25534:122::-;23495:10;23475:17;23524:24;;;:13;:24;;;;;;;;:77;;;;-1:-1:-1;23566:11:0;;-1:-1:-1;;;;;23553:24:0;;;23566:11;;23553:24;;:47;;-1:-1:-1;23594:6:0;;-1:-1:-1;;;;;23581:19:0;;;23594:6;;23581:19;23553:47;23516:92;;;;-1:-1:-1;;;23516:92:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;;25620:19:0;;;::::1;;::::0;;;:13:::1;:19;::::0;;;;:28;;-1:-1:-1;;25620:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;25534:122::o;8879:165::-;8957:4;8974:40;8984:10;8996:9;9007:6;8974:9;:40::i;29460:115::-;23495:10;23475:17;23524:24;;;:13;:24;;;;;;;;:77;;;;-1:-1:-1;23566:11:0;;-1:-1:-1;;;;;23553:24:0;;;23566:11;;23553:24;;:47;;-1:-1:-1;23594:6:0;;-1:-1:-1;;;;;23581:19:0;;;23594:6;;23581:19;23553:47;23516:92;;;;-1:-1:-1;;;23516:92:0;;;;;;;:::i;:::-;29558:9:::1;::::0;29552:15:::1;::::0;29558:9:::1;;29552:2;:15;:::i;:::-;29543:24;::::0;:6;:24:::1;:::i;:::-;29530:10;:37:::0;-1:-1:-1;;29460:115:0:o;25321:205::-;23495:10;23475:17;23524:24;;;:13;:24;;;;;;;;:77;;;;-1:-1:-1;23566:11:0;;-1:-1:-1;;;;;23553:24:0;;;23566:11;;23553:24;;:47;;-1:-1:-1;23594:6:0;;-1:-1:-1;;;;;23581:19:0;;;23594:6;;23581:19;23553:47;23516:92;;;;-1:-1:-1;;;23516:92:0;;;;;;;:::i;:::-;25427:6:::1;25422:97;25443:4;:11;25439:1;:15;25422:97;;;25501:6;25476:13;:22;25490:4;25495:1;25490:7;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;25476:22:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;25476:22:0;:31;;-1:-1:-1;;25476:31:0::1;::::0;::::1;;::::0;;;::::1;::::0;;25456:3;::::1;::::0;::::1;:::i;:::-;;;;25422:97;;;;23464:164:::0;25321:205;;:::o;24100:404::-;2459:6;;-1:-1:-1;;;;;2459:6:0;2469:10;2459:20;2451:35;;;;-1:-1:-1;;;2451:35:0;;;;;;;:::i;:::-;24292:14:::1;:30:::0;;;;24333:11:::1;:24:::0;;;;24368:12:::1;:26:::0;;;;24405:17:::1;:33:::0;;;;24449:9:::1;:17:::0;24477:10:::1;:19:::0;24100:404::o;29212:122::-;23495:10;23475:17;23524:24;;;:13;:24;;;;;;;;:77;;;;-1:-1:-1;23566:11:0;;-1:-1:-1;;;;;23553:24:0;;;23566:11;;23553:24;;:47;;-1:-1:-1;23594:6:0;;-1:-1:-1;;;;;23581:19:0;;;23594:6;;23581:19;23553:47;23516:92;;;;-1:-1:-1;;;23516:92:0;;;;;;;:::i;:::-;-1:-1:-1;29296:21:0::1;:30:::0;29212:122::o;29342:110::-;23495:10;23475:17;23524:24;;;:13;:24;;;;;;;;:77;;;;-1:-1:-1;23566:11:0;;-1:-1:-1;;;;;23553:24:0;;;23566:11;;23553:24;;:47;;-1:-1:-1;23594:6:0;;-1:-1:-1;;;;;23581:19:0;;;23594:6;;23581:19;23553:47;23516:92;;;;-1:-1:-1;;;23516:92:0;;;;;;;:::i;:::-;-1:-1:-1;29420:15:0::1;:24:::0;29342:110::o;30102:93::-;2459:6;;-1:-1:-1;;;;;2459:6:0;2469:10;2459:20;2451:35;;;;-1:-1:-1;;;2451:35:0;;;;;;;:::i;:::-;30169:12:::1;:18:::0;30102:93::o;33595:125::-;23495:10;23475:17;23524:24;;;:13;:24;;;;;;;;:77;;;;-1:-1:-1;23566:11:0;;-1:-1:-1;;;;;23553:24:0;;;23566:11;;23553:24;;:47;;-1:-1:-1;23594:6:0;;-1:-1:-1;;;;;23581:19:0;;;23594:6;;23581:19;23553:47;23516:92;;;;-1:-1:-1;;;23516:92:0;;;;;;;:::i;:::-;33703:9:::1;::::0;33697:15:::1;::::0;33703:9:::1;;33697:2;:15;:::i;:::-;33688:24;::::0;:6;:24:::1;:::i;:::-;33671:14;:41:::0;-1:-1:-1;;33595:125:0:o;15301:495::-;15346:14;15362:13;15377:20;15409:18;15440:9;15409:41;;15462:7;15471:10;15486:8;-1:-1:-1;;;;;15486:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;15461:47:0;;;;-1:-1:-1;15461:47:0;;-1:-1:-1;15542:5:0;15583:4;-1:-1:-1;;;;;15562:26:0;;;15558:164;;;15614:2;15605:11;;15639:2;15631:10;;15558:164;;;15683:2;15674:11;;15708:2;15700:10;;15558:164;15749:39;;-1:-1:-1;;;15749:39:0;;-1:-1:-1;;;;;15778:9:0;3108:32:1;;15749:39:0;;;3090:51:1;15749:28:0;;;;;3063:18:1;;15749:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15734:54;;15398:398;;;;15301:495;;;:::o;24512:417::-;2459:6;;-1:-1:-1;;;;;2459:6:0;2469:10;2459:20;2451:35;;;;-1:-1:-1;;;2451:35:0;;;;;;;:::i;:::-;24708:15:::1;:32:::0;;;;24751:12:::1;:26:::0;;;;24788:13:::1;:28:::0;;;;24827:18:::1;:34:::0;;;;24872:10:::1;:18:::0;24901:11:::1;:20:::0;24512:417::o;25191:122::-;23495:10;23475:17;23524:24;;;:13;:24;;;;;;;;:77;;;;-1:-1:-1;23566:11:0;;-1:-1:-1;;;;;23553:24:0;;;23566:11;;23553:24;;:47;;-1:-1:-1;23594:6:0;;-1:-1:-1;;;;;23581:19:0;;;23594:6;;23581:19;23553:47;23516:92;;;;-1:-1:-1;;;23516:92:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;;25277:19:0;;;::::1;;::::0;;;:13:::1;:19;::::0;;;;:28;;-1:-1:-1;;25277:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;25191:122::o;33936:115::-;23495:10;23475:17;23524:24;;;:13;:24;;;;;;;;:77;;;;-1:-1:-1;23566:11:0;;-1:-1:-1;;;;;23553:24:0;;;23566:11;;23553:24;;:47;;-1:-1:-1;23594:6:0;;-1:-1:-1;;;;;23581:19:0;;;23594:6;;23581:19;23553:47;23516:92;;;;-1:-1:-1;;;23516:92:0;;;;;;;:::i;:::-;-1:-1:-1;34016:20:0::1;:27:::0;33936:115::o;2670:208::-;2459:6;;-1:-1:-1;;;;;2459:6:0;2469:10;2459:20;2451:35;;;;-1:-1:-1;;;2451:35:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;2759:22:0;::::1;2751:37;;;::::0;-1:-1:-1;;;2751:37:0;;12395:2:1;2751:37:0::1;::::0;::::1;12377:21:1::0;12434:1;12414:18;;;12407:29;-1:-1:-1;;;12452:18:1;;;12445:32;12494:18;;2751:37:0::1;12193:325:1::0;2751:37:0::1;2825:6;::::0;;2804:38:::1;::::0;-1:-1:-1;;;;;2804:38:0;;::::1;::::0;2825:6;::::1;::::0;2804:38:::1;::::0;::::1;2853:6;:17:::0;;-1:-1:-1;;;;;;2853:17:0::1;-1:-1:-1::0;;;;;2853:17:0;;;::::1;::::0;;;::::1;::::0;;2670:208::o;29714:132::-;23495:10;23475:17;23524:24;;;:13;:24;;;;;;;;:77;;;;-1:-1:-1;23566:11:0;;-1:-1:-1;;;;;23553:24:0;;;23566:11;;23553:24;;:47;;-1:-1:-1;23594:6:0;;-1:-1:-1;;;;;23581:19:0;;;23594:6;;23581:19;23553:47;23516:92;;;;-1:-1:-1;;;23516:92:0;;;;;;;:::i;:::-;-1:-1:-1;29803:23:0::1;:35:::0;29714:132::o;29957:137::-;23495:10;23475:17;23524:24;;;:13;:24;;;;;;;;:77;;;;-1:-1:-1;23566:11:0;;-1:-1:-1;;;;;23553:24:0;;;23566:11;;23553:24;;:47;;-1:-1:-1;23594:6:0;;-1:-1:-1;;;;;23581:19:0;;;23594:6;;23581:19;23553:47;23516:92;;;;-1:-1:-1;;;23516:92:0;;;;;;;:::i;:::-;-1:-1:-1;30030:14:0::1;:20:::0;;-1:-1:-1;;;;;30030:20:0;;::::1;-1:-1:-1::0;;;;;;30030:20:0;;::::1;::::0;::::1;::::0;;:14:::1;30061:18:::0;;;:13:::1;:18;::::0;;;;:25;;-1:-1:-1;;30061:25:0::1;30030:20:::0;30061:25:::1;::::0;;29957:137::o;9714:177::-;-1:-1:-1;;;;;9799:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;9851:32;;879:25:1;;;9851:32:0;;852:18:1;9851:32:0;;;;;;;;9714:177;;;:::o;9899:2889::-;10013:15;10031;10041:4;10031:9;:15::i;:::-;10013:33;;10076:6;10065:7;:17;;10057:33;;;;-1:-1:-1;;;10057:33:0;;12725:2:1;10057:33:0;;;12707:21:1;12764:1;12744:18;;;12737:29;-1:-1:-1;;;12782:18:1;;;12775:33;12825:18;;10057:33:0;12523:326:1;10057:33:0;-1:-1:-1;;;;;10180:19:0;;10101:12;10180:19;;;:13;:19;;;;;;10101:12;;;;10180:19;;10179:20;:42;;;;-1:-1:-1;;;;;;10204:17:0;;;;;;:13;:17;;;;;;;;10203:18;10179:42;10175:411;;;10238:21;10280:6;10262:15;:7;10272:5;10262:15;:::i;:::-;:24;;;;:::i;:::-;10238:48;;10314:13;10305:6;:22;10301:85;;;10357:13;10348:22;;10301:85;10410:4;10400:14;;10431:26;10440:4;10446:2;10450:6;10431:8;:26::i;:::-;10476:14;;:18;10472:103;;10541:6;10523:14;;:24;;10515:44;;;;-1:-1:-1;;;10515:44:0;;13278:2:1;10515:44:0;;;13260:21:1;13317:1;13297:18;;;13290:29;-1:-1:-1;;;13335:18:1;;;13328:37;13382:18;;10515:44:0;13076:330:1;10515:44:0;10223:363;10175:411;10598:22;10641:9;-1:-1:-1;;;;;10635:15:0;:2;-1:-1:-1;;;;;10635:15:0;;10631:291;;10684:23;10700:6;10684:15;:23::i;:::-;10667:40;-1:-1:-1;10726:18:0;;10722:189;;-1:-1:-1;;;;;10793:15:0;;10765:25;10793:15;;;:9;:15;;;;;10827:35;;10793:15;;10848:14;;10793:15;;10765:25;10827:35;;10848:14;;10827:35;:::i;:::-;;;;-1:-1:-1;10891:4:0;;-1:-1:-1;;;10722:189:0;10934:25;10982:9;-1:-1:-1;;;;;10974:17:0;:4;-1:-1:-1;;;;;10974:17:0;;10970:416;;11028:26;11047:6;11028:18;:26::i;:::-;11008:46;-1:-1:-1;11073:21:0;;11069:306;;-1:-1:-1;;;;;11119:13:0;;;;;;:9;:13;;;;;:22;:42;-1:-1:-1;11115:209:0;;;-1:-1:-1;;;;;11186:13:0;;;;;;:9;:13;;;;;:43;;11212:17;;11186:13;:43;;11212:17;;11186:43;:::i;:::-;;;;-1:-1:-1;11115:209:0;;-1:-1:-1;11115:209:0;;-1:-1:-1;;;;;11278:13:0;;11303:1;11278:13;;;:9;:13;;;;;:26;11115:209;11355:4;11342:17;;11069:306;-1:-1:-1;;;;;11402:19:0;;;;;;:13;:19;;;;;;;;;:40;;-1:-1:-1;;;;;;11425:17:0;;;;;;:13;:17;;;;;;;;11402:40;11398:707;;;11468:15;;11463:1;:20;11459:177;;-1:-1:-1;;;;;11508:19:0;;;;;;:13;:19;;;;;;;;:38;;;;;11537:9;-1:-1:-1;;;;;11531:15:0;:2;-1:-1:-1;;;;;11531:15:0;;11508:38;11504:117;;;11589:12;11571:15;:30;11504:117;-1:-1:-1;;;;;11657:19:0;;;;;;:13;:19;;;;;;;;11656:20;:42;;;;-1:-1:-1;;;;;;11681:17:0;;;;;;:13;:17;;;;;;;;11680:18;11656:42;11652:442;;;11728:15;;11723:1;:20;11719:360;;11780:15;;11776:1;:19;:30;;;;;11799:7;11776:30;11768:49;;;;-1:-1:-1;;;11768:49:0;;13743:2:1;11768:49:0;;;13725:21:1;13782:1;13762:18;;;13755:29;-1:-1:-1;;;13800:18:1;;;13793:36;13846:18;;11768:49:0;13541:329:1;11768:49:0;11719:360;;;11871:7;11870:8;:23;;;;;11883:10;11882:11;11870:23;:70;;;;;5311:1;11912:15;;:28;;;;:::i;:::-;11897:12;:43;11870:70;11866:194;;;11969:34;11982:4;11988:2;11992:6;12000:2;11969:12;:34::i;:::-;12030:7;;;;;;9899:2889;;;:::o;11866:194::-;12121:7;12117:55;;;12155:5;12145:15;;12117:55;12184:53;12199:4;12205:2;12209:6;12217:7;12226:10;12184:14;:53::i;:::-;12267:1;12252:12;;:16;:38;;;;-1:-1:-1;;;;;;12273:17:0;;;;;;:13;:17;;;;;;;;12272:18;12252:38;:60;;;;-1:-1:-1;;;;;;12295:17:0;;;;;;:13;:17;;;;;;;;12294:18;12252:60;12248:140;;;12353:13;12363:2;12353:9;:13::i;:::-;12337:12;;:29;;12329:47;;;;-1:-1:-1;;;12329:47:0;;14077:2:1;12329:47:0;;;14059:21:1;14116:1;14096:18;;;14089:29;-1:-1:-1;;;14134:18:1;;;14127:35;14179:18;;12329:47:0;13875:328:1;12329:47:0;-1:-1:-1;;;;;12404:21:0;;12420:4;12404:21;12400:381;;12446:7;12442:328;;;12474:15;12484:4;12474:9;:15::i;:::-;12442:328;;;-1:-1:-1;;;;;12516:19:0;;;;;;:13;:19;;;;;;;;12511:259;;12576:10;;12605:27;12576:10;12605:16;:27::i;:::-;12674:12;12655:15;;:31;12651:104;;12711:24;12725:9;12711:13;:24::i;:::-;12537:233;10002:2786;;;;;;9899:2889;;;:::o;26565:426::-;-1:-1:-1;;;;;26625:16:0;;;;;;:11;:16;;;;;;26620:21;;26616:368;;26667:7;:14;26662:19;;:40;;;26699:3;-1:-1:-1;;;;;26685:17:0;:7;26693:1;26685:10;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;26685:10:0;:17;;26662:40;26658:315;;;26772:16;;26811:8;;26807:63;;26844:7;26565:426;:::o;26807:63::-;-1:-1:-1;26907:7:0;:14;;-1:-1:-1;;;;;26888:16:0;;;;;;:11;:16;;;;;:33;;;26940:17;;;;;;;;;;;;;-1:-1:-1;;;;;;26940:17:0;;;;;;26565:426;:::o;12839:666::-;12943:18;;13068:11;;-1:-1:-1;;;;;12943:18:0;;;12965:12;12935:42;12982:27;;;12934:76;;;;;;;;;12919:12;;;;13139:313;13159:3;13155:1;:7;13139:313;;;-1:-1:-1;;;;;13213:14:0;;;13244:25;;;;;;;:9;:25;;;;;;;:41;;;13305:55;13213:14;;-1:-1:-1;13244:25:0;;;13305:55;;;;13272:13;879:25:1;;867:2;852:18;;733:177;13305:55:0;;;;;;;;13395:3;13420:9;;;;13395:3;13139:313;;;-1:-1:-1;;13462:18:0;:35;;-1:-1:-1;;;;;;13462:35:0;-1:-1:-1;;;;;13462:35:0;;;;;;;;;;;-1:-1:-1;;;;;12839:666:0:o;13513:466::-;13577:17;13607:14;13623:13;13638:20;13662:14;:12;:14::i;:::-;13606:70;;;;;;13687:19;13730:1;13721:6;:10;:23;;;;;13743:1;13735:5;:9;13721:23;13717:93;;;13793:5;13775:15;13784:6;13775;:15;:::i;:::-;:23;;;;:::i;:::-;13761:37;;13717:93;13859:20;13868:11;13859:6;:20;:::i;:::-;13843:12;:36;13839:133;;13911:49;13924:12;13938:6;13946;13954:5;13911:12;:49::i;:::-;-1:-1:-1;13896:64:0;-1:-1:-1;13839:133:0;13595:384;;;;13513:466;;;:::o;15804:360::-;15871:17;15901:14;15919:20;15943:14;:12;:14::i;:::-;15900:57;;;;;16010:6;15994:12;:22;15990:167;;16143:1;16134:6;16111:20;16121:9;16111;:20::i;:::-;:29;;;;:::i;:::-;:33;;;;:::i;:::-;16065:9;-1:-1:-1;;;;;16055:32:0;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16046:43;;:6;:43;:::i;:::-;:47;;16092:1;16046:47;:::i;:::-;16045:100;;;;:::i;:::-;16033:112;;15990:167;15889:275;;15804:360;;;:::o;16172:419::-;-1:-1:-1;;;;;16341:17:0;;;;;;:9;:17;;;;;;:27;;16361:7;;16341:27;:::i;:::-;-1:-1:-1;;;;;16321:17:0;;;;;;:9;:17;;;;;:47;;;;16415:3;16399:13;16409:3;16399:7;:13;:::i;:::-;:19;;;;:::i;:::-;16379:39;-1:-1:-1;16433:13:0;;16429:91;;16485:11;;16463:45;;16477:6;;-1:-1:-1;;;;;16485:11:0;16498:9;16463:13;:45::i;:::-;16530:53;16544:6;16552:9;16563:19;16573:9;16563:7;:19;:::i;:::-;16530:13;:53::i;:::-;16310:281;16172:419;;;;:::o;16599:4145::-;-1:-1:-1;;;;;16797:17:0;;;;;;:9;:17;;;;;;:27;;16817:7;;16797:27;:::i;:::-;-1:-1:-1;;;;;16777:17:0;;;;;;:9;:17;;;;;:47;;;;16865:3808;;;;16893:11;16919:24;16958:21;16998:10;16994:2469;;;17066:5;17051:12;;17041:7;:22;;;;:::i;:::-;:30;;;;:::i;:::-;17112:14;;17029:42;;-1:-1:-1;17090:48:0;;17104:6;;-1:-1:-1;;;;;17112:14:0;17029:42;17090:13;:48::i;:::-;16994:2469;;;-1:-1:-1;;;;;17164:21:0;;;;;;:13;:21;;;;;;;;17160:2303;;;17275:9;17211:16;17265:20;;;:9;:20;;;;;;17230:12;;17265:32;;;17261:532;;17322:18;17369:5;17353:13;;17343:7;:23;;;;:::i;:::-;:31;;;;:::i;:::-;17322:52;-1:-1:-1;17397:23:0;17322:52;17397:23;;:::i;:::-;17465:11;;17397:23;;-1:-1:-1;17443:46:0;;17457:6;;-1:-1:-1;;;;;17465:11:0;17478:10;17443:13;:46::i;:::-;17299:210;17261:532;;;17548:9;17538:20;;;;:9;:20;;;;;:31;;;17621:14;;17638:5;;17611:24;;:7;:24;:::i;:::-;:32;;;;:::i;:::-;17592:51;;17768:5;17754:10;;17742:9;;17722:17;;17707:12;;17693:11;;:26;;;;:::i;:::-;:46;;;;:::i;:::-;:58;;;;:::i;:::-;:71;;;;:::i;:::-;17682:83;;:7;:83;:::i;:::-;:91;;;;:::i;:::-;17666:107;;17261:532;17187:621;17160:2303;;;-1:-1:-1;;;;;17818:24:0;;;;;;:13;:24;;;;;;;;17814:1649;;;17878:4;;-1:-1:-1;17920:9:0;17901:16;17972:19;17920:9;17972;:19::i;:::-;17948:43;;18061:5;18045:13;;18029;:29;;;;:::i;:::-;:37;;;;:::i;:::-;18018:7;:48;;18010:63;;;;-1:-1:-1;;;18010:63:0;;14410:2:1;18010:63:0;;;14392:21:1;14449:1;14429:18;;;14422:29;-1:-1:-1;;;14467:18:1;;;14460:32;14509:18;;18010:63:0;14208:325:1;18010:63:0;18094:25;18155:5;18132:20;;18122:7;:30;;;;:::i;:::-;:38;;;;:::i;:::-;18094:66;-1:-1:-1;18183:21:0;;18179:229;;18229:110;18244:8;18262:42;18307:17;18326:5;18333;18229:14;:110::i;:::-;18372:8;-1:-1:-1;;;;;18362:24:0;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18179:229;18475:5;18457:15;;18447:7;:25;;;;:::i;:::-;:33;;;;:::i;:::-;18428:52;;18606:5;18591:11;;18578:10;;18557:18;;18541:13;;18526:12;;:28;;;;:::i;:::-;:49;;;;:::i;:::-;:62;;;;:::i;:::-;:76;;;;:::i;:::-;18515:88;;:7;:88;:::i;:::-;:96;;;;:::i;:::-;18499:112;;17844:783;;;17814:1649;;;18756:12;;18697:17;;18771:5;;18746:22;;:7;:22;:::i;:::-;:30;;;;:::i;:::-;18734:42;-1:-1:-1;18799:13:0;;18795:653;;18837:50;18851:6;18859:16;18877:9;18837:13;:50::i;:::-;18932:1;18914:15;;:19;:30;;;;-1:-1:-1;18938:6:0;;;;18937:7;18914:30;18910:519;;;18973:18;18994:13;18998:9;18994:1;:13;:::i;:::-;18973:34;;19034:28;19065:27;19075:16;19065:9;:27::i;:::-;19034:58;;19136:20;19123:10;:33;19119:131;;;19202:20;19189:33;;19119:131;19276:73;19291:16;19317:4;19324:10;19336:5;19343;19276:14;:73::i;:::-;19376:29;19394:10;19376:17;:29::i;:::-;18946:483;;18910:519;18633:830;17814:1649;19481:20;;19477:686;;19546:16;19522:21;19604:13;:11;:13::i;:::-;19581:36;;19636:24;19698:9;;19683:12;:24;19679:116;;;19766:9;;19751:24;;:12;:24;:::i;:::-;19732:43;;19679:116;19833:16;19817:13;:32;19813:113;;;19890:16;19874:32;;19813:113;19948:17;;19944:204;;19990:26;20003:13;19990:26;;:::i;:::-;;;20039:89;20053:6;20069:42;20114:13;20039;:89::i;:::-;19503:660;;;19477:686;20181:17;;20177:485;;20219:26;20232:13;20219:26;;:::i;:::-;;;20264:51;20278:6;20294:4;20301:13;20264;:51::i;:::-;20338:6;:17;;;;-1:-1:-1;20349:6:0;;;;20348:7;20338:17;20334:313;;;20380:28;20411:24;20429:4;20411:9;:24::i;:::-;20478:10;;20380:55;;-1:-1:-1;20515:33:0;;;20511:117;;20577:27;20594:9;20577:16;:27::i;:::-;20357:290;;20334:313;16878:3795;;;16865:3808;20683:53;20697:6;20705:9;20716:19;20726:9;20716:7;:19;:::i;31631:1434::-;31733:12;31711:19;;31693:15;;:37;;;;:::i;:::-;:52;31689:91;;;31631:1434;:::o;31689:91::-;31806:11;;31845:17;;;-1:-1:-1;;;31845:17:0;;;;-1:-1:-1;;;;;31806:11:0;;;;31790:8;;31806:11;;31845:15;;:17;;;;;;;;;;;;;;;31806:11;31845:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31829:33;;31882:8;31877:1;:13;31873:52;;31907:7;;31631:1434;:::o;31873:52::-;31999:18;;32086:22;;-1:-1:-1;;;32086:22:0;;32053:17;-1:-1:-1;;;;;3108:32:1;;;32086:22:0;;;3090:51:1;31956:5:0;;31999:18;;;32086:14;;;;;3063:18:1;;32086:22:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:40;32082:79;;;32143:7;;;;;31631:1434;:::o;32082:79::-;32173:14;32190:26;32208:8;32190:15;:26;:::i;:::-;32173:43;;32236:6;32231:1;:11;32227:50;;32259:7;;;;;;31631:1434;:::o;32227:50::-;32289:15;32319:18;32352:15;32370:9;32422:20;;32352:27;;-1:-1:-1;32455:560:0;32472:3;32462:7;:13;:38;;;;;32492:8;32479:10;:21;32462:38;32455:560;;;32540:8;32521:15;;:27;32517:87;;32587:1;32569:15;:19;32517:87;32618:19;32640:3;-1:-1:-1;;;;;32640:11:0;;32656:15;;32652:1;:19;;;;:::i;:::-;32640:32;;;;;;;;;;;;;879:25:1;;867:2;852:18;;733:177;32640:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;32692:29:0;;;;;;:16;:29;;;;;;32618:54;;-1:-1:-1;32692:29:0;;32691:30;:79;;;;;32751:19;32725:22;32735:11;32725:9;:22::i;:::-;:45;;32691:79;32687:166;;;32791:46;;-1:-1:-1;;;32791:46:0;;-1:-1:-1;;;;;15052:15:1;;;32791:46:0;;;15034:34:1;15104:15;;;15084:18;;;15077:43;15136:18;;;15129:34;;;32791:17:0;;;;;14969:18:1;;32791:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;32687:166;32900:9;32890:19;;:7;:19;:::i;:::-;32879:31;;:7;:31;:::i;:::-;32869:41;;32935:9;32959:15;:17;;32925:19;;-1:-1:-1;32959:15:0;:17;;;:::i;:::-;;;;;;32991:12;;;;;:::i;:::-;;;;32502:513;32455:560;;;-1:-1:-1;;33045:12:0;33027:15;:30;-1:-1:-1;;;;;;;;;31631:1434:0:o;27215:1989::-;27338:23;;27316:19;;27289:12;;;;27316:45;;27338:23;27316:45;:::i;:::-;:56;27312:95;;;27389:7;27215:1989;:::o;27312:95::-;27485:21;;27521:29;;-1:-1:-1;;;27521:29:0;;27544:4;27521:29;;;3090:51:1;27440:5:0;;27485:21;;;-1:-1:-1;;;;;27521:14:0;;;;;3063:18:1;;27521:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:53;27517:92;;;27591:7;;;27215:1989;:::o;27517:92::-;27621:16;27647:9;27621:36;;27668:19;27690:9;-1:-1:-1;;;;;27690:21:0;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27668:45;;27728:14;27746:1;27728:19;27724:58;;27764:7;;;;;27215:1989;:::o;27724:58::-;27933:7;:14;27794:19;;;;;;;;;;;28041:9;28085:15;;28141:20;;28023:27;;-1:-1:-1;28085:15:0;28174:980;28191:3;28181:7;:13;:46;;;;;28211:16;28198:10;:29;28181:46;28174:980;;;28264:16;28248:12;;:32;28244:89;;28316:1;28301:12;:16;28244:89;28361:7;28369:12;;28361:21;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;28361:21:0;28402:26;;;:13;:26;;;;;;;;28361:21;;-1:-1:-1;28402:26:0;;28397:598;;28461:32;;-1:-1:-1;;;28461:32:0;;-1:-1:-1;;;;;3108:32:1;;;28461::0;;;3090:51:1;28461:19:0;;;;;3063:18:1;;28461:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;28523:22:0;;;;;;:9;:22;;;;;:31;28449:44;;-1:-1:-1;28523:31:0;-1:-1:-1;28577:20:0;;;28573:89;;;28634:8;28622:20;;28573:89;28697:13;28684:9;:26;;:75;;;;;28740:19;28714:22;28724:11;28714:9;:22::i;:::-;:45;;28684:75;28680:300;;;28823:14;28793:27;28811:9;28793:15;:27;:::i;:::-;:44;;;;:::i;:::-;28784:53;-1:-1:-1;28864:10:0;;28860:101;;28903:34;;-1:-1:-1;;;28903:34:0;;-1:-1:-1;;;;;7926:32:1;;;28903:34:0;;;7908:51:1;7975:18;;;7968:34;;;28903:13:0;;;;;7881:18:1;;28903:34:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;28860:101;29042:9;29032:19;;:7;:19;:::i;:::-;29021:31;;:7;:31;:::i;:::-;29011:41;;29077:9;29101:12;:14;;29067:19;;-1:-1:-1;29101:12:0;:14;;;:::i;:::-;;;;;;29130:12;;;;;:::i;:::-;;;;28174:980;;;-1:-1:-1;;;29166:19:0;:30;;;;-1:-1:-1;;;;;;;;;;;;27215:1989:0:o;13987:1306::-;14132:17;14151:22;14186:23;14222:9;-1:-1:-1;;;;;14212:32:0;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14186:60;;14257:13;14286:11;-1:-1:-1;;;;;14286:19:0;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;14273:41:0;;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14257:59;;14327:10;14357:1;-1:-1:-1;;;;;14340:19:0;:5;-1:-1:-1;;;;;14340:19:0;;;14327:32;;14370:14;14397:9;-1:-1:-1;;;;;14387:26:0;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14370:45;;14430:5;14426:540;;;14456:11;;14452:503;;14488:13;14504:18;14514:7;14519:2;14514;:7;:::i;:::-;14504:9;:18::i;:::-;14488:34;;14541:17;14561;14571:6;14561:9;:17::i;:::-;14541:37;;14609:9;14601:5;:17;14597:343;;;14643:17;14682;14690:9;14682:5;:17;:::i;:::-;14663:37;;:15;:37;:::i;:::-;:41;;14703:1;14663:41;:::i;:::-;14643:61;-1:-1:-1;14727:19:0;14763:13;:9;14775:1;14763:13;:::i;:::-;14749:10;:5;14757:2;14749:10;:::i;:::-;:28;;;;:::i;:::-;14727:50;-1:-1:-1;14817:23:0;14727:50;14817:9;:23;:::i;:::-;14800:40;-1:-1:-1;14867:18:0;;14863:57;;14887:33;14906:14;14887:33;;:::i;:::-;;;14863:57;14620:320;;14597:343;14469:486;;14452:503;14976:15;14994:13;15005:2;14994:8;:13;:::i;:::-;14976:31;;15022:15;15041:1;15022:20;15018:268;;15101:4;15071:27;15081:16;15091:6;15081:7;:16;:::i;15071:27::-;:34;;;;:::i;:::-;15059:46;;15018:268;;;15150:124;15207:2;15178:25;15188:15;15178:7;:25;:::i;:::-;15177:32;;;;:::i;:::-;15257:2;15229:24;15238:15;15229:6;:24;:::i;:::-;15228:31;;;;:::i;:::-;15150:8;:124::i;:::-;15138:136;;15018:268;14175:1118;;;;;13987:1306;;;;;;;:::o;23218:213::-;-1:-1:-1;;;;;23355:13:0;;;;;;:9;:13;;;;;;:23;;23371:7;;23355:23;:::i;:::-;-1:-1:-1;;;;;23339:13:0;;;;;;;:9;:13;;;;;;;:39;;;;23394:29;;;;;;;;;;23415:7;879:25:1;;867:2;852:18;;733:177;22754:456:0;5771:6;:13;;-1:-1:-1;;5771:13:0;5780:4;5771:13;;;22833:55;;22870:7:::1;22833:55;22922:16;::::0;;22936:1:::1;22922:16:::0;;;;;::::1;::::0;;22898:21:::1;::::0;22922:16:::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;22922:16:0::1;22898:40;;22967:4;22949;22954:1;22949:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1::0;;;;;22949:23:0::1;;;-1:-1:-1::0;;;;;22949:23:0::1;;;::::0;::::1;22993:5;22983:4;22988:1;22983:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;22983:15:0;;::::1;:7;::::0;;::::1;::::0;;;;;:15;23150:11:::1;::::0;23009:193:::1;::::0;-1:-1:-1;;;23009:193:0;;:11:::1;:65:::0;::::1;::::0;::::1;::::0;:193:::1;::::0;23089:11;;23115:1:::1;::::0;23131:4;;23150:11;::::1;::::0;23176:15:::1;::::0;23009:193:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;22822:388;5795:1;-1:-1:-1::0;5807:6:0;:14;;-1:-1:-1;;5807:14:0;;;22754:456::o;20752:1994::-;5771:6;:13;;-1:-1:-1;;5771:13:0;5780:4;5771:13;;;20830:55;;20867:7:::1;20830:55;20895:15;20927:12;;20913:11;;:26;;;;:::i;:::-;20895:44;;20950:16;20984:13;;20969:12;;:28;;;;:::i;:::-;20950:47;;21008:21;21052:18;;21032:17;;:38;;;;:::i;:::-;21008:62;;21081:13;21109:10;;21097:9;;:22;;;;:::i;:::-;21081:38;;21130:14;21160:11;;21147:10;;:24;;;;:::i;:::-;21130:41:::0;-1:-1:-1;21182:16:0::1;21130:41:::0;21238:5;21222:13;21201:18:::1;21211:8:::0;21201:7;:18:::1;:::i;:::-;:34;;;;:::i;:::-;:42;;;;:::i;:::-;:51;;;;:::i;:::-;21182:70:::0;-1:-1:-1;21265:20:0::1;21182:70:::0;;21265:20:::1;:::i;:::-;::::0;-1:-1:-1;21298:16:0::1;21265:20:::0;21317:19:::1;21331:5:::0;21317:11;:19:::1;:::i;:::-;:30;;;;:::i;:::-;21298:49:::0;-1:-1:-1;21358:17:0::1;21370:5:::0;21358:17;::::1;:::i;:::-;21448:42;::::0;-1:-1:-1;;;21448:42:0;;-1:-1:-1;;;;;21471:17:0::1;3108:32:1::0;;21448:42:0::1;::::0;::::1;3090:51:1::0;21358:17:0;;-1:-1:-1;21409:5:0::1;::::0;-1:-1:-1;;21448:14:0;;::::1;::::0;::::1;::::0;3063:18:1;;21448:42:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21527:16;::::0;;21541:1:::1;21527:16:::0;;;;;::::1;::::0;;21426:64;;-1:-1:-1;21503:21:0::1;::::0;21527:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;21527:16:0::1;21503:40;;21572:4;21554;21559:1;21554:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1::0;;;;;21554:23:0::1;;;-1:-1:-1::0;;;;;21554:23:0::1;;;::::0;::::1;21598:5;21588:4;21593:1;21588:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;21588:15:0;;::::1;:7;::::0;;::::1;::::0;;;;;:15;21614:11:::1;:65;;21694:22;21708:8:::0;21694:11;:22:::1;:::i;:::-;21731:1;21747:4;21774:17;21807:15;21614:219;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;21860:42:0::1;::::0;-1:-1:-1;;;21860:42:0;;-1:-1:-1;;;;;21883:17:0::1;3108:32:1::0;;21860:42:0::1;::::0;::::1;3090:51:1::0;21905:11:0;;-1:-1:-1;21860:14:0;::::1;::::0;-1:-1:-1;21860:14:0::1;::::0;3063:18:1;;21860:42:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:56;;;;:::i;:::-;21846:70:::0;-1:-1:-1;;;;;;21927:17:0;::::1;;21953;21981:4;22029:8:::0;22020:6;22002:15:::1;21846:70:::0;22016:1:::1;22002:15;:::i;:::-;:24;;;;:::i;:::-;:35;;;;:::i;:::-;21988:49;::::0;:11;:49:::1;:::i;:::-;21927:111;::::0;-1:-1:-1;;;;;;21927:111:0::1;::::0;;;;;;-1:-1:-1;;;;;15052:15:1;;;21927:111:0::1;::::0;::::1;15034:34:1::0;15104:15;;;;15084:18;;;15077:43;15136:18;;;15129:34;14969:18;;21927:111:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;22051:16:0::1;22098:8:::0;22070:21:::1;22084:7:::0;22070:11;:21:::1;:::i;:::-;:25;::::0;22094:1:::1;22070:25;:::i;:::-;:36;;;;:::i;:::-;22051:55:::0;-1:-1:-1;22121:12:0;;22117:81:::1;;22164:11;::::0;22150:36:::1;::::0;-1:-1:-1;;;22150:36:0;;-1:-1:-1;;;;;22164:11:0;;::::1;22150:36;::::0;::::1;7908:51:1::0;7975:18;;;7968:34;;;22150:13:0;;::::1;::::0;::::1;::::0;7881:18:1;;22150:36:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;22117:81;22250:8:::0;22221:22:::1;22235:8:::0;22221:11;:22:::1;:::i;:::-;:26;::::0;22246:1:::1;22221:26;:::i;:::-;:37;;;;:::i;:::-;22210:48:::0;-1:-1:-1;22273:12:0;;22269:82:::1;;22316:12;::::0;;22302:37:::1;::::0;-1:-1:-1;;;22302:37:0;;-1:-1:-1;;;;;22316:12:0;;::::1;22302:37:::0;;::::1;7908:51:1::0;;;;7975:18;;;7968:34;;;22302:13:0;::::1;::::0;::::1;::::0;7881:18:1;;22302:37:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;22269:82;22363:14;22402:8:::0;22380:19:::1;22394:5:::0;22380:11;:19:::1;:::i;:::-;:30;;;;:::i;:::-;22363:47:::0;-1:-1:-1;22425:10:0;;22421:318:::1;;22477:15;::::0;22530:135:::1;::::0;-1:-1:-1;;;22530:135:0;;22581:4:::1;22530:135;::::0;::::1;16556:34:1::0;-1:-1:-1;;;;;22588:5:0::1;16626:15:1::0;;16606:18;;;16599:43;16658:18;;;16651:34;;;16701:18;;;16694:34;;;-1:-1:-1;16744:19:1;;;16737:35;;;16788:19;;;16781:35;;;22477:15:0;;::::1;16832:19:1::0;;;16825:44;;;22635:15:0::1;16885:19:1::0;;;16878:35;22477:15:0;-1:-1:-1;22530:11:0::1;:24:::0;;::::1;::::0;::::1;::::0;16490:19:1;;22530:135:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;22680:25:0;::::1;;::::0;;;:9:::1;:25:::0;;;;;:47;;22507:158;;-1:-1:-1;22507:158:0;;-1:-1:-1;22680:25:0;-1:-1:-1;22680:25:0;:47:::1;::::0;22507:158;;22680:47:::1;:::i;:::-;::::0;;;-1:-1:-1;;;;22421:318:0::1;20819:1927;;;;;;;;;;;;-1:-1:-1::0;5807:6:0;:14;;-1:-1:-1;;5807:14:0;;;20752:1994::o;3148:303::-;3193:6;3220:1;3216;:5;3212:232;;;-1:-1:-1;3242:1:0;3258:6;3267:5;3271:1;3242;3267:5;:::i;:::-;:9;;3275:1;3267:9;:::i;:::-;3258:18;;3291:92;3302:1;3298;:5;3291:92;;;3328:1;-1:-1:-1;3328:1:0;3366;3328;3353:5;3328:1;3353;:5;:::i;:::-;:9;;;;:::i;:::-;3352:15;;;;:::i;:::-;3348:19;;3291:92;;;3223:171;3148:303;;;:::o;3212:232::-;3404:6;;3400:44;;-1:-1:-1;3431:1:0;3400:44;3148:303;;;:::o;3044:96::-;3096:6;3123:1;3119;:5;:13;;3131:1;3119:13;;;3127:1;3119:13;3115:17;3044:96;-1:-1:-1;;;3044:96:0:o;14:131:1:-;-1:-1:-1;;;;;89:31:1;;79:42;;69:70;;135:1;132;125:12;150:134;218:20;;247:31;218:20;247:31;:::i;289:247::-;348:6;401:2;389:9;380:7;376:23;372:32;369:52;;;417:1;414;407:12;369:52;456:9;443:23;475:31;500:5;475:31;:::i;915:118::-;1001:5;994:13;987:21;980:5;977:32;967:60;;1023:1;1020;1013:12;1038:382;1103:6;1111;1164:2;1152:9;1143:7;1139:23;1135:32;1132:52;;;1180:1;1177;1170:12;1132:52;1219:9;1206:23;1238:31;1263:5;1238:31;:::i;:::-;1288:5;-1:-1:-1;1345:2:1;1330:18;;1317:32;1358:30;1317:32;1358:30;:::i;:::-;1407:7;1397:17;;;1038:382;;;;;:::o;1425:548::-;1537:4;1566:2;1595;1584:9;1577:21;1627:6;1621:13;1670:6;1665:2;1654:9;1650:18;1643:34;1695:1;1705:140;1719:6;1716:1;1713:13;1705:140;;;1814:14;;;1810:23;;1804:30;1780:17;;;1799:2;1776:26;1769:66;1734:10;;1705:140;;;1709:3;1894:1;1889:2;1880:6;1869:9;1865:22;1861:31;1854:42;1964:2;1957;1953:7;1948:2;1940:6;1936:15;1932:29;1921:9;1917:45;1913:54;1905:62;;;;1425:548;;;;:::o;1978:315::-;2046:6;2054;2107:2;2095:9;2086:7;2082:23;2078:32;2075:52;;;2123:1;2120;2113:12;2075:52;2162:9;2149:23;2181:31;2206:5;2181:31;:::i;:::-;2231:5;2283:2;2268:18;;;;2255:32;;-1:-1:-1;;;1978:315:1:o;2298:180::-;2357:6;2410:2;2398:9;2389:7;2385:23;2381:32;2378:52;;;2426:1;2423;2416:12;2378:52;-1:-1:-1;2449:23:1;;2298:180;-1:-1:-1;2298:180:1:o;2483:456::-;2560:6;2568;2576;2629:2;2617:9;2608:7;2604:23;2600:32;2597:52;;;2645:1;2642;2635:12;2597:52;2684:9;2671:23;2703:31;2728:5;2703:31;:::i;:::-;2753:5;-1:-1:-1;2810:2:1;2795:18;;2782:32;2823:33;2782:32;2823:33;:::i;:::-;2483:456;;2875:7;;-1:-1:-1;;;2929:2:1;2914:18;;;;2901:32;;2483:456::o;3594:127::-;3655:10;3650:3;3646:20;3643:1;3636:31;3686:4;3683:1;3676:15;3710:4;3707:1;3700:15;3726:908;3780:5;3833:3;3826:4;3818:6;3814:17;3810:27;3800:55;;3851:1;3848;3841:12;3800:55;3887:6;3874:20;3913:4;3936:18;3973:2;3969;3966:10;3963:36;;;3979:18;;:::i;:::-;4025:2;4022:1;4018:10;4057:2;4051:9;4120:2;4116:7;4111:2;4107;4103:11;4099:25;4091:6;4087:38;4175:6;4163:10;4160:22;4155:2;4143:10;4140:18;4137:46;4134:72;;;4186:18;;:::i;:::-;4222:2;4215:22;4272:18;;;4348:15;;;4344:24;;;4306:15;;;;-1:-1:-1;4380:15:1;;;4377:35;;;4408:1;4405;4398:12;4377:35;4444:2;4436:6;4432:15;4421:26;;4456:148;4472:6;4467:3;4464:15;4456:148;;;4538:23;4557:3;4538:23;:::i;:::-;4526:36;;4582:12;;;;4489;;;;4456:148;;;4622:6;3726:908;-1:-1:-1;;;;;;;3726:908:1:o;4639:416::-;4732:6;4740;4793:2;4781:9;4772:7;4768:23;4764:32;4761:52;;;4809:1;4806;4799:12;4761:52;4849:9;4836:23;4882:18;4874:6;4871:30;4868:50;;;4914:1;4911;4904:12;4868:50;4937:61;4990:7;4981:6;4970:9;4966:22;4937:61;:::i;:::-;4927:71;5045:2;5030:18;;;;5017:32;;-1:-1:-1;;;;4639:416:1:o;5292:477::-;5382:6;5390;5443:2;5431:9;5422:7;5418:23;5414:32;5411:52;;;5459:1;5456;5449:12;5411:52;5499:9;5486:23;5532:18;5524:6;5521:30;5518:50;;;5564:1;5561;5554:12;5518:50;5587:61;5640:7;5631:6;5620:9;5616:22;5587:61;:::i;:::-;5577:71;;;5698:2;5687:9;5683:18;5670:32;5711:28;5733:5;5711:28;:::i;5774:523::-;5878:6;5886;5894;5902;5910;5918;5971:3;5959:9;5950:7;5946:23;5942:33;5939:53;;;5988:1;5985;5978:12;5939:53;-1:-1:-1;;6011:23:1;;;6081:2;6066:18;;6053:32;;-1:-1:-1;6132:2:1;6117:18;;6104:32;;6183:2;6168:18;;6155:32;;-1:-1:-1;6234:3:1;6219:19;;6206:33;;-1:-1:-1;6286:3:1;6271:19;6258:33;;-1:-1:-1;5774:523:1;-1:-1:-1;5774:523:1:o;6626:388::-;6694:6;6702;6755:2;6743:9;6734:7;6730:23;6726:32;6723:52;;;6771:1;6768;6761:12;6723:52;6810:9;6797:23;6829:31;6854:5;6829:31;:::i;:::-;6879:5;-1:-1:-1;6936:2:1;6921:18;;6908:32;6949:33;6908:32;6949:33;:::i;7019:325::-;7221:2;7203:21;;;7260:1;7240:18;;;7233:29;-1:-1:-1;;;7293:2:1;7278:18;;7271:32;7335:2;7320:18;;7019:325::o;7349:380::-;7428:1;7424:12;;;;7471;;;7492:61;;7546:4;7538:6;7534:17;7524:27;;7492:61;7599:2;7591:6;7588:14;7568:18;7565:38;7562:161;;7645:10;7640:3;7636:20;7633:1;7626:31;7680:4;7677:1;7670:15;7708:4;7705:1;7698:15;8013:245;8080:6;8133:2;8121:9;8112:7;8108:23;8104:32;8101:52;;;8149:1;8146;8139:12;8101:52;8181:9;8175:16;8200:28;8222:5;8200:28;:::i;8263:127::-;8324:10;8319:3;8315:20;8312:1;8305:31;8355:4;8352:1;8345:15;8379:4;8376:1;8369:15;8395:128;8462:9;;;8483:11;;;8480:37;;;8497:18;;:::i;8528:422::-;8617:1;8660:5;8617:1;8674:270;8695:7;8685:8;8682:21;8674:270;;;8754:4;8750:1;8746:6;8742:17;8736:4;8733:27;8730:53;;;8763:18;;:::i;:::-;8813:7;8803:8;8799:22;8796:55;;;8833:16;;;;8796:55;8912:22;;;;8872:15;;;;8674:270;;;8678:3;8528:422;;;;;:::o;8955:806::-;9004:5;9034:8;9024:80;;-1:-1:-1;9075:1:1;9089:5;;9024:80;9123:4;9113:76;;-1:-1:-1;9160:1:1;9174:5;;9113:76;9205:4;9223:1;9218:59;;;;9291:1;9286:130;;;;9198:218;;9218:59;9248:1;9239:10;;9262:5;;;9286:130;9323:3;9313:8;9310:17;9307:43;;;9330:18;;:::i;:::-;-1:-1:-1;;9386:1:1;9372:16;;9401:5;;9198:218;;9500:2;9490:8;9487:16;9481:3;9475:4;9472:13;9468:36;9462:2;9452:8;9449:16;9444:2;9438:4;9435:12;9431:35;9428:77;9425:159;;;-1:-1:-1;9537:19:1;;;9569:5;;9425:159;9616:34;9641:8;9635:4;9616:34;:::i;:::-;9686:6;9682:1;9678:6;9674:19;9665:7;9662:32;9659:58;;;9697:18;;:::i;:::-;9735:20;;8955:806;-1:-1:-1;;;8955:806:1:o;9766:140::-;9824:5;9853:47;9894:4;9884:8;9880:19;9874:4;9853:47;:::i;9911:168::-;9984:9;;;10015;;10032:15;;;10026:22;;10012:37;10002:71;;10053:18;;:::i;10084:184::-;10154:6;10207:2;10195:9;10186:7;10182:23;10178:32;10175:52;;;10223:1;10220;10213:12;10175:52;-1:-1:-1;10246:16:1;;10084:184;-1:-1:-1;10084:184:1:o;10273:325::-;10475:2;10457:21;;;10514:1;10494:18;;;10487:29;-1:-1:-1;;;10547:2:1;10532:18;;10525:32;10589:2;10574:18;;10273:325::o;10938:127::-;10999:10;10994:3;10990:20;10987:1;10980:31;11030:4;11027:1;11020:15;11054:4;11051:1;11044:15;11405:135;11444:3;11465:17;;;11462:43;;11485:18;;:::i;:::-;-1:-1:-1;11532:1:1;11521:13;;11405:135::o;11545:188::-;11624:13;;-1:-1:-1;;;;;11666:42:1;;11656:53;;11646:81;;11723:1;11720;11713:12;11738:450;11825:6;11833;11841;11894:2;11882:9;11873:7;11869:23;11865:32;11862:52;;;11910:1;11907;11900:12;11862:52;11933:40;11963:9;11933:40;:::i;:::-;11923:50;;11992:49;12037:2;12026:9;12022:18;11992:49;:::i;:::-;11982:59;;12084:2;12073:9;12069:18;12063:25;12128:10;12121:5;12117:22;12110:5;12107:33;12097:61;;12154:1;12151;12144:12;12097:61;12177:5;12167:15;;;11738:450;;;;;:::o;12854:217::-;12894:1;12920;12910:132;;12964:10;12959:3;12955:20;12952:1;12945:31;12999:4;12996:1;12989:15;13027:4;13024:1;13017:15;12910:132;-1:-1:-1;13056:9:1;;12854:217::o;13411:125::-;13476:9;;;13497:10;;;13494:36;;;13510:18;;:::i;14538:251::-;14608:6;14661:2;14649:9;14640:7;14636:23;14632:32;14629:52;;;14677:1;14674;14667:12;14629:52;14709:9;14703:16;14728:31;14753:5;14728:31;:::i;15174:980::-;15436:4;15484:3;15473:9;15469:19;15515:6;15504:9;15497:25;15541:2;15579:6;15574:2;15563:9;15559:18;15552:34;15622:3;15617:2;15606:9;15602:18;15595:31;15646:6;15681;15675:13;15712:6;15704;15697:22;15750:3;15739:9;15735:19;15728:26;;15789:2;15781:6;15777:15;15763:29;;15810:1;15820:195;15834:6;15831:1;15828:13;15820:195;;;15899:13;;-1:-1:-1;;;;;15895:39:1;15883:52;;15990:15;;;;15955:12;;;;15931:1;15849:9;15820:195;;;-1:-1:-1;;;;;;;16071:32:1;;;;16066:2;16051:18;;16044:60;-1:-1:-1;;;16135:3:1;16120:19;16113:35;16032:3;15174:980;-1:-1:-1;;;15174:980:1:o;16924:306::-;17012:6;17020;17028;17081:2;17069:9;17060:7;17056:23;17052:32;17049:52;;;17097:1;17094;17087:12;17049:52;17126:9;17120:16;17110:26;;17176:2;17165:9;17161:18;17155:25;17145:35;;17220:2;17209:9;17205:18;17199:25;17189:35;;16924:306;;;;;:::o

Swarm Source

ipfs://fa3409cb9f18155f42067fde035644be3f53470e9e73dea9c00a21520d6966db
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.