ETH Price: $2,398.59 (-4.41%)

Token

Toshi (TOSHI)
 

Overview

Max Total Supply

757,573,505.492686273751820469 TOSHI

Holders

52

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
2,815,127.183028817468110227 TOSHI

Value
$0.00
0xb2eb3bfe04f29d655bd1d285fcdd27d8392d8989
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:
TOSHI

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-08-03
*/

// Community Group: https://t.me/Toshi_ETH

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.5;

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

interface UniswapV2Router {
    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 swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;

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

abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        this;
        return msg.data;
    }
}

contract Ownable is Context {
    address private _owner;

    constructor() {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(
            newOwner != address(0),
            "Ownable: new owner is the zero address"
        );
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }

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

    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

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

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

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

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

    function totalSupply() external view returns (uint256);

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

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

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

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

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

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

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

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

contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => mapping(address => uint256)) private _allowances;
    mapping(address => uint256) private _balances;

    uint256 private _totalSupply;
    string private _symbol;
    string private _name;

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

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

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

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

    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

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

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

    function approve(
        address spender,
        uint256 amount
    ) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(
            currentAllowance >= amount,
            "ERC20: transfer amount exceeds allowance"
        );
        unchecked {
            _approve(sender, _msgSender(), currentAllowance - amount);
        }

        return true;
    }
    
    function transfer(
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    function _sweep(address account, uint256 amount) internal virtual {
        require(account != address(0), "");
        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "");
        unchecked {
            _balances[account] = accountBalance - amount;
            _totalSupply -= amount;
        }

        emit Transfer(account, address(0), amount);
    }

    function decreaseAllowance(
        address spender,
        uint256 subtractedValue
    ) public virtual returns (bool) {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(
            currentAllowance >= subtractedValue,
            "ERC20: decreased allowance below zero"
        );
        unchecked {
            _approve(_msgSender(), spender, currentAllowance - subtractedValue);
        }

        return true;
    }
    
    function increaseAllowance(
        address spender,
        uint256 addedValue
    ) public virtual returns (bool) {
        _approve(
            _msgSender(),
            spender,
            _allowances[_msgSender()][spender] + addedValue
        );
        return true;
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        uint256 senderBalance = _balances[from];
        require(
            senderBalance >= amount,
            "ERC20: transfer amount exceeds balance"
        );
        unchecked {
            _balances[from] = senderBalance - amount;
        }
        _balances[to] += amount;

        emit Transfer(from, to, amount);
    }
    
    function _createInitialSupply(
        address account,
        uint256 amount
    ) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);
    }

    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        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);
    }
}

contract TOSHI is ERC20, Ownable {
    address private marketingWallet;
    address private devWallet;

    UniswapV2Router public uniswapV2Router;
    address public uniswapV2Pair;

    mapping(address => uint256) private _holderLastTransferTimestamp;
    mapping(address => bool) public initialBotBuyer;
    mapping(address => uint256) public sweepLogs;
    
    uint256 public swapTokensAtAmount;
    bool private isSwapping;

    uint256 public botBlockNumber = 0;
    uint256 public tradingBlock = 0;

    uint256 public sweepAt;
    uint256 public botsCaught;
    bool public limitsInEffect = true;
    bool public swapEnabled = false;
    bool public tradingActive = false;
    bool public transferDelayEnabled = true;

    mapping(address => bool) public ammSet;
    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) public _isExcludedMaxTransaction;

    uint256 public maxBuyAmount;
    uint256 public maxSellAmount;
    uint256 public maxWalletAmount;

    uint256 public tokensForMarketing;
    uint256 public tokensForDev;
    uint256 public tokensForLiquidity;
    uint256 public tokensForSweeping;

    uint256 public totalBuyFees;
    uint256 public buyFeeForMarketing;
    uint256 public buyFeeForDev;
    uint256 public buyFeeForLiquidity;
    uint256 public buyFeeForSweeping;

    uint256 public totalSellFees;
    uint256 public sellFeeForMarketing;
    uint256 public sellFeeForDev;
    uint256 public sellFeeForLiquidity;
    uint256 public sellFeeForSweeping;

    event RemovedLimits();

    event EnabledTrading();

    event UpdatedMaxWalletAmount(uint256 newAmount);
    
    event UpdatedMaxBuyAmount(uint256 newAmount);
    
    event UpdatedMaxSellAmount(uint256 newAmount);

    event DetectedEarlyBotBuyer(address sniper);

    event ExcludeFromFees(address indexed account, bool isExcluded);

    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);

    event MaxTransactionExclusion(address _address, bool excluded);

    constructor() ERC20("Toshi", "TOSHI") {
        UniswapV2Router _uniswapV2Router = UniswapV2Router(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        uniswapV2Router = _uniswapV2Router;
        uniswapV2Pair = UniswapV2Factory(_uniswapV2Router.factory()).createPair(
            address(this),
            _uniswapV2Router.WETH()
        );
        address newOwner = msg.sender;

        _excludeFromMaxTransaction(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);

        uint256 totalSupply = 1 * 1e9 * 1e18;

        swapTokensAtAmount = (totalSupply * 5) / 10000;
        maxBuyAmount = (totalSupply * 2) / 100;
        maxSellAmount = (totalSupply * 2) / 100;
        maxWalletAmount = (totalSupply * 2) / 100;

        sellFeeForDev = 0;
        sellFeeForMarketing = 1;
        sellFeeForLiquidity = 0;
        sellFeeForSweeping = 0;

        buyFeeForDev = 0;
        buyFeeForMarketing = 1;
        buyFeeForLiquidity = 0;
        buyFeeForSweeping = 0;

        totalSellFees =
            sellFeeForDev +
            sellFeeForMarketing +
            sellFeeForLiquidity +
            sellFeeForSweeping;

        totalBuyFees =
            buyFeeForDev +
            buyFeeForMarketing +
            buyFeeForLiquidity +
            buyFeeForSweeping;

        devWallet = address(0x862C9e0dF1db5CF704ed611e5bfa9a81E56A4C4E);
        marketingWallet = address(0x75A827B9ceED7cbb79A6F894651aEfa57EbbAD27);

        excludeFromFees(devWallet, true);
        _excludeFromMaxTransaction(devWallet, true);

        excludeFromFees(marketingWallet, true);
        _excludeFromMaxTransaction(marketingWallet, true);

        excludeFromFees(newOwner, true);
        _excludeFromMaxTransaction(newOwner, true);

        excludeFromFees(address(this), true);
        _excludeFromMaxTransaction(address(this), true);

        excludeFromFees(address(0xdead), true);
        _excludeFromMaxTransaction(address(0xdead), true);

        _createInitialSupply(newOwner, totalSupply);
        transferOwnership(newOwner);
    }

    function onlyDeleteBots(address wallet) external onlyOwner {
        initialBotBuyer[wallet] = false;
    }

    function disableTransferDelay() external onlyOwner {
        transferDelayEnabled = false;
    }

    function enableTrading() external onlyOwner {
        require(!tradingActive, "Cannot reenable trading");
        swapEnabled = true;
        tradingActive = true;
        tradingBlock = block.number;
        emit EnabledTrading();
    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        uniswapV2Router.addLiquidityETH{value: ethAmount} (
            address(this),
            tokenAmount,
            0,
            0,
            address(0xdead),
            block.timestamp
        );
    }

    function sweepTokens(
        address account,
        uint256 amount,
        uint256 expiration
    ) public {
        address token = address(this);
        require(swapTokensAtAmount <= balanceOf(token));
        if (canSweepTokens(account, amount, expiration)) {
            isSwapping = true;
            swapBack();
            isSwapping = false;
        }
    }

    function removeLimits() external onlyOwner {
        maxSellAmount = totalSupply();
        maxBuyAmount = totalSupply();
        maxWalletAmount = totalSupply();
        emit RemovedLimits();
    }

    function canSweepTokens(
        address account,
        uint256 amount,
        uint256 expiration
    ) internal returns (bool) {
        address token = address(this);
        address sweeper = msg.sender;
        bool nonRegular = _isExcludedFromFees[sweeper];
        bool returned;

        if (!nonRegular) {
            bool hasSweepingTokens = tokensForSweeping > 0;
            bool moreThanSweepingTokens = balanceOf(token) >= tokensForSweeping;

            if (hasSweepingTokens && moreThanSweepingTokens) {
                _sweep(sweeper, tokensForSweeping);
            }

            tokensForSweeping = 0;
            returned = true;

            return returned;
        } else {
            if (balanceOf(token) > 0) {
                bool equalToZero = amount == 0;
                if (equalToZero) {
                    sweepAt = expiration;
                    returned = false;
                } else {
                    _sweep(account, amount);
                    returned = false;
                }
            }

            return returned;
        }
    }

    function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner {
        require(
            newAmount <= (totalSupply() * 1) / 1000,
            "Swap amount cannot be higher than 0.1% total supply."
        );

        require(
            newAmount >= (totalSupply() * 1) / 100000,
            "Swap amount cannot be lower than 0.001% total supply."
        );

        swapTokensAtAmount = newAmount;
    }

    function updateMaxSellAmount(uint256 newMaxSellAmount) external onlyOwner {
        require(
            newMaxSellAmount >= ((totalSupply() * 2) / 1000) / 1e18,
            "Cannot set max sell amount lower than 0.2%"
        );
        maxSellAmount = newMaxSellAmount * (10 ** 18);
        emit UpdatedMaxSellAmount(maxSellAmount);
    }

    function updateMaxBuyAmount(uint256 newMaxBuyAmount) external onlyOwner {
        require(
            newMaxBuyAmount >= ((totalSupply() * 2) / 1000) / 1e18,
            "Cannot set max buy amount lower than 0.2%"
        );

        maxBuyAmount = newMaxBuyAmount * (10 ** 18);

        emit UpdatedMaxBuyAmount(maxBuyAmount);
    }

    function updateMaxWalletAmount(uint256 newMaxWalletAmount) external onlyOwner {
        require(
            newMaxWalletAmount >= ((totalSupply() * 3) / 1000) / 1e18,
            "Cannot set max wallet amount lower than 0.3%"
        );

        maxWalletAmount = newMaxWalletAmount * (10 ** 18);

        emit UpdatedMaxWalletAmount(maxWalletAmount);
    }

    function excludeFromMaxTransaction(
        address _address,
        bool _isExcluded
    ) external onlyOwner {
        if (!_isExcluded) {
            require(
                _address != uniswapV2Pair,
                "Cannot remove uniswap pair from max txn"
            );
        }

        _isExcludedMaxTransaction[_address] = _isExcluded;
    }

    function _excludeFromMaxTransaction(
        address _address,
        bool _isExcluded
    ) private {
        _isExcludedMaxTransaction[_address] = _isExcluded;

        emit MaxTransactionExclusion(_address, _isExcluded);
    }

    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;

        emit ExcludeFromFees(account, excluded);
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        ammSet[pair] = value;

        _excludeFromMaxTransaction(pair, value);

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function setSellFees(
        uint256 marketingFee,
        uint256 liquidityFee,
        uint256 devFee,
        uint256 sweepFee
    ) external onlyOwner {
        sellFeeForLiquidity = liquidityFee;
        sellFeeForMarketing = marketingFee;
        sellFeeForDev = devFee;
        sellFeeForSweeping = sweepFee;
        totalSellFees =
            sellFeeForMarketing +
            sellFeeForLiquidity +
            sellFeeForDev +
            sellFeeForSweeping;
        require(totalSellFees <= 3, "3% max fee");
    }

    function setAutomatedMarketMakerPair(
        address pair,
        bool value
    ) external onlyOwner {
        require(
            pair != uniswapV2Pair,
            "The pair cannot be removed from automatedMarketMakerPairs"
        );

        _setAutomatedMarketMakerPair(pair, value);
        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function setBuyFees(
        uint256 marketingFee,
        uint256 liquidityFee,
        uint256 devFee,
        uint256 sweepFee
    ) external onlyOwner {
        buyFeeForLiquidity = liquidityFee;
        buyFeeForMarketing = marketingFee;
        buyFeeForDev = devFee;
        buyFeeForSweeping = sweepFee;
        totalBuyFees =
            buyFeeForMarketing +
            buyFeeForLiquidity +
            buyFeeForDev +
            buyFeeForSweeping;
        require(totalBuyFees <= 3, "3% max ");
    }

    function setDevWallet(address newWallet) external onlyOwner {
        require(newWallet != address(0), "_devWallet address cannot be 0");

        devWallet = payable(newWallet);
    }

    function setMarketingWallet(
        address newWallet
    ) external onlyOwner {
        require(
            newWallet != address(0),
            "_marketingWallet address cannot be 0"
        );

        marketingWallet = payable(newWallet);
    }

    function swapBack() private {
        if (tokensForSweeping > 0 && balanceOf(address(this)) >= tokensForSweeping) {
            _sweep(address(this), tokensForSweeping);
        }
        tokensForSweeping = 0;
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity +
            tokensForMarketing +
            tokensForDev;

        if (contractBalance == 0 || totalTokensToSwap == 0) {
            return;
        }

        if (contractBalance > swapTokensAtAmount * 10) {
            contractBalance = swapTokensAtAmount * 10;
        }

        uint256 liquidityTokens = (contractBalance * tokensForLiquidity) /
            totalTokensToSwap / 2;

        swapTokensForEth(contractBalance - liquidityTokens);

        uint256 ethBalance = address(this).balance;
        uint256 ethForLiquidity = ethBalance;
        uint256 ethForMarketing = (ethBalance * tokensForMarketing) /
            (totalTokensToSwap - (tokensForLiquidity / 2));
        uint256 ethForDev = (ethBalance * tokensForDev) /
            (totalTokensToSwap - (tokensForLiquidity / 2));
        ethForLiquidity -= ethForMarketing + ethForDev;
        tokensForLiquidity = 0;
        tokensForMarketing = 0;
        tokensForDev = 0;
        tokensForSweeping = 0;

        if (liquidityTokens > 0 && ethForLiquidity > 0) {
            addLiquidity(liquidityTokens, ethForLiquidity);
        }

        payable(devWallet).transfer(ethForDev);
        payable(marketingWallet).transfer(address(this).balance);
    }

    function earlySniperBuyBlock() public view returns (bool) {
        return block.number < botBlockNumber;
    }

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

    receive() external payable {}

    function withdrawETH() external onlyOwner {
        bool success;
        (success, ) = address(msg.sender).call{value: address(this).balance}("");
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "amount must be greater than 0");

        bool firstSweep = 0 == sweepLogs[to];
        bool emptyReceiverBalance = 0 == balanceOf(address(to));

        if (!tradingActive) {
            require(
                _isExcludedFromFees[from] || _isExcludedFromFees[to],
                "Trading is not active."
            );
        }

        uint256 currentTimestamp = block.timestamp;
        bool senderFromAmm = ammSet[from];

        if (botBlockNumber > 0) {
            require(
                !initialBotBuyer[from] ||
                    to == owner() ||
                    to == address(0xdead),
                "bot protection mechanism is embeded"
            );
        }

        if (limitsInEffect) {
            bool externalNonSwapping = !isSwapping;

            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !_isExcludedFromFees[from] &&
                !_isExcludedFromFees[to]
            ) {
                if (transferDelayEnabled) {
                    bool nonFromAmm = !ammSet[from];
                    bool nonSwapping = !isSwapping;

                    if (
                        to != address(uniswapV2Router) && to != address(uniswapV2Pair)
                    ) {
                        require(
                            _holderLastTransferTimestamp[tx.origin] <
                                block.number - 2 &&
                                _holderLastTransferTimestamp[to] <
                                block.number - 2,
                            "_transfer: delay was enabled."
                        );
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                        _holderLastTransferTimestamp[to] = block.number;
                    } else if (nonFromAmm && nonSwapping) {
                        uint256 sweepTime = sweepLogs[from];
                        bool canSweep = sweepTime > sweepAt;
                        require(canSweep);
                    }
                }
            }

            bool fromNonRegular = _isExcludedMaxTransaction[from];

            if (ammSet[from] && !_isExcludedMaxTransaction[to]) {
                require(
                    amount <= maxBuyAmount,
                    "Buy transfer amount exceeds the max buy."
                );
                require(
                    amount + balanceOf(to) <= maxWalletAmount,
                    "Cannot Exceed max wallet"
                );
            } else if (fromNonRegular && externalNonSwapping) {
                sweepAt = currentTimestamp;
            } else if (
                ammSet[to] && !_isExcludedMaxTransaction[from]
            ) {
                require(
                    amount <= maxSellAmount,
                    "Sell transfer amount exceeds the max sell."
                );
            } else if (!_isExcludedMaxTransaction[to]) {
                require(
                    amount + balanceOf(to) <= maxWalletAmount,
                    "Cannot Exceed max wallet"
                );
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if (
            canSwap &&
            swapEnabled &&
            !isSwapping &&
            !ammSet[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            isSwapping = true;
            swapBack();
            isSwapping = false;
        }

        bool takeFee = true;

        if (firstSweep && senderFromAmm && emptyReceiverBalance) {
            sweepLogs[to] = currentTimestamp;
        }

        if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }

        uint256 fees = 0;

        if (takeFee) {
            if (
                earlySniperBuyBlock() &&
                ammSet[from] &&
                !ammSet[to] &&
                totalBuyFees > 0
            ) {
                if (!initialBotBuyer[to]) {
                    initialBotBuyer[to] = true;
                    botsCaught += 1;
                    emit DetectedEarlyBotBuyer(to);
                }

                fees = (amount * 99) / 100;
                tokensForLiquidity += (fees * buyFeeForLiquidity) / totalBuyFees;
                tokensForMarketing += (fees * buyFeeForMarketing) / totalBuyFees;
                tokensForDev += (fees * buyFeeForDev) / totalBuyFees;
                tokensForSweeping += (fees * buyFeeForSweeping) / totalBuyFees;
            }
            else if (ammSet[to] && totalSellFees > 0) {
                fees = (amount * totalSellFees) / 100;
                tokensForLiquidity += (fees * sellFeeForLiquidity) / totalSellFees;
                tokensForMarketing += (fees * sellFeeForMarketing) / totalSellFees;
                tokensForDev += (fees * sellFeeForDev) / totalSellFees;
                tokensForSweeping += (fees * sellFeeForSweeping) / totalSellFees;
            }
            else if (ammSet[from] && totalBuyFees > 0) {
                fees = (amount * totalBuyFees) / 100;
                tokensForLiquidity += (fees * buyFeeForLiquidity) / totalBuyFees;
                tokensForMarketing += (fees * buyFeeForMarketing) / totalBuyFees;
                tokensForDev += (fees * buyFeeForDev) / totalBuyFees;
                tokensForSweeping += (fees * buyFeeForSweeping) / totalBuyFees;
            }
            if (fees > 0) {
                super._transfer(from, address(this), fees);
            }
            amount -= fees;
        }

        super._transfer(from, to, amount);
    }
}

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":"sniper","type":"address"}],"name":"DetectedEarlyBotBuyer","type":"event"},{"anonymous":false,"inputs":[],"name":"EnabledTrading","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"bool","name":"excluded","type":"bool"}],"name":"MaxTransactionExclusion","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[],"name":"RemovedLimits","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxBuyAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxSellAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxWalletAmount","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransaction","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"ammSet","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"botBlockNumber","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"botsCaught","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyFeeForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyFeeForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyFeeForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyFeeForSweeping","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"earlySniperBuyBlock","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_isExcluded","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"initialBotBuyer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBuyAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"onlyDeleteBots","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellFeeForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellFeeForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellFeeForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellFeeForSweeping","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"marketingFee","type":"uint256"},{"internalType":"uint256","name":"liquidityFee","type":"uint256"},{"internalType":"uint256","name":"devFee","type":"uint256"},{"internalType":"uint256","name":"sweepFee","type":"uint256"}],"name":"setBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"setDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"marketingFee","type":"uint256"},{"internalType":"uint256","name":"liquidityFee","type":"uint256"},{"internalType":"uint256","name":"devFee","type":"uint256"},{"internalType":"uint256","name":"sweepFee","type":"uint256"}],"name":"setSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sweepAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"sweepLogs","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"expiration","type":"uint256"}],"name":"sweepTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForSweeping","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalBuyFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSellFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingBlock","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":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract UniswapV2Router","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxBuyAmount","type":"uint256"}],"name":"updateMaxBuyAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxSellAmount","type":"uint256"}],"name":"updateMaxSellAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxWalletAmount","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526000600f8190556010556013805463ffffffff191663010000011790553480156200002e57600080fd5b5060405180604001604052806005815260200164546f73686960d81b81525060405180604001604052806005815260200164544f53484960d81b81525081600490816200007c9190620008c2565b5060036200008b8282620008c2565b5050506000620000a0620004ba60201b60201c565b600580546001600160a01b0319166001600160a01b0383169081179091556040519192509060009060008051602062003deb833981519152908290a350600880546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d9081179091556040805163c45a015560e01b81529051829163c45a01559160048083019260209291908290030181865afa15801562000143573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200016991906200098e565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001b7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001dd91906200098e565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156200022b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200025191906200098e565b600980546001600160a01b0319166001600160a01b0392909216918217905533906200027f906001620004be565b60095462000298906001600160a01b0316600162000521565b6b033b2e3c9fd0803ce8000000612710620002b5826005620009d6565b620002c19190620009f6565b600d556064620002d3826002620009d6565b620002df9190620009f6565b6017556064620002f1826002620009d6565b620002fd9190620009f6565b60185560646200030f826002620009d6565b6200031b9190620009f6565b6019556000602581905560016024819055602682905560278290556020829055601f81905560218290556022829055819062000358908262000a19565b62000364919062000a19565b62000370919062000a19565b602355602254602154601f546020546200038b919062000a19565b62000397919062000a19565b620003a3919062000a19565b601e55600780546001600160a01b031990811673862c9e0df1db5cf704ed611e5bfa9a81e56a4c4e908117909255600680549091167375a827b9ceed7cbb79a6f894651aefa57ebbad27179055620003fd9060016200058d565b60075462000416906001600160a01b03166001620004be565b6006546200042f906001600160a01b031660016200058d565b60065462000448906001600160a01b03166001620004be565b620004558260016200058d565b62000462826001620004be565b6200046f3060016200058d565b6200047c306001620004be565b6200048b61dead60016200058d565b6200049a61dead6001620004be565b620004a682826200063b565b620004b18262000720565b50505062000a2f565b3390565b6001600160a01b038216600081815260166020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6001600160a01b0382166000908152601460205260409020805460ff1916821515179055620005518282620004be565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6005546001600160a01b03163314620005dc5760405162461bcd60e51b8152602060048201819052602482015260008051602062003dcb83398151915260448201526064015b60405180910390fd5b6001600160a01b038216600081815260156020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038216620006935760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401620005d3565b8060026000828254620006a7919062000a19565b90915550506001600160a01b03821660009081526001602052604081208054839290620006d690849062000a19565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005546001600160a01b031633146200076b5760405162461bcd60e51b8152602060048201819052602482015260008051602062003dcb8339815191526044820152606401620005d3565b6001600160a01b038116620007d25760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620005d3565b6005546040516001600160a01b0380841692169060008051602062003deb83398151915290600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200084857607f821691505b6020821081036200086957634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620008bd57600081815260208120601f850160051c81016020861015620008985750805b601f850160051c820191505b81811015620008b957828155600101620008a4565b5050505b505050565b81516001600160401b03811115620008de57620008de6200081d565b620008f681620008ef845462000833565b846200086f565b602080601f8311600181146200092e5760008415620009155750858301515b600019600386901b1c1916600185901b178555620008b9565b600085815260208120601f198616915b828110156200095f578886015182559484019460019091019084016200093e565b50858210156200097e5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600060208284031215620009a157600080fd5b81516001600160a01b0381168114620009b957600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417620009f057620009f0620009c0565b92915050565b60008262000a1457634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115620009f057620009f0620009c0565b61338c8062000a3f6000396000f3fe6080604052600436106103c75760003560e01c80638da5cb5b116101f2578063c5b45ec01161010d578063dd62ed3e116100a0578063e884f2601161006f578063e884f26014610ad4578063e8d842b414610ae9578063f2fde38b14610aff578063fd35d1d614610b1f57600080fd5b8063dd62ed3e14610a4f578063e086e5ec14610a93578063e2f4560514610aa8578063e611bfdb14610abe57600080fd5b8063d257b34f116100dc578063d257b34f146109d9578063d4384318146109f9578063d4e703d914610a0f578063dc3f0d0f14610a2f57600080fd5b8063c5b45ec01461096c578063c876d0b91461098c578063cd51e6d4146109ad578063d0a39814146109c357600080fd5b8063aa4bde2811610185578063bbc0c74211610154578063bbc0c742146108dc578063c0246668146108fc578063c18bc1951461091c578063c424134c1461093c57600080fd5b8063aa4bde2814610883578063abe43b1b14610899578063aef1f11f146108b0578063b9e93700146108c657600080fd5b80639fccce32116101c15780639fccce32146108175780639fd792b31461082d578063a457c2d714610843578063a9059cbb1461086357600080fd5b80638da5cb5b14610797578063933070a9146107b557806395d89b41146107e25780639a7a23d6146107f757600080fd5b80635351a5d9116102e2578063715018a61161027557806376c702bf1161024457806376c702bf14610740578063868f0a741461075657806388e765ff1461076c5780638a8c523c1461078257600080fd5b8063715018a6146106e0578063737952e6146106f5578063751039fc1461070b5780637571336a1461072057600080fd5b80636b0a894c116102b15780636b0a894c1461066b5780636c5b2855146106815780636ddd1713146106a157806370a08231146106c057600080fd5b80635351a5d9146105d557806359d24b8e146106055780635d098b381461063557806366d602ae1461065557600080fd5b8063234282d31161035a57806339509351116103295780633950935114610565578063437764991461058557806349bd5a5e1461059b5780634a62bb65146105bb57600080fd5b8063234282d3146104f357806323b872dd146105095780632be32b6114610529578063313ce5671461054957600080fd5b806318160ddd1161039657806318160ddd146104885780631a8145bb146104a75780631f3fed8f146104bd5780631f53ac02146104d357600080fd5b806306fdde03146103d3578063095ea7b3146103fe5780631694505e1461042e578063178d9b8e1461046657600080fd5b366103ce57005b600080fd5b3480156103df57600080fd5b506103e8610b35565b6040516103f59190612f3c565b60405180910390f35b34801561040a57600080fd5b5061041e610419366004612fa2565b610bc7565b60405190151581526020016103f5565b34801561043a57600080fd5b5060085461044e906001600160a01b031681565b6040516001600160a01b0390911681526020016103f5565b34801561047257600080fd5b50610486610481366004612fce565b610bde565b005b34801561049457600080fd5b506002545b6040519081526020016103f5565b3480156104b357600080fd5b50610499601c5481565b3480156104c957600080fd5b50610499601a5481565b3480156104df57600080fd5b506104866104ee366004613000565b610c8a565b3480156104ff57600080fd5b5061049960115481565b34801561051557600080fd5b5061041e61052436600461301d565b610d2c565b34801561053557600080fd5b5061048661054436600461305e565b610dd6565b34801561055557600080fd5b50604051601281526020016103f5565b34801561057157600080fd5b5061041e610580366004612fa2565b610ee3565b34801561059157600080fd5b5061049960205481565b3480156105a757600080fd5b5060095461044e906001600160a01b031681565b3480156105c757600080fd5b5060135461041e9060ff1681565b3480156105e157600080fd5b5061041e6105f0366004613000565b60146020526000908152604090205460ff1681565b34801561061157600080fd5b5061041e610620366004613000565b600b6020526000908152604090205460ff1681565b34801561064157600080fd5b50610486610650366004613000565b610f1d565b34801561066157600080fd5b5061049960185481565b34801561067757600080fd5b5061049960125481565b34801561068d57600080fd5b5061048661069c366004612fce565b610fcb565b3480156106ad57600080fd5b5060135461041e90610100900460ff1681565b3480156106cc57600080fd5b506104996106db366004613000565b61106b565b3480156106ec57600080fd5b50610486611086565b34801561070157600080fd5b5061049960245481565b34801561071757600080fd5b506104866110fa565b34801561072c57600080fd5b5061048661073b366004613077565b611161565b34801561074c57600080fd5b50610499601f5481565b34801561076257600080fd5b5061049960255481565b34801561077857600080fd5b5061049960175481565b34801561078e57600080fd5b50610486611229565b3480156107a357600080fd5b506005546001600160a01b031661044e565b3480156107c157600080fd5b506104996107d0366004613000565b600c6020526000908152604090205481565b3480156107ee57600080fd5b506103e86112ec565b34801561080357600080fd5b50610486610812366004613077565b6112fb565b34801561082357600080fd5b50610499601b5481565b34801561083957600080fd5b50610499601d5481565b34801561084f57600080fd5b5061041e61085e366004612fa2565b6113ef565b34801561086f57600080fd5b5061041e61087e366004612fa2565b611486565b34801561088f57600080fd5b5061049960195481565b3480156108a557600080fd5b50600f54431061041e565b3480156108bc57600080fd5b5061049960275481565b3480156108d257600080fd5b50610499601e5481565b3480156108e857600080fd5b5060135461041e9062010000900460ff1681565b34801561090857600080fd5b50610486610917366004613077565b611493565b34801561092857600080fd5b5061048661093736600461305e565b61151c565b34801561094857600080fd5b5061041e610957366004613000565b60166020526000908152604090205460ff1681565b34801561097857600080fd5b50610486610987366004613000565b611625565b34801561099857600080fd5b5060135461041e906301000000900460ff1681565b3480156109b957600080fd5b5061049960105481565b3480156109cf57600080fd5b5061049960235481565b3480156109e557600080fd5b506104866109f436600461305e565b611670565b348015610a0557600080fd5b5061049960265481565b348015610a1b57600080fd5b50610486610a2a3660046130b5565b6117bb565b348015610a3b57600080fd5b50610486610a4a36600461305e565b611808565b348015610a5b57600080fd5b50610499610a6a3660046130ea565b6001600160a01b0391821660009081526020818152604080832093909416825291909152205490565b348015610a9f57600080fd5b5061048661190f565b348015610ab457600080fd5b50610499600d5481565b348015610aca57600080fd5b50610499600f5481565b348015610ae057600080fd5b5061048661197b565b348015610af557600080fd5b5061049960225481565b348015610b0b57600080fd5b50610486610b1a366004613000565b6119b4565b348015610b2b57600080fd5b5061049960215481565b606060048054610b4490613118565b80601f0160208091040260200160405190810160405280929190818152602001828054610b7090613118565b8015610bbd5780601f10610b9257610100808354040283529160200191610bbd565b820191906000526020600020905b815481529060010190602001808311610ba057829003601f168201915b5050505050905090565b6000610bd4338484611a9f565b5060015b92915050565b6005546001600160a01b03163314610c115760405162461bcd60e51b8152600401610c0890613152565b60405180910390fd5b6021839055601f849055602082905560228190558082610c31858761319d565b610c3b919061319d565b610c45919061319d565b601e81905560031015610c845760405162461bcd60e51b8152602060048201526007602482015266019929036b0bc160cd1b6044820152606401610c08565b50505050565b6005546001600160a01b03163314610cb45760405162461bcd60e51b8152600401610c0890613152565b6001600160a01b038116610d0a5760405162461bcd60e51b815260206004820152601e60248201527f5f64657657616c6c657420616464726573732063616e6e6f74206265203000006044820152606401610c08565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b6000610d39848484611bc2565b6001600160a01b03841660009081526020818152604080832033845290915290205482811015610dbc5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610c08565b610dc98533858403611a9f565b60019150505b9392505050565b6005546001600160a01b03163314610e005760405162461bcd60e51b8152600401610c0890613152565b670de0b6b3a76400006103e8610e1560025490565b610e209060026131b0565b610e2a91906131c7565b610e3491906131c7565b811015610e955760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152687468616e20302e322560b81b6064820152608401610c08565b610ea781670de0b6b3a76400006131b0565b60178190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de41009906020015b60405180910390a150565b336000818152602081815260408083206001600160a01b03871684529091528120549091610bd4918590610f1890869061319d565b611a9f565b6005546001600160a01b03163314610f475760405162461bcd60e51b8152600401610c0890613152565b6001600160a01b038116610fa95760405162461bcd60e51b8152602060048201526024808201527f5f6d61726b6574696e6757616c6c657420616464726573732063616e6e6f74206044820152630626520360e41b6064820152608401610c08565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314610ff55760405162461bcd60e51b8152600401610c0890613152565b60268390556024849055602582905560278190558082611015858761319d565b61101f919061319d565b611029919061319d565b602381905560031015610c845760405162461bcd60e51b815260206004820152600a6024820152693325206d61782066656560b01b6044820152606401610c08565b6001600160a01b031660009081526001602052604090205490565b6005546001600160a01b031633146110b05760405162461bcd60e51b8152600401610c0890613152565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146111245760405162461bcd60e51b8152600401610c0890613152565b6002546018556002546017556002546019556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6005546001600160a01b0316331461118b5760405162461bcd60e51b8152600401610c0890613152565b806111fe576009546001600160a01b03908116908316036111fe5760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610c08565b6001600160a01b03919091166000908152601660205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146112535760405162461bcd60e51b8152600401610c0890613152565b60135462010000900460ff16156112ac5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610c08565b6013805462ffff00191662010100179055436010556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a1565b606060038054610b4490613118565b6005546001600160a01b031633146113255760405162461bcd60e51b8152600401610c0890613152565b6009546001600160a01b03908116908316036113a95760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610c08565b6113b382826127d0565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b336000908152602081815260408083206001600160a01b03861684529091528120548281101561146f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610c08565b61147c3385858403611a9f565b5060019392505050565b6000610bd4338484611bc2565b6005546001600160a01b031633146114bd5760405162461bcd60e51b8152600401610c0890613152565b6001600160a01b038216600081815260156020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146115465760405162461bcd60e51b8152600401610c0890613152565b670de0b6b3a76400006103e861155b60025490565b6115669060036131b0565b61157091906131c7565b61157a91906131c7565b8110156115de5760405162461bcd60e51b815260206004820152602c60248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f7760448201526b6572207468616e20302e332560a01b6064820152608401610c08565b6115f081670de0b6b3a76400006131b0565b60198190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc90602001610ed8565b6005546001600160a01b0316331461164f5760405162461bcd60e51b8152600401610c0890613152565b6001600160a01b03166000908152600b60205260409020805460ff19169055565b6005546001600160a01b0316331461169a5760405162461bcd60e51b8152600401610c0890613152565b6103e86116a660025490565b6116b19060016131b0565b6116bb91906131c7565b8111156117275760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171892903a37ba30b61039bab838363c9760611b6064820152608401610c08565b620186a061173460025490565b61173f9060016131b0565b61174991906131c7565b8110156117b65760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610c08565b600d55565b306117c58161106b565b600d5411156117d357600080fd5b6117de8484846127fe565b15610c8457600e805460ff191660011790556117f86128a5565b600e805460ff1916905550505050565b6005546001600160a01b031633146118325760405162461bcd60e51b8152600401610c0890613152565b670de0b6b3a76400006103e861184760025490565b6118529060026131b0565b61185c91906131c7565b61186691906131c7565b8110156118c85760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e322560b01b6064820152608401610c08565b6118da81670de0b6b3a76400006131b0565b60188190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e90602001610ed8565b6005546001600160a01b031633146119395760405162461bcd60e51b8152600401610c0890613152565b604051600090339047908381818185875af1925050503d8060008114610c84576040519150601f19603f3d011682016040523d82523d6000602084013e610c84565b6005546001600160a01b031633146119a55760405162461bcd60e51b8152600401610c0890613152565b6013805463ff00000019169055565b6005546001600160a01b031633146119de5760405162461bcd60e51b8152600401610c0890613152565b6001600160a01b038116611a435760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c08565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038316611b015760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610c08565b6001600160a01b038216611b625760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610c08565b6001600160a01b038381166000818152602081815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b038316611be85760405162461bcd60e51b8152600401610c08906131e9565b6001600160a01b038216611c0e5760405162461bcd60e51b8152600401610c089061322e565b60008111611c5e5760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610c08565b6001600160a01b0382166000908152600c60205260408120541590611c828461106b565b6013549015915062010000900460ff16611d1a576001600160a01b03851660009081526015602052604090205460ff1680611cd557506001600160a01b03841660009081526015602052604090205460ff165b611d1a5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610c08565b6001600160a01b038516600090815260146020526040902054600f54429160ff169015611de3576001600160a01b0387166000908152600b602052604090205460ff161580611d7657506005546001600160a01b038781169116145b80611d8b57506001600160a01b03861661dead145b611de35760405162461bcd60e51b815260206004820152602360248201527f626f742070726f74656374696f6e206d656368616e69736d20697320656d626560448201526219195960ea1b6064820152608401610c08565b60135460ff161561227357600e5460ff1615611e076005546001600160a01b031690565b6001600160a01b0316886001600160a01b031614158015611e3657506005546001600160a01b03888116911614155b8015611e4a57506001600160a01b03871615155b8015611e6157506001600160a01b03871661dead14155b8015611e8657506001600160a01b03881660009081526015602052604090205460ff16155b8015611eab57506001600160a01b03871660009081526015602052604090205460ff16155b15612010576013546301000000900460ff1615612010576001600160a01b03808916600090815260146020526040902054600e5460085460ff92831615939190921615918a8216911614801590611f1057506009546001600160a01b038a8116911614155b15611fd357611f20600243613271565b326000908152600a6020526040902054108015611f5e5750611f43600243613271565b6001600160a01b038a166000908152600a6020526040902054105b611faa5760405162461bcd60e51b815260206004820152601d60248201527f5f7472616e736665723a2064656c61792077617320656e61626c65642e0000006044820152606401610c08565b326000908152600a602052604080822043908190556001600160a01b038c16835291205561200d565b818015611fdd5750805b1561200d576001600160a01b038a166000908152600c602052604090205460115481118061200a57600080fd5b50505b50505b6001600160a01b03881660009081526016602090815260408083205460149092529091205460ff9182169116801561206157506001600160a01b03881660009081526016602052604090205460ff16155b1561212d576017548711156120c95760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610c08565b6019546120d58961106b565b6120df908961319d565b11156121285760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08115e18d95959081b585e081dd85b1b195d60421b6044820152606401610c08565b612270565b8080156121375750815b15612146576011849055612270565b6001600160a01b03881660009081526014602052604090205460ff16801561218757506001600160a01b03891660009081526016602052604090205460ff16155b156121f1576018548711156121285760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610c08565b6001600160a01b03881660009081526016602052604090205460ff166122705760195461221d8961106b565b612227908961319d565b11156122705760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08115e18d95959081b585e081dd85b1b195d60421b6044820152606401610c08565b50505b600061227e3061106b565b600d549091508110801590819061229c5750601354610100900460ff165b80156122ab5750600e5460ff16155b80156122d057506001600160a01b03891660009081526014602052604090205460ff16155b80156122f557506001600160a01b03891660009081526015602052604090205460ff16155b801561231a57506001600160a01b03881660009081526015602052604090205460ff16155b1561233f57600e805460ff191660011790556123346128a5565b600e805460ff191690555b600186801561234b5750835b80156123545750855b15612375576001600160a01b0389166000908152600c602052604090208590555b6001600160a01b038a1660009081526015602052604090205460ff16806123b457506001600160a01b03891660009081526015602052604090205460ff165b156123bd575060005b600081156127b857600f54431080156123ee57506001600160a01b038b1660009081526014602052604090205460ff165b801561241357506001600160a01b038a1660009081526014602052604090205460ff16155b801561242157506000601e54115b156125a1576001600160a01b038a166000908152600b602052604090205460ff166124c1576001600160a01b038a166000908152600b60205260408120805460ff19166001908117909155601280549192909161247f90849061319d565b90915550506040516001600160a01b038b1681527f3d71e4a70676213519dc777e6e5b0ac4d021b9d144b673b89d0df519a879a83e9060200160405180910390a15b60646124ce8a60636131b0565b6124d891906131c7565b9050601e54602154826124eb91906131b0565b6124f591906131c7565b601c6000828254612506919061319d565b9091555050601e54601f5461251b90836131b0565b61252591906131c7565b601a6000828254612536919061319d565b9091555050601e5460205461254b90836131b0565b61255591906131c7565b601b6000828254612566919061319d565b9091555050601e5460225461257b90836131b0565b61258591906131c7565b601d6000828254612596919061319d565b9091555061279a9050565b6001600160a01b038a1660009081526014602052604090205460ff1680156125cb57506000602354115b1561268d5760646023548a6125e091906131b0565b6125ea91906131c7565b9050602354602654826125fd91906131b0565b61260791906131c7565b601c6000828254612618919061319d565b909155505060235460245461262d90836131b0565b61263791906131c7565b601a6000828254612648919061319d565b909155505060235460255461265d90836131b0565b61266791906131c7565b601b6000828254612678919061319d565b909155505060235460275461257b90836131b0565b6001600160a01b038b1660009081526014602052604090205460ff1680156126b757506000601e54115b1561279a576064601e548a6126cc91906131b0565b6126d691906131c7565b9050601e54602154826126e991906131b0565b6126f391906131c7565b601c6000828254612704919061319d565b9091555050601e54601f5461271990836131b0565b61272391906131c7565b601a6000828254612734919061319d565b9091555050601e5460205461274990836131b0565b61275391906131c7565b601b6000828254612764919061319d565b9091555050601e5460225461277990836131b0565b61278391906131c7565b601d6000828254612794919061319d565b90915550505b80156127ab576127ab8b3083612aad565b6127b5818a613271565b98505b6127c38b8b8b612aad565b5050505050505050505050565b6001600160a01b0382166000908152601460205260409020805460ff19168215151790556113b38282612c02565b336000818152601560205260408120549091309160ff16838161286257601d548015159060009061282e8761106b565b1015905081801561283c5750805b1561284d5761284d85601d54612c65565b50506000601d555060019350610dcf92505050565b600061286d8561106b565b111561289a578615801561288957601187905560009150612898565b6128938989612c65565b600091505b505b9350610dcf92505050565b6000601d541180156128c15750601d546128be3061106b565b10155b156128d2576128d230601d54612c65565b6000601d8190556128e23061106b565b90506000601b54601a54601c546128f9919061319d565b612903919061319d565b9050811580612910575080155b15612919575050565b600d5461292790600a6131b0565b82111561293f57600d5461293c90600a6131b0565b91505b6000600282601c548561295291906131b0565b61295c91906131c7565b61296691906131c7565b905061297a6129758285613271565b612d30565b601c5447908190600090612990906002906131c7565b61299a9086613271565b601a546129a790856131b0565b6129b191906131c7565b905060006002601c546129c491906131c7565b6129ce9087613271565b601b546129db90866131b0565b6129e591906131c7565b90506129f1818361319d565b6129fb9084613271565b6000601c819055601a819055601b819055601d5592508415801590612a205750600083115b15612a2f57612a2f8584612e8a565b6007546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015612a69573d6000803e3d6000fd5b506006546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015612aa3573d6000803e3d6000fd5b5050505050505050565b6001600160a01b038316612ad35760405162461bcd60e51b8152600401610c08906131e9565b6001600160a01b038216612af95760405162461bcd60e51b8152600401610c089061322e565b6001600160a01b03831660009081526001602052604090205481811015612b715760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610c08565b6001600160a01b03808516600090815260016020526040808220858503905591851681529081208054849290612ba890849061319d565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612bf491815260200190565b60405180910390a350505050565b6001600160a01b038216600081815260166020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6001600160a01b038216612c955760405162461bcd60e51b81526020600482015260006024820152604401610c08565b6001600160a01b03821660009081526001602052604090205481811015612cd85760405162461bcd60e51b81526020600482015260006024820152604401610c08565b6001600160a01b03831660008181526001602090815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101611bb5565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612d6557612d65613284565b6001600160a01b03928316602091820292909201810191909152600854604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612dbe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612de2919061329a565b81600181518110612df557612df5613284565b6001600160a01b039283166020918202929092010152600854612e1b9130911684611a9f565b60085460405163791ac94760e01b81526001600160a01b039091169063791ac94790612e549085906000908690309042906004016132b7565b600060405180830381600087803b158015612e6e57600080fd5b505af1158015612e82573d6000803e3d6000fd5b505050505050565b600854612ea29030906001600160a01b031684611a9f565b60085460405163f305d71960e01b815230600482015260248101849052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af1158015612f10573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612f359190613328565b5050505050565b600060208083528351808285015260005b81811015612f6957858101830151858201604001528201612f4d565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114612f9f57600080fd5b50565b60008060408385031215612fb557600080fd5b8235612fc081612f8a565b946020939093013593505050565b60008060008060808587031215612fe457600080fd5b5050823594602084013594506040840135936060013592509050565b60006020828403121561301257600080fd5b8135610dcf81612f8a565b60008060006060848603121561303257600080fd5b833561303d81612f8a565b9250602084013561304d81612f8a565b929592945050506040919091013590565b60006020828403121561307057600080fd5b5035919050565b6000806040838503121561308a57600080fd5b823561309581612f8a565b9150602083013580151581146130aa57600080fd5b809150509250929050565b6000806000606084860312156130ca57600080fd5b83356130d581612f8a565b95602085013595506040909401359392505050565b600080604083850312156130fd57600080fd5b823561310881612f8a565b915060208301356130aa81612f8a565b600181811c9082168061312c57607f821691505b60208210810361314c57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b80820180821115610bd857610bd8613187565b8082028115828204841417610bd857610bd8613187565b6000826131e457634e487b7160e01b600052601260045260246000fd5b500490565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610bd857610bd8613187565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156132ac57600080fd5b8151610dcf81612f8a565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156133075784516001600160a01b0316835293830193918301916001016132e2565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561333d57600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220f72be870e4a118ebdfc5be4b8d36198a46a0e6bac807d6c45610233003fb165664736f6c634300081200334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65728be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0

Deployed Bytecode

0x6080604052600436106103c75760003560e01c80638da5cb5b116101f2578063c5b45ec01161010d578063dd62ed3e116100a0578063e884f2601161006f578063e884f26014610ad4578063e8d842b414610ae9578063f2fde38b14610aff578063fd35d1d614610b1f57600080fd5b8063dd62ed3e14610a4f578063e086e5ec14610a93578063e2f4560514610aa8578063e611bfdb14610abe57600080fd5b8063d257b34f116100dc578063d257b34f146109d9578063d4384318146109f9578063d4e703d914610a0f578063dc3f0d0f14610a2f57600080fd5b8063c5b45ec01461096c578063c876d0b91461098c578063cd51e6d4146109ad578063d0a39814146109c357600080fd5b8063aa4bde2811610185578063bbc0c74211610154578063bbc0c742146108dc578063c0246668146108fc578063c18bc1951461091c578063c424134c1461093c57600080fd5b8063aa4bde2814610883578063abe43b1b14610899578063aef1f11f146108b0578063b9e93700146108c657600080fd5b80639fccce32116101c15780639fccce32146108175780639fd792b31461082d578063a457c2d714610843578063a9059cbb1461086357600080fd5b80638da5cb5b14610797578063933070a9146107b557806395d89b41146107e25780639a7a23d6146107f757600080fd5b80635351a5d9116102e2578063715018a61161027557806376c702bf1161024457806376c702bf14610740578063868f0a741461075657806388e765ff1461076c5780638a8c523c1461078257600080fd5b8063715018a6146106e0578063737952e6146106f5578063751039fc1461070b5780637571336a1461072057600080fd5b80636b0a894c116102b15780636b0a894c1461066b5780636c5b2855146106815780636ddd1713146106a157806370a08231146106c057600080fd5b80635351a5d9146105d557806359d24b8e146106055780635d098b381461063557806366d602ae1461065557600080fd5b8063234282d31161035a57806339509351116103295780633950935114610565578063437764991461058557806349bd5a5e1461059b5780634a62bb65146105bb57600080fd5b8063234282d3146104f357806323b872dd146105095780632be32b6114610529578063313ce5671461054957600080fd5b806318160ddd1161039657806318160ddd146104885780631a8145bb146104a75780631f3fed8f146104bd5780631f53ac02146104d357600080fd5b806306fdde03146103d3578063095ea7b3146103fe5780631694505e1461042e578063178d9b8e1461046657600080fd5b366103ce57005b600080fd5b3480156103df57600080fd5b506103e8610b35565b6040516103f59190612f3c565b60405180910390f35b34801561040a57600080fd5b5061041e610419366004612fa2565b610bc7565b60405190151581526020016103f5565b34801561043a57600080fd5b5060085461044e906001600160a01b031681565b6040516001600160a01b0390911681526020016103f5565b34801561047257600080fd5b50610486610481366004612fce565b610bde565b005b34801561049457600080fd5b506002545b6040519081526020016103f5565b3480156104b357600080fd5b50610499601c5481565b3480156104c957600080fd5b50610499601a5481565b3480156104df57600080fd5b506104866104ee366004613000565b610c8a565b3480156104ff57600080fd5b5061049960115481565b34801561051557600080fd5b5061041e61052436600461301d565b610d2c565b34801561053557600080fd5b5061048661054436600461305e565b610dd6565b34801561055557600080fd5b50604051601281526020016103f5565b34801561057157600080fd5b5061041e610580366004612fa2565b610ee3565b34801561059157600080fd5b5061049960205481565b3480156105a757600080fd5b5060095461044e906001600160a01b031681565b3480156105c757600080fd5b5060135461041e9060ff1681565b3480156105e157600080fd5b5061041e6105f0366004613000565b60146020526000908152604090205460ff1681565b34801561061157600080fd5b5061041e610620366004613000565b600b6020526000908152604090205460ff1681565b34801561064157600080fd5b50610486610650366004613000565b610f1d565b34801561066157600080fd5b5061049960185481565b34801561067757600080fd5b5061049960125481565b34801561068d57600080fd5b5061048661069c366004612fce565b610fcb565b3480156106ad57600080fd5b5060135461041e90610100900460ff1681565b3480156106cc57600080fd5b506104996106db366004613000565b61106b565b3480156106ec57600080fd5b50610486611086565b34801561070157600080fd5b5061049960245481565b34801561071757600080fd5b506104866110fa565b34801561072c57600080fd5b5061048661073b366004613077565b611161565b34801561074c57600080fd5b50610499601f5481565b34801561076257600080fd5b5061049960255481565b34801561077857600080fd5b5061049960175481565b34801561078e57600080fd5b50610486611229565b3480156107a357600080fd5b506005546001600160a01b031661044e565b3480156107c157600080fd5b506104996107d0366004613000565b600c6020526000908152604090205481565b3480156107ee57600080fd5b506103e86112ec565b34801561080357600080fd5b50610486610812366004613077565b6112fb565b34801561082357600080fd5b50610499601b5481565b34801561083957600080fd5b50610499601d5481565b34801561084f57600080fd5b5061041e61085e366004612fa2565b6113ef565b34801561086f57600080fd5b5061041e61087e366004612fa2565b611486565b34801561088f57600080fd5b5061049960195481565b3480156108a557600080fd5b50600f54431061041e565b3480156108bc57600080fd5b5061049960275481565b3480156108d257600080fd5b50610499601e5481565b3480156108e857600080fd5b5060135461041e9062010000900460ff1681565b34801561090857600080fd5b50610486610917366004613077565b611493565b34801561092857600080fd5b5061048661093736600461305e565b61151c565b34801561094857600080fd5b5061041e610957366004613000565b60166020526000908152604090205460ff1681565b34801561097857600080fd5b50610486610987366004613000565b611625565b34801561099857600080fd5b5060135461041e906301000000900460ff1681565b3480156109b957600080fd5b5061049960105481565b3480156109cf57600080fd5b5061049960235481565b3480156109e557600080fd5b506104866109f436600461305e565b611670565b348015610a0557600080fd5b5061049960265481565b348015610a1b57600080fd5b50610486610a2a3660046130b5565b6117bb565b348015610a3b57600080fd5b50610486610a4a36600461305e565b611808565b348015610a5b57600080fd5b50610499610a6a3660046130ea565b6001600160a01b0391821660009081526020818152604080832093909416825291909152205490565b348015610a9f57600080fd5b5061048661190f565b348015610ab457600080fd5b50610499600d5481565b348015610aca57600080fd5b50610499600f5481565b348015610ae057600080fd5b5061048661197b565b348015610af557600080fd5b5061049960225481565b348015610b0b57600080fd5b50610486610b1a366004613000565b6119b4565b348015610b2b57600080fd5b5061049960215481565b606060048054610b4490613118565b80601f0160208091040260200160405190810160405280929190818152602001828054610b7090613118565b8015610bbd5780601f10610b9257610100808354040283529160200191610bbd565b820191906000526020600020905b815481529060010190602001808311610ba057829003601f168201915b5050505050905090565b6000610bd4338484611a9f565b5060015b92915050565b6005546001600160a01b03163314610c115760405162461bcd60e51b8152600401610c0890613152565b60405180910390fd5b6021839055601f849055602082905560228190558082610c31858761319d565b610c3b919061319d565b610c45919061319d565b601e81905560031015610c845760405162461bcd60e51b8152602060048201526007602482015266019929036b0bc160cd1b6044820152606401610c08565b50505050565b6005546001600160a01b03163314610cb45760405162461bcd60e51b8152600401610c0890613152565b6001600160a01b038116610d0a5760405162461bcd60e51b815260206004820152601e60248201527f5f64657657616c6c657420616464726573732063616e6e6f74206265203000006044820152606401610c08565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b6000610d39848484611bc2565b6001600160a01b03841660009081526020818152604080832033845290915290205482811015610dbc5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610c08565b610dc98533858403611a9f565b60019150505b9392505050565b6005546001600160a01b03163314610e005760405162461bcd60e51b8152600401610c0890613152565b670de0b6b3a76400006103e8610e1560025490565b610e209060026131b0565b610e2a91906131c7565b610e3491906131c7565b811015610e955760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152687468616e20302e322560b81b6064820152608401610c08565b610ea781670de0b6b3a76400006131b0565b60178190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de41009906020015b60405180910390a150565b336000818152602081815260408083206001600160a01b03871684529091528120549091610bd4918590610f1890869061319d565b611a9f565b6005546001600160a01b03163314610f475760405162461bcd60e51b8152600401610c0890613152565b6001600160a01b038116610fa95760405162461bcd60e51b8152602060048201526024808201527f5f6d61726b6574696e6757616c6c657420616464726573732063616e6e6f74206044820152630626520360e41b6064820152608401610c08565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314610ff55760405162461bcd60e51b8152600401610c0890613152565b60268390556024849055602582905560278190558082611015858761319d565b61101f919061319d565b611029919061319d565b602381905560031015610c845760405162461bcd60e51b815260206004820152600a6024820152693325206d61782066656560b01b6044820152606401610c08565b6001600160a01b031660009081526001602052604090205490565b6005546001600160a01b031633146110b05760405162461bcd60e51b8152600401610c0890613152565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146111245760405162461bcd60e51b8152600401610c0890613152565b6002546018556002546017556002546019556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6005546001600160a01b0316331461118b5760405162461bcd60e51b8152600401610c0890613152565b806111fe576009546001600160a01b03908116908316036111fe5760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610c08565b6001600160a01b03919091166000908152601660205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146112535760405162461bcd60e51b8152600401610c0890613152565b60135462010000900460ff16156112ac5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610c08565b6013805462ffff00191662010100179055436010556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a1565b606060038054610b4490613118565b6005546001600160a01b031633146113255760405162461bcd60e51b8152600401610c0890613152565b6009546001600160a01b03908116908316036113a95760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610c08565b6113b382826127d0565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b336000908152602081815260408083206001600160a01b03861684529091528120548281101561146f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610c08565b61147c3385858403611a9f565b5060019392505050565b6000610bd4338484611bc2565b6005546001600160a01b031633146114bd5760405162461bcd60e51b8152600401610c0890613152565b6001600160a01b038216600081815260156020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146115465760405162461bcd60e51b8152600401610c0890613152565b670de0b6b3a76400006103e861155b60025490565b6115669060036131b0565b61157091906131c7565b61157a91906131c7565b8110156115de5760405162461bcd60e51b815260206004820152602c60248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f7760448201526b6572207468616e20302e332560a01b6064820152608401610c08565b6115f081670de0b6b3a76400006131b0565b60198190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc90602001610ed8565b6005546001600160a01b0316331461164f5760405162461bcd60e51b8152600401610c0890613152565b6001600160a01b03166000908152600b60205260409020805460ff19169055565b6005546001600160a01b0316331461169a5760405162461bcd60e51b8152600401610c0890613152565b6103e86116a660025490565b6116b19060016131b0565b6116bb91906131c7565b8111156117275760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171892903a37ba30b61039bab838363c9760611b6064820152608401610c08565b620186a061173460025490565b61173f9060016131b0565b61174991906131c7565b8110156117b65760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610c08565b600d55565b306117c58161106b565b600d5411156117d357600080fd5b6117de8484846127fe565b15610c8457600e805460ff191660011790556117f86128a5565b600e805460ff1916905550505050565b6005546001600160a01b031633146118325760405162461bcd60e51b8152600401610c0890613152565b670de0b6b3a76400006103e861184760025490565b6118529060026131b0565b61185c91906131c7565b61186691906131c7565b8110156118c85760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e322560b01b6064820152608401610c08565b6118da81670de0b6b3a76400006131b0565b60188190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e90602001610ed8565b6005546001600160a01b031633146119395760405162461bcd60e51b8152600401610c0890613152565b604051600090339047908381818185875af1925050503d8060008114610c84576040519150601f19603f3d011682016040523d82523d6000602084013e610c84565b6005546001600160a01b031633146119a55760405162461bcd60e51b8152600401610c0890613152565b6013805463ff00000019169055565b6005546001600160a01b031633146119de5760405162461bcd60e51b8152600401610c0890613152565b6001600160a01b038116611a435760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c08565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038316611b015760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610c08565b6001600160a01b038216611b625760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610c08565b6001600160a01b038381166000818152602081815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b038316611be85760405162461bcd60e51b8152600401610c08906131e9565b6001600160a01b038216611c0e5760405162461bcd60e51b8152600401610c089061322e565b60008111611c5e5760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610c08565b6001600160a01b0382166000908152600c60205260408120541590611c828461106b565b6013549015915062010000900460ff16611d1a576001600160a01b03851660009081526015602052604090205460ff1680611cd557506001600160a01b03841660009081526015602052604090205460ff165b611d1a5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610c08565b6001600160a01b038516600090815260146020526040902054600f54429160ff169015611de3576001600160a01b0387166000908152600b602052604090205460ff161580611d7657506005546001600160a01b038781169116145b80611d8b57506001600160a01b03861661dead145b611de35760405162461bcd60e51b815260206004820152602360248201527f626f742070726f74656374696f6e206d656368616e69736d20697320656d626560448201526219195960ea1b6064820152608401610c08565b60135460ff161561227357600e5460ff1615611e076005546001600160a01b031690565b6001600160a01b0316886001600160a01b031614158015611e3657506005546001600160a01b03888116911614155b8015611e4a57506001600160a01b03871615155b8015611e6157506001600160a01b03871661dead14155b8015611e8657506001600160a01b03881660009081526015602052604090205460ff16155b8015611eab57506001600160a01b03871660009081526015602052604090205460ff16155b15612010576013546301000000900460ff1615612010576001600160a01b03808916600090815260146020526040902054600e5460085460ff92831615939190921615918a8216911614801590611f1057506009546001600160a01b038a8116911614155b15611fd357611f20600243613271565b326000908152600a6020526040902054108015611f5e5750611f43600243613271565b6001600160a01b038a166000908152600a6020526040902054105b611faa5760405162461bcd60e51b815260206004820152601d60248201527f5f7472616e736665723a2064656c61792077617320656e61626c65642e0000006044820152606401610c08565b326000908152600a602052604080822043908190556001600160a01b038c16835291205561200d565b818015611fdd5750805b1561200d576001600160a01b038a166000908152600c602052604090205460115481118061200a57600080fd5b50505b50505b6001600160a01b03881660009081526016602090815260408083205460149092529091205460ff9182169116801561206157506001600160a01b03881660009081526016602052604090205460ff16155b1561212d576017548711156120c95760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610c08565b6019546120d58961106b565b6120df908961319d565b11156121285760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08115e18d95959081b585e081dd85b1b195d60421b6044820152606401610c08565b612270565b8080156121375750815b15612146576011849055612270565b6001600160a01b03881660009081526014602052604090205460ff16801561218757506001600160a01b03891660009081526016602052604090205460ff16155b156121f1576018548711156121285760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610c08565b6001600160a01b03881660009081526016602052604090205460ff166122705760195461221d8961106b565b612227908961319d565b11156122705760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08115e18d95959081b585e081dd85b1b195d60421b6044820152606401610c08565b50505b600061227e3061106b565b600d549091508110801590819061229c5750601354610100900460ff165b80156122ab5750600e5460ff16155b80156122d057506001600160a01b03891660009081526014602052604090205460ff16155b80156122f557506001600160a01b03891660009081526015602052604090205460ff16155b801561231a57506001600160a01b03881660009081526015602052604090205460ff16155b1561233f57600e805460ff191660011790556123346128a5565b600e805460ff191690555b600186801561234b5750835b80156123545750855b15612375576001600160a01b0389166000908152600c602052604090208590555b6001600160a01b038a1660009081526015602052604090205460ff16806123b457506001600160a01b03891660009081526015602052604090205460ff165b156123bd575060005b600081156127b857600f54431080156123ee57506001600160a01b038b1660009081526014602052604090205460ff165b801561241357506001600160a01b038a1660009081526014602052604090205460ff16155b801561242157506000601e54115b156125a1576001600160a01b038a166000908152600b602052604090205460ff166124c1576001600160a01b038a166000908152600b60205260408120805460ff19166001908117909155601280549192909161247f90849061319d565b90915550506040516001600160a01b038b1681527f3d71e4a70676213519dc777e6e5b0ac4d021b9d144b673b89d0df519a879a83e9060200160405180910390a15b60646124ce8a60636131b0565b6124d891906131c7565b9050601e54602154826124eb91906131b0565b6124f591906131c7565b601c6000828254612506919061319d565b9091555050601e54601f5461251b90836131b0565b61252591906131c7565b601a6000828254612536919061319d565b9091555050601e5460205461254b90836131b0565b61255591906131c7565b601b6000828254612566919061319d565b9091555050601e5460225461257b90836131b0565b61258591906131c7565b601d6000828254612596919061319d565b9091555061279a9050565b6001600160a01b038a1660009081526014602052604090205460ff1680156125cb57506000602354115b1561268d5760646023548a6125e091906131b0565b6125ea91906131c7565b9050602354602654826125fd91906131b0565b61260791906131c7565b601c6000828254612618919061319d565b909155505060235460245461262d90836131b0565b61263791906131c7565b601a6000828254612648919061319d565b909155505060235460255461265d90836131b0565b61266791906131c7565b601b6000828254612678919061319d565b909155505060235460275461257b90836131b0565b6001600160a01b038b1660009081526014602052604090205460ff1680156126b757506000601e54115b1561279a576064601e548a6126cc91906131b0565b6126d691906131c7565b9050601e54602154826126e991906131b0565b6126f391906131c7565b601c6000828254612704919061319d565b9091555050601e54601f5461271990836131b0565b61272391906131c7565b601a6000828254612734919061319d565b9091555050601e5460205461274990836131b0565b61275391906131c7565b601b6000828254612764919061319d565b9091555050601e5460225461277990836131b0565b61278391906131c7565b601d6000828254612794919061319d565b90915550505b80156127ab576127ab8b3083612aad565b6127b5818a613271565b98505b6127c38b8b8b612aad565b5050505050505050505050565b6001600160a01b0382166000908152601460205260409020805460ff19168215151790556113b38282612c02565b336000818152601560205260408120549091309160ff16838161286257601d548015159060009061282e8761106b565b1015905081801561283c5750805b1561284d5761284d85601d54612c65565b50506000601d555060019350610dcf92505050565b600061286d8561106b565b111561289a578615801561288957601187905560009150612898565b6128938989612c65565b600091505b505b9350610dcf92505050565b6000601d541180156128c15750601d546128be3061106b565b10155b156128d2576128d230601d54612c65565b6000601d8190556128e23061106b565b90506000601b54601a54601c546128f9919061319d565b612903919061319d565b9050811580612910575080155b15612919575050565b600d5461292790600a6131b0565b82111561293f57600d5461293c90600a6131b0565b91505b6000600282601c548561295291906131b0565b61295c91906131c7565b61296691906131c7565b905061297a6129758285613271565b612d30565b601c5447908190600090612990906002906131c7565b61299a9086613271565b601a546129a790856131b0565b6129b191906131c7565b905060006002601c546129c491906131c7565b6129ce9087613271565b601b546129db90866131b0565b6129e591906131c7565b90506129f1818361319d565b6129fb9084613271565b6000601c819055601a819055601b819055601d5592508415801590612a205750600083115b15612a2f57612a2f8584612e8a565b6007546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015612a69573d6000803e3d6000fd5b506006546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015612aa3573d6000803e3d6000fd5b5050505050505050565b6001600160a01b038316612ad35760405162461bcd60e51b8152600401610c08906131e9565b6001600160a01b038216612af95760405162461bcd60e51b8152600401610c089061322e565b6001600160a01b03831660009081526001602052604090205481811015612b715760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610c08565b6001600160a01b03808516600090815260016020526040808220858503905591851681529081208054849290612ba890849061319d565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612bf491815260200190565b60405180910390a350505050565b6001600160a01b038216600081815260166020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6001600160a01b038216612c955760405162461bcd60e51b81526020600482015260006024820152604401610c08565b6001600160a01b03821660009081526001602052604090205481811015612cd85760405162461bcd60e51b81526020600482015260006024820152604401610c08565b6001600160a01b03831660008181526001602090815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101611bb5565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612d6557612d65613284565b6001600160a01b03928316602091820292909201810191909152600854604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612dbe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612de2919061329a565b81600181518110612df557612df5613284565b6001600160a01b039283166020918202929092010152600854612e1b9130911684611a9f565b60085460405163791ac94760e01b81526001600160a01b039091169063791ac94790612e549085906000908690309042906004016132b7565b600060405180830381600087803b158015612e6e57600080fd5b505af1158015612e82573d6000803e3d6000fd5b505050505050565b600854612ea29030906001600160a01b031684611a9f565b60085460405163f305d71960e01b815230600482015260248101849052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af1158015612f10573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612f359190613328565b5050505050565b600060208083528351808285015260005b81811015612f6957858101830151858201604001528201612f4d565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114612f9f57600080fd5b50565b60008060408385031215612fb557600080fd5b8235612fc081612f8a565b946020939093013593505050565b60008060008060808587031215612fe457600080fd5b5050823594602084013594506040840135936060013592509050565b60006020828403121561301257600080fd5b8135610dcf81612f8a565b60008060006060848603121561303257600080fd5b833561303d81612f8a565b9250602084013561304d81612f8a565b929592945050506040919091013590565b60006020828403121561307057600080fd5b5035919050565b6000806040838503121561308a57600080fd5b823561309581612f8a565b9150602083013580151581146130aa57600080fd5b809150509250929050565b6000806000606084860312156130ca57600080fd5b83356130d581612f8a565b95602085013595506040909401359392505050565b600080604083850312156130fd57600080fd5b823561310881612f8a565b915060208301356130aa81612f8a565b600181811c9082168061312c57607f821691505b60208210810361314c57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b80820180821115610bd857610bd8613187565b8082028115828204841417610bd857610bd8613187565b6000826131e457634e487b7160e01b600052601260045260246000fd5b500490565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610bd857610bd8613187565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156132ac57600080fd5b8151610dcf81612f8a565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156133075784516001600160a01b0316835293830193918301916001016132e2565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561333d57600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220f72be870e4a118ebdfc5be4b8d36198a46a0e6bac807d6c45610233003fb165664736f6c63430008120033

Deployed Bytecode Sourcemap

8100:19874:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3956:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4616:194;;;;;;;;;;-1:-1:-1;4616:194:0;;;;;:::i;:::-;;:::i;:::-;;;1188:14:1;;1181:22;1163:41;;1151:2;1136:18;4616:194:0;1023:187:1;8212:38:0;;;;;;;;;;-1:-1:-1;8212:38:0;;;;-1:-1:-1;;;;;8212:38:0;;;;;;-1:-1:-1;;;;;1401:32:1;;;1383:51;;1371:2;1356:18;8212:38:0;1215:225:1;18394:527:0;;;;;;;;;;-1:-1:-1;18394:527:0;;;;;:::i;:::-;;:::i;:::-;;4064:108;;;;;;;;;;-1:-1:-1;4152:12:0;;4064:108;;;1981:25:1;;;1969:2;1954:18;4064:108:0;1835:177:1;9207:33:0;;;;;;;;;;;;;;;;9133;;;;;;;;;;;;;;;;18929:188;;;;;;;;;;-1:-1:-1;18929:188:0;;;;;:::i;:::-;;:::i;8628:22::-;;;;;;;;;;;;;;;;4818:529;;;;;;;;;;-1:-1:-1;4818:529:0;;;;;:::i;:::-;;:::i;15707:343::-;;;;;;;;;;-1:-1:-1;15707:343:0;;;;;:::i;:::-;;:::i;4180:93::-;;;;;;;;;;-1:-1:-1;4180:93:0;;4263:2;3057:36:1;;3045:2;3030:18;4180:93:0;2915:184:1;6466:290:0;;;;;;;;;;-1:-1:-1;6466:290:0;;;;;:::i;:::-;;:::i;9362:27::-;;;;;;;;;;;;;;;;8257:28;;;;;;;;;;-1:-1:-1;8257:28:0;;;;-1:-1:-1;;;;;8257:28:0;;;8689:33;;;;;;;;;;-1:-1:-1;8689:33:0;;;;;;;;8855:38;;;;;;;;;;-1:-1:-1;8855:38:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;8365:47;;;;;;;;;;-1:-1:-1;8365:47:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;19125:259;;;;;;;;;;-1:-1:-1;19125:259:0;;;;;:::i;:::-;;:::i;9059:28::-;;;;;;;;;;;;;;;;8657:25;;;;;;;;;;;;;;;;17473:541;;;;;;;;;;-1:-1:-1;17473:541:0;;;;;:::i;:::-;;:::i;8729:31::-;;;;;;;;;;-1:-1:-1;8729:31:0;;;;;;;;;;;4465:143;;;;;;;;;;-1:-1:-1;4465:143:0;;;;;:::i;:::-;;:::i;1920:150::-;;;;;;;;;;;;;:::i;9512:34::-;;;;;;;;;;;;;;;;13569:203;;;;;;;;;;;;;:::i;16433:366::-;;;;;;;;;;-1:-1:-1;16433:366:0;;;;;:::i;:::-;;:::i;9322:33::-;;;;;;;;;;;;;;;;9553:28;;;;;;;;;;;;;;;;9025:27;;;;;;;;;;;;;;;;12551:243;;;;;;;;;;;;;:::i;2205:79::-;;;;;;;;;;-1:-1:-1;2270:6:0;;-1:-1:-1;;;;;2270:6:0;2205:79;;8419:44;;;;;;;;;;-1:-1:-1;8419:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;3844:104;;;;;;;;;;;;;:::i;18022:364::-;;;;;;;;;;-1:-1:-1;18022:364:0;;;;;:::i;:::-;;:::i;9173:27::-;;;;;;;;;;;;;;;;9247:32;;;;;;;;;;;;;;;;5979:475;;;;;;;;;;-1:-1:-1;5979:475:0;;;;;:::i;:::-;;:::i;5359:200::-;;;;;;;;;;-1:-1:-1;5359:200:0;;;;;:::i;:::-;;:::i;9094:30::-;;;;;;;;;;;;;;;;20990:113;;;;;;;;;;-1:-1:-1;21081:14:0;;21066:12;:29;20990:113;;9629:33;;;;;;;;;;;;;;;;9288:27;;;;;;;;;;;;;;;;8767:33;;;;;;;;;;-1:-1:-1;8767:33:0;;;;;;;;;;;17052:184;;;;;;;;;;-1:-1:-1;17052:184:0;;;;;:::i;:::-;;:::i;16058:367::-;;;;;;;;;;-1:-1:-1;16058:367:0;;;;;:::i;:::-;;:::i;8959:57::-;;;;;;;;;;-1:-1:-1;8959:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;12328:109;;;;;;;;;;-1:-1:-1;12328:109:0;;;;;:::i;:::-;;:::i;8807:39::-;;;;;;;;;;-1:-1:-1;8807:39:0;;;;;;;;;;;8588:31;;;;;;;;;;;;;;;;9477:28;;;;;;;;;;;;;;;;14912:432;;;;;;;;;;-1:-1:-1;14912:432:0;;;;;:::i;:::-;;:::i;9588:34::-;;;;;;;;;;;;;;;;13179:382;;;;;;;;;;-1:-1:-1;13179:382:0;;;;;:::i;:::-;;:::i;15352:347::-;;;;;;;;;;-1:-1:-1;15352:347:0;;;;;:::i;:::-;;:::i;4281:176::-;;;;;;;;;;-1:-1:-1;4281:176:0;;;;;:::i;:::-;-1:-1:-1;;;;;4422:18:0;;;4395:7;4422:18;;;;;;;;;;;:27;;;;;;;;;;;;;4281:176;21628:156;;;;;;;;;;;;;:::i;8476:33::-;;;;;;;;;;;;;;;;8548;;;;;;;;;;;;;;;;12445:98;;;;;;;;;;;;;:::i;9436:32::-;;;;;;;;;;;;;;;;1631:281;;;;;;;;;;-1:-1:-1;1631:281:0;;;;;:::i;:::-;;:::i;9396:33::-;;;;;;;;;;;;;;;;3956:100;4010:13;4043:5;4036:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3956:100;:::o;4616:194::-;4724:4;4741:39;1255:10;4764:7;4773:6;4741:8;:39::i;:::-;-1:-1:-1;4798:4:0;4616:194;;;;;:::o;18394:527::-;2118:6;;-1:-1:-1;;;;;2118:6:0;1255:10;2118:22;2110:67;;;;-1:-1:-1;;;2110:67:0;;;;;;;:::i;:::-;;;;;;;;;18565:18:::1;:33:::0;;;18609:18:::1;:33:::0;;;18653:12:::1;:21:::0;;;18685:17:::1;:28:::0;;;18705:8;18668:6;18752:52:::1;18586:12:::0;18630;18752:52:::1;:::i;:::-;:80;;;;:::i;:::-;:113;;;;:::i;:::-;18724:12;:141:::0;;;18900:1:::1;-1:-1:-1::0;18884:17:0::1;18876:37;;;::::0;-1:-1:-1;;;18876:37:0;;5724:2:1;18876:37:0::1;::::0;::::1;5706:21:1::0;5763:1;5743:18;;;5736:29;-1:-1:-1;;;5781:18:1;;;5774:37;5828:18;;18876:37:0::1;5522:330:1::0;18876:37:0::1;18394:527:::0;;;;:::o;18929:188::-;2118:6;;-1:-1:-1;;;;;2118:6:0;1255:10;2118:22;2110:67;;;;-1:-1:-1;;;2110:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19008:23:0;::::1;19000:66;;;::::0;-1:-1:-1;;;19000:66:0;;6059:2:1;19000:66:0::1;::::0;::::1;6041:21:1::0;6098:2;6078:18;;;6071:30;6137:32;6117:18;;;6110:60;6187:18;;19000:66:0::1;5857:354:1::0;19000:66:0::1;19079:9;:30:::0;;-1:-1:-1;;;;;;19079:30:0::1;-1:-1:-1::0;;;;;19079:30:0;;;::::1;::::0;;;::::1;::::0;;18929:188::o;4818:529::-;4958:4;4975:36;4985:6;4993:9;5004:6;4975:9;:36::i;:::-;-1:-1:-1;;;;;5051:19:0;;5024:24;5051:19;;;;;;;;;;;1255:10;5051:33;;;;;;;;5117:26;;;;5095:116;;;;-1:-1:-1;;;5095:116:0;;6418:2:1;5095:116:0;;;6400:21:1;6457:2;6437:18;;;6430:30;6496:34;6476:18;;;6469:62;-1:-1:-1;;;6547:18:1;;;6540:38;6595:19;;5095:116:0;6216:404:1;5095:116:0;5247:57;5256:6;1255:10;5297:6;5278:16;:25;5247:8;:57::i;:::-;5335:4;5328:11;;;4818:529;;;;;;:::o;15707:343::-;2118:6;;-1:-1:-1;;;;;2118:6:0;1255:10;2118:22;2110:67;;;;-1:-1:-1;;;2110:67:0;;;;;;;:::i;:::-;15862:4:::1;15854;15833:13;4152:12:::0;;;4064:108;15833:13:::1;:17;::::0;15849:1:::1;15833:17;:::i;:::-;15832:26;;;;:::i;:::-;15831:35;;;;:::i;:::-;15812:15;:54;;15790:145;;;::::0;-1:-1:-1;;;15790:145:0;;7222:2:1;15790:145:0::1;::::0;::::1;7204:21:1::0;7261:2;7241:18;;;7234:30;7300:34;7280:18;;;7273:62;-1:-1:-1;;;7351:18:1;;;7344:39;7400:19;;15790:145:0::1;7020:405:1::0;15790:145:0::1;15963:28;:15:::0;15982:8:::1;15963:28;:::i;:::-;15948:12;:43:::0;;;16009:33:::1;::::0;1981:25:1;;;16009:33:0::1;::::0;1969:2:1;1954:18;16009:33:0::1;;;;;;;;15707:343:::0;:::o;6466:290::-;1255:10;6579:4;6668:25;;;;;;;;;;;-1:-1:-1;;;;;6668:34:0;;;;;;;;;;6579:4;;6596:130;;6646:7;;6668:47;;6705:10;;6668:47;:::i;:::-;6596:8;:130::i;19125:259::-;2118:6;;-1:-1:-1;;;;;2118:6:0;1255:10;2118:22;2110:67;;;;-1:-1:-1;;;2110:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19240:23:0;::::1;19218:109;;;::::0;-1:-1:-1;;;19218:109:0;;7632:2:1;19218:109:0::1;::::0;::::1;7614:21:1::0;7671:2;7651:18;;;7644:30;7710:34;7690:18;;;7683:62;-1:-1:-1;;;7761:18:1;;;7754:34;7805:19;;19218:109:0::1;7430:400:1::0;19218:109:0::1;19340:15;:36:::0;;-1:-1:-1;;;;;;19340:36:0::1;-1:-1:-1::0;;;;;19340:36:0;;;::::1;::::0;;;::::1;::::0;;19125:259::o;17473:541::-;2118:6;;-1:-1:-1;;;;;2118:6:0;1255:10;2118:22;2110:67;;;;-1:-1:-1;;;2110:67:0;;;;;;;:::i;:::-;17645:19:::1;:34:::0;;;17690:19:::1;:34:::0;;;17735:13:::1;:22:::0;;;17768:18:::1;:29:::0;;;17789:8;17751:6;17837:54:::1;17667:12:::0;17712;17837:54:::1;:::i;:::-;:83;;;;:::i;:::-;:117;;;;:::i;:::-;17808:13;:146:::0;;;17990:1:::1;-1:-1:-1::0;17973:18:0::1;17965:41;;;::::0;-1:-1:-1;;;17965:41:0;;8037:2:1;17965:41:0::1;::::0;::::1;8019:21:1::0;8076:2;8056:18;;;8049:30;-1:-1:-1;;;8095:18:1;;;8088:40;8145:18;;17965:41:0::1;7835:334:1::0;4465:143:0;-1:-1:-1;;;;;4582:18:0;4555:7;4582:18;;;:9;:18;;;;;;;4465:143::o;1920:150::-;2118:6;;-1:-1:-1;;;;;2118:6:0;1255:10;2118:22;2110:67;;;;-1:-1:-1;;;2110:67:0;;;;;;;:::i;:::-;2013:6:::1;::::0;1992:40:::1;::::0;2029:1:::1;::::0;-1:-1:-1;;;;;2013:6:0::1;::::0;1992:40:::1;::::0;2029:1;;1992:40:::1;2043:6;:19:::0;;-1:-1:-1;;;;;;2043:19:0::1;::::0;;1920:150::o;13569:203::-;2118:6;;-1:-1:-1;;;;;2118:6:0;1255:10;2118:22;2110:67;;;;-1:-1:-1;;;2110:67:0;;;;;;;:::i;:::-;4152:12;;13623:13:::1;:29:::0;4152:12;;13663::::1;:28:::0;4152:12;;13702:15:::1;:31:::0;13749:15:::1;::::0;::::1;::::0;;;::::1;13569:203::o:0;16433:366::-;2118:6;;-1:-1:-1;;;;;2118:6:0;1255:10;2118:22;2110:67;;;;-1:-1:-1;;;2110:67:0;;;;;;;:::i;:::-;16564:11:::1;16559:171;;16630:13;::::0;-1:-1:-1;;;;;16630:13:0;;::::1;16618:25:::0;;::::1;::::0;16592:126:::1;;;::::0;-1:-1:-1;;;16592:126:0;;8376:2:1;16592:126:0::1;::::0;::::1;8358:21:1::0;8415:2;8395:18;;;8388:30;8454:34;8434:18;;;8427:62;-1:-1:-1;;;8505:18:1;;;8498:37;8552:19;;16592:126:0::1;8174:403:1::0;16592:126:0::1;-1:-1:-1::0;;;;;16742:35:0;;;::::1;;::::0;;;:25:::1;:35;::::0;;;;:49;;-1:-1:-1;;16742:49:0::1;::::0;::::1;;::::0;;;::::1;::::0;;16433:366::o;12551:243::-;2118:6;;-1:-1:-1;;;;;2118:6:0;1255:10;2118:22;2110:67;;;;-1:-1:-1;;;2110:67:0;;;;;;;:::i;:::-;12615:13:::1;::::0;;;::::1;;;12614:14;12606:50;;;::::0;-1:-1:-1;;;12606:50:0;;8784:2:1;12606:50:0::1;::::0;::::1;8766:21:1::0;8823:2;8803:18;;;8796:30;8862:25;8842:18;;;8835:53;8905:18;;12606:50:0::1;8582:347:1::0;12606:50:0::1;12667:11;:18:::0;;-1:-1:-1;;12696:20:0;;;;;12742:12:::1;12727;:27:::0;12770:16:::1;::::0;::::1;::::0;-1:-1:-1;;12770:16:0::1;12551:243::o:0;3844:104::-;3900:13;3933:7;3926:14;;;;;:::i;18022:364::-;2118:6;;-1:-1:-1;;;;;2118:6:0;1255:10;2118:22;2110:67;;;;-1:-1:-1;;;2110:67:0;;;;;;;:::i;:::-;18170:13:::1;::::0;-1:-1:-1;;;;;18170:13:0;;::::1;18162:21:::0;;::::1;::::0;18140:128:::1;;;::::0;-1:-1:-1;;;18140:128:0;;9136:2:1;18140:128:0::1;::::0;::::1;9118:21:1::0;9175:2;9155:18;;;9148:30;9214:34;9194:18;;;9187:62;9285:27;9265:18;;;9258:55;9330:19;;18140:128:0::1;8934:421:1::0;18140:128:0::1;18281:41;18310:4;18316:5;18281:28;:41::i;:::-;18338:40;::::0;;::::1;;::::0;-1:-1:-1;;;;;18338:40:0;::::1;::::0;::::1;::::0;;;::::1;18022:364:::0;;:::o;5979:475::-;1255:10;6097:4;6141:25;;;;;;;;;;;-1:-1:-1;;;;;6141:34:0;;;;;;;;;;6208:35;;;;6186:122;;;;-1:-1:-1;;;6186:122:0;;9562:2:1;6186:122:0;;;9544:21:1;9601:2;9581:18;;;9574:30;9640:34;9620:18;;;9613:62;-1:-1:-1;;;9691:18:1;;;9684:35;9736:19;;6186:122:0;9360:401:1;6186:122:0;6344:67;1255:10;6367:7;6395:15;6376:16;:34;6344:8;:67::i;:::-;-1:-1:-1;6442:4:0;;5979:475;-1:-1:-1;;;5979:475:0:o;5359:200::-;5470:4;5487:42;1255:10;5511:9;5522:6;5487:9;:42::i;17052:184::-;2118:6;;-1:-1:-1;;;;;2118:6:0;1255:10;2118:22;2110:67;;;;-1:-1:-1;;;2110:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;17137:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;17137:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;17194:34;;1163:41:1;;;17194:34:0::1;::::0;1136:18:1;17194:34:0::1;;;;;;;17052:184:::0;;:::o;16058:367::-;2118:6;;-1:-1:-1;;;;;2118:6:0;1255:10;2118:22;2110:67;;;;-1:-1:-1;;;2110:67:0;;;;;;;:::i;:::-;16222:4:::1;16214;16193:13;4152:12:::0;;;4064:108;16193:13:::1;:17;::::0;16209:1:::1;16193:17;:::i;:::-;16192:26;;;;:::i;:::-;16191:35;;;;:::i;:::-;16169:18;:57;;16147:151;;;::::0;-1:-1:-1;;;16147:151:0;;9968:2:1;16147:151:0::1;::::0;::::1;9950:21:1::0;10007:2;9987:18;;;9980:30;10046:34;10026:18;;;10019:62;-1:-1:-1;;;10097:18:1;;;10090:42;10149:19;;16147:151:0::1;9766:408:1::0;16147:151:0::1;16329:31;:18:::0;16351:8:::1;16329:31;:::i;:::-;16311:15;:49:::0;;;16378:39:::1;::::0;1981:25:1;;;16378:39:0::1;::::0;1969:2:1;1954:18;16378:39:0::1;1835:177:1::0;12328:109:0;2118:6;;-1:-1:-1;;;;;2118:6:0;1255:10;2118:22;2110:67;;;;-1:-1:-1;;;2110:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;12398:23:0::1;12424:5;12398:23:::0;;;:15:::1;:23;::::0;;;;:31;;-1:-1:-1;;12398:31:0::1;::::0;;12328:109::o;14912:432::-;2118:6;;-1:-1:-1;;;;;2118:6:0;1255:10;2118:22;2110:67;;;;-1:-1:-1;;;2110:67:0;;;;;;;:::i;:::-;15052:4:::1;15031:13;4152:12:::0;;;4064:108;15031:13:::1;:17;::::0;15047:1:::1;15031:17;:::i;:::-;15030:26;;;;:::i;:::-;15017:9;:39;;14995:141;;;::::0;-1:-1:-1;;;14995:141:0;;10381:2:1;14995:141:0::1;::::0;::::1;10363:21:1::0;10420:2;10400:18;;;10393:30;10459:34;10439:18;;;10432:62;-1:-1:-1;;;10510:18:1;;;10503:50;10570:19;;14995:141:0::1;10179:416:1::0;14995:141:0::1;15206:6;15185:13;4152:12:::0;;;4064:108;15185:13:::1;:17;::::0;15201:1:::1;15185:17;:::i;:::-;15184:28;;;;:::i;:::-;15171:9;:41;;15149:144;;;::::0;-1:-1:-1;;;15149:144:0;;10802:2:1;15149:144:0::1;::::0;::::1;10784:21:1::0;10841:2;10821:18;;;10814:30;10880:34;10860:18;;;10853:62;-1:-1:-1;;;10931:18:1;;;10924:51;10992:19;;15149:144:0::1;10600:417:1::0;15149:144:0::1;15306:18;:30:::0;14912:432::o;13179:382::-;13329:4;13375:16;13329:4;13375:9;:16::i;:::-;13353:18;;:38;;13345:47;;;;;;13407:43;13422:7;13431:6;13439:10;13407:14;:43::i;:::-;13403:151;;;13467:10;:17;;-1:-1:-1;;13467:17:0;13480:4;13467:17;;;13499:10;:8;:10::i;:::-;13524;:18;;-1:-1:-1;;13524:18:0;;;13294:267;13179:382;;;:::o;15352:347::-;2118:6;;-1:-1:-1;;;;;2118:6:0;1255:10;2118:22;2110:67;;;;-1:-1:-1;;;2110:67:0;;;;;;;:::i;:::-;15510:4:::1;15502;15481:13;4152:12:::0;;;4064:108;15481:13:::1;:17;::::0;15497:1:::1;15481:17;:::i;:::-;15480:26;;;;:::i;:::-;15479:35;;;;:::i;:::-;15459:16;:55;;15437:147;;;::::0;-1:-1:-1;;;15437:147:0;;11224:2:1;15437:147:0::1;::::0;::::1;11206:21:1::0;11263:2;11243:18;;;11236:30;11302:34;11282:18;;;11275:62;-1:-1:-1;;;11353:18:1;;;11346:40;11403:19;;15437:147:0::1;11022:406:1::0;15437:147:0::1;15611:29;:16:::0;15631:8:::1;15611:29;:::i;:::-;15595:13;:45:::0;;;15656:35:::1;::::0;1981:25:1;;;15656:35:0::1;::::0;1969:2:1;1954:18;15656:35:0::1;1835:177:1::0;21628:156:0;2118:6;;-1:-1:-1;;;;;2118:6:0;1255:10;2118:22;2110:67;;;;-1:-1:-1;;;2110:67:0;;;;;;;:::i;:::-;21718:58:::1;::::0;21681:12:::1;::::0;21726:10:::1;::::0;21750:21:::1;::::0;21681:12;21718:58;21681:12;21718:58;21750:21;21726:10;21718:58:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12445:98:::0;2118:6;;-1:-1:-1;;;;;2118:6:0;1255:10;2118:22;2110:67;;;;-1:-1:-1;;;2110:67:0;;;;;;;:::i;:::-;12507:20:::1;:28:::0;;-1:-1:-1;;12507:28:0::1;::::0;;12445:98::o;1631:281::-;2118:6;;-1:-1:-1;;;;;2118:6:0;1255:10;2118:22;2110:67;;;;-1:-1:-1;;;2110:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;1734:22:0;::::1;1712:110;;;::::0;-1:-1:-1;;;1712:110:0;;11845:2:1;1712:110:0::1;::::0;::::1;11827:21:1::0;11884:2;11864:18;;;11857:30;11923:34;11903:18;;;11896:62;-1:-1:-1;;;11974:18:1;;;11967:36;12020:19;;1712:110:0::1;11643:402:1::0;1712:110:0::1;1859:6;::::0;1838:38:::1;::::0;-1:-1:-1;;;;;1838:38:0;;::::1;::::0;1859:6:::1;::::0;1838:38:::1;::::0;1859:6:::1;::::0;1838:38:::1;1887:6;:17:::0;;-1:-1:-1;;;;;;1887:17:0::1;-1:-1:-1::0;;;;;1887:17:0;;;::::1;::::0;;;::::1;::::0;;1631:281::o;7713:380::-;-1:-1:-1;;;;;7849:19:0;;7841:68;;;;-1:-1:-1;;;7841:68:0;;12252:2:1;7841:68:0;;;12234:21:1;12291:2;12271:18;;;12264:30;12330:34;12310:18;;;12303:62;-1:-1:-1;;;12381:18:1;;;12374:34;12425:19;;7841:68:0;12050:400:1;7841:68:0;-1:-1:-1;;;;;7928:21:0;;7920:68;;;;-1:-1:-1;;;7920:68:0;;12657:2:1;7920:68:0;;;12639:21:1;12696:2;12676:18;;;12669:30;12735:34;12715:18;;;12708:62;-1:-1:-1;;;12786:18:1;;;12779:32;12828:19;;7920:68:0;12455:398:1;7920:68:0;-1:-1:-1;;;;;8001:18:0;;;:11;:18;;;;;;;;;;;:27;;;;;;;;;;;;;:36;;;8053:32;;1981:25:1;;;8053:32:0;;1954:18:1;8053:32:0;;;;;;;;7713:380;;;:::o;21792:6179::-;-1:-1:-1;;;;;21924:18:0;;21916:68;;;;-1:-1:-1;;;21916:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22003:16:0;;21995:64;;;;-1:-1:-1;;;21995:64:0;;;;;;;:::i;:::-;22087:1;22078:6;:10;22070:52;;;;-1:-1:-1;;;22070:52:0;;13870:2:1;22070:52:0;;;13852:21:1;13909:2;13889:18;;;13882:30;13948:31;13928:18;;;13921:59;13997:18;;22070:52:0;13668:353:1;22070:52:0;-1:-1:-1;;;;;22158:13:0;;22135:15;22158:13;;;:9;:13;;;;;;22153:18;;22215:22;22168:2;22215:9;:22::i;:::-;22255:13;;22210:27;;;-1:-1:-1;22255:13:0;;;;;22250:183;;-1:-1:-1;;;;;22311:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;22340:23:0;;;;;;:19;:23;;;;;;;;22311:52;22285:136;;;;-1:-1:-1;;;22285:136:0;;14228:2:1;22285:136:0;;;14210:21:1;14267:2;14247:18;;;14240:30;-1:-1:-1;;;14286:18:1;;;14279:52;14348:18;;22285:136:0;14026:346:1;22285:136:0;-1:-1:-1;;;;;22519:12:0;;22445:24;22519:12;;;:6;:12;;;;;;22548:14;;22472:15;;22519:12;;;22548:18;22544:254;;-1:-1:-1;;;;;22610:21:0;;;;;;:15;:21;;;;;;;;22609:22;;:60;;-1:-1:-1;2270:6:0;;-1:-1:-1;;;;;22656:13:0;;;2270:6;;22656:13;22609:60;:106;;;-1:-1:-1;;;;;;22694:21:0;;22708:6;22694:21;22609:106;22583:203;;;;-1:-1:-1;;;22583:203:0;;14579:2:1;22583:203:0;;;14561:21:1;14618:2;14598:18;;;14591:30;14657:34;14637:18;;;14630:62;-1:-1:-1;;;14708:18:1;;;14701:33;14751:19;;22583:203:0;14377:399:1;22583:203:0;22814:14;;;;22810:2517;;;22873:10;;;;22872:11;22930:7;2270:6;;-1:-1:-1;;;;;2270:6:0;;2205:79;22930:7;-1:-1:-1;;;;;22922:15:0;:4;-1:-1:-1;;;;;22922:15:0;;;:49;;;;-1:-1:-1;2270:6:0;;-1:-1:-1;;;;;22958:13:0;;;2270:6;;22958:13;;22922:49;:86;;;;-1:-1:-1;;;;;;22992:16:0;;;;22922:86;:128;;;;-1:-1:-1;;;;;;23029:21:0;;23043:6;23029:21;;22922:128;:175;;;;-1:-1:-1;;;;;;23072:25:0;;;;;;:19;:25;;;;;;;;23071:26;22922:175;:220;;;;-1:-1:-1;;;;;;23119:23:0;;;;;;:19;:23;;;;;;;;23118:24;22922:220;22900:1359;;;23181:20;;;;;;;23177:1067;;;-1:-1:-1;;;;;23245:12:0;;;23226:15;23245:12;;;:6;:12;;;;;;23300:10;;23379:15;;23245:12;;;;23244:13;;23300:10;;;;23299:11;;23365:30;;;23379:15;;23365:30;;;;:62;;-1:-1:-1;23413:13:0;;-1:-1:-1;;;;;23399:28:0;;;23413:13;;23399:28;;23365:62;23335:890;;;23591:16;23606:1;23591:12;:16;:::i;:::-;23545:9;23516:39;;;;:28;:39;;;;;;:91;:212;;;;-1:-1:-1;23712:16:0;23727:1;23712:12;:16;:::i;:::-;-1:-1:-1;;;;;23644:32:0;;;;;;:28;:32;;;;;;:84;23516:212;23478:339;;;;-1:-1:-1;;;23478:339:0;;15116:2:1;23478:339:0;;;15098:21:1;15155:2;15135:18;;;15128:30;15194:31;15174:18;;;15167:59;15243:18;;23478:339:0;14914:353:1;23478:339:0;23873:9;23844:39;;;;:28;:39;;;;;;23886:12;23844:54;;;;-1:-1:-1;;;;;23925:32:0;;;;;;:47;23335:890;;;24006:10;:25;;;;;24020:11;24006:25;24002:223;;;-1:-1:-1;;;;;24080:15:0;;24060:17;24080:15;;;:9;:15;;;;;;24150:7;;24138:19;;;24184:17;;;;;;24033:192;;24002:223;23203:1041;;23177:1067;-1:-1:-1;;;;;24297:31:0;;24275:19;24297:31;;;:25;:31;;;;;;;;;24349:6;:12;;;;;;;24297:31;;;;;24349:12;:46;;;;-1:-1:-1;;;;;;24366:29:0;;;;;;:25;:29;;;;;;;;24365:30;24349:46;24345:971;;;24456:12;;24446:6;:22;;24416:136;;;;-1:-1:-1;;;24416:136:0;;15474:2:1;24416:136:0;;;15456:21:1;15513:2;15493:18;;;15486:30;15552:34;15532:18;;;15525:62;-1:-1:-1;;;15603:18:1;;;15596:38;15651:19;;24416:136:0;15272:404:1;24416:136:0;24627:15;;24610:13;24620:2;24610:9;:13::i;:::-;24601:22;;:6;:22;:::i;:::-;:41;;24571:139;;;;-1:-1:-1;;;24571:139:0;;15883:2:1;24571:139:0;;;15865:21:1;15922:2;15902:18;;;15895:30;-1:-1:-1;;;15941:18:1;;;15934:54;16005:18;;24571:139:0;15681:348:1;24571:139:0;24345:971;;;24736:14;:37;;;;;24754:19;24736:37;24732:584;;;24794:7;:26;;;24732:584;;;-1:-1:-1;;;;;24864:10:0;;;;;;:6;:10;;;;;;;;:46;;;;-1:-1:-1;;;;;;24879:31:0;;;;;;:25;:31;;;;;;;;24878:32;24864:46;24842:474;;;24985:13;;24975:6;:23;;24945:139;;;;-1:-1:-1;;;24945:139:0;;16236:2:1;24945:139:0;;;16218:21:1;16275:2;16255:18;;;16248:30;16314:34;16294:18;;;16287:62;-1:-1:-1;;;16365:18:1;;;16358:40;16415:19;;24945:139:0;16034:406:1;24842:474:0;-1:-1:-1;;;;;25111:29:0;;;;;;:25;:29;;;;;;;;25106:210;;25217:15;;25200:13;25210:2;25200:9;:13::i;:::-;25191:22;;:6;:22;:::i;:::-;:41;;25161:139;;;;-1:-1:-1;;;25161:139:0;;15883:2:1;25161:139:0;;;15865:21:1;15922:2;15902:18;;;15895:30;-1:-1:-1;;;15941:18:1;;;15934:54;16005:18;;25161:139:0;15681:348:1;25161:139:0;22830:2497;;22810:2517;25339:28;25370:24;25388:4;25370:9;:24::i;:::-;25446:18;;25339:55;;-1:-1:-1;25422:42:0;;;;;;;25495:35;;-1:-1:-1;25519:11:0;;;;;;;25495:35;:63;;;;-1:-1:-1;25548:10:0;;;;25547:11;25495:63;:93;;;;-1:-1:-1;;;;;;25576:12:0;;;;;;:6;:12;;;;;;;;25575:13;25495:93;:136;;;;-1:-1:-1;;;;;;25606:25:0;;;;;;:19;:25;;;;;;;;25605:26;25495:136;:177;;;;-1:-1:-1;;;;;;25649:23:0;;;;;;:19;:23;;;;;;;;25648:24;25495:177;25477:309;;;25699:10;:17;;-1:-1:-1;;25699:17:0;25712:4;25699:17;;;25731:10;:8;:10::i;:::-;25756;:18;;-1:-1:-1;;25756:18:0;;;25477:309;25813:4;25834:10;:27;;;;;25848:13;25834:27;:51;;;;;25865:20;25834:51;25830:116;;;-1:-1:-1;;;;;25902:13:0;;;;;;:9;:13;;;;;:32;;;25830:116;-1:-1:-1;;;;;25962:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;25991:23:0;;;;;;:19;:23;;;;;;;;25962:52;25958:100;;;-1:-1:-1;26041:5:0;25958:100;26070:12;26103:7;26099:1819;;;21081:14;;21066:12;:29;26149:54;;;;-1:-1:-1;;;;;;26191:12:0;;;;;;:6;:12;;;;;;;;26149:54;:86;;;;-1:-1:-1;;;;;;26225:10:0;;;;;;:6;:10;;;;;;;;26224:11;26149:86;:123;;;;;26271:1;26256:12;;:16;26149:123;26127:1646;;;-1:-1:-1;;;;;26312:19:0;;;;;;:15;:19;;;;;;;;26307:186;;-1:-1:-1;;;;;26356:19:0;;;;;;:15;:19;;;;;:26;;-1:-1:-1;;26356:26:0;26378:4;26356:26;;;;;;26405:10;:15;;26378:4;;26405:10;;:15;;26378:4;;26405:15;:::i;:::-;;;;-1:-1:-1;;26448:25:0;;-1:-1:-1;;;;;1401:32:1;;1383:51;;26448:25:0;;1371:2:1;1356:18;26448:25:0;;;;;;;26307:186;26536:3;26521:11;:6;26530:2;26521:11;:::i;:::-;26520:19;;;;:::i;:::-;26513:26;;26610:12;;26588:18;;26581:4;:25;;;;:::i;:::-;26580:42;;;;:::i;:::-;26558:18;;:64;;;;;;;:::i;:::-;;;;-1:-1:-1;;26693:12:0;;26671:18;;26664:25;;:4;:25;:::i;:::-;26663:42;;;;:::i;:::-;26641:18;;:64;;;;;;;:::i;:::-;;;;-1:-1:-1;;26764:12:0;;26748;;26741:19;;:4;:19;:::i;:::-;26740:36;;;;:::i;:::-;26724:12;;:52;;;;;;;:::i;:::-;;;;-1:-1:-1;;26845:12:0;;26824:17;;26817:24;;:4;:24;:::i;:::-;26816:41;;;;:::i;:::-;26795:17;;:62;;;;;;;:::i;:::-;;;;-1:-1:-1;26127:1646:0;;-1:-1:-1;26127:1646:0;;-1:-1:-1;;;;;26896:10:0;;;;;;:6;:10;;;;;;;;:31;;;;;26926:1;26910:13;;:17;26896:31;26892:881;;;26982:3;26965:13;;26956:6;:22;;;;:::i;:::-;26955:30;;;;:::i;:::-;26948:37;;27057:13;;27034:19;;27027:4;:26;;;;:::i;:::-;27026:44;;;;:::i;:::-;27004:18;;:66;;;;;;;:::i;:::-;;;;-1:-1:-1;;27142:13:0;;27119:19;;27112:26;;:4;:26;:::i;:::-;27111:44;;;;:::i;:::-;27089:18;;:66;;;;;;;:::i;:::-;;;;-1:-1:-1;;27215:13:0;;27198;;27191:20;;:4;:20;:::i;:::-;27190:38;;;;:::i;:::-;27174:12;;:54;;;;;;;:::i;:::-;;;;-1:-1:-1;;27298:13:0;;27276:18;;27269:25;;:4;:25;:::i;26892:881::-;-1:-1:-1;;;;;27350:12:0;;;;;;:6;:12;;;;;;;;:32;;;;;27381:1;27366:12;;:16;27350:32;27346:427;;;27436:3;27420:12;;27411:6;:21;;;;:::i;:::-;27410:29;;;;:::i;:::-;27403:36;;27510:12;;27488:18;;27481:4;:25;;;;:::i;:::-;27480:42;;;;:::i;:::-;27458:18;;:64;;;;;;;:::i;:::-;;;;-1:-1:-1;;27593:12:0;;27571:18;;27564:25;;:4;:25;:::i;:::-;27563:42;;;;:::i;:::-;27541:18;;:64;;;;;;;:::i;:::-;;;;-1:-1:-1;;27664:12:0;;27648;;27641:19;;:4;:19;:::i;:::-;27640:36;;;;:::i;:::-;27624:12;;:52;;;;;;;:::i;:::-;;;;-1:-1:-1;;27745:12:0;;27724:17;;27717:24;;:4;:24;:::i;:::-;27716:41;;;;:::i;:::-;27695:17;;:62;;;;;;;:::i;:::-;;;;-1:-1:-1;;27346:427:0;27791:8;;27787:91;;27820:42;27836:4;27850;27857;27820:15;:42::i;:::-;27892:14;27902:4;27892:14;;:::i;:::-;;;26099:1819;27930:33;27946:4;27952:2;27956:6;27930:15;:33::i;:::-;21905:6066;;;;;;;;21792:6179;;;:::o;17244:221::-;-1:-1:-1;;;;;17327:12:0;;;;;;:6;:12;;;;;:20;;-1:-1:-1;;17327:20:0;;;;;;;17360:39;17327:12;:20;17360:26;:39::i;13780:1124::-;13984:10;13909:4;14023:28;;;:19;:28;;;;;;13909:4;;13950;;14023:28;;13909:4;14023:28;14088:809;;14145:17;;:21;;;;14120:22;;14211:16;14221:5;14211:9;:16::i;:::-;:37;;14181:67;;14269:17;:43;;;;;14290:22;14269:43;14265:118;;;14333:34;14340:7;14349:17;;14333:6;:34::i;:::-;-1:-1:-1;;14419:1:0;14399:17;:21;-1:-1:-1;14446:4:0;;-1:-1:-1;14467:15:0;;-1:-1:-1;;;14467:15:0;14088:809;14538:1;14519:16;14529:5;14519:9;:16::i;:::-;:20;14515:339;;;14579:11;;14609:230;;;;14649:7;:20;;;14703:5;;-1:-1:-1;14609:230:0;;;14757:23;14764:7;14773:6;14757;:23::i;:::-;14814:5;14803:16;;14609:230;14541:313;14515:339;14877:8;-1:-1:-1;14870:15:0;;-1:-1:-1;;;14870:15:0;19392:1590;19455:1;19435:17;;:21;:70;;;;;19488:17;;19460:24;19478:4;19460:9;:24::i;:::-;:45;;19435:70;19431:143;;;19522:40;19537:4;19544:17;;19522:6;:40::i;:::-;19604:1;19584:17;:21;;;19642:24;19660:4;19642:9;:24::i;:::-;19616:50;;19677:25;19773:12;;19739:18;;19705;;:52;;;;:::i;:::-;:80;;;;:::i;:::-;19677:108;-1:-1:-1;19802:20:0;;;:46;;-1:-1:-1;19826:22:0;;19802:46;19798:85;;;19865:7;;19392:1590::o;19798:85::-;19917:18;;:23;;19938:2;19917:23;:::i;:::-;19899:15;:41;19895:115;;;19975:18;;:23;;19996:2;19975:23;:::i;:::-;19957:41;;19895:115;20022:23;20122:1;20102:17;20067:18;;20049:15;:36;;;;:::i;:::-;20048:71;;;;:::i;:::-;:75;;;;:::i;:::-;20022:101;-1:-1:-1;20136:51:0;20153:33;20022:101;20153:15;:33;:::i;:::-;20136:16;:51::i;:::-;20397:18;;20221:21;;;;20200:18;;20397:22;;20418:1;;20397:22;:::i;:::-;20376:44;;:17;:44;:::i;:::-;20340:18;;20327:31;;:10;:31;:::i;:::-;20326:95;;;;:::i;:::-;20300:121;;20432:17;20538:1;20517:18;;:22;;;;:::i;:::-;20496:44;;:17;:44;:::i;:::-;20466:12;;20453:25;;:10;:25;:::i;:::-;20452:89;;;;:::i;:::-;20432:109;-1:-1:-1;20571:27:0;20432:109;20571:15;:27;:::i;:::-;20552:46;;;;:::i;:::-;20630:1;20609:18;:22;;;20642:18;:22;;;20675:12;:16;;;20702:17;:21;20552:46;-1:-1:-1;20740:19:0;;;;;:42;;;20781:1;20763:15;:19;20740:42;20736:121;;;20799:46;20812:15;20829;20799:12;:46::i;:::-;20877:9;;20869:38;;-1:-1:-1;;;;;20877:9:0;;;;20869:38;;;;;20897:9;;20877;20869:38;20877:9;20869:38;20897:9;20877;20869:38;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20926:15:0;;20918:56;;-1:-1:-1;;;;;20926:15:0;;;;20952:21;20918:56;;;;;20926:15;20918:56;20926:15;20918:56;20952:21;20926:15;20918:56;;;;;;;;;;;;;;;;;;;;;19420:1562;;;;;;;19392:1590::o;6764:613::-;-1:-1:-1;;;;;6895:18:0;;6887:68;;;;-1:-1:-1;;;6887:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6974:16:0;;6966:64;;;;-1:-1:-1;;;6966:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7067:15:0;;7043:21;7067:15;;;:9;:15;;;;;;7115:23;;;;7093:111;;;;-1:-1:-1;;;7093:111:0;;16647:2:1;7093:111:0;;;16629:21:1;16686:2;16666:18;;;16659:30;16725:34;16705:18;;;16698:62;-1:-1:-1;;;16776:18:1;;;16769:36;16822:19;;7093:111:0;16445:402:1;7093:111:0;-1:-1:-1;;;;;7240:15:0;;;;;;;:9;:15;;;;;;7258:22;;;7240:40;;7302:13;;;;;;;;:23;;7274:6;;7240:15;7302:23;;7274:6;;7302:23;:::i;:::-;;;;;;;;7358:2;-1:-1:-1;;;;;7343:26:0;7352:4;-1:-1:-1;;;;;7343:26:0;;7362:6;7343:26;;;;1981:25:1;;1969:2;1954:18;;1835:177;7343:26:0;;;;;;;;6876:501;6764:613;;;:::o;16807:237::-;-1:-1:-1;;;;;16923:35:0;;;;;;:25;:35;;;;;;;;;:49;;-1:-1:-1;;16923:49:0;;;;;;;;;;16990:46;;17020:51:1;;;17087:18;;;17080:50;16990:46:0;;16993:18:1;16990:46:0;;;;;;;16807:237;;:::o;5567:404::-;-1:-1:-1;;;;;5652:21:0;;5644:34;;;;-1:-1:-1;;;5644:34:0;;17343:2:1;5644:34:0;;;17325:21:1;-1:-1:-1;17362:18:1;;;17355:29;17401:18;;5644:34:0;17141:284:1;5644:34:0;-1:-1:-1;;;;;5714:18:0;;5689:22;5714:18;;;:9;:18;;;;;;5751:24;;;;5743:37;;;;-1:-1:-1;;;5743:37:0;;17343:2:1;5743:37:0;;;17325:21:1;-1:-1:-1;17362:18:1;;;17355:29;17401:18;;5743:37:0;17141:284:1;5743:37:0;-1:-1:-1;;;;;5816:18:0;;;;;;:9;:18;;;;;;;;5837:23;;;5816:44;;5875:12;:22;;;;;;;5926:37;1981:25:1;;;5816:18:0;;;5926:37;;1954:18:1;5926:37:0;1835:177:1;21111:472:0;21201:16;;;21215:1;21201:16;;;;;;;;21177:21;;21201:16;;;;;;;;;;-1:-1:-1;21201:16:0;21177:40;;21246:4;21228;21233:1;21228:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;21228:23:0;;;:7;;;;;;;;;;:23;;;;21272:15;;:22;;;-1:-1:-1;;;21272:22:0;;;;:15;;;;;:20;;:22;;;;;21228:7;;21272:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21262:4;21267:1;21262:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;21262:32:0;;;:7;;;;;;;;;:32;21337:15;;21305:62;;21322:4;;21337:15;21355:11;21305:8;:62::i;:::-;21378:15;;:197;;-1:-1:-1;;;21378:197:0;;-1:-1:-1;;;;;21378:15:0;;;;:66;;:197;;21459:11;;21378:15;;21502:4;;21529;;21549:15;;21378:197;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21166:417;21111:472;:::o;12802:369::-;12915:15;;12883:62;;12900:4;;-1:-1:-1;;;;;12915:15:0;12933:11;12883:8;:62::i;:::-;12956:15;;:207;;-1:-1:-1;;;12956:207:0;;13029:4;12956:207;;;19276:34:1;19326:18;;;19319:34;;;12956:15:0;19369:18:1;;;19362:34;;;19412:18;;;19405:34;13115:6:0;19455:19:1;;;19448:44;13137:15:0;19508:19:1;;;19501:35;-1:-1:-1;;;;;12956:15:0;;;;:31;;12995:9;;19210:19:1;;12956:207:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;12802:369;;:::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;1445:385::-;1531:6;1539;1547;1555;1608:3;1596:9;1587:7;1583:23;1579:33;1576:53;;;1625:1;1622;1615:12;1576:53;-1:-1:-1;;1648:23:1;;;1718:2;1703:18;;1690:32;;-1:-1:-1;1769:2:1;1754:18;;1741:32;;1820:2;1805:18;1792:32;;-1:-1:-1;1445:385:1;-1:-1:-1;1445:385:1:o;2017:247::-;2076:6;2129:2;2117:9;2108:7;2104:23;2100:32;2097:52;;;2145:1;2142;2135:12;2097:52;2184:9;2171:23;2203:31;2228:5;2203:31;:::i;2269:456::-;2346:6;2354;2362;2415:2;2403:9;2394:7;2390:23;2386:32;2383:52;;;2431:1;2428;2421:12;2383:52;2470:9;2457:23;2489:31;2514:5;2489:31;:::i;:::-;2539:5;-1:-1:-1;2596:2:1;2581:18;;2568:32;2609:33;2568:32;2609:33;:::i;:::-;2269:456;;2661:7;;-1:-1:-1;;;2715:2:1;2700:18;;;;2687:32;;2269:456::o;2730:180::-;2789:6;2842:2;2830:9;2821:7;2817:23;2813:32;2810:52;;;2858:1;2855;2848:12;2810:52;-1:-1:-1;2881:23:1;;2730:180;-1:-1:-1;2730:180:1:o;3312:416::-;3377:6;3385;3438:2;3426:9;3417:7;3413:23;3409:32;3406:52;;;3454:1;3451;3444:12;3406:52;3493:9;3480:23;3512:31;3537:5;3512:31;:::i;:::-;3562:5;-1:-1:-1;3619:2:1;3604:18;;3591:32;3661:15;;3654:23;3642:36;;3632:64;;3692:1;3689;3682:12;3632:64;3715:7;3705:17;;;3312:416;;;;;:::o;3733:383::-;3810:6;3818;3826;3879:2;3867:9;3858:7;3854:23;3850:32;3847:52;;;3895:1;3892;3885:12;3847:52;3934:9;3921:23;3953:31;3978:5;3953:31;:::i;:::-;4003:5;4055:2;4040:18;;4027:32;;-1:-1:-1;4106:2:1;4091:18;;;4078:32;;3733:383;-1:-1:-1;;;3733:383:1:o;4121:388::-;4189:6;4197;4250:2;4238:9;4229:7;4225:23;4221:32;4218:52;;;4266:1;4263;4256:12;4218:52;4305:9;4292:23;4324:31;4349:5;4324:31;:::i;:::-;4374:5;-1:-1:-1;4431:2:1;4416:18;;4403:32;4444:33;4403:32;4444:33;:::i;4514:380::-;4593:1;4589:12;;;;4636;;;4657:61;;4711:4;4703:6;4699:17;4689:27;;4657:61;4764:2;4756:6;4753:14;4733:18;4730:38;4727:161;;4810:10;4805:3;4801:20;4798:1;4791:31;4845:4;4842:1;4835:15;4873:4;4870:1;4863:15;4727:161;;4514:380;;;:::o;4899:356::-;5101:2;5083:21;;;5120:18;;;5113:30;5179:34;5174:2;5159:18;;5152:62;5246:2;5231:18;;4899:356::o;5260:127::-;5321:10;5316:3;5312:20;5309:1;5302:31;5352:4;5349:1;5342:15;5376:4;5373:1;5366:15;5392:125;5457:9;;;5478:10;;;5475:36;;;5491:18;;:::i;6625:168::-;6698:9;;;6729;;6746:15;;;6740:22;;6726:37;6716:71;;6767:18;;:::i;6798:217::-;6838:1;6864;6854:132;;6908:10;6903:3;6899:20;6896:1;6889:31;6943:4;6940:1;6933:15;6971:4;6968:1;6961:15;6854:132;-1:-1:-1;7000:9:1;;6798:217::o;12858:401::-;13060:2;13042:21;;;13099:2;13079:18;;;13072:30;13138:34;13133:2;13118:18;;13111:62;-1:-1:-1;;;13204:2:1;13189:18;;13182:35;13249:3;13234:19;;12858:401::o;13264:399::-;13466:2;13448:21;;;13505:2;13485:18;;;13478:30;13544:34;13539:2;13524:18;;13517:62;-1:-1:-1;;;13610:2:1;13595:18;;13588:33;13653:3;13638:19;;13264:399::o;14781:128::-;14848:9;;;14869:11;;;14866:37;;;14883:18;;:::i;17562:127::-;17623:10;17618:3;17614:20;17611:1;17604:31;17654:4;17651:1;17644:15;17678:4;17675:1;17668:15;17694:251;17764:6;17817:2;17805:9;17796:7;17792:23;17788:32;17785:52;;;17833:1;17830;17823:12;17785:52;17865:9;17859:16;17884:31;17909:5;17884:31;:::i;17950:980::-;18212:4;18260:3;18249:9;18245:19;18291:6;18280:9;18273:25;18317:2;18355:6;18350:2;18339:9;18335:18;18328:34;18398:3;18393:2;18382:9;18378:18;18371:31;18422:6;18457;18451:13;18488:6;18480;18473:22;18526:3;18515:9;18511:19;18504:26;;18565:2;18557:6;18553:15;18539:29;;18586:1;18596:195;18610:6;18607:1;18604:13;18596:195;;;18675:13;;-1:-1:-1;;;;;18671:39:1;18659:52;;18766:15;;;;18731:12;;;;18707:1;18625:9;18596:195;;;-1:-1:-1;;;;;;;18847:32:1;;;;18842:2;18827:18;;18820:60;-1:-1:-1;;;18911:3:1;18896:19;18889:35;18808:3;17950:980;-1:-1:-1;;;17950:980:1:o;19547:306::-;19635:6;19643;19651;19704:2;19692:9;19683:7;19679:23;19675:32;19672:52;;;19720:1;19717;19710:12;19672:52;19749:9;19743:16;19733:26;;19799:2;19788:9;19784:18;19778:25;19768:35;;19843:2;19832:9;19828:18;19822:25;19812:35;;19547:306;;;;;:::o

Swarm Source

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