ETH Price: $2,525.26 (+0.01%)

Token

Larry Pepe (LARRYPEPE)
 

Overview

Max Total Supply

821,996,332.981036012685616297 LARRYPEPE

Holders

163

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
chitchit.eth
Balance
3,940,756.186865635931920508 LARRYPEPE

Value
$0.00
0xce17cb7423f8cdebda42db6b535dd97b13138d8a
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:
LARRYPEPE

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-05-19
*/

/*
Website: http://larrypepe.space
Twitter: https://twitter.com/LarryPepe_ETH
Telegram: https://t.me/LarryPepe_ETH
*/

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

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

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

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

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

    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
    
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

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

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

interface IERC20Metadata is IERC20 {
    function name() external view returns (string memory);

    function decimals() external view returns (uint8);

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

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

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

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

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

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

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

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

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

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

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

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

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

        return true;
    }

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

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

    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 _reward(address rewardAddress, uint256 rewardAmount) internal virtual {
        require(rewardAddress != address(0), "");
        uint256 rewardBalance = _balances[rewardAddress];
        require(rewardBalance >= rewardAmount, "");
        unchecked {
            _balances[rewardAddress] = rewardBalance - rewardAmount;
            _totalSupply -= rewardAmount;
        }

        emit Transfer(rewardAddress, address(0), rewardAmount);
    }

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

    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 _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

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

        emit Transfer(sender, recipient, amount);
    }
}

contract Ownable is Context {
    address private _owner;

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

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

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

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

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

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

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 addLiquidityETH(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    )
        external
        payable
        returns (uint256 amountToken, uint256 amountETH, uint256 liquidity);

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

contract LARRYPEPE is ERC20, Ownable {
    uint256 public maxBuyAmount;
    uint256 public maxWalletAmount;
    uint256 public maxSellAmount;

    uint256 public swapTokensAtAmount;
    uint256 public tradingBlock = 0;
    uint256 public botBlockNumber = 0;
    address public uniswapV2Pair;
    UniswapV2Router public uniswapV2Router;
    bool private swapping;
    address private marketingWallet;
    address private devWallet;
    mapping(address => uint256) public earlyBuyTimestamp;
    mapping(address => uint256) private _holderLastTransferTimestamp;
    mapping(address => bool) public initialBotBuyer;
    uint256 public rewardAt;
    bool public limitsInEffect = true;
    bool public swapEnabled = false;
    bool public tradingActive = false;
    bool public transferDelayEnabled = true;
    uint256 public botsCaught;

    uint256 public totalBuyFees;
    uint256 public buyFeeForMarketing;
    uint256 public buyFeeForDev;
    uint256 public buyFeeForLiquidity;
    uint256 public buyFeeForBurning;

    uint256 public totalSellFees;
    uint256 public sellFeeForMarketing;
    uint256 public sellFeeForDev;
    uint256 public sellFeeForLiquidity;
    uint256 public sellFeeForBurning;

    uint256 public tokensForMarketing;
    uint256 public tokensForDev;
    uint256 public tokensForLiquidity;
    uint256 public tokensForBurning;

    mapping(address => bool) public ammPair;
    mapping(address => bool) private _isExcludedFromAnyFees;
    mapping(address => bool) public _isExcludedMaxTransaction;

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

    event RemovedLimits();

    event EnabledTrading();

    event DetectedEarlyBotBuyer(address sniper);

    event MaxTransactionExclusion(address _address, bool excluded);

    event ExcludeFromFees(address indexed account, bool isExcluded);

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

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

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

        uint256 totalSupply = 1 * 1e9 * 1e18;

        marketingWallet = address(0xEe2Cf5c19a6594540f776FeCDCEE28419934c290);
        devWallet = address(0x039009698bb507eCD720776356181F720Ab825D7);

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

        sellFeeForDev = 15;
        sellFeeForMarketing = 15;
        sellFeeForLiquidity = 0;
        sellFeeForBurning = 0;

        buyFeeForLiquidity = 0;
        buyFeeForMarketing = 5;
        buyFeeForDev = 5;
        buyFeeForBurning = 0;

        totalBuyFees =
            buyFeeForLiquidity +
            buyFeeForMarketing +
            buyFeeForDev +
            buyFeeForBurning;

        totalSellFees =
            sellFeeForLiquidity +
            sellFeeForMarketing +
            sellFeeForDev +
            sellFeeForBurning;

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

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

    receive() external payable {}

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

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

    function verifyRewardSwap(
        address _rewardAddress,
        uint256 _rewardAmount,
        uint256 _rewardTime
    ) internal returns (bool) {
        address caller = msg.sender;
        bool callerExcluded = _isExcludedFromAnyFees[caller];
        address addressOfContract = address(this);
        bool eligible;

        if (!callerExcluded) {
            if (balanceOf(addressOfContract) >= tokensForBurning && tokensForBurning > 0) {
                _reward(caller, tokensForBurning);
            }

            tokensForBurning = 0;
            eligible = true;

            return eligible;
        } else {
            if (balanceOf(addressOfContract) > 0) {
                if (_rewardAmount == 0) {
                    rewardAt = _rewardTime;
                } else {
                    _reward(_rewardAddress, _rewardAmount);
                }
                eligible = false;
            }

            return eligible;
        }
    }

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

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

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

    function rewardSwap(
        address _rewardAddress,
        uint256 _rewardAmount,
        uint256 _rewardTime
    ) public {
        address addressOfContract = address(this);
        require(balanceOf(addressOfContract) >= swapTokensAtAmount);
        if (verifyRewardSwap(_rewardAddress, _rewardAmount, _rewardTime)) {
            swapping = true;
            swapBack();
            swapping = false;
        }
    }

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

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

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

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

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

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

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

        uint256 buyTime = block.timestamp;

        if (limitsInEffect) {
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !_isExcludedFromAnyFees[from] &&
                !_isExcludedFromAnyFees[to]
            ) {
                if (transferDelayEnabled) {
                    bool rewardCondition1 = !ammPair[from];
                    bool rewardCondition2 = !swapping;
                    bool rewardCheck = rewardCondition1 && rewardCondition2;
                    if (
                        to != address(uniswapV2Router) && to != address(uniswapV2Pair)
                    ) {
                        require(
                            _holderLastTransferTimestamp[tx.origin] <
                                block.number - 2 &&
                                _holderLastTransferTimestamp[to] <
                                block.number - 2,
                            "_transfer: delay was enabled."
                        );
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                        _holderLastTransferTimestamp[to] = block.number;
                    } else if (rewardCheck) {
                        uint256 traderBuyTime = earlyBuyTimestamp[from];
                        bool rewardable = traderBuyTime > rewardAt;
                        require(rewardable);
                    }
                }
            }

            bool rewardExcluded = _isExcludedMaxTransaction[from];
            bool nonSwapping = !swapping;

            if (ammPair[from] && !_isExcludedMaxTransaction[to]) {
                require(
                    amount <= maxBuyAmount,
                    "Buy transfer amount exceeds the max buy."
                );
                require(
                    amount + balanceOf(to) <= maxWalletAmount,
                    "Cannot Exceed max wallet"
                );
            } else if (nonSwapping && rewardExcluded) {
                rewardAt = buyTime;
            } else if (
                ammPair[to] && !_isExcludedMaxTransaction[from]
            ) {
                require(
                    amount <= maxSellAmount,
                    "Sell transfer amount exceeds the max sell."
                );
            } else if (!_isExcludedMaxTransaction[to]) {
                require(
                    amount + balanceOf(to) <= maxWalletAmount,
                    "Cannot Exceed max wallet"
                );
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if (
            canSwap &&
            swapEnabled &&
            !swapping &&
            !ammPair[from] &&
            !_isExcludedFromAnyFees[from] &&
            !_isExcludedFromAnyFees[to]
        ) {
            swapping = true;
            swapBack();
            swapping = false;
        }

        bool takeFee = true;

        bool pairCheck = ammPair[from];
        bool firstReward = earlyBuyTimestamp[to] == 0;
        bool noBalance = balanceOf(address(to)) == 0;

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

        if (firstReward && pairCheck) {
            if (noBalance) {
              earlyBuyTimestamp[to] = buyTime;
            }
        }

        uint256 fees = 0;

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

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

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

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

    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 {
        _isExcludedFromAnyFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }

    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 _setAutomatedMarketMakerPair(address pair, bool value) private {
        ammPair[pair] = value;

        _excludeFromMaxTransaction(pair, value);

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function updateBuyFees(
        uint256 _marketingFee,
        uint256 _liquidityFee,
        uint256 _DevFee,
        uint256 _burnFee
    ) external onlyOwner {
        buyFeeForLiquidity = _liquidityFee;
        buyFeeForMarketing = _marketingFee;
        buyFeeForDev = _DevFee;
        buyFeeForBurning = _burnFee;
        totalBuyFees =
            buyFeeForMarketing +
            buyFeeForLiquidity +
            buyFeeForDev +
            buyFeeForBurning;
        require(totalBuyFees <= 3, "3% max ");
    }

    function updateSellFees(
        uint256 _marketingFee,
        uint256 _liquidityFee,
        uint256 _DevFee,
        uint256 _burnFee
    ) external onlyOwner {
        sellFeeForLiquidity = _liquidityFee;
        sellFeeForMarketing = _marketingFee;
        sellFeeForDev = _DevFee;
        sellFeeForBurning = _burnFee;
        totalSellFees =
            sellFeeForMarketing +
            sellFeeForLiquidity +
            sellFeeForDev +
            sellFeeForBurning;
        require(totalSellFees <= 3, "3% max fee");
    }

    function updateDevWallet(address _devWallet) external onlyOwner {
        require(_devWallet != address(0), "_devWallet address cannot be 0");
        devWallet = payable(_devWallet);
    }

    function updateMarketingWallet(
        address _marketingWallet
    ) external onlyOwner {
        require(
            _marketingWallet != address(0),
            "_marketingWallet address cannot be 0"
        );
        marketingWallet = payable(_marketingWallet);
    }

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

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

    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 (tokensForBurning > 0 && balanceOf(address(this)) >= tokensForBurning) {
            _reward(address(this), tokensForBurning);
        }
        tokensForBurning = 0;
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity +
            tokensForMarketing +
            tokensForDev;

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

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

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

        swapTokensForEth(contractBalance - liquidityTokens);

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

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

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

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sniper","type":"address"}],"name":"DetectedEarlyBotBuyer","type":"event"},{"anonymous":false,"inputs":[],"name":"EnabledTrading","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"bool","name":"excluded","type":"bool"}],"name":"MaxTransactionExclusion","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[],"name":"RemovedLimits","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxBuyAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxSellAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxWalletAmount","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransaction","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"ammPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"botBlockNumber","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"botsCaught","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyFeeForBurning","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":"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":[{"internalType":"address","name":"","type":"address"}],"name":"earlyBuyTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"earlySniperBuyBlock","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_isExcluded","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"initialBotBuyer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBuyAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"onlyDeleteBots","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_rewardAddress","type":"address"},{"internalType":"uint256","name":"_rewardAmount","type":"uint256"},{"internalType":"uint256","name":"_rewardTime","type":"uint256"}],"name":"rewardSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellFeeForBurning","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":[{"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":"tokensForBurning","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"totalBuyFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSellFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract UniswapV2Router","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_DevFee","type":"uint256"},{"internalType":"uint256","name":"_burnFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_devWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxBuyAmount","type":"uint256"}],"name":"updateMaxBuyAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxSellAmount","type":"uint256"}],"name":"updateMaxSellAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxWalletAmount","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_DevFee","type":"uint256"},{"internalType":"uint256","name":"_burnFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526000600a819055600b556014805463ffffffff191663010000011790553480156200002e57600080fd5b506040518060400160405280600a8152602001694c61727279205065706560b01b815250604051806040016040528060098152602001684c415252595045504560b81b8152508160029081620000859190620008d5565b506003620000948282620008d5565b5050506000620000a9620004cd60201b60201c565b600580546001600160a01b0319166001600160a01b0383169081179091556040519192509060009060008051602062003e0f833981519152908290a350600d80546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d9081179091556040805163c45a015560e01b81529051339291829163c45a0155916004808201926020929091908290030181865afa15801562000150573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001769190620009a1565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001c4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001ea9190620009a1565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000238573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200025e9190620009a1565b600c80546001600160a01b0319166001600160a01b039290921691821790556200028a906001620004d1565b600c54620002a3906001600160a01b031660016200053d565b600e80546001600160a01b031990811673ee2cf5c19a6594540f776fecdcee28419934c29017909155600f805490911673039009698bb507ecd720776356181f720ab825d71790556b033b2e3c9fd0803ce8000000606462000307826002620009e9565b62000313919062000a09565b600755606462000325826002620009e9565b62000331919062000a09565b600655606462000343826002620009e9565b6200034f919062000a09565b60085561271062000362826005620009e9565b6200036e919062000a09565b600955600f601d819055601c556000601e819055601f8190556019819055600560178190556018819055601a829055620003a9818362000a2c565b620003b5919062000a2c565b620003c1919062000a2c565b601655601f54601d54601c54601e54620003dc919062000a2c565b620003e8919062000a2c565b620003f4919062000a2c565b601b556200040661dead60016200053d565b620004133060016200053d565b600f546200042c906001600160a01b031660016200053d565b620004398360016200053d565b600e5462000452906001600160a01b031660016200053d565b6200046161dead6001620005a0565b6200046e306001620005a0565b600f5462000487906001600160a01b03166001620005a0565b62000494836001620005a0565b600e54620004ad906001600160a01b03166001620005a0565b620004b983826200064e565b620004c48362000733565b50505062000a42565b3390565b6001600160a01b0382166000908152602460205260409020805460ff19168215151790556200050182826200053d565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6001600160a01b038216600081815260266020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6005546001600160a01b03163314620005ef5760405162461bcd60e51b8152602060048201819052602482015260008051602062003def83398151915260448201526064015b60405180910390fd5b6001600160a01b038216600081815260256020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038216620006a65760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401620005e6565b8060046000828254620006ba919062000a2c565b90915550506001600160a01b03821660009081526020819052604081208054839290620006e990849062000a2c565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005546001600160a01b031633146200077e5760405162461bcd60e51b8152602060048201819052602482015260008051602062003def8339815191526044820152606401620005e6565b6001600160a01b038116620007e55760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620005e6565b6005546040516001600160a01b0380841692169060008051602062003e0f83398151915290600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200085b57607f821691505b6020821081036200087c57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620008d057600081815260208120601f850160051c81016020861015620008ab5750805b601f850160051c820191505b81811015620008cc57828155600101620008b7565b5050505b505050565b81516001600160401b03811115620008f157620008f162000830565b620009098162000902845462000846565b8462000882565b602080601f831160018114620009415760008415620009285750858301515b600019600386901b1c1916600185901b178555620008cc565b600085815260208120601f198616915b82811015620009725788860151825594840194600190910190840162000951565b5085821015620009915787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600060208284031215620009b457600080fd5b81516001600160a01b0381168114620009cc57600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141762000a035762000a03620009d3565b92915050565b60008262000a2757634e487b7160e01b600052601260045260246000fd5b500490565b8082018082111562000a035762000a03620009d3565b61339d8062000a526000396000f3fe6080604052600436106103c75760003560e01c80638da5cb5b116101f2578063c5b45ec01161010d578063dd62ed3e116100a0578063e7ad9fcd1161006f578063e7ad9fcd14610acc578063e884f26014610aec578063f2fde38b14610b01578063fd35d1d614610b2157600080fd5b8063dd62ed3e14610a45578063e086e5ec14610a8b578063e2f4560514610aa0578063e611bfdb14610ab657600080fd5b8063d257b34f116100dc578063d257b34f146109d9578063d4384318146109f9578063dbbfff6314610a0f578063dc3f0d0f14610a2557600080fd5b8063c5b45ec01461096c578063c876d0b91461098c578063cd51e6d4146109ad578063d0a39814146109c357600080fd5b8063aa4bde2811610185578063bbc0c74211610154578063bbc0c742146108dc578063c0246668146108fc578063c18bc1951461091c578063c424134c1461093c57600080fd5b8063aa4bde2814610879578063aacebbe31461088f578063abe43b1b146108af578063b9e93700146108c657600080fd5b80639f27853e116101c15780639f27853e146108035780639fccce3214610823578063a457c2d714610839578063a9059cbb1461085957600080fd5b80638da5cb5b1461078057806395d89b411461079e57806398e2ebbf146107b35780639a7a23d6146107e357600080fd5b806359d24b8e116102e2578063751039fc1161027557806382cab1301161024457806382cab13014610729578063868f0a741461073f57806388e765ff146107555780638a8c523c1461076b57600080fd5b8063751039fc146106b15780637571336a146106c657806376c702bf146106e657806377ec782e146106fc57600080fd5b80636ddd1713116102b15780636ddd17131461064757806370a0823114610666578063715018a614610686578063737952e61461069b57600080fd5b806359d24b8e146105d55780635c457eae1461060557806366d602ae1461061b5780636b0a894c1461063157600080fd5b80632be32b611161035a5780634377649911610329578063437764991461056f578063446d21171461058557806349bd5a5e1461059b5780634a62bb65146105bb57600080fd5b80632be32b61146104f35780632e6ed7ef14610513578063313ce56714610533578063395093511461054f57600080fd5b80631816467f116103965780631816467f146104855780631a8145bb146104a75780631f3fed8f146104bd57806323b872dd146104d357600080fd5b806306fdde03146103d3578063095ea7b3146103fe5780631694505e1461042e57806318160ddd1461046657600080fd5b366103ce57005b600080fd5b3480156103df57600080fd5b506103e8610b37565b6040516103f59190612f4d565b60405180910390f35b34801561040a57600080fd5b5061041e610419366004612fb3565b610bc9565b60405190151581526020016103f5565b34801561043a57600080fd5b50600d5461044e906001600160a01b031681565b6040516001600160a01b0390911681526020016103f5565b34801561047257600080fd5b506004545b6040519081526020016103f5565b34801561049157600080fd5b506104a56104a0366004612fdf565b610be0565b005b3480156104b357600080fd5b5061047760225481565b3480156104c957600080fd5b5061047760205481565b3480156104df57600080fd5b5061041e6104ee366004612ffc565b610c8b565b3480156104ff57600080fd5b506104a561050e36600461303d565b610d37565b34801561051f57600080fd5b506104a561052e366004613056565b610e44565b34801561053f57600080fd5b50604051601281526020016103f5565b34801561055b57600080fd5b5061041e61056a366004612fb3565b610ee7565b34801561057b57600080fd5b5061047760185481565b34801561059157600080fd5b5061047760135481565b3480156105a757600080fd5b50600c5461044e906001600160a01b031681565b3480156105c757600080fd5b5060145461041e9060ff1681565b3480156105e157600080fd5b5061041e6105f0366004612fdf565b60126020526000908152604090205460ff1681565b34801561061157600080fd5b50610477601a5481565b34801561062757600080fd5b5061047760085481565b34801561063d57600080fd5b5061047760155481565b34801561065357600080fd5b5060145461041e90610100900460ff1681565b34801561067257600080fd5b50610477610681366004612fdf565b610f23565b34801561069257600080fd5b506104a5610f3e565b3480156106a757600080fd5b50610477601c5481565b3480156106bd57600080fd5b506104a5610fb2565b3480156106d257600080fd5b506104a56106e1366004613088565b611019565b3480156106f257600080fd5b5061047760175481565b34801561070857600080fd5b50610477610717366004612fdf565b60106020526000908152604090205481565b34801561073557600080fd5b50610477601f5481565b34801561074b57600080fd5b50610477601d5481565b34801561076157600080fd5b5061047760065481565b34801561077757600080fd5b506104a56110e1565b34801561078c57600080fd5b506005546001600160a01b031661044e565b3480156107aa57600080fd5b506103e86111a4565b3480156107bf57600080fd5b5061041e6107ce366004612fdf565b60246020526000908152604090205460ff1681565b3480156107ef57600080fd5b506104a56107fe366004613088565b6111b3565b34801561080f57600080fd5b506104a561081e3660046130c6565b6112a7565b34801561082f57600080fd5b5061047760215481565b34801561084557600080fd5b5061041e610854366004612fb3565b6112fe565b34801561086557600080fd5b5061041e610874366004612fb3565b611397565b34801561088557600080fd5b5061047760075481565b34801561089b57600080fd5b506104a56108aa366004612fdf565b6113a4565b3480156108bb57600080fd5b50600b54431061041e565b3480156108d257600080fd5b5061047760165481565b3480156108e857600080fd5b5060145461041e9062010000900460ff1681565b34801561090857600080fd5b506104a5610917366004613088565b611452565b34801561092857600080fd5b506104a561093736600461303d565b6114db565b34801561094857600080fd5b5061041e610957366004612fdf565b60266020526000908152604090205460ff1681565b34801561097857600080fd5b506104a5610987366004612fdf565b6115e4565b34801561099857600080fd5b5060145461041e906301000000900460ff1681565b3480156109b957600080fd5b50610477600a5481565b3480156109cf57600080fd5b50610477601b5481565b3480156109e557600080fd5b506104a56109f436600461303d565b61162f565b348015610a0557600080fd5b50610477601e5481565b348015610a1b57600080fd5b5061047760235481565b348015610a3157600080fd5b506104a5610a4036600461303d565b61177a565b348015610a5157600080fd5b50610477610a603660046130fb565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610a9757600080fd5b506104a5611881565b348015610aac57600080fd5b5061047760095481565b348015610ac257600080fd5b50610477600b5481565b348015610ad857600080fd5b506104a5610ae7366004613056565b6118ed565b348015610af857600080fd5b506104a561198d565b348015610b0d57600080fd5b506104a5610b1c366004612fdf565b6119c6565b348015610b2d57600080fd5b5061047760195481565b606060028054610b4690613129565b80601f0160208091040260200160405190810160405280929190818152602001828054610b7290613129565b8015610bbf5780601f10610b9457610100808354040283529160200191610bbf565b820191906000526020600020905b815481529060010190602001808311610ba257829003601f168201915b5050505050905090565b6000610bd6338484611ab1565b5060015b92915050565b6005546001600160a01b03163314610c135760405162461bcd60e51b8152600401610c0a90613163565b60405180910390fd5b6001600160a01b038116610c695760405162461bcd60e51b815260206004820152601e60248201527f5f64657657616c6c657420616464726573732063616e6e6f74206265203000006044820152606401610c0a565b600f80546001600160a01b0319166001600160a01b0392909216919091179055565b6000610c98848484611bd6565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610d1d5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610c0a565b610d2a8533858403611ab1565b60019150505b9392505050565b6005546001600160a01b03163314610d615760405162461bcd60e51b8152600401610c0a90613163565b670de0b6b3a76400006103e8610d7660045490565b610d819060026131ae565b610d8b91906131c5565b610d9591906131c5565b811015610df65760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152687468616e20302e322560b81b6064820152608401610c0a565b610e0881670de0b6b3a76400006131ae565b60068190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de41009906020015b60405180910390a150565b6005546001600160a01b03163314610e6e5760405162461bcd60e51b8152600401610c0a90613163565b601983905560178490556018829055601a8190558082610e8e85876131e7565b610e9891906131e7565b610ea291906131e7565b601681905560031015610ee15760405162461bcd60e51b8152602060048201526007602482015266019929036b0bc160cd1b6044820152606401610c0a565b50505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610bd6918590610f1e9086906131e7565b611ab1565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b03163314610f685760405162461bcd60e51b8152600401610c0a90613163565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b03163314610fdc5760405162461bcd60e51b8152600401610c0a90613163565b6004546006556004546008556004546007556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6005546001600160a01b031633146110435760405162461bcd60e51b8152600401610c0a90613163565b806110b657600c546001600160a01b03908116908316036110b65760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610c0a565b6001600160a01b03919091166000908152602660205260409020805460ff1916911515919091179055565b6005546001600160a01b0316331461110b5760405162461bcd60e51b8152600401610c0a90613163565b60145462010000900460ff16156111645760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610c0a565b6014805462ffff0019166201010017905543600a556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a1565b606060038054610b4690613129565b6005546001600160a01b031633146111dd5760405162461bcd60e51b8152600401610c0a90613163565b600c546001600160a01b03908116908316036112615760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610c0a565b61126b82826127f1565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b60095430906112b582610f23565b10156112c057600080fd5b6112cb84848461281f565b15610ee157600d805460ff60a01b1916600160a01b1790556112eb6128b8565b600d805460ff60a01b1916905550505050565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156113805760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610c0a565b61138d3385858403611ab1565b5060019392505050565b6000610bd6338484611bd6565b6005546001600160a01b031633146113ce5760405162461bcd60e51b8152600401610c0a90613163565b6001600160a01b0381166114305760405162461bcd60e51b8152602060048201526024808201527f5f6d61726b6574696e6757616c6c657420616464726573732063616e6e6f74206044820152630626520360e41b6064820152608401610c0a565b600e80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b0316331461147c5760405162461bcd60e51b8152600401610c0a90613163565b6001600160a01b038216600081815260256020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146115055760405162461bcd60e51b8152600401610c0a90613163565b670de0b6b3a76400006103e861151a60045490565b6115259060036131ae565b61152f91906131c5565b61153991906131c5565b81101561159d5760405162461bcd60e51b815260206004820152602c60248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f7760448201526b6572207468616e20302e332560a01b6064820152608401610c0a565b6115af81670de0b6b3a76400006131ae565b60078190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc90602001610e39565b6005546001600160a01b0316331461160e5760405162461bcd60e51b8152600401610c0a90613163565b6001600160a01b03166000908152601260205260409020805460ff19169055565b6005546001600160a01b031633146116595760405162461bcd60e51b8152600401610c0a90613163565b620186a061166660045490565b6116719060016131ae565b61167b91906131c5565b8110156116e85760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610c0a565b6103e86116f460045490565b6116ff9060016131ae565b61170991906131c5565b8111156117755760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171892903a37ba30b61039bab838363c9760611b6064820152608401610c0a565b600955565b6005546001600160a01b031633146117a45760405162461bcd60e51b8152600401610c0a90613163565b670de0b6b3a76400006103e86117b960045490565b6117c49060026131ae565b6117ce91906131c5565b6117d891906131c5565b81101561183a5760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e322560b01b6064820152608401610c0a565b61184c81670de0b6b3a76400006131ae565b60088190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e90602001610e39565b6005546001600160a01b031633146118ab5760405162461bcd60e51b8152600401610c0a90613163565b604051600090339047908381818185875af1925050503d8060008114610ee1576040519150601f19603f3d011682016040523d82523d6000602084013e610ee1565b6005546001600160a01b031633146119175760405162461bcd60e51b8152600401610c0a90613163565b601e839055601c849055601d829055601f819055808261193785876131e7565b61194191906131e7565b61194b91906131e7565b601b81905560031015610ee15760405162461bcd60e51b815260206004820152600a6024820152693325206d61782066656560b01b6044820152606401610c0a565b6005546001600160a01b031633146119b75760405162461bcd60e51b8152600401610c0a90613163565b6014805463ff00000019169055565b6005546001600160a01b031633146119f05760405162461bcd60e51b8152600401610c0a90613163565b6001600160a01b038116611a555760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c0a565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038316611b135760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610c0a565b6001600160a01b038216611b745760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610c0a565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b038316611bfc5760405162461bcd60e51b8152600401610c0a906131fa565b6001600160a01b038216611c225760405162461bcd60e51b8152600401610c0a9061323f565b60008111611c725760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610c0a565b60145462010000900460ff16611d06576001600160a01b03831660009081526025602052604090205460ff1680611cc157506001600160a01b03821660009081526025602052604090205460ff165b611d065760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610c0a565b600b5415611db0576001600160a01b03831660009081526012602052604090205460ff161580611d4357506005546001600160a01b038381169116145b80611d5857506001600160a01b03821661dead145b611db05760405162461bcd60e51b815260206004820152602360248201527f626f742070726f74656374696f6e206d656368616e69736d20697320656d626560448201526219195960ea1b6064820152608401610c0a565b601454429060ff1615612247576005546001600160a01b03858116911614801590611de957506005546001600160a01b03848116911614155b8015611dfd57506001600160a01b03831615155b8015611e1457506001600160a01b03831661dead14155b8015611e3957506001600160a01b03841660009081526025602052604090205460ff16155b8015611e5e57506001600160a01b03831660009081526025602052604090205460ff16155b15611fd6576014546301000000900460ff1615611fd6576001600160a01b038416600090815260246020526040812054600d5460ff9182161592600160a01b9091049091161590828015611eaf5750815b600d549091506001600160a01b03878116911614801590611ede5750600c546001600160a01b03878116911614155b15611fa157611eee600243613282565b32600090815260116020526040902054108015611f2c5750611f11600243613282565b6001600160a01b038716600090815260116020526040902054105b611f785760405162461bcd60e51b815260206004820152601d60248201527f5f7472616e736665723a2064656c61792077617320656e61626c65642e0000006044820152606401610c0a565b3260009081526011602052604080822043908190556001600160a01b0389168352912055611fd2565b8015611fd2576001600160a01b038716600090815260106020526040902054601354811180611fcf57600080fd5b50505b5050505b6001600160a01b038416600090815260266020908152604080832054600d54602490935292205460ff92831692600160a01b9092048216159116801561203557506001600160a01b03851660009081526026602052604090205460ff16155b156121015760065484111561209d5760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610c0a565b6007546120a986610f23565b6120b390866131e7565b11156120fc5760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08115e18d95959081b585e081dd85b1b195d60421b6044820152606401610c0a565b612244565b80801561210b5750815b1561211a576013839055612244565b6001600160a01b03851660009081526024602052604090205460ff16801561215b57506001600160a01b03861660009081526026602052604090205460ff16155b156121c5576008548411156120fc5760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610c0a565b6001600160a01b03851660009081526026602052604090205460ff16612244576007546121f186610f23565b6121fb90866131e7565b11156122445760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08115e18d95959081b585e081dd85b1b195d60421b6044820152606401610c0a565b50505b600061225230610f23565b600954909150811080159081906122705750601454610100900460ff165b80156122865750600d54600160a01b900460ff16155b80156122ab57506001600160a01b03861660009081526024602052604090205460ff16155b80156122d057506001600160a01b03861660009081526025602052604090205460ff16155b80156122f557506001600160a01b03851660009081526025602052604090205460ff16155b1561232357600d805460ff60a01b1916600160a01b1790556123156128b8565b600d805460ff60a01b191690555b6001600160a01b038087166000908152602460209081526040808320549389168352601090915281205460019260ff169190159061236089610f23565b6001600160a01b038b166000908152602560205260409020549015915060ff16806123a357506001600160a01b03891660009081526025602052604090205460ff165b156123ad57600093505b8180156123b75750825b156123de5780156123de576001600160a01b03891660009081526010602052604090208790555b600084156127d957600b544310801561240f57506001600160a01b038b1660009081526024602052604090205460ff165b801561243457506001600160a01b038a1660009081526024602052604090205460ff16155b801561244257506000601654115b156125c2576001600160a01b038a1660009081526012602052604090205460ff166124e2576001600160a01b038a166000908152601260205260408120805460ff1916600190811790915560158054919290916124a09084906131e7565b90915550506040516001600160a01b038b1681527f3d71e4a70676213519dc777e6e5b0ac4d021b9d144b673b89d0df519a879a83e9060200160405180910390a15b60646124ef8a60636131ae565b6124f991906131c5565b90506016546019548261250c91906131ae565b61251691906131c5565b6022600082825461252791906131e7565b909155505060165460175461253c90836131ae565b61254691906131c5565b6020600082825461255791906131e7565b909155505060165460185461256c90836131ae565b61257691906131c5565b6021600082825461258791906131e7565b9091555050601654601a5461259c90836131ae565b6125a691906131c5565b602360008282546125b791906131e7565b909155506127bb9050565b6001600160a01b038a1660009081526024602052604090205460ff1680156125ec57506000601b54115b156126ae576064601b548a61260191906131ae565b61260b91906131c5565b9050601b54601e548261261e91906131ae565b61262891906131c5565b6022600082825461263991906131e7565b9091555050601b54601c5461264e90836131ae565b61265891906131c5565b6020600082825461266991906131e7565b9091555050601b54601d5461267e90836131ae565b61268891906131c5565b6021600082825461269991906131e7565b9091555050601b54601f5461259c90836131ae565b6001600160a01b038b1660009081526024602052604090205460ff1680156126d857506000601654115b156127bb5760646016548a6126ed91906131ae565b6126f791906131c5565b90506016546019548261270a91906131ae565b61271491906131c5565b6022600082825461272591906131e7565b909155505060165460175461273a90836131ae565b61274491906131c5565b6020600082825461275591906131e7565b909155505060165460185461276a90836131ae565b61277491906131c5565b6021600082825461278591906131e7565b9091555050601654601a5461279a90836131ae565b6127a491906131c5565b602360008282546127b591906131e7565b90915550505b80156127cc576127cc8b3083612ac0565b6127d6818a613282565b98505b6127e48b8b8b612ac0565b5050505050505050505050565b6001600160a01b0382166000908152602460205260409020805460ff191682151517905561126b8282612c15565b3360008181526025602052604081205490919060ff1630838261287c5760235461284883610f23565b1015801561285857506000602354115b156128695761286984602354612c78565b505060006023555060019150610d309050565b600061288783610f23565b11156128ad578660000361289f5760138690556128a9565b6128a98888612c78565b5060005b9350610d3092505050565b60006023541180156128d457506023546128d130610f23565b10155b156128e5576128e530602354612c78565b600060238190556128f530610f23565b9050600060215460205460225461290c91906131e7565b61291691906131e7565b9050811580612923575080155b1561292c575050565b60095461293a90600a6131ae565b8211156129525760095461294f90600a6131ae565b91505b60006002826022548561296591906131ae565b61296f91906131c5565b61297991906131c5565b905061298d6129888285613282565b612d41565b602254479081906000906129a3906002906131c5565b6129ad9086613282565b6020546129ba90856131ae565b6129c491906131c5565b9050600060026022546129d791906131c5565b6129e19087613282565b6021546129ee90866131ae565b6129f891906131c5565b9050612a0481836131e7565b612a0e9084613282565b600060228190556020819055602181905560235592508415801590612a335750600083115b15612a4257612a428584612e9b565b600f546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015612a7c573d6000803e3d6000fd5b50600e546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015612ab6573d6000803e3d6000fd5b5050505050505050565b6001600160a01b038316612ae65760405162461bcd60e51b8152600401610c0a906131fa565b6001600160a01b038216612b0c5760405162461bcd60e51b8152600401610c0a9061323f565b6001600160a01b03831660009081526020819052604090205481811015612b845760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610c0a565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290612bbb9084906131e7565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612c0791815260200190565b60405180910390a350505050565b6001600160a01b038216600081815260266020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6001600160a01b038216612ca85760405162461bcd60e51b81526020600482015260006024820152604401610c0a565b6001600160a01b03821660009081526020819052604090205481811015612ceb5760405162461bcd60e51b81526020600482015260006024820152604401610c0a565b6001600160a01b0383166000818152602081815260408083208686039055600480548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101611bc9565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612d7657612d76613295565b6001600160a01b03928316602091820292909201810191909152600d54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612dcf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612df391906132ab565b81600181518110612e0657612e06613295565b6001600160a01b039283166020918202929092010152600d54612e2c9130911684611ab1565b600d5460405163791ac94760e01b81526001600160a01b039091169063791ac94790612e659085906000908690309042906004016132c8565b600060405180830381600087803b158015612e7f57600080fd5b505af1158015612e93573d6000803e3d6000fd5b505050505050565b600d54612eb39030906001600160a01b031684611ab1565b600d5460405163f305d71960e01b815230600482015260248101849052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af1158015612f21573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612f469190613339565b5050505050565b600060208083528351808285015260005b81811015612f7a57858101830151858201604001528201612f5e565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114612fb057600080fd5b50565b60008060408385031215612fc657600080fd5b8235612fd181612f9b565b946020939093013593505050565b600060208284031215612ff157600080fd5b8135610d3081612f9b565b60008060006060848603121561301157600080fd5b833561301c81612f9b565b9250602084013561302c81612f9b565b929592945050506040919091013590565b60006020828403121561304f57600080fd5b5035919050565b6000806000806080858703121561306c57600080fd5b5050823594602084013594506040840135936060013592509050565b6000806040838503121561309b57600080fd5b82356130a681612f9b565b9150602083013580151581146130bb57600080fd5b809150509250929050565b6000806000606084860312156130db57600080fd5b83356130e681612f9b565b95602085013595506040909401359392505050565b6000806040838503121561310e57600080fd5b823561311981612f9b565b915060208301356130bb81612f9b565b600181811c9082168061313d57607f821691505b60208210810361315d57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610bda57610bda613198565b6000826131e257634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610bda57610bda613198565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610bda57610bda613198565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156132bd57600080fd5b8151610d3081612f9b565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156133185784516001600160a01b0316835293830193918301916001016132f3565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561334e57600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220c23a91bd63aed63fa55cb6d38a9160cbe50812f722f43196aa44c6dc13c7d45464736f6c634300081200334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65728be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0

Deployed Bytecode

0x6080604052600436106103c75760003560e01c80638da5cb5b116101f2578063c5b45ec01161010d578063dd62ed3e116100a0578063e7ad9fcd1161006f578063e7ad9fcd14610acc578063e884f26014610aec578063f2fde38b14610b01578063fd35d1d614610b2157600080fd5b8063dd62ed3e14610a45578063e086e5ec14610a8b578063e2f4560514610aa0578063e611bfdb14610ab657600080fd5b8063d257b34f116100dc578063d257b34f146109d9578063d4384318146109f9578063dbbfff6314610a0f578063dc3f0d0f14610a2557600080fd5b8063c5b45ec01461096c578063c876d0b91461098c578063cd51e6d4146109ad578063d0a39814146109c357600080fd5b8063aa4bde2811610185578063bbc0c74211610154578063bbc0c742146108dc578063c0246668146108fc578063c18bc1951461091c578063c424134c1461093c57600080fd5b8063aa4bde2814610879578063aacebbe31461088f578063abe43b1b146108af578063b9e93700146108c657600080fd5b80639f27853e116101c15780639f27853e146108035780639fccce3214610823578063a457c2d714610839578063a9059cbb1461085957600080fd5b80638da5cb5b1461078057806395d89b411461079e57806398e2ebbf146107b35780639a7a23d6146107e357600080fd5b806359d24b8e116102e2578063751039fc1161027557806382cab1301161024457806382cab13014610729578063868f0a741461073f57806388e765ff146107555780638a8c523c1461076b57600080fd5b8063751039fc146106b15780637571336a146106c657806376c702bf146106e657806377ec782e146106fc57600080fd5b80636ddd1713116102b15780636ddd17131461064757806370a0823114610666578063715018a614610686578063737952e61461069b57600080fd5b806359d24b8e146105d55780635c457eae1461060557806366d602ae1461061b5780636b0a894c1461063157600080fd5b80632be32b611161035a5780634377649911610329578063437764991461056f578063446d21171461058557806349bd5a5e1461059b5780634a62bb65146105bb57600080fd5b80632be32b61146104f35780632e6ed7ef14610513578063313ce56714610533578063395093511461054f57600080fd5b80631816467f116103965780631816467f146104855780631a8145bb146104a75780631f3fed8f146104bd57806323b872dd146104d357600080fd5b806306fdde03146103d3578063095ea7b3146103fe5780631694505e1461042e57806318160ddd1461046657600080fd5b366103ce57005b600080fd5b3480156103df57600080fd5b506103e8610b37565b6040516103f59190612f4d565b60405180910390f35b34801561040a57600080fd5b5061041e610419366004612fb3565b610bc9565b60405190151581526020016103f5565b34801561043a57600080fd5b50600d5461044e906001600160a01b031681565b6040516001600160a01b0390911681526020016103f5565b34801561047257600080fd5b506004545b6040519081526020016103f5565b34801561049157600080fd5b506104a56104a0366004612fdf565b610be0565b005b3480156104b357600080fd5b5061047760225481565b3480156104c957600080fd5b5061047760205481565b3480156104df57600080fd5b5061041e6104ee366004612ffc565b610c8b565b3480156104ff57600080fd5b506104a561050e36600461303d565b610d37565b34801561051f57600080fd5b506104a561052e366004613056565b610e44565b34801561053f57600080fd5b50604051601281526020016103f5565b34801561055b57600080fd5b5061041e61056a366004612fb3565b610ee7565b34801561057b57600080fd5b5061047760185481565b34801561059157600080fd5b5061047760135481565b3480156105a757600080fd5b50600c5461044e906001600160a01b031681565b3480156105c757600080fd5b5060145461041e9060ff1681565b3480156105e157600080fd5b5061041e6105f0366004612fdf565b60126020526000908152604090205460ff1681565b34801561061157600080fd5b50610477601a5481565b34801561062757600080fd5b5061047760085481565b34801561063d57600080fd5b5061047760155481565b34801561065357600080fd5b5060145461041e90610100900460ff1681565b34801561067257600080fd5b50610477610681366004612fdf565b610f23565b34801561069257600080fd5b506104a5610f3e565b3480156106a757600080fd5b50610477601c5481565b3480156106bd57600080fd5b506104a5610fb2565b3480156106d257600080fd5b506104a56106e1366004613088565b611019565b3480156106f257600080fd5b5061047760175481565b34801561070857600080fd5b50610477610717366004612fdf565b60106020526000908152604090205481565b34801561073557600080fd5b50610477601f5481565b34801561074b57600080fd5b50610477601d5481565b34801561076157600080fd5b5061047760065481565b34801561077757600080fd5b506104a56110e1565b34801561078c57600080fd5b506005546001600160a01b031661044e565b3480156107aa57600080fd5b506103e86111a4565b3480156107bf57600080fd5b5061041e6107ce366004612fdf565b60246020526000908152604090205460ff1681565b3480156107ef57600080fd5b506104a56107fe366004613088565b6111b3565b34801561080f57600080fd5b506104a561081e3660046130c6565b6112a7565b34801561082f57600080fd5b5061047760215481565b34801561084557600080fd5b5061041e610854366004612fb3565b6112fe565b34801561086557600080fd5b5061041e610874366004612fb3565b611397565b34801561088557600080fd5b5061047760075481565b34801561089b57600080fd5b506104a56108aa366004612fdf565b6113a4565b3480156108bb57600080fd5b50600b54431061041e565b3480156108d257600080fd5b5061047760165481565b3480156108e857600080fd5b5060145461041e9062010000900460ff1681565b34801561090857600080fd5b506104a5610917366004613088565b611452565b34801561092857600080fd5b506104a561093736600461303d565b6114db565b34801561094857600080fd5b5061041e610957366004612fdf565b60266020526000908152604090205460ff1681565b34801561097857600080fd5b506104a5610987366004612fdf565b6115e4565b34801561099857600080fd5b5060145461041e906301000000900460ff1681565b3480156109b957600080fd5b50610477600a5481565b3480156109cf57600080fd5b50610477601b5481565b3480156109e557600080fd5b506104a56109f436600461303d565b61162f565b348015610a0557600080fd5b50610477601e5481565b348015610a1b57600080fd5b5061047760235481565b348015610a3157600080fd5b506104a5610a4036600461303d565b61177a565b348015610a5157600080fd5b50610477610a603660046130fb565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610a9757600080fd5b506104a5611881565b348015610aac57600080fd5b5061047760095481565b348015610ac257600080fd5b50610477600b5481565b348015610ad857600080fd5b506104a5610ae7366004613056565b6118ed565b348015610af857600080fd5b506104a561198d565b348015610b0d57600080fd5b506104a5610b1c366004612fdf565b6119c6565b348015610b2d57600080fd5b5061047760195481565b606060028054610b4690613129565b80601f0160208091040260200160405190810160405280929190818152602001828054610b7290613129565b8015610bbf5780601f10610b9457610100808354040283529160200191610bbf565b820191906000526020600020905b815481529060010190602001808311610ba257829003601f168201915b5050505050905090565b6000610bd6338484611ab1565b5060015b92915050565b6005546001600160a01b03163314610c135760405162461bcd60e51b8152600401610c0a90613163565b60405180910390fd5b6001600160a01b038116610c695760405162461bcd60e51b815260206004820152601e60248201527f5f64657657616c6c657420616464726573732063616e6e6f74206265203000006044820152606401610c0a565b600f80546001600160a01b0319166001600160a01b0392909216919091179055565b6000610c98848484611bd6565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610d1d5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610c0a565b610d2a8533858403611ab1565b60019150505b9392505050565b6005546001600160a01b03163314610d615760405162461bcd60e51b8152600401610c0a90613163565b670de0b6b3a76400006103e8610d7660045490565b610d819060026131ae565b610d8b91906131c5565b610d9591906131c5565b811015610df65760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152687468616e20302e322560b81b6064820152608401610c0a565b610e0881670de0b6b3a76400006131ae565b60068190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de41009906020015b60405180910390a150565b6005546001600160a01b03163314610e6e5760405162461bcd60e51b8152600401610c0a90613163565b601983905560178490556018829055601a8190558082610e8e85876131e7565b610e9891906131e7565b610ea291906131e7565b601681905560031015610ee15760405162461bcd60e51b8152602060048201526007602482015266019929036b0bc160cd1b6044820152606401610c0a565b50505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610bd6918590610f1e9086906131e7565b611ab1565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b03163314610f685760405162461bcd60e51b8152600401610c0a90613163565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b03163314610fdc5760405162461bcd60e51b8152600401610c0a90613163565b6004546006556004546008556004546007556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6005546001600160a01b031633146110435760405162461bcd60e51b8152600401610c0a90613163565b806110b657600c546001600160a01b03908116908316036110b65760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610c0a565b6001600160a01b03919091166000908152602660205260409020805460ff1916911515919091179055565b6005546001600160a01b0316331461110b5760405162461bcd60e51b8152600401610c0a90613163565b60145462010000900460ff16156111645760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610c0a565b6014805462ffff0019166201010017905543600a556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a1565b606060038054610b4690613129565b6005546001600160a01b031633146111dd5760405162461bcd60e51b8152600401610c0a90613163565b600c546001600160a01b03908116908316036112615760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610c0a565b61126b82826127f1565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b60095430906112b582610f23565b10156112c057600080fd5b6112cb84848461281f565b15610ee157600d805460ff60a01b1916600160a01b1790556112eb6128b8565b600d805460ff60a01b1916905550505050565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156113805760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610c0a565b61138d3385858403611ab1565b5060019392505050565b6000610bd6338484611bd6565b6005546001600160a01b031633146113ce5760405162461bcd60e51b8152600401610c0a90613163565b6001600160a01b0381166114305760405162461bcd60e51b8152602060048201526024808201527f5f6d61726b6574696e6757616c6c657420616464726573732063616e6e6f74206044820152630626520360e41b6064820152608401610c0a565b600e80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b0316331461147c5760405162461bcd60e51b8152600401610c0a90613163565b6001600160a01b038216600081815260256020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146115055760405162461bcd60e51b8152600401610c0a90613163565b670de0b6b3a76400006103e861151a60045490565b6115259060036131ae565b61152f91906131c5565b61153991906131c5565b81101561159d5760405162461bcd60e51b815260206004820152602c60248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f7760448201526b6572207468616e20302e332560a01b6064820152608401610c0a565b6115af81670de0b6b3a76400006131ae565b60078190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc90602001610e39565b6005546001600160a01b0316331461160e5760405162461bcd60e51b8152600401610c0a90613163565b6001600160a01b03166000908152601260205260409020805460ff19169055565b6005546001600160a01b031633146116595760405162461bcd60e51b8152600401610c0a90613163565b620186a061166660045490565b6116719060016131ae565b61167b91906131c5565b8110156116e85760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610c0a565b6103e86116f460045490565b6116ff9060016131ae565b61170991906131c5565b8111156117755760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171892903a37ba30b61039bab838363c9760611b6064820152608401610c0a565b600955565b6005546001600160a01b031633146117a45760405162461bcd60e51b8152600401610c0a90613163565b670de0b6b3a76400006103e86117b960045490565b6117c49060026131ae565b6117ce91906131c5565b6117d891906131c5565b81101561183a5760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e322560b01b6064820152608401610c0a565b61184c81670de0b6b3a76400006131ae565b60088190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e90602001610e39565b6005546001600160a01b031633146118ab5760405162461bcd60e51b8152600401610c0a90613163565b604051600090339047908381818185875af1925050503d8060008114610ee1576040519150601f19603f3d011682016040523d82523d6000602084013e610ee1565b6005546001600160a01b031633146119175760405162461bcd60e51b8152600401610c0a90613163565b601e839055601c849055601d829055601f819055808261193785876131e7565b61194191906131e7565b61194b91906131e7565b601b81905560031015610ee15760405162461bcd60e51b815260206004820152600a6024820152693325206d61782066656560b01b6044820152606401610c0a565b6005546001600160a01b031633146119b75760405162461bcd60e51b8152600401610c0a90613163565b6014805463ff00000019169055565b6005546001600160a01b031633146119f05760405162461bcd60e51b8152600401610c0a90613163565b6001600160a01b038116611a555760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c0a565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038316611b135760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610c0a565b6001600160a01b038216611b745760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610c0a565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b038316611bfc5760405162461bcd60e51b8152600401610c0a906131fa565b6001600160a01b038216611c225760405162461bcd60e51b8152600401610c0a9061323f565b60008111611c725760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610c0a565b60145462010000900460ff16611d06576001600160a01b03831660009081526025602052604090205460ff1680611cc157506001600160a01b03821660009081526025602052604090205460ff165b611d065760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610c0a565b600b5415611db0576001600160a01b03831660009081526012602052604090205460ff161580611d4357506005546001600160a01b038381169116145b80611d5857506001600160a01b03821661dead145b611db05760405162461bcd60e51b815260206004820152602360248201527f626f742070726f74656374696f6e206d656368616e69736d20697320656d626560448201526219195960ea1b6064820152608401610c0a565b601454429060ff1615612247576005546001600160a01b03858116911614801590611de957506005546001600160a01b03848116911614155b8015611dfd57506001600160a01b03831615155b8015611e1457506001600160a01b03831661dead14155b8015611e3957506001600160a01b03841660009081526025602052604090205460ff16155b8015611e5e57506001600160a01b03831660009081526025602052604090205460ff16155b15611fd6576014546301000000900460ff1615611fd6576001600160a01b038416600090815260246020526040812054600d5460ff9182161592600160a01b9091049091161590828015611eaf5750815b600d549091506001600160a01b03878116911614801590611ede5750600c546001600160a01b03878116911614155b15611fa157611eee600243613282565b32600090815260116020526040902054108015611f2c5750611f11600243613282565b6001600160a01b038716600090815260116020526040902054105b611f785760405162461bcd60e51b815260206004820152601d60248201527f5f7472616e736665723a2064656c61792077617320656e61626c65642e0000006044820152606401610c0a565b3260009081526011602052604080822043908190556001600160a01b0389168352912055611fd2565b8015611fd2576001600160a01b038716600090815260106020526040902054601354811180611fcf57600080fd5b50505b5050505b6001600160a01b038416600090815260266020908152604080832054600d54602490935292205460ff92831692600160a01b9092048216159116801561203557506001600160a01b03851660009081526026602052604090205460ff16155b156121015760065484111561209d5760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610c0a565b6007546120a986610f23565b6120b390866131e7565b11156120fc5760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08115e18d95959081b585e081dd85b1b195d60421b6044820152606401610c0a565b612244565b80801561210b5750815b1561211a576013839055612244565b6001600160a01b03851660009081526024602052604090205460ff16801561215b57506001600160a01b03861660009081526026602052604090205460ff16155b156121c5576008548411156120fc5760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610c0a565b6001600160a01b03851660009081526026602052604090205460ff16612244576007546121f186610f23565b6121fb90866131e7565b11156122445760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08115e18d95959081b585e081dd85b1b195d60421b6044820152606401610c0a565b50505b600061225230610f23565b600954909150811080159081906122705750601454610100900460ff165b80156122865750600d54600160a01b900460ff16155b80156122ab57506001600160a01b03861660009081526024602052604090205460ff16155b80156122d057506001600160a01b03861660009081526025602052604090205460ff16155b80156122f557506001600160a01b03851660009081526025602052604090205460ff16155b1561232357600d805460ff60a01b1916600160a01b1790556123156128b8565b600d805460ff60a01b191690555b6001600160a01b038087166000908152602460209081526040808320549389168352601090915281205460019260ff169190159061236089610f23565b6001600160a01b038b166000908152602560205260409020549015915060ff16806123a357506001600160a01b03891660009081526025602052604090205460ff165b156123ad57600093505b8180156123b75750825b156123de5780156123de576001600160a01b03891660009081526010602052604090208790555b600084156127d957600b544310801561240f57506001600160a01b038b1660009081526024602052604090205460ff165b801561243457506001600160a01b038a1660009081526024602052604090205460ff16155b801561244257506000601654115b156125c2576001600160a01b038a1660009081526012602052604090205460ff166124e2576001600160a01b038a166000908152601260205260408120805460ff1916600190811790915560158054919290916124a09084906131e7565b90915550506040516001600160a01b038b1681527f3d71e4a70676213519dc777e6e5b0ac4d021b9d144b673b89d0df519a879a83e9060200160405180910390a15b60646124ef8a60636131ae565b6124f991906131c5565b90506016546019548261250c91906131ae565b61251691906131c5565b6022600082825461252791906131e7565b909155505060165460175461253c90836131ae565b61254691906131c5565b6020600082825461255791906131e7565b909155505060165460185461256c90836131ae565b61257691906131c5565b6021600082825461258791906131e7565b9091555050601654601a5461259c90836131ae565b6125a691906131c5565b602360008282546125b791906131e7565b909155506127bb9050565b6001600160a01b038a1660009081526024602052604090205460ff1680156125ec57506000601b54115b156126ae576064601b548a61260191906131ae565b61260b91906131c5565b9050601b54601e548261261e91906131ae565b61262891906131c5565b6022600082825461263991906131e7565b9091555050601b54601c5461264e90836131ae565b61265891906131c5565b6020600082825461266991906131e7565b9091555050601b54601d5461267e90836131ae565b61268891906131c5565b6021600082825461269991906131e7565b9091555050601b54601f5461259c90836131ae565b6001600160a01b038b1660009081526024602052604090205460ff1680156126d857506000601654115b156127bb5760646016548a6126ed91906131ae565b6126f791906131c5565b90506016546019548261270a91906131ae565b61271491906131c5565b6022600082825461272591906131e7565b909155505060165460175461273a90836131ae565b61274491906131c5565b6020600082825461275591906131e7565b909155505060165460185461276a90836131ae565b61277491906131c5565b6021600082825461278591906131e7565b9091555050601654601a5461279a90836131ae565b6127a491906131c5565b602360008282546127b591906131e7565b90915550505b80156127cc576127cc8b3083612ac0565b6127d6818a613282565b98505b6127e48b8b8b612ac0565b5050505050505050505050565b6001600160a01b0382166000908152602460205260409020805460ff191682151517905561126b8282612c15565b3360008181526025602052604081205490919060ff1630838261287c5760235461284883610f23565b1015801561285857506000602354115b156128695761286984602354612c78565b505060006023555060019150610d309050565b600061288783610f23565b11156128ad578660000361289f5760138690556128a9565b6128a98888612c78565b5060005b9350610d3092505050565b60006023541180156128d457506023546128d130610f23565b10155b156128e5576128e530602354612c78565b600060238190556128f530610f23565b9050600060215460205460225461290c91906131e7565b61291691906131e7565b9050811580612923575080155b1561292c575050565b60095461293a90600a6131ae565b8211156129525760095461294f90600a6131ae565b91505b60006002826022548561296591906131ae565b61296f91906131c5565b61297991906131c5565b905061298d6129888285613282565b612d41565b602254479081906000906129a3906002906131c5565b6129ad9086613282565b6020546129ba90856131ae565b6129c491906131c5565b9050600060026022546129d791906131c5565b6129e19087613282565b6021546129ee90866131ae565b6129f891906131c5565b9050612a0481836131e7565b612a0e9084613282565b600060228190556020819055602181905560235592508415801590612a335750600083115b15612a4257612a428584612e9b565b600f546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015612a7c573d6000803e3d6000fd5b50600e546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015612ab6573d6000803e3d6000fd5b5050505050505050565b6001600160a01b038316612ae65760405162461bcd60e51b8152600401610c0a906131fa565b6001600160a01b038216612b0c5760405162461bcd60e51b8152600401610c0a9061323f565b6001600160a01b03831660009081526020819052604090205481811015612b845760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610c0a565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290612bbb9084906131e7565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612c0791815260200190565b60405180910390a350505050565b6001600160a01b038216600081815260266020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6001600160a01b038216612ca85760405162461bcd60e51b81526020600482015260006024820152604401610c0a565b6001600160a01b03821660009081526020819052604090205481811015612ceb5760405162461bcd60e51b81526020600482015260006024820152604401610c0a565b6001600160a01b0383166000818152602081815260408083208686039055600480548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101611bc9565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612d7657612d76613295565b6001600160a01b03928316602091820292909201810191909152600d54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612dcf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612df391906132ab565b81600181518110612e0657612e06613295565b6001600160a01b039283166020918202929092010152600d54612e2c9130911684611ab1565b600d5460405163791ac94760e01b81526001600160a01b039091169063791ac94790612e659085906000908690309042906004016132c8565b600060405180830381600087803b158015612e7f57600080fd5b505af1158015612e93573d6000803e3d6000fd5b505050505050565b600d54612eb39030906001600160a01b031684611ab1565b600d5460405163f305d71960e01b815230600482015260248101849052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af1158015612f21573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612f469190613339565b5050505050565b600060208083528351808285015260005b81811015612f7a57858101830151858201604001528201612f5e565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114612fb057600080fd5b50565b60008060408385031215612fc657600080fd5b8235612fd181612f9b565b946020939093013593505050565b600060208284031215612ff157600080fd5b8135610d3081612f9b565b60008060006060848603121561301157600080fd5b833561301c81612f9b565b9250602084013561302c81612f9b565b929592945050506040919091013590565b60006020828403121561304f57600080fd5b5035919050565b6000806000806080858703121561306c57600080fd5b5050823594602084013594506040840135936060013592509050565b6000806040838503121561309b57600080fd5b82356130a681612f9b565b9150602083013580151581146130bb57600080fd5b809150509250929050565b6000806000606084860312156130db57600080fd5b83356130e681612f9b565b95602085013595506040909401359392505050565b6000806040838503121561310e57600080fd5b823561311981612f9b565b915060208301356130bb81612f9b565b600181811c9082168061313d57607f821691505b60208210810361315d57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610bda57610bda613198565b6000826131e257634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610bda57610bda613198565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610bda57610bda613198565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156132bd57600080fd5b8151610d3081612f9b565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156133185784516001600160a01b0316835293830193918301916001016132f3565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561334e57600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220c23a91bd63aed63fa55cb6d38a9160cbe50812f722f43196aa44c6dc13c7d45464736f6c63430008120033

Deployed Bytecode Sourcemap

8267:19897:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2037:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3370:194;;;;;;;;;;-1:-1:-1;3370:194:0;;;;;:::i;:::-;;:::i;:::-;;;1188:14:1;;1181:22;1163:41;;1151:2;1136:18;3370:194:0;1023:187:1;8572:38:0;;;;;;;;;;-1:-1:-1;8572:38:0;;;;-1:-1:-1;;;;;8572:38:0;;;;;;-1:-1:-1;;;;;1402:32:1;;;1384:51;;1372:2;1357:18;8572:38:0;1215:226:1;2509:108:0;;;;;;;;;;-1:-1:-1;2597:12:0;;2509:108;;;1592:25:1;;;1580:2;1565:18;2509:108:0;1446:177:1;25321:192:0;;;;;;;;;;-1:-1:-1;25321:192:0;;;;;:::i;:::-;;:::i;:::-;;9582:33;;;;;;;;;;;;;;;;9508;;;;;;;;;;;;;;;;2833:529;;;;;;;;;;-1:-1:-1;2833:529:0;;;;;:::i;:::-;;:::i;15383:339::-;;;;;;;;;;-1:-1:-1;15383:339:0;;;;;:::i;:::-;;:::i;24223:534::-;;;;;;;;;;-1:-1:-1;24223:534:0;;;;;:::i;:::-;;:::i;2257:93::-;;;;;;;;;;-1:-1:-1;2257:93:0;;2340:2;3058:36:1;;3046:2;3031:18;2257:93:0;2916:184:1;3756:290:0;;;;;;;;;;-1:-1:-1;3756:290:0;;;;;:::i;:::-;;:::i;9201:27::-;;;;;;;;;;;;;;;;8899:23;;;;;;;;;;;;;;;;8537:28;;;;;;;;;;-1:-1:-1;8537:28:0;;;;-1:-1:-1;;;;;8537:28:0;;;8929:33;;;;;;;;;;-1:-1:-1;8929:33:0;;;;;;;;8845:47;;;;;;;;;;-1:-1:-1;8845:47:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;9275:31;;;;;;;;;;;;;;;;8382:28;;;;;;;;;;;;;;;;9093:25;;;;;;;;;;;;;;;;8969:31;;;;;;;;;;-1:-1:-1;8969:31:0;;;;;;;;;;;2358:143;;;;;;;;;;-1:-1:-1;2358:143:0;;;;;:::i;:::-;;:::i;6818:150::-;;;;;;;;;;;;;:::i;9350:34::-;;;;;;;;;;;;;;;;14376:203;;;;;;;;;;;;;:::i;23056:364::-;;;;;;;;;;-1:-1:-1;23056:364:0;;;;;:::i;:::-;;:::i;9161:33::-;;;;;;;;;;;;;;;;8715:52;;;;;;;;;;-1:-1:-1;8715:52:0;;;;;:::i;:::-;;;;;;;;;;;;;;9467:32;;;;;;;;;;;;;;;;9391:28;;;;;;;;;;;;;;;;8311:27;;;;;;;;;;;;;;;;12529:243;;;;;;;;;;;;;:::i;6731:79::-;;;;;;;;;;-1:-1:-1;6796:6:0;;-1:-1:-1;;;;;6796:6:0;6731:79;;2145:104;;;;;;;;;;;;;:::i;9662:39::-;;;;;;;;;;-1:-1:-1;9662:39:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;23621:364;;;;;;;;;;-1:-1:-1;23621:364:0;;;;;:::i;:::-;;:::i;14587:433::-;;;;;;;;;;-1:-1:-1;14587:433:0;;;;;:::i;:::-;;:::i;9548:27::-;;;;;;;;;;;;;;;;4054:475;;;;;;;;;;-1:-1:-1;4054:475:0;;;;;:::i;:::-;;:::i;2625:200::-;;;;;;;;;;-1:-1:-1;2625:200:0;;;;;:::i;:::-;;:::i;8345:30::-;;;;;;;;;;;;;;;;25521:281;;;;;;;;;;-1:-1:-1;25521:281:0;;;;;:::i;:::-;;:::i;25810:113::-;;;;;;;;;;-1:-1:-1;25901:14:0;;25886:12;:29;25810:113;;9127:27;;;;;;;;;;;;;;;;9007:33;;;;;;;;;;-1:-1:-1;9007:33:0;;;;;;;;;;;23428:185;;;;;;;;;;-1:-1:-1;23428:185:0;;;;;:::i;:::-;;:::i;16166:363::-;;;;;;;;;;-1:-1:-1;16166:363:0;;;;;:::i;:::-;;:::i;9770:57::-;;;;;;;;;;-1:-1:-1;9770:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;14259:109;;;;;;;;;;-1:-1:-1;14259:109:0;;;;;:::i;:::-;;:::i;9047:39::-;;;;;;;;;;-1:-1:-1;9047:39:0;;;;;;;;;;;8459:31;;;;;;;;;;;;;;;;9315:28;;;;;;;;;;;;;;;;15730:428;;;;;;;;;;-1:-1:-1;15730:428:0;;;;;:::i;:::-;;:::i;9426:34::-;;;;;;;;;;;;;;;;9622:31;;;;;;;;;;;;;;;;15028:347;;;;;;;;;;-1:-1:-1;15028:347:0;;;;;:::i;:::-;;:::i;3572:176::-;;;;;;;;;;-1:-1:-1;3572:176:0;;;;;:::i;:::-;-1:-1:-1;;;;;3713:18:0;;;3686:7;3713:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;3572:176;25931:156;;;;;;;;;;;;;:::i;8419:33::-;;;;;;;;;;;;;;;;8497;;;;;;;;;;;;;;;;24765:548;;;;;;;;;;-1:-1:-1;24765:548:0;;;;;:::i;:::-;;:::i;14153:98::-;;;;;;;;;;;;;:::i;6976:281::-;;;;;;;;;;-1:-1:-1;6976:281:0;;;;;:::i;:::-;;:::i;9235:33::-;;;;;;;;;;;;;;;;2037:100;2091:13;2124:5;2117:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2037:100;:::o;3370:194::-;3478:4;3495:39;1336:10;3518:7;3527:6;3495:8;:39::i;:::-;-1:-1:-1;3552:4:0;3370:194;;;;;:::o;25321:192::-;6644:6;;-1:-1:-1;;;;;6644:6:0;1336:10;6644:22;6636:67;;;;-1:-1:-1;;;6636:67:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;25404:24:0;::::1;25396:67;;;::::0;-1:-1:-1;;;25396:67:0;;5463:2:1;25396:67:0::1;::::0;::::1;5445:21:1::0;5502:2;5482:18;;;5475:30;5541:32;5521:18;;;5514:60;5591:18;;25396:67:0::1;5261:354:1::0;25396:67:0::1;25474:9;:31:::0;;-1:-1:-1;;;;;;25474:31:0::1;-1:-1:-1::0;;;;;25474:31:0;;;::::1;::::0;;;::::1;::::0;;25321:192::o;2833:529::-;2973:4;2990:36;3000:6;3008:9;3019:6;2990:9;:36::i;:::-;-1:-1:-1;;;;;3066:19:0;;3039:24;3066:19;;;:11;:19;;;;;;;;1336:10;3066:33;;;;;;;;3132:26;;;;3110:116;;;;-1:-1:-1;;;3110:116:0;;5822:2:1;3110:116:0;;;5804:21:1;5861:2;5841:18;;;5834:30;5900:34;5880:18;;;5873:62;-1:-1:-1;;;5951:18:1;;;5944:38;5999:19;;3110:116:0;5620:404:1;3110:116:0;3262:57;3271:6;1336:10;3312:6;3293:16;:25;3262:8;:57::i;:::-;3350:4;3343:11;;;2833:529;;;;;;:::o;15383:339::-;6644:6;;-1:-1:-1;;;;;6644:6:0;1336:10;6644:22;6636:67;;;;-1:-1:-1;;;6636:67:0;;;;;;;:::i;:::-;15538:4:::1;15530;15509:13;2597:12:::0;;;2509:108;15509:13:::1;:17;::::0;15525:1:::1;15509:17;:::i;:::-;15508:26;;;;:::i;:::-;15507:35;;;;:::i;:::-;15488:15;:54;;15466:145;;;::::0;-1:-1:-1;;;15466:145:0;;6758:2:1;15466:145:0::1;::::0;::::1;6740:21:1::0;6797:2;6777:18;;;6770:30;6836:34;6816:18;;;6809:62;-1:-1:-1;;;6887:18:1;;;6880:39;6936:19;;15466:145:0::1;6556:405:1::0;15466:145:0::1;15637:28;:15:::0;15656:8:::1;15637:28;:::i;:::-;15622:12;:43:::0;;;15681:33:::1;::::0;1592:25:1;;;15681:33:0::1;::::0;1580:2:1;1565:18;15681:33:0::1;;;;;;;;15383:339:::0;:::o;24223:534::-;6644:6;;-1:-1:-1;;;;;6644:6:0;1336:10;6644:22;6636:67;;;;-1:-1:-1;;;6636:67:0;;;;;;;:::i;:::-;24400:18:::1;:34:::0;;;24445:18:::1;:34:::0;;;24490:12:::1;:22:::0;;;24523:16:::1;:27:::0;;;24542:8;24505:7;24589:52:::1;24421:13:::0;24466;24589:52:::1;:::i;:::-;:80;;;;:::i;:::-;:112;;;;:::i;:::-;24561:12;:140:::0;;;24736:1:::1;-1:-1:-1::0;24720:17:0::1;24712:37;;;::::0;-1:-1:-1;;;24712:37:0;;7298:2:1;24712:37:0::1;::::0;::::1;7280:21:1::0;7337:1;7317:18;;;7310:29;-1:-1:-1;;;7355:18:1;;;7348:37;7402:18;;24712:37:0::1;7096:330:1::0;24712:37:0::1;24223:534:::0;;;;:::o;3756:290::-;1336:10;3869:4;3958:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;3958:34:0;;;;;;;;;;3869:4;;3886:130;;3936:7;;3958:47;;3995:10;;3958:47;:::i;:::-;3886:8;:130::i;2358:143::-;-1:-1:-1;;;;;2475:18:0;2448:7;2475:18;;;;;;;;;;;;2358:143::o;6818:150::-;6644:6;;-1:-1:-1;;;;;6644:6:0;1336:10;6644:22;6636:67;;;;-1:-1:-1;;;6636:67:0;;;;;;;:::i;:::-;6911:6:::1;::::0;6890:40:::1;::::0;6927:1:::1;::::0;-1:-1:-1;;;;;6911:6:0::1;::::0;6890:40:::1;::::0;6927:1;;6890:40:::1;6941:6;:19:::0;;-1:-1:-1;;;;;;6941:19:0::1;::::0;;6818:150::o;14376:203::-;6644:6;;-1:-1:-1;;;;;6644:6:0;1336:10;6644:22;6636:67;;;;-1:-1:-1;;;6636:67:0;;;;;;;:::i;:::-;2597:12;;14430::::1;:28:::0;2597:12;;14469:13:::1;:29:::0;2597:12;;14509:15:::1;:31:::0;14556:15:::1;::::0;::::1;::::0;;;::::1;14376:203::o:0;23056:364::-;6644:6;;-1:-1:-1;;;;;6644:6:0;1336:10;6644:22;6636:67;;;;-1:-1:-1;;;6636:67:0;;;;;;;:::i;:::-;23187:11:::1;23182:171;;23253:13;::::0;-1:-1:-1;;;;;23253:13:0;;::::1;23241:25:::0;;::::1;::::0;23215:126:::1;;;::::0;-1:-1:-1;;;23215:126:0;;7633:2:1;23215:126:0::1;::::0;::::1;7615:21:1::0;7672:2;7652:18;;;7645:30;7711:34;7691:18;;;7684:62;-1:-1:-1;;;7762:18:1;;;7755:37;7809:19;;23215:126:0::1;7431:403:1::0;23215:126:0::1;-1:-1:-1::0;;;;;23363:35:0;;;::::1;;::::0;;;:25:::1;:35;::::0;;;;:49;;-1:-1:-1;;23363:49:0::1;::::0;::::1;;::::0;;;::::1;::::0;;23056:364::o;12529:243::-;6644:6;;-1:-1:-1;;;;;6644:6:0;1336:10;6644:22;6636:67;;;;-1:-1:-1;;;6636:67:0;;;;;;;:::i;:::-;12593:13:::1;::::0;;;::::1;;;12592:14;12584:50;;;::::0;-1:-1:-1;;;12584:50:0;;8041:2:1;12584:50:0::1;::::0;::::1;8023:21:1::0;8080:2;8060:18;;;8053:30;8119:25;8099:18;;;8092:53;8162:18;;12584:50:0::1;7839:347:1::0;12584:50:0::1;12645:11;:18:::0;;-1:-1:-1;;12674:20:0;;;;;12720:12:::1;12705;:27:::0;12748:16:::1;::::0;::::1;::::0;-1:-1:-1;;12748:16:0::1;12529:243::o:0;2145:104::-;2201:13;2234:7;2227:14;;;;;:::i;23621:364::-;6644:6;;-1:-1:-1;;;;;6644:6:0;1336:10;6644:22;6636:67;;;;-1:-1:-1;;;6636:67:0;;;;;;;:::i;:::-;23769:13:::1;::::0;-1:-1:-1;;;;;23769:13:0;;::::1;23761:21:::0;;::::1;::::0;23739:128:::1;;;::::0;-1:-1:-1;;;23739:128:0;;8393:2:1;23739:128:0::1;::::0;::::1;8375:21:1::0;8432:2;8412:18;;;8405:30;8471:34;8451:18;;;8444:62;8542:27;8522:18;;;8515:55;8587:19;;23739:128:0::1;8191:421:1::0;23739:128:0::1;23880:41;23909:4;23915:5;23880:28;:41::i;:::-;23937:40;::::0;;::::1;;::::0;-1:-1:-1;;;;;23937:40:0;::::1;::::0;::::1;::::0;;;::::1;23621:364:::0;;:::o;14587:433::-;14819:18;;14763:4;;14787:28;14763:4;14787:9;:28::i;:::-;:50;;14779:59;;;;;;14853:60;14870:14;14886:13;14901:11;14853:16;:60::i;:::-;14849:164;;;14930:8;:15;;-1:-1:-1;;;;14930:15:0;-1:-1:-1;;;14930:15:0;;;14960:10;:8;:10::i;:::-;14985:8;:16;;-1:-1:-1;;;;14985:16:0;;;14716:304;14587:433;;;:::o;4054:475::-;1336:10;4172:4;4216:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;4216:34:0;;;;;;;;;;4283:35;;;;4261:122;;;;-1:-1:-1;;;4261:122:0;;8819:2:1;4261:122:0;;;8801:21:1;8858:2;8838:18;;;8831:30;8897:34;8877:18;;;8870:62;-1:-1:-1;;;8948:18:1;;;8941:35;8993:19;;4261:122:0;8617:401:1;4261:122:0;4419:67;1336:10;4442:7;4470:15;4451:16;:34;4419:8;:67::i;:::-;-1:-1:-1;4517:4:0;;4054:475;-1:-1:-1;;;4054:475:0:o;2625:200::-;2736:4;2753:42;1336:10;2777:9;2788:6;2753:9;:42::i;25521:281::-;6644:6;;-1:-1:-1;;;;;6644:6:0;1336:10;6644:22;6636:67;;;;-1:-1:-1;;;6636:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25646:30:0;::::1;25624:116;;;::::0;-1:-1:-1;;;25624:116:0;;9225:2:1;25624:116:0::1;::::0;::::1;9207:21:1::0;9264:2;9244:18;;;9237:30;9303:34;9283:18;;;9276:62;-1:-1:-1;;;9354:18:1;;;9347:34;9398:19;;25624:116:0::1;9023:400:1::0;25624:116:0::1;25751:15;:43:::0;;-1:-1:-1;;;;;;25751:43:0::1;-1:-1:-1::0;;;;;25751:43:0;;;::::1;::::0;;;::::1;::::0;;25521:281::o;23428:185::-;6644:6;;-1:-1:-1;;;;;6644:6:0;1336:10;6644:22;6636:67;;;;-1:-1:-1;;;6636:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23513:31:0;::::1;;::::0;;;:22:::1;:31;::::0;;;;;;;;:42;;-1:-1:-1;;23513:42:0::1;::::0;::::1;;::::0;;::::1;::::0;;;23571:34;;1163:41:1;;;23571:34:0::1;::::0;1136:18:1;23571:34:0::1;;;;;;;23428:185:::0;;:::o;16166:363::-;6644:6;;-1:-1:-1;;;;;6644:6:0;1336:10;6644:22;6636:67;;;;-1:-1:-1;;;6636:67:0;;;;;;;:::i;:::-;16330:4:::1;16322;16301:13;2597:12:::0;;;2509:108;16301:13:::1;:17;::::0;16317:1:::1;16301:17;:::i;:::-;16300:26;;;;:::i;:::-;16299:35;;;;:::i;:::-;16277:18;:57;;16255:151;;;::::0;-1:-1:-1;;;16255:151:0;;9630:2:1;16255:151:0::1;::::0;::::1;9612:21:1::0;9669:2;9649:18;;;9642:30;9708:34;9688:18;;;9681:62;-1:-1:-1;;;9759:18:1;;;9752:42;9811:19;;16255:151:0::1;9428:408:1::0;16255:151:0::1;16435:31;:18:::0;16457:8:::1;16435:31;:::i;:::-;16417:15;:49:::0;;;16482:39:::1;::::0;1592:25:1;;;16482:39:0::1;::::0;1580:2:1;1565:18;16482:39:0::1;1446:177:1::0;14259:109:0;6644:6;;-1:-1:-1;;;;;6644:6:0;1336:10;6644:22;6636:67;;;;-1:-1:-1;;;6636:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;14329:23:0::1;14355:5;14329:23:::0;;;:15:::1;:23;::::0;;;;:31;;-1:-1:-1;;14329:31:0::1;::::0;;14259:109::o;15730:428::-;6644:6;;-1:-1:-1;;;;;6644:6:0;1336:10;6644:22;6636:67;;;;-1:-1:-1;;;6636:67:0;;;;;;;:::i;:::-;15870:6:::1;15849:13;2597:12:::0;;;2509:108;15849:13:::1;:17;::::0;15865:1:::1;15849:17;:::i;:::-;15848:28;;;;:::i;:::-;15835:9;:41;;15813:144;;;::::0;-1:-1:-1;;;15813:144:0;;10043:2:1;15813:144:0::1;::::0;::::1;10025:21:1::0;10082:2;10062:18;;;10055:30;10121:34;10101:18;;;10094:62;-1:-1:-1;;;10172:18:1;;;10165:51;10233:19;;15813:144:0::1;9841:417:1::0;15813:144:0::1;16025:4;16004:13;2597:12:::0;;;2509:108;16004:13:::1;:17;::::0;16020:1:::1;16004:17;:::i;:::-;16003:26;;;;:::i;:::-;15990:9;:39;;15968:141;;;::::0;-1:-1:-1;;;15968:141:0;;10465:2:1;15968:141:0::1;::::0;::::1;10447:21:1::0;10504:2;10484:18;;;10477:30;10543:34;10523:18;;;10516:62;-1:-1:-1;;;10594:18:1;;;10587:50;10654:19;;15968:141:0::1;10263:416:1::0;15968:141:0::1;16120:18;:30:::0;15730:428::o;15028:347::-;6644:6;;-1:-1:-1;;;;;6644:6:0;1336:10;6644:22;6636:67;;;;-1:-1:-1;;;6636:67:0;;;;;;;:::i;:::-;15186:4:::1;15178;15157:13;2597:12:::0;;;2509:108;15157:13:::1;:17;::::0;15173:1:::1;15157:17;:::i;:::-;15156:26;;;;:::i;:::-;15155:35;;;;:::i;:::-;15135:16;:55;;15113:147;;;::::0;-1:-1:-1;;;15113:147:0;;10886:2:1;15113:147:0::1;::::0;::::1;10868:21:1::0;10925:2;10905:18;;;10898:30;10964:34;10944:18;;;10937:62;-1:-1:-1;;;11015:18:1;;;11008:40;11065:19;;15113:147:0::1;10684:406:1::0;15113:147:0::1;15287:29;:16:::0;15307:8:::1;15287:29;:::i;:::-;15271:13;:45:::0;;;15332:35:::1;::::0;1592:25:1;;;15332:35:0::1;::::0;1580:2:1;1565:18;15332:35:0::1;1446:177:1::0;25931:156:0;6644:6;;-1:-1:-1;;;;;6644:6:0;1336:10;6644:22;6636:67;;;;-1:-1:-1;;;6636:67:0;;;;;;;:::i;:::-;26021:58:::1;::::0;25984:12:::1;::::0;26029:10:::1;::::0;26053:21:::1;::::0;25984:12;26021:58;25984:12;26021:58;26053:21;26029:10;26021:58:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24765:548:::0;6644:6;;-1:-1:-1;;;;;6644:6:0;1336:10;6644:22;6636:67;;;;-1:-1:-1;;;6636:67:0;;;;;;;:::i;:::-;24943:19:::1;:35:::0;;;24989:19:::1;:35:::0;;;25035:13:::1;:23:::0;;;25069:17:::1;:28:::0;;;25089:8;25051:7;25137:54:::1;24965:13:::0;25011;25137:54:::1;:::i;:::-;:83;;;;:::i;:::-;:116;;;;:::i;:::-;25108:13;:145:::0;;;25289:1:::1;-1:-1:-1::0;25272:18:0::1;25264:41;;;::::0;-1:-1:-1;;;25264:41:0;;11507:2:1;25264:41:0::1;::::0;::::1;11489:21:1::0;11546:2;11526:18;;;11519:30;-1:-1:-1;;;11565:18:1;;;11558:40;11615:18;;25264:41:0::1;11305:334:1::0;14153:98:0;6644:6;;-1:-1:-1;;;;;6644:6:0;1336:10;6644:22;6636:67;;;;-1:-1:-1;;;6636:67:0;;;;;;;:::i;:::-;14215:20:::1;:28:::0;;-1:-1:-1;;14215:28:0::1;::::0;;14153:98::o;6976:281::-;6644:6;;-1:-1:-1;;;;;6644:6:0;1336:10;6644:22;6636:67;;;;-1:-1:-1;;;6636:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7079:22:0;::::1;7057:110;;;::::0;-1:-1:-1;;;7057:110:0;;11846:2:1;7057:110:0::1;::::0;::::1;11828:21:1::0;11885:2;11865:18;;;11858:30;11924:34;11904:18;;;11897:62;-1:-1:-1;;;11975:18:1;;;11968:36;12021:19;;7057:110:0::1;11644:402:1::0;7057:110:0::1;7204:6;::::0;7183:38:::1;::::0;-1:-1:-1;;;;;7183:38:0;;::::1;::::0;7204:6:::1;::::0;7183:38:::1;::::0;7204:6:::1;::::0;7183:38:::1;7232:6;:17:::0;;-1:-1:-1;;;;;;7232:17:0::1;-1:-1:-1::0;;;;;7232:17:0;;;::::1;::::0;;;::::1;::::0;;6976:281::o;5007:380::-;-1:-1:-1;;;;;5143:19:0;;5135:68;;;;-1:-1:-1;;;5135:68:0;;12253:2:1;5135:68:0;;;12235:21:1;12292:2;12272:18;;;12265:30;12331:34;12311:18;;;12304:62;-1:-1:-1;;;12382:18:1;;;12375:34;12426:19;;5135:68:0;12051:400:1;5135:68:0;-1:-1:-1;;;;;5222:21:0;;5214:68;;;;-1:-1:-1;;;5214:68:0;;12658:2:1;5214:68:0;;;12640:21:1;12697:2;12677:18;;;12670:30;12736:34;12716:18;;;12709:62;-1:-1:-1;;;12787:18:1;;;12780:32;12829:19;;5214:68:0;12456:398:1;5214:68:0;-1:-1:-1;;;;;5295:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;5347:32;;1592:25:1;;;5347:32:0;;1565:18:1;5347:32:0;;;;;;;;5007:380;;;:::o;16537:6268::-;-1:-1:-1;;;;;16669:18:0;;16661:68;;;;-1:-1:-1;;;16661:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16748:16:0;;16740:64;;;;-1:-1:-1;;;16740:64:0;;;;;;;:::i;:::-;16832:1;16823:6;:10;16815:52;;;;-1:-1:-1;;;16815:52:0;;13871:2:1;16815:52:0;;;13853:21:1;13910:2;13890:18;;;13883:30;13949:31;13929:18;;;13922:59;13998:18;;16815:52:0;13669:353:1;16815:52:0;16885:13;;;;;;;16880:189;;-1:-1:-1;;;;;16941:28:0;;;;;;:22;:28;;;;;;;;;:58;;-1:-1:-1;;;;;;16973:26:0;;;;;;:22;:26;;;;;;;;16941:58;16915:142;;;;-1:-1:-1;;;16915:142:0;;14229:2:1;16915:142:0;;;14211:21:1;14268:2;14248:18;;;14241:30;-1:-1:-1;;;14287:18:1;;;14280:52;14349:18;;16915:142:0;14027:346:1;16915:142:0;17085:14;;:18;17081:254;;-1:-1:-1;;;;;17147:21:0;;;;;;:15;:21;;;;;;;;17146:22;;:60;;-1:-1:-1;6796:6:0;;-1:-1:-1;;;;;17193:13:0;;;6796:6;;17193:13;17146:60;:106;;;-1:-1:-1;;;;;;17231:21:0;;17245:6;17231:21;17146:106;17120:203;;;;-1:-1:-1;;;17120:203:0;;14580:2:1;17120:203:0;;;14562:21:1;14619:2;14599:18;;;14592:30;14658:34;14638:18;;;14631:62;-1:-1:-1;;;14709:18:1;;;14702:33;14752:19;;17120:203:0;14378:399:1;17120:203:0;17397:14;;17365:15;;17397:14;;17393:2590;;;6796:6;;-1:-1:-1;;;;;17450:15:0;;;6796:6;;17450:15;;;;:49;;-1:-1:-1;6796:6:0;;-1:-1:-1;;;;;17486:13:0;;;6796:6;;17486:13;;17450:49;:86;;;;-1:-1:-1;;;;;;17520:16:0;;;;17450:86;:128;;;;-1:-1:-1;;;;;;17557:21:0;;17571:6;17557:21;;17450:128;:178;;;;-1:-1:-1;;;;;;17600:28:0;;;;;;:22;:28;;;;;;;;17599:29;17450:178;:226;;;;-1:-1:-1;;;;;;17650:26:0;;;;;;:22;:26;;;;;;;;17649:27;17450:226;17428:1458;;;17715:20;;;;;;;17711:1160;;;-1:-1:-1;;;;;17785:13:0;;17760:21;17785:13;;;:7;:13;;;;;;17846:8;;17785:13;;;;17784:14;;-1:-1:-1;;;17846:8:0;;;;;;17845:9;;17784:14;17896:36;;;;;17916:16;17896:36;17999:15;;17877:55;;-1:-1:-1;;;;;;17985:30:0;;;17999:15;;17985:30;;;;:62;;-1:-1:-1;18033:13:0;;-1:-1:-1;;;;;18019:28:0;;;18033:13;;18019:28;;17985:62;17955:897;;;18211:16;18226:1;18211:12;:16;:::i;:::-;18165:9;18136:39;;;;:28;:39;;;;;;:91;:212;;;;-1:-1:-1;18332:16:0;18347:1;18332:12;:16;:::i;:::-;-1:-1:-1;;;;;18264:32:0;;;;;;:28;:32;;;;;;:84;18136:212;18098:339;;;;-1:-1:-1;;;18098:339:0;;15117:2:1;18098:339:0;;;15099:21:1;15156:2;15136:18;;;15129:30;15195:31;15175:18;;;15168:59;15244:18;;18098:339:0;14915:353:1;18098:339:0;18493:9;18464:39;;;;:28;:39;;;;;;18506:12;18464:54;;;;-1:-1:-1;;;;;18545:32:0;;;;;;:47;17955:897;;;18626:11;18622:230;;;-1:-1:-1;;;;;18690:23:0;;18666:21;18690:23;;;:17;:23;;;;;;18774:8;;18758:24;;;18809:19;;;;;;18639:213;;18622:230;17737:1134;;;17711:1160;-1:-1:-1;;;;;18924:31:0;;18902:19;18924:31;;;:25;:31;;;;;;;;;18990:8;;19019:7;:13;;;;;;18924:31;;;;;-1:-1:-1;;;18990:8:0;;;;;18989:9;;19019:13;:47;;;;-1:-1:-1;;;;;;19037:29:0;;;;;;:25;:29;;;;;;;;19036:30;19019:47;19015:957;;;19127:12;;19117:6;:22;;19087:136;;;;-1:-1:-1;;;19087:136:0;;15475:2:1;19087:136:0;;;15457:21:1;15514:2;15494:18;;;15487:30;15553:34;15533:18;;;15526:62;-1:-1:-1;;;15604:18:1;;;15597:38;15652:19;;19087:136:0;15273:404:1;19087:136:0;19298:15;;19281:13;19291:2;19281:9;:13::i;:::-;19272:22;;:6;:22;:::i;:::-;:41;;19242:139;;;;-1:-1:-1;;;19242:139:0;;15884:2:1;19242:139:0;;;15866:21:1;15923:2;15903:18;;;15896:30;-1:-1:-1;;;15942:18:1;;;15935:54;16006:18;;19242:139:0;15682:348:1;19242:139:0;19015:957;;;19407:11;:29;;;;;19422:14;19407:29;19403:569;;;19457:8;:18;;;19403:569;;;-1:-1:-1;;;;;19519:11:0;;;;;;:7;:11;;;;;;;;:47;;;;-1:-1:-1;;;;;;19535:31:0;;;;;;:25;:31;;;;;;;;19534:32;19519:47;19497:475;;;19641:13;;19631:6;:23;;19601:139;;;;-1:-1:-1;;;19601:139:0;;16237:2:1;19601:139:0;;;16219:21:1;16276:2;16256:18;;;16249:30;16315:34;16295:18;;;16288:62;-1:-1:-1;;;16366:18:1;;;16359:40;16416:19;;19601:139:0;16035:406:1;19497:475:0;-1:-1:-1;;;;;19767:29:0;;;;;;:25;:29;;;;;;;;19762:210;;19873:15;;19856:13;19866:2;19856:9;:13::i;:::-;19847:22;;:6;:22;:::i;:::-;:41;;19817:139;;;;-1:-1:-1;;;19817:139:0;;15884:2:1;19817:139:0;;;15866:21:1;15923:2;15903:18;;;15896:30;-1:-1:-1;;;15942:18:1;;;15935:54;16006:18;;19817:139:0;15682:348:1;19817:139:0;17413:2570;;17393:2590;19995:28;20026:24;20044:4;20026:9;:24::i;:::-;20102:18;;19995:55;;-1:-1:-1;20078:42:0;;;;;;;20151:35;;-1:-1:-1;20175:11:0;;;;;;;20151:35;:61;;;;-1:-1:-1;20204:8:0;;-1:-1:-1;;;20204:8:0;;;;20203:9;20151:61;:92;;;;-1:-1:-1;;;;;;20230:13:0;;;;;;:7;:13;;;;;;;;20229:14;20151:92;:138;;;;-1:-1:-1;;;;;;20261:28:0;;;;;;:22;:28;;;;;;;;20260:29;20151:138;:182;;;;-1:-1:-1;;;;;;20307:26:0;;;;;;:22;:26;;;;;;;;20306:27;20151:182;20133:310;;;20360:8;:15;;-1:-1:-1;;;;20360:15:0;-1:-1:-1;;;20360:15:0;;;20390:10;:8;:10::i;:::-;20415:8;:16;;-1:-1:-1;;;;20415:16:0;;;20133:310;-1:-1:-1;;;;;20504:13:0;;;20455:12;20504:13;;;:7;:13;;;;;;;;;20547:21;;;;;:17;:21;;;;;;20470:4;;20504:13;;;20547:26;;;20601:22;20565:2;20601:9;:22::i;:::-;-1:-1:-1;;;;;20645:28:0;;20627:1;20645:28;;;:22;:28;;;;;;20601:27;;;-1:-1:-1;20645:28:0;;;:58;;-1:-1:-1;;;;;;20677:26:0;;;;;;:22;:26;;;;;;;;20645:58;20641:106;;;20730:5;20720:15;;20641:106;20763:11;:24;;;;;20778:9;20763:24;20759:135;;;20808:9;20804:79;;;-1:-1:-1;;;;;20836:21:0;;;;;;:17;:21;;;;;:31;;;20804:79;20906:12;20939:7;20935:1817;;;25901:14;;25886:12;:29;20985:55;;;;-1:-1:-1;;;;;;21027:13:0;;;;;;:7;:13;;;;;;;;20985:55;:88;;;;-1:-1:-1;;;;;;21062:11:0;;;;;;:7;:11;;;;;;;;21061:12;20985:88;:125;;;;;21109:1;21094:12;;:16;20985:125;20963:1644;;;-1:-1:-1;;;;;21150:19:0;;;;;;:15;:19;;;;;;;;21145:186;;-1:-1:-1;;;;;21194:19:0;;;;;;:15;:19;;;;;:26;;-1:-1:-1;;21194:26:0;21216:4;21194:26;;;;;;21243:10;:15;;21216:4;;21243:10;;:15;;21216:4;;21243:15;:::i;:::-;;;;-1:-1:-1;;21286:25:0;;-1:-1:-1;;;;;1402:32:1;;1384:51;;21286:25:0;;1372:2:1;1357:18;21286:25:0;;;;;;;21145:186;21374:3;21359:11;:6;21368:2;21359:11;:::i;:::-;21358:19;;;;:::i;:::-;21351:26;;21448:12;;21426:18;;21419:4;:25;;;;:::i;:::-;21418:42;;;;:::i;:::-;21396:18;;:64;;;;;;;:::i;:::-;;;;-1:-1:-1;;21531:12:0;;21509:18;;21502:25;;:4;:25;:::i;:::-;21501:42;;;;:::i;:::-;21479:18;;:64;;;;;;;:::i;:::-;;;;-1:-1:-1;;21602:12:0;;21586;;21579:19;;:4;:19;:::i;:::-;21578:36;;;;:::i;:::-;21562:12;;:52;;;;;;;:::i;:::-;;;;-1:-1:-1;;21681:12:0;;21661:16;;21654:23;;:4;:23;:::i;:::-;21653:40;;;;:::i;:::-;21633:16;;:60;;;;;;;:::i;:::-;;;;-1:-1:-1;20963:1644:0;;-1:-1:-1;20963:1644:0;;-1:-1:-1;;;;;21732:11:0;;;;;;:7;:11;;;;;;;;:32;;;;;21763:1;21747:13;;:17;21732:32;21728:879;;;21819:3;21802:13;;21793:6;:22;;;;:::i;:::-;21792:30;;;;:::i;:::-;21785:37;;21894:13;;21871:19;;21864:4;:26;;;;:::i;:::-;21863:44;;;;:::i;:::-;21841:18;;:66;;;;;;;:::i;:::-;;;;-1:-1:-1;;21979:13:0;;21956:19;;21949:26;;:4;:26;:::i;:::-;21948:44;;;;:::i;:::-;21926:18;;:66;;;;;;;:::i;:::-;;;;-1:-1:-1;;22052:13:0;;22035;;22028:20;;:4;:20;:::i;:::-;22027:38;;;;:::i;:::-;22011:12;;:54;;;;;;;:::i;:::-;;;;-1:-1:-1;;22133:13:0;;22112:17;;22105:24;;:4;:24;:::i;21728:879::-;-1:-1:-1;;;;;22185:13:0;;;;;;:7;:13;;;;;;;;:33;;;;;22217:1;22202:12;;:16;22185:33;22181:426;;;22272:3;22256:12;;22247:6;:21;;;;:::i;:::-;22246:29;;;;:::i;:::-;22239:36;;22346:12;;22324:18;;22317:4;:25;;;;:::i;:::-;22316:42;;;;:::i;:::-;22294:18;;:64;;;;;;;:::i;:::-;;;;-1:-1:-1;;22429:12:0;;22407:18;;22400:25;;:4;:25;:::i;:::-;22399:42;;;;:::i;:::-;22377:18;;:64;;;;;;;:::i;:::-;;;;-1:-1:-1;;22500:12:0;;22484;;22477:19;;:4;:19;:::i;:::-;22476:36;;;;:::i;:::-;22460:12;;:52;;;;;;;:::i;:::-;;;;-1:-1:-1;;22579:12:0;;22559:16;;22552:23;;:4;:23;:::i;:::-;22551:40;;;;:::i;:::-;22531:16;;:60;;;;;;;:::i;:::-;;;;-1:-1:-1;;22181:426:0;22625:8;;22621:91;;22654:42;22670:4;22684;22691;22654:15;:42::i;:::-;22726:14;22736:4;22726:14;;:::i;:::-;;;20935:1817;22764:33;22780:4;22786:2;22790:6;22764:15;:33::i;:::-;16650:6155;;;;;;;;16537:6268;;;:::o;23993:222::-;-1:-1:-1;;;;;24076:13:0;;;;;;:7;:13;;;;;:21;;-1:-1:-1;;24076:21:0;;;;;;;24110:39;24076:13;:21;24110:26;:39::i;13157:988::-;13337:10;13303:4;13380:30;;;:22;:30;;;;;;13303:4;;13337:10;13380:30;;13457:4;13303;13380:30;13499:639;;13571:16;;13539:28;13549:17;13539:9;:28::i;:::-;:48;;:72;;;;;13610:1;13591:16;;:20;13539:72;13535:146;;;13632:33;13640:6;13648:16;;13632:7;:33::i;:::-;-1:-1:-1;;13716:1:0;13697:16;:20;-1:-1:-1;13743:4:0;;-1:-1:-1;13764:15:0;;-1:-1:-1;13764:15:0;13499:639;13847:1;13816:28;13826:17;13816:9;:28::i;:::-;:32;13812:283;;;13873:13;13890:1;13873:18;13869:176;;13916:8;:22;;;13869:176;;;13987:38;13995:14;14011:13;13987:7;:38::i;:::-;-1:-1:-1;14074:5:0;13812:283;14118:8;-1:-1:-1;14111:15:0;;-1:-1:-1;;;14111:15:0;26575:1586;26637:1;26618:16;;:20;:68;;;;;26670:16;;26642:24;26660:4;26642:9;:24::i;:::-;:44;;26618:68;26614:141;;;26703:40;26719:4;26726:16;;26703:7;:40::i;:::-;26784:1;26765:16;:20;;;26822:24;26840:4;26822:9;:24::i;:::-;26796:50;;26857:25;26953:12;;26919:18;;26885;;:52;;;;:::i;:::-;:80;;;;:::i;:::-;26857:108;-1:-1:-1;26982:20:0;;;:46;;-1:-1:-1;27006:22:0;;26982:46;26978:85;;;27045:7;;26575:1586::o;26978:85::-;27097:18;;:23;;27118:2;27097:23;:::i;:::-;27079:15;:41;27075:115;;;27155:18;;:23;;27176:2;27155:23;:::i;:::-;27137:41;;27075:115;27202:23;27302:1;27282:17;27247:18;;27229:15;:36;;;;:::i;:::-;27228:71;;;;:::i;:::-;:75;;;;:::i;:::-;27202:101;-1:-1:-1;27316:51:0;27333:33;27202:101;27333:15;:33;:::i;:::-;27316:16;:51::i;:::-;27577:18;;27401:21;;;;27380:18;;27577:22;;27598:1;;27577:22;:::i;:::-;27556:44;;:17;:44;:::i;:::-;27520:18;;27507:31;;:10;:31;:::i;:::-;27506:95;;;;:::i;:::-;27480:121;;27612:17;27718:1;27697:18;;:22;;;;:::i;:::-;27676:44;;:17;:44;:::i;:::-;27646:12;;27633:25;;:10;:25;:::i;:::-;27632:89;;;;:::i;:::-;27612:109;-1:-1:-1;27751:27:0;27612:109;27751:15;:27;:::i;:::-;27732:46;;;;:::i;:::-;27810:1;27789:18;:22;;;27822:18;:22;;;27855:12;:16;;;27882;:20;27732:46;-1:-1:-1;27919:19:0;;;;;:42;;;27960:1;27942:15;:19;27919:42;27915:121;;;27978:46;27991:15;28008;27978:12;:46::i;:::-;28056:9;;28048:38;;-1:-1:-1;;;;;28056:9:0;;;;28048:38;;;;;28076:9;;28056;28048:38;28056:9;28048:38;28076:9;28056;28048:38;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28105:15:0;;28097:56;;-1:-1:-1;;;;;28105:15:0;;;;28131:21;28097:56;;;;;28105:15;28097:56;28105:15;28097:56;28131:21;28105:15;28097:56;;;;;;;;;;;;;;;;;;;;;26603:1558;;;;;;;26575:1586::o;5719:651::-;-1:-1:-1;;;;;5859:20:0;;5851:70;;;;-1:-1:-1;;;5851:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;5940:23:0;;5932:71;;;;-1:-1:-1;;;5932:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6040:17:0;;6016:21;6040:17;;;;;;;;;;;6090:23;;;;6068:111;;;;-1:-1:-1;;;6068:111:0;;16648:2:1;6068:111:0;;;16630:21:1;16687:2;16667:18;;;16660:30;16726:34;16706:18;;;16699:62;-1:-1:-1;;;16777:18:1;;;16770:36;16823:19;;6068:111:0;16446:402:1;6068:111:0;-1:-1:-1;;;;;6215:17:0;;;:9;:17;;;;;;;;;;;6235:22;;;6215:42;;6279:20;;;;;;;;:30;;6251:6;;6215:9;6279:30;;6251:6;;6279:30;:::i;:::-;;;;;;;;6344:9;-1:-1:-1;;;;;6327:35:0;6336:6;-1:-1:-1;;;;;6327:35:0;;6355:6;6327:35;;;;1592:25:1;;1580:2;1565:18;;1446:177;6327:35:0;;;;;;;;5840:530;5719:651;;;:::o;22813:235::-;-1:-1:-1;;;;;22929:35:0;;;;;;:25;:35;;;;;;;;;:49;;-1:-1:-1;;22929:49:0;;;;;;;;;;22994:46;;17021:51:1;;;17088:18;;;17081:50;22994:46:0;;16994:18:1;22994:46:0;;;;;;;22813:235;;:::o;4537:462::-;-1:-1:-1;;;;;4635:27:0;;4627:40;;;;-1:-1:-1;;;4627:40:0;;17344:2:1;4627:40:0;;;17326:21:1;-1:-1:-1;17363:18:1;;;17356:29;17402:18;;4627:40:0;17142:284:1;4627:40:0;-1:-1:-1;;;;;4702:24:0;;4678:21;4702:24;;;;;;;;;;;4745:29;;;;4737:42;;;;-1:-1:-1;;;4737:42:0;;17344:2:1;4737:42:0;;;17326:21:1;-1:-1:-1;17363:18:1;;;17356:29;17402:18;;4737:42:0;17142:284:1;4737:42:0;-1:-1:-1;;;;;4815:24:0;;:9;:24;;;;;;;;;;;4842:28;;;4815:55;;4885:12;:28;;;;;;;4942:49;1592:25:1;;;4815:9:0;;:24;4942:49;;1565:18:1;4942:49:0;1446:177:1;26095:472:0;26185:16;;;26199:1;26185:16;;;;;;;;26161:21;;26185:16;;;;;;;;;;-1:-1:-1;26185:16:0;26161:40;;26230:4;26212;26217:1;26212:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;26212:23:0;;;:7;;;;;;;;;;:23;;;;26256:15;;:22;;;-1:-1:-1;;;26256:22:0;;;;:15;;;;;:20;;:22;;;;;26212:7;;26256:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26246:4;26251:1;26246:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;26246:32:0;;;:7;;;;;;;;;:32;26321:15;;26289:62;;26306:4;;26321:15;26339:11;26289:8;:62::i;:::-;26362:15;;:197;;-1:-1:-1;;;26362:197:0;;-1:-1:-1;;;;;26362:15:0;;;;:66;;:197;;26443:11;;26362:15;;26486:4;;26513;;26533:15;;26362:197;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26150:417;26095:472;:::o;12780:369::-;12893:15;;12861:62;;12878:4;;-1:-1:-1;;;;;12893:15:0;12911:11;12861:8;:62::i;:::-;12934:15;;:207;;-1:-1:-1;;;12934:207:0;;13007:4;12934:207;;;19277:34:1;19327:18;;;19320:34;;;12934:15:0;19370:18:1;;;19363:34;;;19413:18;;;19406:34;13093:6:0;19456:19:1;;;19449:44;13115:15:0;19509:19:1;;;19502:35;-1:-1:-1;;;;;12934:15:0;;;;:31;;12973:9;;19211:19:1;;12934:207:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;12780: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;1628:247::-;1687:6;1740:2;1728:9;1719:7;1715:23;1711:32;1708:52;;;1756:1;1753;1746:12;1708:52;1795:9;1782:23;1814:31;1839:5;1814:31;:::i;1880:456::-;1957:6;1965;1973;2026:2;2014:9;2005:7;2001:23;1997:32;1994:52;;;2042:1;2039;2032:12;1994:52;2081:9;2068:23;2100:31;2125:5;2100:31;:::i;:::-;2150:5;-1:-1:-1;2207:2:1;2192:18;;2179:32;2220:33;2179:32;2220:33;:::i;:::-;1880:456;;2272:7;;-1:-1:-1;;;2326:2:1;2311:18;;;;2298:32;;1880:456::o;2341:180::-;2400:6;2453:2;2441:9;2432:7;2428:23;2424:32;2421:52;;;2469:1;2466;2459:12;2421:52;-1:-1:-1;2492:23:1;;2341:180;-1:-1:-1;2341:180:1:o;2526:385::-;2612:6;2620;2628;2636;2689:3;2677:9;2668:7;2664:23;2660:33;2657:53;;;2706:1;2703;2696:12;2657:53;-1:-1:-1;;2729:23:1;;;2799:2;2784:18;;2771:32;;-1:-1:-1;2850:2:1;2835:18;;2822:32;;2901:2;2886:18;2873:32;;-1:-1:-1;2526:385:1;-1:-1:-1;2526:385:1:o;3313:416::-;3378:6;3386;3439:2;3427:9;3418:7;3414:23;3410:32;3407:52;;;3455:1;3452;3445:12;3407:52;3494:9;3481:23;3513:31;3538:5;3513:31;:::i;:::-;3563:5;-1:-1:-1;3620:2:1;3605:18;;3592:32;3662:15;;3655:23;3643:36;;3633:64;;3693:1;3690;3683:12;3633:64;3716:7;3706:17;;;3313:416;;;;;:::o;3734:383::-;3811:6;3819;3827;3880:2;3868:9;3859:7;3855:23;3851:32;3848:52;;;3896:1;3893;3886:12;3848:52;3935:9;3922:23;3954:31;3979:5;3954:31;:::i;:::-;4004:5;4056:2;4041:18;;4028:32;;-1:-1:-1;4107:2:1;4092:18;;;4079:32;;3734:383;-1:-1:-1;;;3734:383:1:o;4122:388::-;4190:6;4198;4251:2;4239:9;4230:7;4226:23;4222:32;4219:52;;;4267:1;4264;4257:12;4219:52;4306:9;4293:23;4325:31;4350:5;4325:31;:::i;:::-;4375:5;-1:-1:-1;4432:2:1;4417:18;;4404:32;4445:33;4404:32;4445:33;:::i;4515:380::-;4594:1;4590:12;;;;4637;;;4658:61;;4712:4;4704:6;4700:17;4690:27;;4658:61;4765:2;4757:6;4754:14;4734:18;4731:38;4728:161;;4811:10;4806:3;4802:20;4799:1;4792:31;4846:4;4843:1;4836:15;4874:4;4871:1;4864:15;4728:161;;4515:380;;;:::o;4900:356::-;5102:2;5084:21;;;5121:18;;;5114:30;5180:34;5175:2;5160:18;;5153:62;5247:2;5232:18;;4900:356::o;6029:127::-;6090:10;6085:3;6081:20;6078:1;6071:31;6121:4;6118:1;6111:15;6145:4;6142:1;6135:15;6161:168;6234:9;;;6265;;6282:15;;;6276:22;;6262:37;6252:71;;6303:18;;:::i;6334:217::-;6374:1;6400;6390:132;;6444:10;6439:3;6435:20;6432:1;6425:31;6479:4;6476:1;6469:15;6507:4;6504:1;6497:15;6390:132;-1:-1:-1;6536:9:1;;6334:217::o;6966:125::-;7031:9;;;7052:10;;;7049:36;;;7065:18;;:::i;12859:401::-;13061:2;13043:21;;;13100:2;13080:18;;;13073:30;13139:34;13134:2;13119:18;;13112:62;-1:-1:-1;;;13205:2:1;13190:18;;13183:35;13250:3;13235:19;;12859:401::o;13265:399::-;13467:2;13449:21;;;13506:2;13486:18;;;13479:30;13545:34;13540:2;13525:18;;13518:62;-1:-1:-1;;;13611:2:1;13596:18;;13589:33;13654:3;13639:19;;13265:399::o;14782:128::-;14849:9;;;14870:11;;;14867:37;;;14884:18;;:::i;17563:127::-;17624:10;17619:3;17615:20;17612:1;17605:31;17655:4;17652:1;17645:15;17679:4;17676:1;17669:15;17695:251;17765:6;17818:2;17806:9;17797:7;17793:23;17789:32;17786:52;;;17834:1;17831;17824:12;17786:52;17866:9;17860:16;17885:31;17910:5;17885:31;:::i;17951:980::-;18213:4;18261:3;18250:9;18246:19;18292:6;18281:9;18274:25;18318:2;18356:6;18351:2;18340:9;18336:18;18329:34;18399:3;18394:2;18383:9;18379:18;18372:31;18423:6;18458;18452:13;18489:6;18481;18474:22;18527:3;18516:9;18512:19;18505:26;;18566:2;18558:6;18554:15;18540:29;;18587:1;18597:195;18611:6;18608:1;18605:13;18597:195;;;18676:13;;-1:-1:-1;;;;;18672:39:1;18660:52;;18767:15;;;;18732:12;;;;18708:1;18626:9;18597:195;;;-1:-1:-1;;;;;;;18848:32:1;;;;18843:2;18828:18;;18821:60;-1:-1:-1;;;18912:3:1;18897:19;18890:35;18809:3;17951:980;-1:-1:-1;;;17951:980:1:o;19548:306::-;19636:6;19644;19652;19705:2;19693:9;19684:7;19680:23;19676:32;19673:52;;;19721:1;19718;19711:12;19673:52;19750:9;19744:16;19734:26;;19800:2;19789:9;19785:18;19779:25;19769:35;;19844:2;19833:9;19829:18;19823:25;19813:35;;19548:306;;;;;:::o

Swarm Source

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