ETH Price: $3,672.26 (+0.89%)
 

Overview

Max Total Supply

5,000,000,000,000 EVLV

Holders

41

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
67,552,705,934.037205542788888297 EVLV

Value
$0.00
0xa503fc64b508a805c33bbf0b1e90b7cdeaa4c26d
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:
Evolve

Compiler Version
v0.8.15+commit.e14f2714

Optimization Enabled:
Yes with 600 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-08-26
*/

// SPDX-License-Identifier: MIT

/**

WHEN AI MEETS THE FUTURE.

https://evolvetoken.io

https://twitter.com/EvolveERC20

https://medium.com/@evolvetoken

*/

pragma solidity 0.8.15;

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

    function _msgData() internal view virtual returns (bytes calldata) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
}

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

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    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 totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

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

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

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

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

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

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

        return true;
    }

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

    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 _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");
        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
            // Overflow not possible: amount <= accountBalance <= totalSupply.
            _totalSupply -= amount;
        }

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

    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }
}

contract Ownable is Context {
    address private _owner;

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

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

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

    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the 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;
    }
}

interface IDexRouter {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);

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

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

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

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

contract Evolve is ERC20, Ownable {

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

    IDexRouter public dexRouter;
    address public lpPair;

    bool private swapping;
    uint256 public swapTokensAtAmount;

    address operationsAddress;
    address devAddress;

    uint256 public tradingActiveBlock = 0; // 0 means trading is not active
    uint256 public blockForPenaltyEnd;
    mapping (address => bool) public boughtEarly;
    uint256 public botsCaught;

    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = false;

     // Anti-bot and anti-whale mappings and variables
    mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch
    bool public transferDelayEnabled = true;

    uint256 public buyTotalFees;
    uint256 public buyOperationsFee;
    uint256 public buyLiquidityFee;
    uint256 public buyDevFee;
    uint256 public buyBurnFee;

    uint256 public sellTotalFees;
    uint256 public sellOperationsFee;
    uint256 public sellLiquidityFee;
    uint256 public sellDevFee;
    uint256 public sellBurnFee;

    uint256 public tokensForOperations;
    uint256 public tokensForLiquidity;
    uint256 public tokensForDev;
    uint256 public tokensForBurn;

    /******************/

    // exlcude from fees and max transaction amount
    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) public _isExcludedMaxTransactionAmount;

    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount
    mapping (address => bool) public automatedMarketMakerPairs;

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

    event EnabledTrading();

    event RemovedLimits();

    event ExcludeFromFees(address indexed account, bool isExcluded);

    event UpdatedMaxBuyAmount(uint256 newAmount);

    event UpdatedMaxSellAmount(uint256 newAmount);

    event UpdatedMaxWalletAmount(uint256 newAmount);

    event UpdatedOperationsAddress(address indexed newWallet);

    event MaxTransactionExclusion(address _address, bool excluded);

    event BuyBackTriggered(uint256 amount);

    event OwnerForcedSwapBack(uint256 timestamp);

    event CaughtEarlyBuyer(address sniper);

    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );

    event TransferForeignToken(address token, uint256 amount);

    constructor() ERC20("Evolve", "EVLV") {

        address newOwner = msg.sender; // can leave alone if owner is deployer.

        IDexRouter _dexRouter = IDexRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        dexRouter = _dexRouter;

        // create pair
        lpPair = IDexFactory(_dexRouter.factory()).createPair(address(this), _dexRouter.WETH());
        _excludeFromMaxTransaction(address(lpPair), true);
        _setAutomatedMarketMakerPair(address(lpPair), true);

        uint256 totalSupply = 5 * 1e12 * 1e18;

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

        buyOperationsFee = 15;
        buyLiquidityFee = 0;
        buyDevFee = 0;
        buyBurnFee = 0;
        buyTotalFees = buyOperationsFee + buyLiquidityFee + buyDevFee + buyBurnFee;

        sellOperationsFee = 30;
        sellLiquidityFee = 0;
        sellDevFee = 0;
        sellBurnFee = 0;
        sellTotalFees = sellOperationsFee + sellLiquidityFee + sellDevFee + sellBurnFee;

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

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

        operationsAddress = address(newOwner);
        devAddress = address(newOwner);

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

    receive() external payable {}

    // only enable if no plan to airdrop

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

    // remove limits after token is stable
    function removeLimits() external onlyOwner {
        limitsInEffect = false;
        transferDelayEnabled = false;
        emit RemovedLimits();
    }

    function removeBoughtEarly(address wallet) external onlyOwner {
        require(boughtEarly[wallet], "Wallet is already not flagged.");
        boughtEarly[wallet] = false;
    }

    // disable Transfer delay - cannot be reenabled
    function disableTransferDelay() external onlyOwner {
        transferDelayEnabled = false;
    }

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

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

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

    // change the minimum amount of tokens to sell from fees
    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 _excludeFromMaxTransaction(address updAds, bool isExcluded) private {
        _isExcludedMaxTransactionAmount[updAds] = isExcluded;
        emit MaxTransactionExclusion(updAds, isExcluded);
    }

    function airdropToWallets(address[] memory wallets, uint256[] memory amountsInTokens) external onlyOwner {
        require(wallets.length == amountsInTokens.length, "arrays must be the same length");
        require(wallets.length < 600, "Can only airdrop 600 wallets per txn due to gas limits"); // allows for airdrop + launch at the same exact time, reducing delays and reducing sniper input.
        for(uint256 i = 0; i < wallets.length; i++){
            address wallet = wallets[i];
            uint256 amount = amountsInTokens[i];
            super._transfer(msg.sender, wallet, amount);
        }
    }

    function excludeFromMaxTransaction(address updAds, bool isEx) external onlyOwner {
        if(!isEx){
            require(updAds != lpPair, "Cannot remove uniswap pair from max txn");
        }
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }

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

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

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

        _excludeFromMaxTransaction(pair, value);

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function updateBuyFees(uint256 _operationsFee, uint256 _liquidityFee, uint256 _devFee, uint256 _burnFee) external onlyOwner {
        buyOperationsFee = _operationsFee;
        buyLiquidityFee = _liquidityFee;
        buyDevFee = _devFee;
        buyBurnFee = _burnFee;
        buyTotalFees = buyOperationsFee + buyLiquidityFee + buyDevFee + buyBurnFee;
        require(buyTotalFees <= 15, "Must keep fees at 15% or less");
    }

    function updateSellFees(uint256 _operationsFee, uint256 _liquidityFee, uint256 _devFee, uint256 _burnFee) external onlyOwner {
        sellOperationsFee = _operationsFee;
        sellLiquidityFee = _liquidityFee;
        sellDevFee = _devFee;
        sellBurnFee = _burnFee;
        sellTotalFees = sellOperationsFee + sellLiquidityFee + sellDevFee + sellBurnFee;
        require(sellTotalFees <= 20, "Must keep fees at 20% or less");
    }

    function returnToNormalTax() external onlyOwner {
        sellOperationsFee = 30;
        sellLiquidityFee = 0;
        sellDevFee = 0;
        sellBurnFee = 0;
        sellTotalFees = sellOperationsFee + sellLiquidityFee + sellDevFee + sellBurnFee;
        require(sellTotalFees <= 30, "Must keep fees at 30% or less");

        buyOperationsFee = 15;
        buyLiquidityFee = 0;
        buyDevFee = 0;
        buyBurnFee = 0;
        buyTotalFees = buyOperationsFee + buyLiquidityFee + buyDevFee + buyBurnFee;
        require(buyTotalFees <= 15, "Must keep fees at 15% or less");
    }

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

    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(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active.");
        }

        if(!earlyBuyPenaltyInEffect() && blockForPenaltyEnd > 0){
            require(!boughtEarly[from] || to == owner() || to == address(0xdead), "Bots cannot transfer tokens in or out except to owner or dead address.");
        }

        if(limitsInEffect){
            if (from != owner() && to != owner() && to != address(0) && to != address(0xdead) && !_isExcludedFromFees[from] && !_isExcludedFromFees[to]){

                // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.
                if (transferDelayEnabled){
                    if (to != address(dexRouter) && to != address(lpPair)){
                        require(_holderLastTransferTimestamp[tx.origin] < block.number - 2 && _holderLastTransferTimestamp[to] < block.number - 2, "_transfer:: Transfer Delay enabled.  Try again later.");
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                        _holderLastTransferTimestamp[to] = block.number;
                    }
                }

                //when buy
                if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
                        require(amount <= maxBuyAmount, "Buy transfer amount exceeds the max buy.");
                        require(amount + balanceOf(to) <= maxWalletAmount, "Cannot Exceed max wallet");
                }
                //when sell
                else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
                        require(amount <= maxSellAmount, "Sell transfer amount exceeds the max sell.");
                }
                else if (!_isExcludedMaxTransactionAmount[to]){
                    require(amount + balanceOf(to) <= maxWalletAmount, "Cannot Exceed max wallet");
                }
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if(canSwap && swapEnabled && !swapping && !automatedMarketMakerPairs[from] && !_isExcludedFromFees[from] && !_isExcludedFromFees[to]) {
            swapping = true;

            swapBack();

            swapping = false;
        }

        bool takeFee = true;
        // if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }

        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if(takeFee){
            // bot/sniper penalty.
            if(earlyBuyPenaltyInEffect() && automatedMarketMakerPairs[from] && !automatedMarketMakerPairs[to] && buyTotalFees > 0){

                if(!boughtEarly[to]){
                    boughtEarly[to] = true;
                    botsCaught += 1;
                    emit CaughtEarlyBuyer(to);
                }

                fees = amount * buyTotalFees / 100;
        	    tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
                tokensForOperations += fees * buyOperationsFee / buyTotalFees;
                tokensForDev += fees * buyDevFee / buyTotalFees;
                tokensForBurn += fees * buyBurnFee / buyTotalFees;
            }

            // on sell
            else if (automatedMarketMakerPairs[to] && sellTotalFees > 0){
                fees = amount * sellTotalFees / 100;
                tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees;
                tokensForOperations += fees * sellOperationsFee / sellTotalFees;
                tokensForDev += fees * sellDevFee / sellTotalFees;
                tokensForBurn += fees * sellBurnFee / sellTotalFees;
            }

            // on buy
            else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) {
        	    fees = amount * buyTotalFees / 100;
        	    tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
                tokensForOperations += fees * buyOperationsFee / buyTotalFees;
                tokensForDev += fees * buyDevFee / buyTotalFees;
                tokensForBurn += fees * buyBurnFee / buyTotalFees;
            }

            if(fees > 0){
                super._transfer(from, address(this), fees);
            }

        	amount -= fees;
        }

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

    function earlyBuyPenaltyInEffect() public view returns (bool){
        return block.number < blockForPenaltyEnd;
    }

    function swapTokensForEth(uint256 tokenAmount) private {

        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = dexRouter.WETH();

        _approve(address(this), address(dexRouter), tokenAmount);

        // make the swap
        dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(dexRouter), tokenAmount);

        // add the liquidity
        dexRouter.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            address(0xdead),
            block.timestamp
        );
    }

    function swapBack() private {

        if(tokensForBurn > 0 && balanceOf(address(this)) >= tokensForBurn) {
            _burn(address(this), tokensForBurn);
        }
        tokensForBurn = 0;

        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity + tokensForOperations + tokensForDev;

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

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

        bool success;

        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = contractBalance * tokensForLiquidity / totalTokensToSwap / 2;

        swapTokensForEth(contractBalance - liquidityTokens);

        uint256 ethBalance = address(this).balance;
        uint256 ethForLiquidity = ethBalance;

        uint256 ethForOperations = ethBalance * tokensForOperations / (totalTokensToSwap - (tokensForLiquidity/2));
        uint256 ethForDev = ethBalance * tokensForDev / (totalTokensToSwap - (tokensForLiquidity/2));

        ethForLiquidity -= ethForOperations + ethForDev;

        tokensForLiquidity = 0;
        tokensForOperations = 0;
        tokensForDev = 0;
        tokensForBurn = 0;

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

        (success,) = address(devAddress).call{value: ethForDev}("");

        (success,) = address(operationsAddress).call{value: address(this).balance}("");
    }

    function transferForeignToken(address _token, address _to) external onlyOwner returns (bool _sent) {
        require(_token != address(0), "_token address cannot be 0");
        require(_token != address(this), "Can't withdraw native tokens");
        uint256 _contractBalance = IERC20(_token).balanceOf(address(this));
        _sent = IERC20(_token).transfer(_to, _contractBalance);
        emit TransferForeignToken(_token, _contractBalance);
    }

    // withdraw ETH if stuck or someone sends to the address
    function withdrawStuckETH() external onlyOwner {
        bool success;
        (success,) = address(msg.sender).call{value: address(this).balance}("");
    }

    function setOperationsAddress(address _operationsAddress) external onlyOwner {
        require(_operationsAddress != address(0), "_operationsAddress address cannot be 0");
        operationsAddress = payable(_operationsAddress);
    }

    function setDevAddress(address _devAddress) external onlyOwner {
        require(_devAddress != address(0), "_devAddress address cannot be 0");
        devAddress = payable(_devAddress);
    }

    // force Swap back if slippage issues.
    function forceSwapBack() external onlyOwner {
        require(balanceOf(address(this)) >= swapTokensAtAmount, "Can only swap when token amount is at or higher than restriction");
        swapping = true;
        swapBack();
        swapping = false;
        emit OwnerForcedSwapBack(block.timestamp);
    }

    // useful for buybacks or to reclaim any ETH on the contract in a way that helps holders.
    function buyBackTokens(uint256 amountInWei) external onlyOwner {
        require(amountInWei <= 10 ether, "May not buy more than 10 ETH in a single buy to reduce sandwich attacks");

        address[] memory path = new address[](2);
        path[0] = dexRouter.WETH();
        path[1] = address(this);

        // make the swap
        dexRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amountInWei}(
            0, // accept any amount of Ethereum
            path,
            address(0xdead),
            block.timestamp
        );
        emit BuyBackTriggered(amountInWei);
    }
}

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":"uint256","name":"amount","type":"uint256"}],"name":"BuyBackTriggered","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sniper","type":"address"}],"name":"CaughtEarlyBuyer","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":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"OwnerForcedSwapBack","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":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","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":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TransferForeignToken","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"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"}],"name":"UpdatedOperationsAddress","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"wallets","type":"address[]"},{"internalType":"uint256[]","name":"amountsInTokens","type":"uint256[]"}],"name":"airdropToWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"blockForPenaltyEnd","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"botsCaught","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"boughtEarly","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountInWei","type":"uint256"}],"name":"buyBackTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyOperationsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","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":"dexRouter","outputs":[{"internalType":"contract IDexRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"earlyBuyPenaltyInEffect","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":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"forceSwapBack","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":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"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":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"removeBoughtEarly","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"returnToNormalTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellOperationsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_devAddress","type":"address"}],"name":"setDevAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_operationsAddress","type":"address"}],"name":"setOperationsAddress","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":"tokensForBurn","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":"tokensForOperations","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":"tradingActiveBlock","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":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"transferForeignToken","outputs":[{"internalType":"bool","name":"_sent","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_operationsFee","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":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxBuyAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxSellAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_operationsFee","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":"withdrawStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526000600e556012805462ffffff191660019081179091556014805460ff191690911790553480156200003557600080fd5b506040518060400160405280600681526020016545766f6c766560d01b8152506040518060400160405280600481526020016322ab262b60e11b815250816003908162000083919062000851565b50600462000092828262000851565b5050506000620000a76200044960201b60201c565b600580546001600160a01b0319166001600160a01b0383169081179091556040519192509060009060008051602062004ae3833981519152908290a350600980546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d9081179091556040805163c45a015560e01b81529051339291829163c45a0155916004808201926020929091908290030181865afa1580156200014e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200017491906200091d565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001c2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001e891906200091d565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000236573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200025c91906200091d565b600a80546001600160a01b0319166001600160a01b03929092169182179055620002889060016200044d565b600a54620002a1906001600160a01b03166001620004b0565b6c3f1bdf10116048a593400000006064620002be82600262000965565b620002ca919062000987565b6006556064620002dc82600162000965565b620002e8919062000987565b6007556064620002fa82600262000965565b62000306919062000987565b6008556127106200031982600562000965565b62000325919062000987565b600b55600f6016819055600060178190556018819055601981905590819062000350908290620009aa565b6200035c9190620009aa565b620003689190620009aa565b601555601e601b8190556000601c819055601d81905580825590819062000391908290620009aa565b6200039d9190620009aa565b620003a99190620009aa565b601a55620003b98360016200044d565b620003c63060016200044d565b620003d561dead60016200044d565b620003e28360016200051c565b620003ef3060016200051c565b620003fe61dead60016200051c565b600c80546001600160a01b0385166001600160a01b03199182168117909255600d80549091169091179055620004358382620005ca565b6200044083620006af565b505050620009c5565b3390565b6001600160a01b038216600081815260246020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6001600160a01b0382166000908152602560205260409020805460ff1916821515179055620004e082826200044d565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6005546001600160a01b031633146200056b5760405162461bcd60e51b8152602060048201819052602482015260008051602062004ac383398151915260448201526064015b60405180910390fd5b6001600160a01b038216600081815260236020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038216620006225760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640162000562565b8060026000828254620006369190620009aa565b90915550506001600160a01b0382166000908152602081905260408120805483929062000665908490620009aa565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005546001600160a01b03163314620006fa5760405162461bcd60e51b8152602060048201819052602482015260008051602062004ac3833981519152604482015260640162000562565b6001600160a01b038116620007615760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840162000562565b6005546040516001600160a01b0380841692169060008051602062004ae383398151915290600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620007d757607f821691505b602082108103620007f857634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200084c57600081815260208120601f850160051c81016020861015620008275750805b601f850160051c820191505b81811015620008485782815560010162000833565b5050505b505050565b81516001600160401b038111156200086d576200086d620007ac565b62000885816200087e8454620007c2565b84620007fe565b602080601f831160018114620008bd5760008415620008a45750858301515b600019600386901b1c1916600185901b17855562000848565b600085815260208120601f198616915b82811015620008ee57888601518255948401946001909101908401620008cd565b50858210156200090d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000602082840312156200093057600080fd5b81516001600160a01b03811681146200094857600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b60008160001904831182151516156200098257620009826200094f565b500290565b600082620009a557634e487b7160e01b600052601260045260246000fd5b500490565b60008219821115620009c057620009c06200094f565b500190565b6140ee80620009d56000396000f3fe6080604052600436106103fd5760003560e01c80638da5cb5b1161020d578063d0d41fe111610128578063e7ad9fcd116100bb578063f2fde38b1161008a578063f63743421161006f578063f637434214610b57578063fb002c9714610b6d578063fc155d1d14610b8357600080fd5b8063f2fde38b14610b22578063f5648a4f14610b4257600080fd5b8063e7ad9fcd14610ac1578063e884f26014610ae1578063ee40166e14610af6578063f11a24d314610b0c57600080fd5b8063dd62ed3e116100f7578063dd62ed3e14610a3a578063e2cd5fcd14610a80578063e2f4560514610a95578063e71dc3f514610aab57600080fd5b8063d0d41fe1146109c4578063d257b34f146109e4578063d85ba06314610a04578063dc3f0d0f14610a1a57600080fd5b8063a9059cbb116101a0578063bbc0c7421161016f578063bbc0c7421461094b578063c02466681461096a578063c18bc1951461098a578063c876d0b9146109aa57600080fd5b8063a9059cbb146108cf578063aa4bde28146108ef578063adb873bd14610905578063b62496f51461091b57600080fd5b80639fccce32116101dc5780639fccce321461086d578063a0d82dc514610883578063a457c2d714610899578063a62068ce146108b957600080fd5b80638da5cb5b1461080457806395d89b41146108225780639a7a23d6146108375780639c3b4fdc1461085757600080fd5b80634f77f6c0116103185780636ddd1713116102ab5780637571336a1161027a57806385ecfd281161025f57806385ecfd28146107a957806388e765ff146107d95780638a8c523c146107ef57600080fd5b80637571336a146107695780638366e79a1461078957600080fd5b80636ddd1713146106e957806370a0823114610709578063715018a61461073f578063751039fc1461075457600080fd5b80635bb988c9116102e75780635bb988c91461068757806366d602ae146106a75780636a486a8e146106bd5780636b0a894c146106d357600080fd5b80634f77f6c01461062f57806351f205e41461064557806358a6d5311461065a5780635a139dd41461067157600080fd5b806323b872dd11610390578063395093511161035f57806339509351146105b5578063452ed4f1146105d5578063499b8394146105f55780634a62bb651461061557600080fd5b806323b872dd146105395780632be32b61146105595780632e6ed7ef14610579578063313ce5671461059957600080fd5b806318160ddd116103cc57806318160ddd146104cc5780631a8145bb146104eb5780631d777856146105015780632307b4411461051757600080fd5b806306fdde03146104095780630758d92414610434578063095ea7b31461046c57806310d5de531461049c57600080fd5b3661040457005b600080fd5b34801561041557600080fd5b5061041e610ba3565b60405161042b9190613b1d565b60405180910390f35b34801561044057600080fd5b50600954610454906001600160a01b031681565b6040516001600160a01b03909116815260200161042b565b34801561047857600080fd5b5061048c610487366004613b8a565b610c35565b604051901515815260200161042b565b3480156104a857600080fd5b5061048c6104b7366004613bb6565b60246020526000908152604090205460ff1681565b3480156104d857600080fd5b506002545b60405190815260200161042b565b3480156104f757600080fd5b506104dd60205481565b34801561050d57600080fd5b506104dd60225481565b34801561052357600080fd5b50610537610532366004613cb0565b610c4b565b005b34801561054557600080fd5b5061048c610554366004613d72565b610dce565b34801561056557600080fd5b50610537610574366004613db3565b610e78565b34801561058557600080fd5b50610537610594366004613dcc565b610fa3565b3480156105a557600080fd5b506040516012815260200161042b565b3480156105c157600080fd5b5061048c6105d0366004613b8a565b61107a565b3480156105e157600080fd5b50600a54610454906001600160a01b031681565b34801561060157600080fd5b50610537610610366004613bb6565b6110b6565b34801561062157600080fd5b5060125461048c9060ff1681565b34801561063b57600080fd5b506104dd601b5481565b34801561065157600080fd5b50610537611185565b34801561066657600080fd5b50600f54431061048c565b34801561067d57600080fd5b506104dd60165481565b34801561069357600080fd5b506105376106a2366004613bb6565b6112b3565b3480156106b357600080fd5b506104dd60075481565b3480156106c957600080fd5b506104dd601a5481565b3480156106df57600080fd5b506104dd60115481565b3480156106f557600080fd5b5060125461048c9062010000900460ff1681565b34801561071557600080fd5b506104dd610724366004613bb6565b6001600160a01b031660009081526020819052604090205490565b34801561074b57600080fd5b50610537611384565b34801561076057600080fd5b50610537611416565b34801561077557600080fd5b50610537610784366004613e0c565b61149f565b34801561079557600080fd5b5061048c6107a4366004613e45565b611585565b3480156107b557600080fd5b5061048c6107c4366004613bb6565b60106020526000908152604090205460ff1681565b3480156107e557600080fd5b506104dd60065481565b3480156107fb57600080fd5b506105376117ac565b34801561081057600080fd5b506005546001600160a01b0316610454565b34801561082e57600080fd5b5061041e61189c565b34801561084357600080fd5b50610537610852366004613e0c565b6118ab565b34801561086357600080fd5b506104dd60185481565b34801561087957600080fd5b506104dd60215481565b34801561088f57600080fd5b506104dd601d5481565b3480156108a557600080fd5b5061048c6108b4366004613b8a565b6119bd565b3480156108c557600080fd5b506104dd600f5481565b3480156108db57600080fd5b5061048c6108ea366004613b8a565b611a56565b3480156108fb57600080fd5b506104dd60085481565b34801561091157600080fd5b506104dd601e5481565b34801561092757600080fd5b5061048c610936366004613bb6565b60256020526000908152604090205460ff1681565b34801561095757600080fd5b5060125461048c90610100900460ff1681565b34801561097657600080fd5b50610537610985366004613e0c565b611a63565b34801561099657600080fd5b506105376109a5366004613db3565b611b0a565b3480156109b657600080fd5b5060145461048c9060ff1681565b3480156109d057600080fd5b506105376109df366004613bb6565b611c42565b3480156109f057600080fd5b506105376109ff366004613db3565b611d02565b348015610a1057600080fd5b506104dd60155481565b348015610a2657600080fd5b50610537610a35366004613db3565b611e7c565b348015610a4657600080fd5b506104dd610a55366004613e45565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610a8c57600080fd5b50610537611fa1565b348015610aa157600080fd5b506104dd600b5481565b348015610ab757600080fd5b506104dd60195481565b348015610acd57600080fd5b50610537610adc366004613dcc565b612107565b348015610aed57600080fd5b506105376121d8565b348015610b0257600080fd5b506104dd600e5481565b348015610b1857600080fd5b506104dd60175481565b348015610b2e57600080fd5b50610537610b3d366004613bb6565b61222c565b348015610b4e57600080fd5b50610537612335565b348015610b6357600080fd5b506104dd601c5481565b348015610b7957600080fd5b506104dd601f5481565b348015610b8f57600080fd5b50610537610b9e366004613db3565b6123bf565b606060038054610bb290613e73565b80601f0160208091040260200160405190810160405280929190818152602001828054610bde90613e73565b8015610c2b5780601f10610c0057610100808354040283529160200191610c2b565b820191906000526020600020905b815481529060010190602001808311610c0e57829003601f168201915b5050505050905090565b6000610c42338484612621565b50600192915050565b6005546001600160a01b03163314610c985760405162461bcd60e51b8152602060048201819052602482015260008051602061409983398151915260448201526064015b60405180910390fd5b8051825114610ce95760405162461bcd60e51b815260206004820152601e60248201527f617272617973206d757374206265207468652073616d65206c656e67746800006044820152606401610c8f565b610258825110610d615760405162461bcd60e51b815260206004820152603660248201527f43616e206f6e6c792061697264726f70203630302077616c6c6574732070657260448201527f2074786e2064756520746f20676173206c696d697473000000000000000000006064820152608401610c8f565b60005b8251811015610dc9576000838281518110610d8157610d81613ead565b602002602001015190506000838381518110610d9f57610d9f613ead565b60200260200101519050610db4338383612746565b50508080610dc190613ed9565b915050610d64565b505050565b6000610ddb848484612915565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610e605760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610c8f565b610e6d8533858403612621565b506001949350505050565b6005546001600160a01b03163314610ec05760405162461bcd60e51b815260206004820181905260248201526000805160206140998339815191526044820152606401610c8f565b670de0b6b3a76400006103e8610ed560025490565b610ee0906002613ef2565b610eea9190613f11565b610ef49190613f11565b811015610f555760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152687468616e20302e322560b81b6064820152608401610c8f565b610f6781670de0b6b3a7640000613ef2565b60068190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de41009906020015b60405180910390a150565b6005546001600160a01b03163314610feb5760405162461bcd60e51b815260206004820181905260248201526000805160206140998339815191526044820152606401610c8f565b6016849055601783905560188290556019819055808261100b8587613f33565b6110159190613f33565b61101f9190613f33565b6015819055600f10156110745760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313525206f72206c6573730000006044820152606401610c8f565b50505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610c429185906110b1908690613f33565b612621565b6005546001600160a01b031633146110fe5760405162461bcd60e51b815260206004820181905260248201526000805160206140998339815191526044820152606401610c8f565b6001600160a01b0381166111635760405162461bcd60e51b815260206004820152602660248201527f5f6f7065726174696f6e734164647265737320616464726573732063616e6e6f60448201526507420626520360d41b6064820152608401610c8f565b600c80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146111cd5760405162461bcd60e51b815260206004820181905260248201526000805160206140998339815191526044820152606401610c8f565b600b54306000908152602081905260409020541015611256576040805162461bcd60e51b81526020600482015260248101919091527f43616e206f6e6c792073776170207768656e20746f6b656e20616d6f756e742060448201527f6973206174206f7220686967686572207468616e207265737472696374696f6e6064820152608401610c8f565b600a805460ff60a01b1916600160a01b179055611271613513565b600a805460ff60a01b191690556040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb329060200160405180910390a1565b6005546001600160a01b031633146112fb5760405162461bcd60e51b815260206004820181905260248201526000805160206140998339815191526044820152606401610c8f565b6001600160a01b03811660009081526010602052604090205460ff166113635760405162461bcd60e51b815260206004820152601e60248201527f57616c6c657420697320616c7265616479206e6f7420666c61676765642e00006044820152606401610c8f565b6001600160a01b03166000908152601060205260409020805460ff19169055565b6005546001600160a01b031633146113cc5760405162461bcd60e51b815260206004820181905260248201526000805160206140998339815191526044820152606401610c8f565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b0316331461145e5760405162461bcd60e51b815260206004820181905260248201526000805160206140998339815191526044820152606401610c8f565b6012805460ff199081169091556014805490911690556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6005546001600160a01b031633146114e75760405162461bcd60e51b815260206004820181905260248201526000805160206140998339815191526044820152606401610c8f565b8061155a57600a546001600160a01b039081169083160361155a5760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610c8f565b6001600160a01b03919091166000908152602460205260409020805460ff1916911515919091179055565b6005546000906001600160a01b031633146115d05760405162461bcd60e51b815260206004820181905260248201526000805160206140998339815191526044820152606401610c8f565b6001600160a01b0383166116265760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610c8f565b306001600160a01b0384160361167e5760405162461bcd60e51b815260206004820152601c60248201527f43616e2774207769746864726177206e617469766520746f6b656e73000000006044820152606401610c8f565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa1580156116c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116e99190613f4b565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af115801561173c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117609190613f64565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6005546001600160a01b031633146117f45760405162461bcd60e51b815260206004820181905260248201526000805160206140998339815191526044820152606401610c8f565b601254610100900460ff161561184c5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610c8f565b6012805462ffff0019166201010017905543600e81905561186e906001613f33565b600f556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a1565b606060048054610bb290613e73565b6005546001600160a01b031633146118f35760405162461bcd60e51b815260206004820181905260248201526000805160206140998339815191526044820152606401610c8f565b600a546001600160a01b03908116908316036119775760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610c8f565b611981828261375d565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b3360009081526001602090815260408083206001600160a01b038616845290915281205482811015611a3f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610c8f565b611a4c3385858403612621565b5060019392505050565b6000610c42338484612915565b6005546001600160a01b03163314611aab5760405162461bcd60e51b815260206004820181905260248201526000805160206140998339815191526044820152606401610c8f565b6001600160a01b038216600081815260236020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b03163314611b525760405162461bcd60e51b815260206004820181905260248201526000805160206140998339815191526044820152606401610c8f565b670de0b6b3a76400006103e8611b6760025490565b611b72906003613ef2565b611b7c9190613f11565b611b869190613f11565b811015611bfb5760405162461bcd60e51b815260206004820152602c60248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f7760448201527f6572207468616e20302e332500000000000000000000000000000000000000006064820152608401610c8f565b611c0d81670de0b6b3a7640000613ef2565b60088190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc90602001610f98565b6005546001600160a01b03163314611c8a5760405162461bcd60e51b815260206004820181905260248201526000805160206140998339815191526044820152606401610c8f565b6001600160a01b038116611ce05760405162461bcd60e51b815260206004820152601f60248201527f5f6465764164647265737320616464726573732063616e6e6f742062652030006044820152606401610c8f565b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314611d4a5760405162461bcd60e51b815260206004820181905260248201526000805160206140998339815191526044820152606401610c8f565b620186a0611d5760025490565b611d62906001613ef2565b611d6c9190613f11565b811015611de15760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527f20302e3030312520746f74616c20737570706c792e00000000000000000000006064820152608401610c8f565b6103e8611ded60025490565b611df8906001613ef2565b611e029190613f11565b811115611e775760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160448201527f6e20302e312520746f74616c20737570706c792e0000000000000000000000006064820152608401610c8f565b600b55565b6005546001600160a01b03163314611ec45760405162461bcd60e51b815260206004820181905260248201526000805160206140998339815191526044820152606401610c8f565b670de0b6b3a76400006103e8611ed960025490565b611ee4906002613ef2565b611eee9190613f11565b611ef89190613f11565b811015611f5a5760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e322560b01b6064820152608401610c8f565b611f6c81670de0b6b3a7640000613ef2565b60078190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e90602001610f98565b6005546001600160a01b03163314611fe95760405162461bcd60e51b815260206004820181905260248201526000805160206140998339815191526044820152606401610c8f565b601e601b8190556000601c819055601d81905580825590819061200d908290613f33565b6120179190613f33565b6120219190613f33565b601a819055601e10156120765760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420333025206f72206c6573730000006044820152606401610c8f565b600f6016819055600060178190556018819055601981905590819061209c908290613f33565b6120a69190613f33565b6120b09190613f33565b6015819055600f10156121055760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313525206f72206c6573730000006044820152606401610c8f565b565b6005546001600160a01b0316331461214f5760405162461bcd60e51b815260206004820181905260248201526000805160206140998339815191526044820152606401610c8f565b601b849055601c839055601d829055601e819055808261216f8587613f33565b6121799190613f33565b6121839190613f33565b601a819055601410156110745760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323025206f72206c6573730000006044820152606401610c8f565b6005546001600160a01b031633146122205760405162461bcd60e51b815260206004820181905260248201526000805160206140998339815191526044820152606401610c8f565b6014805460ff19169055565b6005546001600160a01b031633146122745760405162461bcd60e51b815260206004820181905260248201526000805160206140998339815191526044820152606401610c8f565b6001600160a01b0381166122d95760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c8f565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b0316331461237d5760405162461bcd60e51b815260206004820181905260248201526000805160206140998339815191526044820152606401610c8f565b604051600090339047908381818185875af1925050503d8060008114611074576040519150601f19603f3d011682016040523d82523d6000602084013e611074565b6005546001600160a01b031633146124075760405162461bcd60e51b815260206004820181905260248201526000805160206140998339815191526044820152606401610c8f565b678ac7230489e800008111156124955760405162461bcd60e51b815260206004820152604760248201527f4d6179206e6f7420627579206d6f7265207468616e2031302045544820696e2060448201527f612073696e676c652062757920746f207265647563652073616e64776963682060648201526661747461636b7360c81b608482015260a401610c8f565b6040805160028082526060820183526000926020830190803683375050600954604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa1580156124ff573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125239190613f81565b8160008151811061253657612536613ead565b60200260200101906001600160a01b031690816001600160a01b031681525050308160018151811061256a5761256a613ead565b6001600160a01b03928316602091820292909201015260095460405163b6f9de9560e01b815291169063b6f9de959084906125b290600090869061dead904290600401613fe2565b6000604051808303818588803b1580156125cb57600080fd5b505af11580156125df573d6000803e3d6000fd5b50505050507fa017c1567cfcdd2d750a8c01e39fe2a846bcebc293c7d078477014d6848205688260405161261591815260200190565b60405180910390a15050565b6001600160a01b0383166126835760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610c8f565b6001600160a01b0382166126e45760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610c8f565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383166127aa5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610c8f565b6001600160a01b03821661280c5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610c8f565b6001600160a01b038316600090815260208190526040902054818110156128845760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610c8f565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906128bb908490613f33565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161290791815260200190565b60405180910390a350505050565b6001600160a01b0383166129795760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610c8f565b6001600160a01b0382166129db5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610c8f565b60008111612a2b5760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610c8f565b601254610100900460ff16612ac5576001600160a01b03831660009081526023602052604090205460ff1680612a7957506001600160a01b03821660009081526023602052604090205460ff165b612ac55760405162461bcd60e51b815260206004820152601660248201527f54726164696e67206973206e6f74206163746976652e000000000000000000006044820152606401610c8f565b600f544310158015612ad957506000600f54115b15612ba9576001600160a01b03831660009081526010602052604090205460ff161580612b1357506005546001600160a01b038381169116145b80612b2857506001600160a01b03821661dead145b612ba95760405162461bcd60e51b815260206004820152604660248201527f426f74732063616e6e6f74207472616e7366657220746f6b656e7320696e206f60448201527f72206f75742065786365707420746f206f776e6572206f722064656164206164606482015265323932b9b99760d11b608482015260a401610c8f565b60125460ff1615612fd7576005546001600160a01b03848116911614801590612be057506005546001600160a01b03838116911614155b8015612bf457506001600160a01b03821615155b8015612c0b57506001600160a01b03821661dead14155b8015612c3057506001600160a01b03831660009081526023602052604090205460ff16155b8015612c5557506001600160a01b03821660009081526023602052604090205460ff16155b15612fd75760145460ff1615612d76576009546001600160a01b03838116911614801590612c915750600a546001600160a01b03838116911614155b15612d7657612ca1600243614017565b32600090815260136020526040902054108015612cdf5750612cc4600243614017565b6001600160a01b038316600090815260136020526040902054105b612d515760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527f65642e202054727920616761696e206c617465722e00000000000000000000006064820152608401610c8f565b3260009081526013602052604080822043908190556001600160a01b03851683529120555b6001600160a01b03831660009081526025602052604090205460ff168015612db757506001600160a01b03821660009081526024602052604090205460ff16155b15612e9857600654811115612e1f5760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610c8f565b6008546001600160a01b038316600090815260208190526040902054612e459083613f33565b1115612e935760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420457863656564206d61782077616c6c657400000000000000006044820152606401610c8f565b612fd7565b6001600160a01b03821660009081526025602052604090205460ff168015612ed957506001600160a01b03831660009081526024602052604090205460ff16155b15612f4357600754811115612e935760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610c8f565b6001600160a01b03821660009081526024602052604090205460ff16612fd7576008546001600160a01b038316600090815260208190526040902054612f899083613f33565b1115612fd75760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420457863656564206d61782077616c6c657400000000000000006044820152606401610c8f565b30600090815260208190526040902054600b5481108015908190613003575060125462010000900460ff165b80156130195750600a54600160a01b900460ff16155b801561303e57506001600160a01b03851660009081526025602052604090205460ff16155b801561306357506001600160a01b03851660009081526023602052604090205460ff16155b801561308857506001600160a01b03841660009081526023602052604090205460ff16155b156130b657600a805460ff60a01b1916600160a01b1790556130a8613513565b600a805460ff60a01b191690555b6001600160a01b03851660009081526023602052604090205460019060ff16806130f857506001600160a01b03851660009081526023602052604090205460ff165b15613101575060005b600081156134ff57600f544310801561313257506001600160a01b03871660009081526025602052604090205460ff165b801561315757506001600160a01b03861660009081526025602052604090205460ff16155b801561316557506000601554115b156132e8576001600160a01b03861660009081526010602052604090205460ff16613205576001600160a01b0386166000908152601060205260408120805460ff1916600190811790915560118054919290916131c3908490613f33565b90915550506040516001600160a01b03871681527f55678e47d0a699d3ab99b0184c4ff14f2246ba80522deb921aa0c8823578c44a9060200160405180910390a15b6064601554866132159190613ef2565b61321f9190613f11565b9050601554601754826132329190613ef2565b61323c9190613f11565b6020600082825461324d9190613f33565b90915550506015546016546132629083613ef2565b61326c9190613f11565b601f600082825461327d9190613f33565b90915550506015546018546132929083613ef2565b61329c9190613f11565b602160008282546132ad9190613f33565b90915550506015546019546132c29083613ef2565b6132cc9190613f11565b602260008282546132dd9190613f33565b909155506134e19050565b6001600160a01b03861660009081526025602052604090205460ff16801561331257506000601a54115b156133d4576064601a54866133279190613ef2565b6133319190613f11565b9050601a54601c54826133449190613ef2565b61334e9190613f11565b6020600082825461335f9190613f33565b9091555050601a54601b546133749083613ef2565b61337e9190613f11565b601f600082825461338f9190613f33565b9091555050601a54601d546133a49083613ef2565b6133ae9190613f11565b602160008282546133bf9190613f33565b9091555050601a54601e546132c29083613ef2565b6001600160a01b03871660009081526025602052604090205460ff1680156133fe57506000601554115b156134e1576064601554866134139190613ef2565b61341d9190613f11565b9050601554601754826134309190613ef2565b61343a9190613f11565b6020600082825461344b9190613f33565b90915550506015546016546134609083613ef2565b61346a9190613f11565b601f600082825461347b9190613f33565b90915550506015546018546134909083613ef2565b61349a9190613f11565b602160008282546134ab9190613f33565b90915550506015546019546134c09083613ef2565b6134ca9190613f11565b602260008282546134db9190613f33565b90915550505b80156134f2576134f2873083612746565b6134fc8186614017565b94505b61350a878787612746565b50505050505050565b600060225411801561353657506022543060009081526020819052604090205410155b15613547576135473060225461378b565b600060228190553081526020819052604081205490506000602154601f546020546135729190613f33565b61357c9190613f33565b9050811580613589575080155b15613592575050565b600b546135a0906014613ef2565b8211156135b857600b546135b5906014613ef2565b91505b600080600283602054866135cc9190613ef2565b6135d69190613f11565b6135e09190613f11565b90506135f46135ef8286614017565b6138b5565b6020544790819060009061360a90600290613f11565b6136149087614017565b601f546136219085613ef2565b61362b9190613f11565b90506000600260205461363e9190613f11565b6136489088614017565b6021546136559086613ef2565b61365f9190613f11565b905061366b8183613f33565b6136759084614017565b60006020819055601f81905560218190556022559250841580159061369a5750600083115b156136a9576136a98584613a0f565b600d546040516001600160a01b03909116908290600081818185875af1925050503d80600081146136f6576040519150601f19603f3d011682016040523d82523d6000602084013e6136fb565b606091505b5050600c546040519197506001600160a01b0316904790600081818185875af1925050503d806000811461374b576040519150601f19603f3d011682016040523d82523d6000602084013e613750565b606091505b5050505050505050505050565b6001600160a01b0382166000908152602560205260409020805460ff19168215151790556119818282613ac1565b6001600160a01b0382166137eb5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610c8f565b6001600160a01b0382166000908152602081905260409020548181101561385f5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610c8f565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101612739565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106138ea576138ea613ead565b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015613943573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139679190613f81565b8160018151811061397a5761397a613ead565b6001600160a01b0392831660209182029290920101526009546139a09130911684612621565b60095460405163791ac94760e01b81526001600160a01b039091169063791ac947906139d990859060009086903090429060040161402e565b600060405180830381600087803b1580156139f357600080fd5b505af1158015613a07573d6000803e3d6000fd5b505050505050565b600954613a279030906001600160a01b031684612621565b60095460405163f305d71960e01b815230600482015260248101849052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af1158015613a95573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613aba919061406a565b5050505050565b6001600160a01b038216600081815260246020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd67469101612615565b600060208083528351808285015260005b81811015613b4a57858101830151858201604001528201613b2e565b81811115613b5c576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114613b8757600080fd5b50565b60008060408385031215613b9d57600080fd5b8235613ba881613b72565b946020939093013593505050565b600060208284031215613bc857600080fd5b8135613bd381613b72565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715613c1957613c19613bda565b604052919050565b600067ffffffffffffffff821115613c3b57613c3b613bda565b5060051b60200190565b600082601f830112613c5657600080fd5b81356020613c6b613c6683613c21565b613bf0565b82815260059290921b84018101918181019086841115613c8a57600080fd5b8286015b84811015613ca55780358352918301918301613c8e565b509695505050505050565b60008060408385031215613cc357600080fd5b823567ffffffffffffffff80821115613cdb57600080fd5b818501915085601f830112613cef57600080fd5b81356020613cff613c6683613c21565b82815260059290921b84018101918181019089841115613d1e57600080fd5b948201945b83861015613d45578535613d3681613b72565b82529482019490820190613d23565b96505086013592505080821115613d5b57600080fd5b50613d6885828601613c45565b9150509250929050565b600080600060608486031215613d8757600080fd5b8335613d9281613b72565b92506020840135613da281613b72565b929592945050506040919091013590565b600060208284031215613dc557600080fd5b5035919050565b60008060008060808587031215613de257600080fd5b5050823594602084013594506040840135936060013592509050565b8015158114613b8757600080fd5b60008060408385031215613e1f57600080fd5b8235613e2a81613b72565b91506020830135613e3a81613dfe565b809150509250929050565b60008060408385031215613e5857600080fd5b8235613e6381613b72565b91506020830135613e3a81613b72565b600181811c90821680613e8757607f821691505b602082108103613ea757634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201613eeb57613eeb613ec3565b5060010190565b6000816000190483118215151615613f0c57613f0c613ec3565b500290565b600082613f2e57634e487b7160e01b600052601260045260246000fd5b500490565b60008219821115613f4657613f46613ec3565b500190565b600060208284031215613f5d57600080fd5b5051919050565b600060208284031215613f7657600080fd5b8151613bd381613dfe565b600060208284031215613f9357600080fd5b8151613bd381613b72565b600081518084526020808501945080840160005b83811015613fd75781516001600160a01b031687529582019590820190600101613fb2565b509495945050505050565b848152608060208201526000613ffb6080830186613f9e565b6001600160a01b03949094166040830152506060015292915050565b60008282101561402957614029613ec3565b500390565b85815284602082015260a06040820152600061404d60a0830186613f9e565b6001600160a01b0394909416606083015250608001529392505050565b60008060006060848603121561407f57600080fd5b835192506020840151915060408401519050925092509256fe4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a264697066735822122006b4df6383b8f79acb956e02dd82d7a4857d4663f932f99cf6b48cdd8746f34b64736f6c634300080f00334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65728be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0

Deployed Bytecode

0x6080604052600436106103fd5760003560e01c80638da5cb5b1161020d578063d0d41fe111610128578063e7ad9fcd116100bb578063f2fde38b1161008a578063f63743421161006f578063f637434214610b57578063fb002c9714610b6d578063fc155d1d14610b8357600080fd5b8063f2fde38b14610b22578063f5648a4f14610b4257600080fd5b8063e7ad9fcd14610ac1578063e884f26014610ae1578063ee40166e14610af6578063f11a24d314610b0c57600080fd5b8063dd62ed3e116100f7578063dd62ed3e14610a3a578063e2cd5fcd14610a80578063e2f4560514610a95578063e71dc3f514610aab57600080fd5b8063d0d41fe1146109c4578063d257b34f146109e4578063d85ba06314610a04578063dc3f0d0f14610a1a57600080fd5b8063a9059cbb116101a0578063bbc0c7421161016f578063bbc0c7421461094b578063c02466681461096a578063c18bc1951461098a578063c876d0b9146109aa57600080fd5b8063a9059cbb146108cf578063aa4bde28146108ef578063adb873bd14610905578063b62496f51461091b57600080fd5b80639fccce32116101dc5780639fccce321461086d578063a0d82dc514610883578063a457c2d714610899578063a62068ce146108b957600080fd5b80638da5cb5b1461080457806395d89b41146108225780639a7a23d6146108375780639c3b4fdc1461085757600080fd5b80634f77f6c0116103185780636ddd1713116102ab5780637571336a1161027a57806385ecfd281161025f57806385ecfd28146107a957806388e765ff146107d95780638a8c523c146107ef57600080fd5b80637571336a146107695780638366e79a1461078957600080fd5b80636ddd1713146106e957806370a0823114610709578063715018a61461073f578063751039fc1461075457600080fd5b80635bb988c9116102e75780635bb988c91461068757806366d602ae146106a75780636a486a8e146106bd5780636b0a894c146106d357600080fd5b80634f77f6c01461062f57806351f205e41461064557806358a6d5311461065a5780635a139dd41461067157600080fd5b806323b872dd11610390578063395093511161035f57806339509351146105b5578063452ed4f1146105d5578063499b8394146105f55780634a62bb651461061557600080fd5b806323b872dd146105395780632be32b61146105595780632e6ed7ef14610579578063313ce5671461059957600080fd5b806318160ddd116103cc57806318160ddd146104cc5780631a8145bb146104eb5780631d777856146105015780632307b4411461051757600080fd5b806306fdde03146104095780630758d92414610434578063095ea7b31461046c57806310d5de531461049c57600080fd5b3661040457005b600080fd5b34801561041557600080fd5b5061041e610ba3565b60405161042b9190613b1d565b60405180910390f35b34801561044057600080fd5b50600954610454906001600160a01b031681565b6040516001600160a01b03909116815260200161042b565b34801561047857600080fd5b5061048c610487366004613b8a565b610c35565b604051901515815260200161042b565b3480156104a857600080fd5b5061048c6104b7366004613bb6565b60246020526000908152604090205460ff1681565b3480156104d857600080fd5b506002545b60405190815260200161042b565b3480156104f757600080fd5b506104dd60205481565b34801561050d57600080fd5b506104dd60225481565b34801561052357600080fd5b50610537610532366004613cb0565b610c4b565b005b34801561054557600080fd5b5061048c610554366004613d72565b610dce565b34801561056557600080fd5b50610537610574366004613db3565b610e78565b34801561058557600080fd5b50610537610594366004613dcc565b610fa3565b3480156105a557600080fd5b506040516012815260200161042b565b3480156105c157600080fd5b5061048c6105d0366004613b8a565b61107a565b3480156105e157600080fd5b50600a54610454906001600160a01b031681565b34801561060157600080fd5b50610537610610366004613bb6565b6110b6565b34801561062157600080fd5b5060125461048c9060ff1681565b34801561063b57600080fd5b506104dd601b5481565b34801561065157600080fd5b50610537611185565b34801561066657600080fd5b50600f54431061048c565b34801561067d57600080fd5b506104dd60165481565b34801561069357600080fd5b506105376106a2366004613bb6565b6112b3565b3480156106b357600080fd5b506104dd60075481565b3480156106c957600080fd5b506104dd601a5481565b3480156106df57600080fd5b506104dd60115481565b3480156106f557600080fd5b5060125461048c9062010000900460ff1681565b34801561071557600080fd5b506104dd610724366004613bb6565b6001600160a01b031660009081526020819052604090205490565b34801561074b57600080fd5b50610537611384565b34801561076057600080fd5b50610537611416565b34801561077557600080fd5b50610537610784366004613e0c565b61149f565b34801561079557600080fd5b5061048c6107a4366004613e45565b611585565b3480156107b557600080fd5b5061048c6107c4366004613bb6565b60106020526000908152604090205460ff1681565b3480156107e557600080fd5b506104dd60065481565b3480156107fb57600080fd5b506105376117ac565b34801561081057600080fd5b506005546001600160a01b0316610454565b34801561082e57600080fd5b5061041e61189c565b34801561084357600080fd5b50610537610852366004613e0c565b6118ab565b34801561086357600080fd5b506104dd60185481565b34801561087957600080fd5b506104dd60215481565b34801561088f57600080fd5b506104dd601d5481565b3480156108a557600080fd5b5061048c6108b4366004613b8a565b6119bd565b3480156108c557600080fd5b506104dd600f5481565b3480156108db57600080fd5b5061048c6108ea366004613b8a565b611a56565b3480156108fb57600080fd5b506104dd60085481565b34801561091157600080fd5b506104dd601e5481565b34801561092757600080fd5b5061048c610936366004613bb6565b60256020526000908152604090205460ff1681565b34801561095757600080fd5b5060125461048c90610100900460ff1681565b34801561097657600080fd5b50610537610985366004613e0c565b611a63565b34801561099657600080fd5b506105376109a5366004613db3565b611b0a565b3480156109b657600080fd5b5060145461048c9060ff1681565b3480156109d057600080fd5b506105376109df366004613bb6565b611c42565b3480156109f057600080fd5b506105376109ff366004613db3565b611d02565b348015610a1057600080fd5b506104dd60155481565b348015610a2657600080fd5b50610537610a35366004613db3565b611e7c565b348015610a4657600080fd5b506104dd610a55366004613e45565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610a8c57600080fd5b50610537611fa1565b348015610aa157600080fd5b506104dd600b5481565b348015610ab757600080fd5b506104dd60195481565b348015610acd57600080fd5b50610537610adc366004613dcc565b612107565b348015610aed57600080fd5b506105376121d8565b348015610b0257600080fd5b506104dd600e5481565b348015610b1857600080fd5b506104dd60175481565b348015610b2e57600080fd5b50610537610b3d366004613bb6565b61222c565b348015610b4e57600080fd5b50610537612335565b348015610b6357600080fd5b506104dd601c5481565b348015610b7957600080fd5b506104dd601f5481565b348015610b8f57600080fd5b50610537610b9e366004613db3565b6123bf565b606060038054610bb290613e73565b80601f0160208091040260200160405190810160405280929190818152602001828054610bde90613e73565b8015610c2b5780601f10610c0057610100808354040283529160200191610c2b565b820191906000526020600020905b815481529060010190602001808311610c0e57829003601f168201915b5050505050905090565b6000610c42338484612621565b50600192915050565b6005546001600160a01b03163314610c985760405162461bcd60e51b8152602060048201819052602482015260008051602061409983398151915260448201526064015b60405180910390fd5b8051825114610ce95760405162461bcd60e51b815260206004820152601e60248201527f617272617973206d757374206265207468652073616d65206c656e67746800006044820152606401610c8f565b610258825110610d615760405162461bcd60e51b815260206004820152603660248201527f43616e206f6e6c792061697264726f70203630302077616c6c6574732070657260448201527f2074786e2064756520746f20676173206c696d697473000000000000000000006064820152608401610c8f565b60005b8251811015610dc9576000838281518110610d8157610d81613ead565b602002602001015190506000838381518110610d9f57610d9f613ead565b60200260200101519050610db4338383612746565b50508080610dc190613ed9565b915050610d64565b505050565b6000610ddb848484612915565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610e605760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610c8f565b610e6d8533858403612621565b506001949350505050565b6005546001600160a01b03163314610ec05760405162461bcd60e51b815260206004820181905260248201526000805160206140998339815191526044820152606401610c8f565b670de0b6b3a76400006103e8610ed560025490565b610ee0906002613ef2565b610eea9190613f11565b610ef49190613f11565b811015610f555760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152687468616e20302e322560b81b6064820152608401610c8f565b610f6781670de0b6b3a7640000613ef2565b60068190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de41009906020015b60405180910390a150565b6005546001600160a01b03163314610feb5760405162461bcd60e51b815260206004820181905260248201526000805160206140998339815191526044820152606401610c8f565b6016849055601783905560188290556019819055808261100b8587613f33565b6110159190613f33565b61101f9190613f33565b6015819055600f10156110745760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313525206f72206c6573730000006044820152606401610c8f565b50505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610c429185906110b1908690613f33565b612621565b6005546001600160a01b031633146110fe5760405162461bcd60e51b815260206004820181905260248201526000805160206140998339815191526044820152606401610c8f565b6001600160a01b0381166111635760405162461bcd60e51b815260206004820152602660248201527f5f6f7065726174696f6e734164647265737320616464726573732063616e6e6f60448201526507420626520360d41b6064820152608401610c8f565b600c80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146111cd5760405162461bcd60e51b815260206004820181905260248201526000805160206140998339815191526044820152606401610c8f565b600b54306000908152602081905260409020541015611256576040805162461bcd60e51b81526020600482015260248101919091527f43616e206f6e6c792073776170207768656e20746f6b656e20616d6f756e742060448201527f6973206174206f7220686967686572207468616e207265737472696374696f6e6064820152608401610c8f565b600a805460ff60a01b1916600160a01b179055611271613513565b600a805460ff60a01b191690556040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb329060200160405180910390a1565b6005546001600160a01b031633146112fb5760405162461bcd60e51b815260206004820181905260248201526000805160206140998339815191526044820152606401610c8f565b6001600160a01b03811660009081526010602052604090205460ff166113635760405162461bcd60e51b815260206004820152601e60248201527f57616c6c657420697320616c7265616479206e6f7420666c61676765642e00006044820152606401610c8f565b6001600160a01b03166000908152601060205260409020805460ff19169055565b6005546001600160a01b031633146113cc5760405162461bcd60e51b815260206004820181905260248201526000805160206140998339815191526044820152606401610c8f565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b0316331461145e5760405162461bcd60e51b815260206004820181905260248201526000805160206140998339815191526044820152606401610c8f565b6012805460ff199081169091556014805490911690556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6005546001600160a01b031633146114e75760405162461bcd60e51b815260206004820181905260248201526000805160206140998339815191526044820152606401610c8f565b8061155a57600a546001600160a01b039081169083160361155a5760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610c8f565b6001600160a01b03919091166000908152602460205260409020805460ff1916911515919091179055565b6005546000906001600160a01b031633146115d05760405162461bcd60e51b815260206004820181905260248201526000805160206140998339815191526044820152606401610c8f565b6001600160a01b0383166116265760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610c8f565b306001600160a01b0384160361167e5760405162461bcd60e51b815260206004820152601c60248201527f43616e2774207769746864726177206e617469766520746f6b656e73000000006044820152606401610c8f565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa1580156116c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116e99190613f4b565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af115801561173c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117609190613f64565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6005546001600160a01b031633146117f45760405162461bcd60e51b815260206004820181905260248201526000805160206140998339815191526044820152606401610c8f565b601254610100900460ff161561184c5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610c8f565b6012805462ffff0019166201010017905543600e81905561186e906001613f33565b600f556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a1565b606060048054610bb290613e73565b6005546001600160a01b031633146118f35760405162461bcd60e51b815260206004820181905260248201526000805160206140998339815191526044820152606401610c8f565b600a546001600160a01b03908116908316036119775760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610c8f565b611981828261375d565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b3360009081526001602090815260408083206001600160a01b038616845290915281205482811015611a3f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610c8f565b611a4c3385858403612621565b5060019392505050565b6000610c42338484612915565b6005546001600160a01b03163314611aab5760405162461bcd60e51b815260206004820181905260248201526000805160206140998339815191526044820152606401610c8f565b6001600160a01b038216600081815260236020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b03163314611b525760405162461bcd60e51b815260206004820181905260248201526000805160206140998339815191526044820152606401610c8f565b670de0b6b3a76400006103e8611b6760025490565b611b72906003613ef2565b611b7c9190613f11565b611b869190613f11565b811015611bfb5760405162461bcd60e51b815260206004820152602c60248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f7760448201527f6572207468616e20302e332500000000000000000000000000000000000000006064820152608401610c8f565b611c0d81670de0b6b3a7640000613ef2565b60088190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc90602001610f98565b6005546001600160a01b03163314611c8a5760405162461bcd60e51b815260206004820181905260248201526000805160206140998339815191526044820152606401610c8f565b6001600160a01b038116611ce05760405162461bcd60e51b815260206004820152601f60248201527f5f6465764164647265737320616464726573732063616e6e6f742062652030006044820152606401610c8f565b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314611d4a5760405162461bcd60e51b815260206004820181905260248201526000805160206140998339815191526044820152606401610c8f565b620186a0611d5760025490565b611d62906001613ef2565b611d6c9190613f11565b811015611de15760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527f20302e3030312520746f74616c20737570706c792e00000000000000000000006064820152608401610c8f565b6103e8611ded60025490565b611df8906001613ef2565b611e029190613f11565b811115611e775760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160448201527f6e20302e312520746f74616c20737570706c792e0000000000000000000000006064820152608401610c8f565b600b55565b6005546001600160a01b03163314611ec45760405162461bcd60e51b815260206004820181905260248201526000805160206140998339815191526044820152606401610c8f565b670de0b6b3a76400006103e8611ed960025490565b611ee4906002613ef2565b611eee9190613f11565b611ef89190613f11565b811015611f5a5760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e322560b01b6064820152608401610c8f565b611f6c81670de0b6b3a7640000613ef2565b60078190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e90602001610f98565b6005546001600160a01b03163314611fe95760405162461bcd60e51b815260206004820181905260248201526000805160206140998339815191526044820152606401610c8f565b601e601b8190556000601c819055601d81905580825590819061200d908290613f33565b6120179190613f33565b6120219190613f33565b601a819055601e10156120765760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420333025206f72206c6573730000006044820152606401610c8f565b600f6016819055600060178190556018819055601981905590819061209c908290613f33565b6120a69190613f33565b6120b09190613f33565b6015819055600f10156121055760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313525206f72206c6573730000006044820152606401610c8f565b565b6005546001600160a01b0316331461214f5760405162461bcd60e51b815260206004820181905260248201526000805160206140998339815191526044820152606401610c8f565b601b849055601c839055601d829055601e819055808261216f8587613f33565b6121799190613f33565b6121839190613f33565b601a819055601410156110745760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323025206f72206c6573730000006044820152606401610c8f565b6005546001600160a01b031633146122205760405162461bcd60e51b815260206004820181905260248201526000805160206140998339815191526044820152606401610c8f565b6014805460ff19169055565b6005546001600160a01b031633146122745760405162461bcd60e51b815260206004820181905260248201526000805160206140998339815191526044820152606401610c8f565b6001600160a01b0381166122d95760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c8f565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b0316331461237d5760405162461bcd60e51b815260206004820181905260248201526000805160206140998339815191526044820152606401610c8f565b604051600090339047908381818185875af1925050503d8060008114611074576040519150601f19603f3d011682016040523d82523d6000602084013e611074565b6005546001600160a01b031633146124075760405162461bcd60e51b815260206004820181905260248201526000805160206140998339815191526044820152606401610c8f565b678ac7230489e800008111156124955760405162461bcd60e51b815260206004820152604760248201527f4d6179206e6f7420627579206d6f7265207468616e2031302045544820696e2060448201527f612073696e676c652062757920746f207265647563652073616e64776963682060648201526661747461636b7360c81b608482015260a401610c8f565b6040805160028082526060820183526000926020830190803683375050600954604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa1580156124ff573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125239190613f81565b8160008151811061253657612536613ead565b60200260200101906001600160a01b031690816001600160a01b031681525050308160018151811061256a5761256a613ead565b6001600160a01b03928316602091820292909201015260095460405163b6f9de9560e01b815291169063b6f9de959084906125b290600090869061dead904290600401613fe2565b6000604051808303818588803b1580156125cb57600080fd5b505af11580156125df573d6000803e3d6000fd5b50505050507fa017c1567cfcdd2d750a8c01e39fe2a846bcebc293c7d078477014d6848205688260405161261591815260200190565b60405180910390a15050565b6001600160a01b0383166126835760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610c8f565b6001600160a01b0382166126e45760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610c8f565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383166127aa5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610c8f565b6001600160a01b03821661280c5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610c8f565b6001600160a01b038316600090815260208190526040902054818110156128845760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610c8f565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906128bb908490613f33565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161290791815260200190565b60405180910390a350505050565b6001600160a01b0383166129795760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610c8f565b6001600160a01b0382166129db5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610c8f565b60008111612a2b5760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610c8f565b601254610100900460ff16612ac5576001600160a01b03831660009081526023602052604090205460ff1680612a7957506001600160a01b03821660009081526023602052604090205460ff165b612ac55760405162461bcd60e51b815260206004820152601660248201527f54726164696e67206973206e6f74206163746976652e000000000000000000006044820152606401610c8f565b600f544310158015612ad957506000600f54115b15612ba9576001600160a01b03831660009081526010602052604090205460ff161580612b1357506005546001600160a01b038381169116145b80612b2857506001600160a01b03821661dead145b612ba95760405162461bcd60e51b815260206004820152604660248201527f426f74732063616e6e6f74207472616e7366657220746f6b656e7320696e206f60448201527f72206f75742065786365707420746f206f776e6572206f722064656164206164606482015265323932b9b99760d11b608482015260a401610c8f565b60125460ff1615612fd7576005546001600160a01b03848116911614801590612be057506005546001600160a01b03838116911614155b8015612bf457506001600160a01b03821615155b8015612c0b57506001600160a01b03821661dead14155b8015612c3057506001600160a01b03831660009081526023602052604090205460ff16155b8015612c5557506001600160a01b03821660009081526023602052604090205460ff16155b15612fd75760145460ff1615612d76576009546001600160a01b03838116911614801590612c915750600a546001600160a01b03838116911614155b15612d7657612ca1600243614017565b32600090815260136020526040902054108015612cdf5750612cc4600243614017565b6001600160a01b038316600090815260136020526040902054105b612d515760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527f65642e202054727920616761696e206c617465722e00000000000000000000006064820152608401610c8f565b3260009081526013602052604080822043908190556001600160a01b03851683529120555b6001600160a01b03831660009081526025602052604090205460ff168015612db757506001600160a01b03821660009081526024602052604090205460ff16155b15612e9857600654811115612e1f5760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610c8f565b6008546001600160a01b038316600090815260208190526040902054612e459083613f33565b1115612e935760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420457863656564206d61782077616c6c657400000000000000006044820152606401610c8f565b612fd7565b6001600160a01b03821660009081526025602052604090205460ff168015612ed957506001600160a01b03831660009081526024602052604090205460ff16155b15612f4357600754811115612e935760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610c8f565b6001600160a01b03821660009081526024602052604090205460ff16612fd7576008546001600160a01b038316600090815260208190526040902054612f899083613f33565b1115612fd75760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420457863656564206d61782077616c6c657400000000000000006044820152606401610c8f565b30600090815260208190526040902054600b5481108015908190613003575060125462010000900460ff165b80156130195750600a54600160a01b900460ff16155b801561303e57506001600160a01b03851660009081526025602052604090205460ff16155b801561306357506001600160a01b03851660009081526023602052604090205460ff16155b801561308857506001600160a01b03841660009081526023602052604090205460ff16155b156130b657600a805460ff60a01b1916600160a01b1790556130a8613513565b600a805460ff60a01b191690555b6001600160a01b03851660009081526023602052604090205460019060ff16806130f857506001600160a01b03851660009081526023602052604090205460ff165b15613101575060005b600081156134ff57600f544310801561313257506001600160a01b03871660009081526025602052604090205460ff165b801561315757506001600160a01b03861660009081526025602052604090205460ff16155b801561316557506000601554115b156132e8576001600160a01b03861660009081526010602052604090205460ff16613205576001600160a01b0386166000908152601060205260408120805460ff1916600190811790915560118054919290916131c3908490613f33565b90915550506040516001600160a01b03871681527f55678e47d0a699d3ab99b0184c4ff14f2246ba80522deb921aa0c8823578c44a9060200160405180910390a15b6064601554866132159190613ef2565b61321f9190613f11565b9050601554601754826132329190613ef2565b61323c9190613f11565b6020600082825461324d9190613f33565b90915550506015546016546132629083613ef2565b61326c9190613f11565b601f600082825461327d9190613f33565b90915550506015546018546132929083613ef2565b61329c9190613f11565b602160008282546132ad9190613f33565b90915550506015546019546132c29083613ef2565b6132cc9190613f11565b602260008282546132dd9190613f33565b909155506134e19050565b6001600160a01b03861660009081526025602052604090205460ff16801561331257506000601a54115b156133d4576064601a54866133279190613ef2565b6133319190613f11565b9050601a54601c54826133449190613ef2565b61334e9190613f11565b6020600082825461335f9190613f33565b9091555050601a54601b546133749083613ef2565b61337e9190613f11565b601f600082825461338f9190613f33565b9091555050601a54601d546133a49083613ef2565b6133ae9190613f11565b602160008282546133bf9190613f33565b9091555050601a54601e546132c29083613ef2565b6001600160a01b03871660009081526025602052604090205460ff1680156133fe57506000601554115b156134e1576064601554866134139190613ef2565b61341d9190613f11565b9050601554601754826134309190613ef2565b61343a9190613f11565b6020600082825461344b9190613f33565b90915550506015546016546134609083613ef2565b61346a9190613f11565b601f600082825461347b9190613f33565b90915550506015546018546134909083613ef2565b61349a9190613f11565b602160008282546134ab9190613f33565b90915550506015546019546134c09083613ef2565b6134ca9190613f11565b602260008282546134db9190613f33565b90915550505b80156134f2576134f2873083612746565b6134fc8186614017565b94505b61350a878787612746565b50505050505050565b600060225411801561353657506022543060009081526020819052604090205410155b15613547576135473060225461378b565b600060228190553081526020819052604081205490506000602154601f546020546135729190613f33565b61357c9190613f33565b9050811580613589575080155b15613592575050565b600b546135a0906014613ef2565b8211156135b857600b546135b5906014613ef2565b91505b600080600283602054866135cc9190613ef2565b6135d69190613f11565b6135e09190613f11565b90506135f46135ef8286614017565b6138b5565b6020544790819060009061360a90600290613f11565b6136149087614017565b601f546136219085613ef2565b61362b9190613f11565b90506000600260205461363e9190613f11565b6136489088614017565b6021546136559086613ef2565b61365f9190613f11565b905061366b8183613f33565b6136759084614017565b60006020819055601f81905560218190556022559250841580159061369a5750600083115b156136a9576136a98584613a0f565b600d546040516001600160a01b03909116908290600081818185875af1925050503d80600081146136f6576040519150601f19603f3d011682016040523d82523d6000602084013e6136fb565b606091505b5050600c546040519197506001600160a01b0316904790600081818185875af1925050503d806000811461374b576040519150601f19603f3d011682016040523d82523d6000602084013e613750565b606091505b5050505050505050505050565b6001600160a01b0382166000908152602560205260409020805460ff19168215151790556119818282613ac1565b6001600160a01b0382166137eb5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610c8f565b6001600160a01b0382166000908152602081905260409020548181101561385f5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610c8f565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101612739565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106138ea576138ea613ead565b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015613943573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139679190613f81565b8160018151811061397a5761397a613ead565b6001600160a01b0392831660209182029290920101526009546139a09130911684612621565b60095460405163791ac94760e01b81526001600160a01b039091169063791ac947906139d990859060009086903090429060040161402e565b600060405180830381600087803b1580156139f357600080fd5b505af1158015613a07573d6000803e3d6000fd5b505050505050565b600954613a279030906001600160a01b031684612621565b60095460405163f305d71960e01b815230600482015260248101849052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af1158015613a95573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613aba919061406a565b5050505050565b6001600160a01b038216600081815260246020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd67469101612615565b600060208083528351808285015260005b81811015613b4a57858101830151858201604001528201613b2e565b81811115613b5c576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114613b8757600080fd5b50565b60008060408385031215613b9d57600080fd5b8235613ba881613b72565b946020939093013593505050565b600060208284031215613bc857600080fd5b8135613bd381613b72565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715613c1957613c19613bda565b604052919050565b600067ffffffffffffffff821115613c3b57613c3b613bda565b5060051b60200190565b600082601f830112613c5657600080fd5b81356020613c6b613c6683613c21565b613bf0565b82815260059290921b84018101918181019086841115613c8a57600080fd5b8286015b84811015613ca55780358352918301918301613c8e565b509695505050505050565b60008060408385031215613cc357600080fd5b823567ffffffffffffffff80821115613cdb57600080fd5b818501915085601f830112613cef57600080fd5b81356020613cff613c6683613c21565b82815260059290921b84018101918181019089841115613d1e57600080fd5b948201945b83861015613d45578535613d3681613b72565b82529482019490820190613d23565b96505086013592505080821115613d5b57600080fd5b50613d6885828601613c45565b9150509250929050565b600080600060608486031215613d8757600080fd5b8335613d9281613b72565b92506020840135613da281613b72565b929592945050506040919091013590565b600060208284031215613dc557600080fd5b5035919050565b60008060008060808587031215613de257600080fd5b5050823594602084013594506040840135936060013592509050565b8015158114613b8757600080fd5b60008060408385031215613e1f57600080fd5b8235613e2a81613b72565b91506020830135613e3a81613dfe565b809150509250929050565b60008060408385031215613e5857600080fd5b8235613e6381613b72565b91506020830135613e3a81613b72565b600181811c90821680613e8757607f821691505b602082108103613ea757634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201613eeb57613eeb613ec3565b5060010190565b6000816000190483118215151615613f0c57613f0c613ec3565b500290565b600082613f2e57634e487b7160e01b600052601260045260246000fd5b500490565b60008219821115613f4657613f46613ec3565b500190565b600060208284031215613f5d57600080fd5b5051919050565b600060208284031215613f7657600080fd5b8151613bd381613dfe565b600060208284031215613f9357600080fd5b8151613bd381613b72565b600081518084526020808501945080840160005b83811015613fd75781516001600160a01b031687529582019590820190600101613fb2565b509495945050505050565b848152608060208201526000613ffb6080830186613f9e565b6001600160a01b03949094166040830152506060015292915050565b60008282101561402957614029613ec3565b500390565b85815284602082015260a06040820152600061404d60a0830186613f9e565b6001600160a01b0394909416606083015250608001529392505050565b60008060006060848603121561407f57600080fd5b835192506020840151915060408401519050925092509256fe4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a264697066735822122006b4df6383b8f79acb956e02dd82d7a4857d4663f932f99cf6b48cdd8746f34b64736f6c634300080f0033

Deployed Bytecode Sourcemap

10195:19908:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4084:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10346:27;;;;;;;;;;-1:-1:-1;10346:27:0;;;;-1:-1:-1;;;;;10346:27:0;;;;;;-1:-1:-1;;;;;798:55:1;;;780:74;;768:2;753:18;10346:27:0;616:244:1;4998:169:0;;;;;;;;;;-1:-1:-1;4998:169:0;;;;;:::i;:::-;;:::i;:::-;;;1509:14:1;;1502:22;1484:41;;1472:2;1457:18;4998:169:0;1344:187:1;11734:64:0;;;;;;;;;;-1:-1:-1;11734:64:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;4405:108;;;;;;;;;;-1:-1:-1;4493:12:0;;4405:108;;;1934:25:1;;;1922:2;1907:18;4405:108:0;1788:177:1;11482:33:0;;;;;;;;;;;;;;;;11556:28;;;;;;;;;;;;;;;;16979:618;;;;;;;;;;-1:-1:-1;16979:618:0;;;;;:::i;:::-;;:::i;:::-;;5175:492;;;;;;;;;;-1:-1:-1;5175:492:0;;;;;:::i;:::-;;:::i;15497:269::-;;;;;;;;;;-1:-1:-1;15497:269:0;;;;;:::i;:::-;;:::i;18424:436::-;;;;;;;;;;-1:-1:-1;18424:436:0;;;;;:::i;:::-;;:::i;4304:93::-;;;;;;;;;;-1:-1:-1;4304:93:0;;4387:2;5635:36:1;;5623:2;5608:18;4304:93:0;5493:184:1;5675:215:0;;;;;;;;;;-1:-1:-1;5675:215:0;;;;;:::i;:::-;;:::i;10380:21::-;;;;;;;;;;-1:-1:-1;10380:21:0;;;;-1:-1:-1;;;;;10380:21:0;;;28577:237;;;;;;;;;;-1:-1:-1;28577:237:0;;;;;:::i;:::-;;:::i;10741:33::-;;;;;;;;;;-1:-1:-1;10741:33:0;;;;;;;;11297:32;;;;;;;;;;;;;;;;29069:312;;;;;;;;;;;;;:::i;25051:120::-;;;;;;;;;;-1:-1:-1;25145:18:0;;25130:12;:33;25051:120;;11122:31;;;;;;;;;;;;;;;;15149:181;;;;;;;;;;-1:-1:-1;15149:181:0;;;;;:::i;:::-;;:::i;10272:28::-;;;;;;;;;;;;;;;;11262;;;;;;;;;;;;;;;;10707:25;;;;;;;;;;;;;;;;10821:31;;;;;;;;;;-1:-1:-1;10821:31:0;;;;;;;;;;;4521:127;;;;;;;;;;-1:-1:-1;4521:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;4622:18:0;4595:7;4622:18;;;;;;;;;;;;4521:127;8719:150;;;;;;;;;;;;;:::i;14987:154::-;;;;;;;;;;;;;:::i;17605:260::-;;;;;;;;;;-1:-1:-1;17605:260:0;;;;;:::i;:::-;;:::i;27883:456::-;;;;;;;;;;-1:-1:-1;27883:456:0;;;;;:::i;:::-;;:::i;10656:44::-;;;;;;;;;;-1:-1:-1;10656:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;10238:27;;;;;;;;;;;;;;;;14632:303;;;;;;;;;;;;;:::i;8505:79::-;;;;;;;;;;-1:-1:-1;8570:6:0;;-1:-1:-1;;;;;8570:6:0;8505:79;;4192:104;;;;;;;;;;;;;:::i;17873:295::-;;;;;;;;;;-1:-1:-1;17873:295:0;;;;;:::i;:::-;;:::i;11197:24::-;;;;;;;;;;;;;;;;11522:27;;;;;;;;;;;;;;;;11374:25;;;;;;;;;;;;;;;;5898:413;;;;;;;;;;-1:-1:-1;5898:413:0;;;;;:::i;:::-;;:::i;10616:33::-;;;;;;;;;;;;;;;;4656:175;;;;;;;;;;-1:-1:-1;4656:175:0;;;;;:::i;:::-;;:::i;10307:30::-;;;;;;;;;;;;;;;;11406:26;;;;;;;;;;;;;;;;11956:58;;;;;;;;;;-1:-1:-1;11956:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;10781:33;;;;;;;;;;-1:-1:-1;10781:33:0;;;;;;;;;;;19933:182;;;;;;;;;;-1:-1:-1;19933:182:0;;;;;:::i;:::-;;:::i;16056:284::-;;;;;;;;;;-1:-1:-1;16056:284:0;;;;;:::i;:::-;;:::i;11040:39::-;;;;;;;;;;-1:-1:-1;11040:39:0;;;;;;;;28822:195;;;;;;;;;;-1:-1:-1;28822:195:0;;;;;:::i;:::-;;:::i;16410:346::-;;;;;;;;;;-1:-1:-1;16410:346:0;;;;;:::i;:::-;;:::i;11088:27::-;;;;;;;;;;;;;;;;15774:274;;;;;;;;;;-1:-1:-1;15774:274:0;;;;;:::i;:::-;;:::i;4839:151::-;;;;;;;;;;-1:-1:-1;4839:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;4955:18:0;;;4928:7;4955:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;4839:151;19323:602;;;;;;;;;;;;;:::i;10438:33::-;;;;;;;;;;;;;;;;11228:25;;;;;;;;;;;;;;;;18868:447;;;;;;;;;;-1:-1:-1;18868:447:0;;;;;:::i;:::-;;:::i;15391:98::-;;;;;;;;;;;;;:::i;10539:37::-;;;;;;;;;;;;;;;;11160:30;;;;;;;;;;;;;;;;8877:244;;;;;;;;;;-1:-1:-1;8877:244:0;;;;;:::i;:::-;;:::i;28409:160::-;;;;;;;;;;;;;:::i;11336:31::-;;;;;;;;;;;;;;;;11441:34;;;;;;;;;;;;;;;;29484:616;;;;;;;;;;-1:-1:-1;29484:616:0;;;;;:::i;:::-;;:::i;4084:100::-;4138:13;4171:5;4164:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4084:100;:::o;4998:169::-;5081:4;5098:39;313:10;5121:7;5130:6;5098:8;:39::i;:::-;-1:-1:-1;5155:4:0;4998:169;;;;:::o;16979:618::-;8632:6;;-1:-1:-1;;;;;8632:6:0;313:10;8632:22;8624:67;;;;-1:-1:-1;;;8624:67:0;;7403:2:1;8624:67:0;;;7385:21:1;;;7422:18;;;7415:30;-1:-1:-1;;;;;;;;;;;7461:18:1;;;7454:62;7533:18;;8624:67:0;;;;;;;;;17121:15:::1;:22;17103:7;:14;:40;17095:83;;;::::0;-1:-1:-1;;;17095:83:0;;7764:2:1;17095:83:0::1;::::0;::::1;7746:21:1::0;7803:2;7783:18;;;7776:30;7842:32;7822:18;;;7815:60;7892:18;;17095:83:0::1;7562:354:1::0;17095:83:0::1;17214:3;17197:7;:14;:20;17189:87;;;::::0;-1:-1:-1;;;17189:87:0;;8123:2:1;17189:87:0::1;::::0;::::1;8105:21:1::0;8162:2;8142:18;;;8135:30;8201:34;8181:18;;;8174:62;8272:24;8252:18;;;8245:52;8314:19;;17189:87:0::1;7921:418:1::0;17189:87:0::1;17389:9;17385:205;17408:7;:14;17404:1;:18;17385:205;;;17443:14;17460:7;17468:1;17460:10;;;;;;;;:::i;:::-;;;;;;;17443:27;;17485:14;17502:15;17518:1;17502:18;;;;;;;;:::i;:::-;;;;;;;17485:35;;17535:43;17551:10;17563:6;17571;17535:15;:43::i;:::-;17428:162;;17424:3;;;;;:::i;:::-;;;;17385:205;;;;16979:618:::0;;:::o;5175:492::-;5315:4;5332:36;5342:6;5350:9;5361:6;5332:9;:36::i;:::-;-1:-1:-1;;;;;5408:19:0;;5381:24;5408:19;;;:11;:19;;;;;;;;313:10;5408:33;;;;;;;;5460:26;;;;5452:79;;;;-1:-1:-1;;;5452:79:0;;8950:2:1;5452:79:0;;;8932:21:1;8989:2;8969:18;;;8962:30;9028:34;9008:18;;;9001:62;-1:-1:-1;;;9079:18:1;;;9072:38;9127:19;;5452:79:0;8748:404:1;5452:79:0;5567:57;5576:6;313:10;5617:6;5598:16;:25;5567:8;:57::i;:::-;-1:-1:-1;5655:4:0;;5175:492;-1:-1:-1;;;;5175:492:0:o;15497:269::-;8632:6;;-1:-1:-1;;;;;8632:6:0;313:10;8632:22;8624:67;;;;-1:-1:-1;;;8624:67:0;;7403:2:1;8624:67:0;;;7385:21:1;;;7422:18;;;7415:30;-1:-1:-1;;;;;;;;;;;7461:18:1;;;7454:62;7533:18;;8624:67:0;7201:356:1;8624:67:0;15616:4:::1;15610;15590:13;4493:12:::0;;;4405:108;15590:13:::1;:17;::::0;15606:1:::1;15590:17;:::i;:::-;:24;;;;:::i;:::-;15589:31;;;;:::i;:::-;15579:6;:41;;15571:95;;;::::0;-1:-1:-1;;;15571:95:0;;9754:2:1;15571:95:0::1;::::0;::::1;9736:21:1::0;9793:2;9773:18;;;9766:30;9832:34;9812:18;;;9805:62;-1:-1:-1;;;9883:18:1;;;9876:39;9932:19;;15571:95:0::1;9552:405:1::0;15571:95:0::1;15692:17;:6:::0;15702::::1;15692:17;:::i;:::-;15677:12;:32:::0;;;15725:33:::1;::::0;1934:25:1;;;15725:33:0::1;::::0;1922:2:1;1907:18;15725:33:0::1;;;;;;;;15497:269:::0;:::o;18424:436::-;8632:6;;-1:-1:-1;;;;;8632:6:0;313:10;8632:22;8624:67;;;;-1:-1:-1;;;8624:67:0;;7403:2:1;8624:67:0;;;7385:21:1;;;7422:18;;;7415:30;-1:-1:-1;;;;;;;;;;;7461:18:1;;;7454:62;7533:18;;8624:67:0;7201:356:1;8624:67:0;18559:16:::1;:33:::0;;;18603:15:::1;:31:::0;;;18645:9:::1;:19:::0;;;18675:10:::1;:21:::0;;;18688:8;18657:7;18722:34:::1;18621:13:::0;18578:14;18722:34:::1;:::i;:::-;:46;;;;:::i;:::-;:59;;;;:::i;:::-;18707:12;:74:::0;;;18816:2:::1;-1:-1:-1::0;18800:18:0::1;18792:60;;;::::0;-1:-1:-1;;;18792:60:0;;10297:2:1;18792:60:0::1;::::0;::::1;10279:21:1::0;10336:2;10316:18;;;10309:30;10375:31;10355:18;;;10348:59;10424:18;;18792:60:0::1;10095:353:1::0;18792:60:0::1;18424:436:::0;;;;:::o;5675:215::-;313:10;5763:4;5812:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;5812:34:0;;;;;;;;;;5763:4;;5780:80;;5803:7;;5812:47;;5849:10;;5812:47;:::i;:::-;5780:8;:80::i;28577:237::-;8632:6;;-1:-1:-1;;;;;8632:6:0;313:10;8632:22;8624:67;;;;-1:-1:-1;;;8624:67:0;;7403:2:1;8624:67:0;;;7385:21:1;;;7422:18;;;7415:30;-1:-1:-1;;;;;;;;;;;7461:18:1;;;7454:62;7533:18;;8624:67:0;7201:356:1;8624:67:0;-1:-1:-1;;;;;28673:32:0;::::1;28665:83;;;::::0;-1:-1:-1;;;28665:83:0;;10655:2:1;28665:83:0::1;::::0;::::1;10637:21:1::0;10694:2;10674:18;;;10667:30;10733:34;10713:18;;;10706:62;-1:-1:-1;;;10784:18:1;;;10777:36;10830:19;;28665:83:0::1;10453:402:1::0;28665:83:0::1;28759:17;:47:::0;;-1:-1:-1;;;;;;28759:47:0::1;-1:-1:-1::0;;;;;28759:47:0;;;::::1;::::0;;;::::1;::::0;;28577:237::o;29069:312::-;8632:6;;-1:-1:-1;;;;;8632:6:0;313:10;8632:22;8624:67;;;;-1:-1:-1;;;8624:67:0;;7403:2:1;8624:67:0;;;7385:21:1;;;7422:18;;;7415:30;-1:-1:-1;;;;;;;;;;;7461:18:1;;;7454:62;7533:18;;8624:67:0;7201:356:1;8624:67:0;29160:18:::1;::::0;29150:4:::1;4595:7:::0;4622:18;;;;;;;;;;;29132:46:::1;;29124:123;;;::::0;;-1:-1:-1;;;29124:123:0;;11062:2:1;29124:123:0::1;::::0;::::1;11044:21:1::0;11081:18;;;11074:30;;;;11140:34;11120:18;;;11113:62;11211:34;11191:18;;;11184:62;11263:19;;29124:123:0::1;10860:428:1::0;29124:123:0::1;29258:8;:15:::0;;-1:-1:-1;;;;29258:15:0::1;-1:-1:-1::0;;;29258:15:0::1;::::0;;29284:10:::1;:8;:10::i;:::-;29305:8;:16:::0;;-1:-1:-1;;;;29305:16:0::1;::::0;;29337:36:::1;::::0;29357:15:::1;1934:25:1::0;;29337:36:0::1;::::0;1922:2:1;1907:18;29337:36:0::1;;;;;;;29069:312::o:0;15149:181::-;8632:6;;-1:-1:-1;;;;;8632:6:0;313:10;8632:22;8624:67;;;;-1:-1:-1;;;8624:67:0;;7403:2:1;8624:67:0;;;7385:21:1;;;7422:18;;;7415:30;-1:-1:-1;;;;;;;;;;;7461:18:1;;;7454:62;7533:18;;8624:67:0;7201:356:1;8624:67:0;-1:-1:-1;;;;;15230:19:0;::::1;;::::0;;;:11:::1;:19;::::0;;;;;::::1;;15222:62;;;::::0;-1:-1:-1;;;15222:62:0;;11495:2:1;15222:62:0::1;::::0;::::1;11477:21:1::0;11534:2;11514:18;;;11507:30;11573:32;11553:18;;;11546:60;11623:18;;15222:62:0::1;11293:354:1::0;15222:62:0::1;-1:-1:-1::0;;;;;15295:19:0::1;15317:5;15295:19:::0;;;:11:::1;:19;::::0;;;;:27;;-1:-1:-1;;15295:27:0::1;::::0;;15149:181::o;8719:150::-;8632:6;;-1:-1:-1;;;;;8632:6:0;313:10;8632:22;8624:67;;;;-1:-1:-1;;;8624:67:0;;7403:2:1;8624:67:0;;;7385:21:1;;;7422:18;;;7415:30;-1:-1:-1;;;;;;;;;;;7461:18:1;;;7454:62;7533:18;;8624:67:0;7201:356:1;8624:67:0;8812:6:::1;::::0;8791:40:::1;::::0;8828:1:::1;::::0;-1:-1:-1;;;;;8812:6:0::1;::::0;8791:40:::1;::::0;8828:1;;8791:40:::1;8842:6;:19:::0;;-1:-1:-1;;;;;;8842:19:0::1;::::0;;8719:150::o;14987:154::-;8632:6;;-1:-1:-1;;;;;8632:6:0;313:10;8632:22;8624:67;;;;-1:-1:-1;;;8624:67:0;;7403:2:1;8624:67:0;;;7385:21:1;;;7422:18;;;7415:30;-1:-1:-1;;;;;;;;;;;7461:18:1;;;7454:62;7533:18;;8624:67:0;7201:356:1;8624:67:0;15041:14:::1;:22:::0;;-1:-1:-1;;15041:22:0;;::::1;::::0;;;15074:20:::1;:28:::0;;;;::::1;::::0;;15118:15:::1;::::0;::::1;::::0;15058:5:::1;::::0;15118:15:::1;14987:154::o:0;17605:260::-;8632:6;;-1:-1:-1;;;;;8632:6:0;313:10;8632:22;8624:67;;;;-1:-1:-1;;;8624:67:0;;7403:2:1;8624:67:0;;;7385:21:1;;;7422:18;;;7415:30;-1:-1:-1;;;;;;;;;;;7461:18:1;;;7454:62;7533:18;;8624:67:0;7201:356:1;8624:67:0;17701:4:::1;17697:104;;17739:6;::::0;-1:-1:-1;;;;;17739:6:0;;::::1;17729:16:::0;;::::1;::::0;17721:68:::1;;;::::0;-1:-1:-1;;;17721:68:0;;11854:2:1;17721:68:0::1;::::0;::::1;11836:21:1::0;11893:2;11873:18;;;11866:30;11932:34;11912:18;;;11905:62;-1:-1:-1;;;11983:18:1;;;11976:37;12030:19;;17721:68:0::1;11652:403:1::0;17721:68:0::1;-1:-1:-1::0;;;;;17811:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;17811:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;17605:260::o;27883:456::-;8632:6;;27970:10;;-1:-1:-1;;;;;8632:6:0;313:10;8632:22;8624:67;;;;-1:-1:-1;;;8624:67:0;;7403:2:1;8624:67:0;;;7385:21:1;;;7422:18;;;7415:30;-1:-1:-1;;;;;;;;;;;7461:18:1;;;7454:62;7533:18;;8624:67:0;7201:356:1;8624:67:0;-1:-1:-1;;;;;28001:20:0;::::1;27993:59;;;::::0;-1:-1:-1;;;27993:59:0;;12262:2:1;27993:59:0::1;::::0;::::1;12244:21:1::0;12301:2;12281:18;;;12274:30;12340:28;12320:18;;;12313:56;12386:18;;27993:59:0::1;12060:350:1::0;27993:59:0::1;28089:4;-1:-1:-1::0;;;;;28071:23:0;::::1;::::0;28063:64:::1;;;::::0;-1:-1:-1;;;28063:64:0;;12617:2:1;28063:64:0::1;::::0;::::1;12599:21:1::0;12656:2;12636:18;;;12629:30;12695;12675:18;;;12668:58;12743:18;;28063:64:0::1;12415:352:1::0;28063:64:0::1;28165:39;::::0;-1:-1:-1;;;28165:39:0;;28198:4:::1;28165:39;::::0;::::1;780:74:1::0;28138:24:0::1;::::0;-1:-1:-1;;;;;28165:24:0;::::1;::::0;::::1;::::0;753:18:1;;28165:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28223:46;::::0;-1:-1:-1;;;28223:46:0;;-1:-1:-1;;;;;13153:55:1;;;28223:46:0::1;::::0;::::1;13135:74:1::0;13225:18;;;13218:34;;;28138:66:0;;-1:-1:-1;28223:23:0;;::::1;::::0;::::1;::::0;13108:18:1;;28223:46:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28285;::::0;;-1:-1:-1;;;;;13153:55:1;;13135:74;;13240:2;13225:18;;13218:34;;;28215:54:0;;-1:-1:-1;28285:46:0::1;::::0;13108:18:1;28285:46:0::1;;;;;;;27982:357;27883:456:::0;;;;:::o;14632:303::-;8632:6;;-1:-1:-1;;;;;8632:6:0;313:10;8632:22;8624:67;;;;-1:-1:-1;;;8624:67:0;;7403:2:1;8624:67:0;;;7385:21:1;;;7422:18;;;7415:30;-1:-1:-1;;;;;;;;;;;7461:18:1;;;7454:62;7533:18;;8624:67:0;7201:356:1;8624:67:0;14696:13:::1;::::0;::::1;::::0;::::1;;;14695:14;14687:50;;;::::0;-1:-1:-1;;;14687:50:0;;13715:2:1;14687:50:0::1;::::0;::::1;13697:21:1::0;13754:2;13734:18;;;13727:30;13793:25;13773:18;;;13766:53;13836:18;;14687:50:0::1;13513:347:1::0;14687:50:0::1;14748:13;:20:::0;;-1:-1:-1;;14779:18:0;;;;;14829:12:::1;14808:18;:33:::0;;;14873:22:::1;::::0;-1:-1:-1;14873:22:0::1;:::i;:::-;14852:18;:43:::0;14911:16:::1;::::0;::::1;::::0;;;::::1;14632:303::o:0;4192:104::-;4248:13;4281:7;4274:14;;;;;:::i;17873:295::-;8632:6;;-1:-1:-1;;;;;8632:6:0;313:10;8632:22;8624:67;;;;-1:-1:-1;;;8624:67:0;;7403:2:1;8624:67:0;;;7385:21:1;;;7422:18;;;7415:30;-1:-1:-1;;;;;;;;;;;7461:18:1;;;7454:62;7533:18;;8624:67:0;7201:356:1;8624:67:0;17982:6:::1;::::0;-1:-1:-1;;;;;17982:6:0;;::::1;17974:14:::0;;::::1;::::0;17966:84:::1;;;::::0;-1:-1:-1;;;17966:84:0;;14067:2:1;17966:84:0::1;::::0;::::1;14049:21:1::0;14106:2;14086:18;;;14079:30;14145:34;14125:18;;;14118:62;14216:27;14196:18;;;14189:55;14261:19;;17966:84:0::1;13865:421:1::0;17966:84:0::1;18063:41;18092:4;18098:5;18063:28;:41::i;:::-;18120:40;::::0;;::::1;;::::0;-1:-1:-1;;;;;18120:40:0;::::1;::::0;::::1;::::0;;;::::1;17873:295:::0;;:::o;5898:413::-;313:10;5991:4;6035:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;6035:34:0;;;;;;;;;;6088:35;;;;6080:85;;;;-1:-1:-1;;;6080:85:0;;14493:2:1;6080:85:0;;;14475:21:1;14532:2;14512:18;;;14505:30;14571:34;14551:18;;;14544:62;-1:-1:-1;;;14622:18:1;;;14615:35;14667:19;;6080:85:0;14291:401:1;6080:85:0;6201:67;313:10;6224:7;6252:15;6233:16;:34;6201:8;:67::i;:::-;-1:-1:-1;6299:4:0;;5898:413;-1:-1:-1;;;5898:413:0:o;4656:175::-;4742:4;4759:42;313:10;4783:9;4794:6;4759:9;:42::i;19933:182::-;8632:6;;-1:-1:-1;;;;;8632:6:0;313:10;8632:22;8624:67;;;;-1:-1:-1;;;8624:67:0;;7403:2:1;8624:67:0;;;7385:21:1;;;7422:18;;;7415:30;-1:-1:-1;;;;;;;;;;;7461:18:1;;;7454:62;7533:18;;8624:67:0;7201:356:1;8624:67:0;-1:-1:-1;;;;;20018:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;20018:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;20073:34;;1484:41:1;;;20073:34:0::1;::::0;1457:18:1;20073:34:0::1;;;;;;;19933:182:::0;;:::o;16056:284::-;8632:6;;-1:-1:-1;;;;;8632:6:0;313:10;8632:22;8624:67;;;;-1:-1:-1;;;8624:67:0;;7403:2:1;8624:67:0;;;7385:21:1;;;7422:18;;;7415:30;-1:-1:-1;;;;;;;;;;;7461:18:1;;;7454:62;7533:18;;8624:67:0;7201:356:1;8624:67:0;16178:4:::1;16172;16152:13;4493:12:::0;;;4405:108;16152:13:::1;:17;::::0;16168:1:::1;16152:17;:::i;:::-;:24;;;;:::i;:::-;16151:31;;;;:::i;:::-;16141:6;:41;;16133:98;;;::::0;-1:-1:-1;;;16133:98:0;;14899:2:1;16133:98:0::1;::::0;::::1;14881:21:1::0;14938:2;14918:18;;;14911:30;14977:34;14957:18;;;14950:62;15048:14;15028:18;;;15021:42;15080:19;;16133:98:0::1;14697:408:1::0;16133:98:0::1;16260:17;:6:::0;16270::::1;16260:17;:::i;:::-;16242:15;:35:::0;;;16293:39:::1;::::0;1934:25:1;;;16293:39:0::1;::::0;1922:2:1;1907:18;16293:39:0::1;1788:177:1::0;28822:195:0;8632:6;;-1:-1:-1;;;;;8632:6:0;313:10;8632:22;8624:67;;;;-1:-1:-1;;;8624:67:0;;7403:2:1;8624:67:0;;;7385:21:1;;;7422:18;;;7415:30;-1:-1:-1;;;;;;;;;;;7461:18:1;;;7454:62;7533:18;;8624:67:0;7201:356:1;8624:67:0;-1:-1:-1;;;;;28904:25:0;::::1;28896:69;;;::::0;-1:-1:-1;;;28896:69:0;;15312:2:1;28896:69:0::1;::::0;::::1;15294:21:1::0;15351:2;15331:18;;;15324:30;15390:33;15370:18;;;15363:61;15441:18;;28896:69:0::1;15110:355:1::0;28896:69:0::1;28976:10;:33:::0;;-1:-1:-1;;;;;;28976:33:0::1;-1:-1:-1::0;;;;;28976:33:0;;;::::1;::::0;;;::::1;::::0;;28822:195::o;16410:346::-;8632:6;;-1:-1:-1;;;;;8632:6:0;313:10;8632:22;8624:67;;;;-1:-1:-1;;;8624:67:0;;7403:2:1;8624:67:0;;;7385:21:1;;;7422:18;;;7415:30;-1:-1:-1;;;;;;;;;;;7461:18:1;;;7454:62;7533:18;;8624:67:0;7201:356:1;8624:67:0;16533:6:::1;16513:13;4493:12:::0;;;4405:108;16513:13:::1;:17;::::0;16529:1:::1;16513:17;:::i;:::-;:26;;;;:::i;:::-;16500:9;:39;;16492:105;;;::::0;-1:-1:-1;;;16492:105:0;;15672:2:1;16492:105:0::1;::::0;::::1;15654:21:1::0;15711:2;15691:18;;;15684:30;15750:34;15730:18;;;15723:62;15821:23;15801:18;;;15794:51;15862:19;;16492:105:0::1;15470:417:1::0;16492:105:0::1;16648:4;16628:13;4493:12:::0;;;4405:108;16628:13:::1;:17;::::0;16644:1:::1;16628:17;:::i;:::-;:24;;;;:::i;:::-;16615:9;:37;;16607:102;;;::::0;-1:-1:-1;;;16607:102:0;;16094:2:1;16607:102:0::1;::::0;::::1;16076:21:1::0;16133:2;16113:18;;;16106:30;16172:34;16152:18;;;16145:62;16243:22;16223:18;;;16216:50;16283:19;;16607:102:0::1;15892:416:1::0;16607:102:0::1;16719:18;:30:::0;16410:346::o;15774:274::-;8632:6;;-1:-1:-1;;;;;8632:6:0;313:10;8632:22;8624:67;;;;-1:-1:-1;;;8624:67:0;;7403:2:1;8624:67:0;;;7385:21:1;;;7422:18;;;7415:30;-1:-1:-1;;;;;;;;;;;7461:18:1;;;7454:62;7533:18;;8624:67:0;7201:356:1;8624:67:0;15894:4:::1;15888;15868:13;4493:12:::0;;;4405:108;15868:13:::1;:17;::::0;15884:1:::1;15868:17;:::i;:::-;:24;;;;:::i;:::-;15867:31;;;;:::i;:::-;15857:6;:41;;15849:96;;;::::0;-1:-1:-1;;;15849:96:0;;16515:2:1;15849:96:0::1;::::0;::::1;16497:21:1::0;16554:2;16534:18;;;16527:30;16593:34;16573:18;;;16566:62;-1:-1:-1;;;16644:18:1;;;16637:40;16694:19;;15849:96:0::1;16313:406:1::0;15849:96:0::1;15972:17;:6:::0;15982::::1;15972:17;:::i;:::-;15956:13;:33:::0;;;16005:35:::1;::::0;1934:25:1;;;16005:35:0::1;::::0;1922:2:1;1907:18;16005:35:0::1;1788:177:1::0;19323:602:0;8632:6;;-1:-1:-1;;;;;8632:6:0;313:10;8632:22;8624:67;;;;-1:-1:-1;;;8624:67:0;;7403:2:1;8624:67:0;;;7385:21:1;;;7422:18;;;7415:30;-1:-1:-1;;;;;;;;;;;7461:18:1;;;7454:62;7533:18;;8624:67:0;7201:356:1;8624:67:0;19402:2:::1;19382:17;:22:::0;;;19434:1:::1;19415:16;:20:::0;;;19446:10:::1;:14:::0;;;19471:15;;;19434:1;;;19513:36:::1;::::0;19434:1;;19513:36:::1;:::i;:::-;:49;;;;:::i;:::-;:63;;;;:::i;:::-;19497:13;:79:::0;;;19612:2:::1;-1:-1:-1::0;19595:19:0::1;19587:61;;;::::0;-1:-1:-1;;;19587:61:0;;16926:2:1;19587:61:0::1;::::0;::::1;16908:21:1::0;16965:2;16945:18;;;16938:30;17004:31;16984:18;;;16977:59;17053:18;;19587:61:0::1;16724:353:1::0;19587:61:0::1;19680:2;19661:16;:21:::0;;;19711:1:::1;19693:15;:19:::0;;;19723:9:::1;:13:::0;;;19747:10:::1;:14:::0;;;19711:1;;;19787:34:::1;::::0;19711:1;;19787:34:::1;:::i;:::-;:46;;;;:::i;:::-;:59;;;;:::i;:::-;19772:12;:74:::0;;;19881:2:::1;-1:-1:-1::0;19865:18:0::1;19857:60;;;::::0;-1:-1:-1;;;19857:60:0;;10297:2:1;19857:60:0::1;::::0;::::1;10279:21:1::0;10336:2;10316:18;;;10309:30;10375:31;10355:18;;;10348:59;10424:18;;19857:60:0::1;10095:353:1::0;19857:60:0::1;19323:602::o:0;18868:447::-;8632:6;;-1:-1:-1;;;;;8632:6:0;313:10;8632:22;8624:67;;;;-1:-1:-1;;;8624:67:0;;7403:2:1;8624:67:0;;;7385:21:1;;;7422:18;;;7415:30;-1:-1:-1;;;;;;;;;;;7461:18:1;;;7454:62;7533:18;;8624:67:0;7201:356:1;8624:67:0;19004:17:::1;:34:::0;;;19049:16:::1;:32:::0;;;19092:10:::1;:20:::0;;;19123:11:::1;:22:::0;;;19137:8;19105:7;19172:36:::1;19068:13:::0;19024:14;19172:36:::1;:::i;:::-;:49;;;;:::i;:::-;:63;;;;:::i;:::-;19156:13;:79:::0;;;19271:2:::1;-1:-1:-1::0;19254:19:0::1;19246:61;;;::::0;-1:-1:-1;;;19246:61:0;;17284:2:1;19246:61:0::1;::::0;::::1;17266:21:1::0;17323:2;17303:18;;;17296:30;17362:31;17342:18;;;17335:59;17411:18;;19246:61:0::1;17082:353:1::0;15391:98:0;8632:6;;-1:-1:-1;;;;;8632:6:0;313:10;8632:22;8624:67;;;;-1:-1:-1;;;8624:67:0;;7403:2:1;8624:67:0;;;7385:21:1;;;7422:18;;;7415:30;-1:-1:-1;;;;;;;;;;;7461:18:1;;;7454:62;7533:18;;8624:67:0;7201:356:1;8624:67:0;15453:20:::1;:28:::0;;-1:-1:-1;;15453:28:0::1;::::0;;15391:98::o;8877:244::-;8632:6;;-1:-1:-1;;;;;8632:6:0;313:10;8632:22;8624:67;;;;-1:-1:-1;;;8624:67:0;;7403:2:1;8624:67:0;;;7385:21:1;;;7422:18;;;7415:30;-1:-1:-1;;;;;;;;;;;7461:18:1;;;7454:62;7533:18;;8624:67:0;7201:356:1;8624:67:0;-1:-1:-1;;;;;8966:22:0;::::1;8958:73;;;::::0;-1:-1:-1;;;8958:73:0;;17642:2:1;8958:73:0::1;::::0;::::1;17624:21:1::0;17681:2;17661:18;;;17654:30;17720:34;17700:18;;;17693:62;-1:-1:-1;;;17771:18:1;;;17764:36;17817:19;;8958:73:0::1;17440:402:1::0;8958:73:0::1;9068:6;::::0;9047:38:::1;::::0;-1:-1:-1;;;;;9047:38:0;;::::1;::::0;9068:6:::1;::::0;9047:38:::1;::::0;9068:6:::1;::::0;9047:38:::1;9096:6;:17:::0;;-1:-1:-1;;;;;;9096:17:0::1;-1:-1:-1::0;;;;;9096:17:0;;;::::1;::::0;;;::::1;::::0;;8877:244::o;28409:160::-;8632:6;;-1:-1:-1;;;;;8632:6:0;313:10;8632:22;8624:67;;;;-1:-1:-1;;;8624:67:0;;7403:2:1;8624:67:0;;;7385:21:1;;;7422:18;;;7415:30;-1:-1:-1;;;;;;;;;;;7461:18:1;;;7454:62;7533:18;;8624:67:0;7201:356:1;8624:67:0;28503:58:::1;::::0;28467:12:::1;::::0;28511:10:::1;::::0;28535:21:::1;::::0;28467:12;28503:58;28467:12;28503:58;28535:21;28511:10;28503:58:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29484:616:::0;8632:6;;-1:-1:-1;;;;;8632:6:0;313:10;8632:22;8624:67;;;;-1:-1:-1;;;8624:67:0;;7403:2:1;8624:67:0;;;7385:21:1;;;7422:18;;;7415:30;-1:-1:-1;;;;;;;;;;;7461:18:1;;;7454:62;7533:18;;8624:67:0;7201:356:1;8624:67:0;29581:8:::1;29566:11;:23;;29558:107;;;::::0;-1:-1:-1;;;29558:107:0;;18259:2:1;29558:107:0::1;::::0;::::1;18241:21:1::0;18298:2;18278:18;;;18271:30;18337:34;18317:18;;;18310:62;18408:34;18388:18;;;18381:62;-1:-1:-1;;;18459:19:1;;;18452:38;18507:19;;29558:107:0::1;18057:475:1::0;29558:107:0::1;29702:16;::::0;;29716:1:::1;29702:16:::0;;;;;::::1;::::0;;29678:21:::1;::::0;29702:16:::1;::::0;::::1;::::0;;::::1;::::0;::::1;-1:-1:-1::0;;29739:9:0::1;::::0;:16:::1;::::0;;-1:-1:-1;;;29739:16:0;;;;29678:40;;-1:-1:-1;;;;;;29739:9:0;;::::1;::::0;:14:::1;::::0;-1:-1:-1;29739:16:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;:9;:16:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29729:4;29734:1;29729:7;;;;;;;;:::i;:::-;;;;;;:26;-1:-1:-1::0;;;;;29729:26:0::1;;;-1:-1:-1::0;;;;;29729:26:0::1;;;::::0;::::1;29784:4;29766;29771:1;29766:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;29766:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;:23;29828:9:::1;::::0;:219:::1;::::0;-1:-1:-1;;;29828:219:0;;:9;::::1;::::0;:60:::1;::::0;29896:11;;29828:219:::1;::::0;:9:::1;::::0;29972:4;;29999:6:::1;::::0;30021:15:::1;::::0;29828:219:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;30063:29;30080:11;30063:29;;;;1934:25:1::0;;1922:2;1907:18;;1788:177;30063:29:0::1;;;;;;;;29547:553;29484:616:::0;:::o;7798:380::-;-1:-1:-1;;;;;7934:19:0;;7926:68;;;;-1:-1:-1;;;7926:68:0;;20022:2:1;7926:68:0;;;20004:21:1;20061:2;20041:18;;;20034:30;20100:34;20080:18;;;20073:62;-1:-1:-1;;;20151:18:1;;;20144:34;20195:19;;7926:68:0;19820:400:1;7926:68:0;-1:-1:-1;;;;;8013:21:0;;8005:68;;;;-1:-1:-1;;;8005:68:0;;20427:2:1;8005:68:0;;;20409:21:1;20466:2;20446:18;;;20439:30;20505:34;20485:18;;;20478:62;-1:-1:-1;;;20556:18:1;;;20549:32;20598:19;;8005:68:0;20225:398:1;8005:68:0;-1:-1:-1;;;;;8086:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;8138:32;;1934:25:1;;;8138:32:0;;1907:18:1;8138:32:0;;;;;;;;7798:380;;;:::o;6319:614::-;-1:-1:-1;;;;;6459:20:0;;6451:70;;;;-1:-1:-1;;;6451:70:0;;20830:2:1;6451:70:0;;;20812:21:1;20869:2;20849:18;;;20842:30;20908:34;20888:18;;;20881:62;-1:-1:-1;;;20959:18:1;;;20952:35;21004:19;;6451:70:0;20628:401:1;6451:70:0;-1:-1:-1;;;;;6540:23:0;;6532:71;;;;-1:-1:-1;;;6532:71:0;;21236:2:1;6532:71:0;;;21218:21:1;21275:2;21255:18;;;21248:30;21314:34;21294:18;;;21287:62;-1:-1:-1;;;21365:18:1;;;21358:33;21408:19;;6532:71:0;21034:399:1;6532:71:0;-1:-1:-1;;;;;6640:17:0;;6616:21;6640:17;;;;;;;;;;;6676:23;;;;6668:74;;;;-1:-1:-1;;;6668:74:0;;21640:2:1;6668:74:0;;;21622:21:1;21679:2;21659:18;;;21652:30;21718:34;21698:18;;;21691:62;-1:-1:-1;;;21769:18:1;;;21762:36;21815:19;;6668:74:0;21438:402:1;6668:74:0;-1:-1:-1;;;;;6778:17:0;;;:9;:17;;;;;;;;;;;6798:22;;;6778:42;;6842:20;;;;;;;;:30;;6814:6;;6778:9;6842:30;;6814:6;;6842:30;:::i;:::-;;;;;;;;6907:9;-1:-1:-1;;;;;6890:35:0;6899:6;-1:-1:-1;;;;;6890:35:0;;6918:6;6890:35;;;;1934:25:1;;1922:2;1907:18;;1788:177;6890:35:0;;;;;;;;6440:493;6319:614;;;:::o;20123:4920::-;-1:-1:-1;;;;;20223:18:0;;20215:68;;;;-1:-1:-1;;;20215:68:0;;20830:2:1;20215:68:0;;;20812:21:1;20869:2;20849:18;;;20842:30;20908:34;20888:18;;;20881:62;-1:-1:-1;;;20959:18:1;;;20952:35;21004:19;;20215:68:0;20628:401:1;20215:68:0;-1:-1:-1;;;;;20302:16:0;;20294:64;;;;-1:-1:-1;;;20294:64:0;;21236:2:1;20294:64:0;;;21218:21:1;21275:2;21255:18;;;21248:30;21314:34;21294:18;;;21287:62;-1:-1:-1;;;21365:18:1;;;21358:33;21408:19;;20294:64:0;21034:399:1;20294:64:0;20386:1;20377:6;:10;20369:52;;;;-1:-1:-1;;;20369:52:0;;22047:2:1;20369:52:0;;;22029:21:1;22086:2;22066:18;;;22059:30;22125:31;22105:18;;;22098:59;22174:18;;20369:52:0;21845:353:1;20369:52:0;20438:13;;;;;;;20434:132;;-1:-1:-1;;;;;20475:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;20504:23:0;;;;;;:19;:23;;;;;;;;20475:52;20467:87;;;;-1:-1:-1;;;20467:87:0;;22405:2:1;20467:87:0;;;22387:21:1;22444:2;22424:18;;;22417:30;22483:24;22463:18;;;22456:52;22525:18;;20467:87:0;22203:346:1;20467:87:0;25145:18;;25130:12;:33;20581:26;:52;;;;;20632:1;20611:18;;:22;20581:52;20578:226;;;-1:-1:-1;;;;;20658:17:0;;;;;;:11;:17;;;;;;;;20657:18;;:35;;-1:-1:-1;8570:6:0;;-1:-1:-1;;;;;20679:13:0;;;8570:6;;20679:13;20657:35;:60;;;-1:-1:-1;;;;;;20696:21:0;;20710:6;20696:21;20657:60;20649:143;;;;-1:-1:-1;;;20649:143:0;;22756:2:1;20649:143:0;;;22738:21:1;22795:2;22775:18;;;22768:30;22834:34;22814:18;;;22807:62;22905:34;22885:18;;;22878:62;-1:-1:-1;;;22956:19:1;;;22949:37;23003:19;;20649:143:0;22554:474:1;20649:143:0;20819:14;;;;20816:1649;;;8570:6;;-1:-1:-1;;;;;20853:15:0;;;8570:6;;20853:15;;;;:32;;-1:-1:-1;8570:6:0;;-1:-1:-1;;;;;20872:13:0;;;8570:6;;20872:13;;20853:32;:52;;;;-1:-1:-1;;;;;;20889:16:0;;;;20853:52;:77;;;;-1:-1:-1;;;;;;20909:21:0;;20923:6;20909:21;;20853:77;:107;;;;-1:-1:-1;;;;;;20935:25:0;;;;;;:19;:25;;;;;;;;20934:26;20853:107;:135;;;;-1:-1:-1;;;;;;20965:23:0;;;;;;:19;:23;;;;;;;;20964:24;20853:135;20849:1605;;;21146:20;;;;21142:506;;;21208:9;;-1:-1:-1;;;;;21194:24:0;;;21208:9;;21194:24;;;;:49;;-1:-1:-1;21236:6:0;;-1:-1:-1;;;;;21222:21:0;;;21236:6;;21222:21;;21194:49;21190:439;;;21321:16;21336:1;21321:12;:16;:::i;:::-;21308:9;21279:39;;;;:28;:39;;;;;;:58;:113;;;;-1:-1:-1;21376:16:0;21391:1;21376:12;:16;:::i;:::-;-1:-1:-1;;;;;21341:32:0;;;;;;:28;:32;;;;;;:51;21279:113;21271:179;;;;-1:-1:-1;;;21271:179:0;;23365:2:1;21271:179:0;;;23347:21:1;23404:2;23384:18;;;23377:30;23443:34;23423:18;;;23416:62;23514:23;23494:18;;;23487:51;23555:19;;21271:179:0;23163:417:1;21271:179:0;21506:9;21477:39;;;;:28;:39;;;;;;21519:12;21477:54;;;;-1:-1:-1;;;;;21558:32:0;;;;;;:47;21190:439;-1:-1:-1;;;;;21700:31:0;;;;;;:25;:31;;;;;;;;:71;;;;-1:-1:-1;;;;;;21736:35:0;;;;;;:31;:35;;;;;;;;21735:36;21700:71;21696:743;;;21818:12;;21808:6;:22;;21800:75;;;;-1:-1:-1;;;21800:75:0;;23787:2:1;21800:75:0;;;23769:21:1;23826:2;23806:18;;;23799:30;23865:34;23845:18;;;23838:62;-1:-1:-1;;;23916:18:1;;;23909:38;23964:19;;21800:75:0;23585:404:1;21800:75:0;21936:15;;-1:-1:-1;;;;;4622:18:0;;4595:7;4622:18;;;;;;;;;;;21910:22;;:6;:22;:::i;:::-;:41;;21902:78;;;;-1:-1:-1;;;21902:78:0;;24196:2:1;21902:78:0;;;24178:21:1;24235:2;24215:18;;;24208:30;24274:26;24254:18;;;24247:54;24318:18;;21902:78:0;23994:348:1;21902:78:0;21696:743;;;-1:-1:-1;;;;;22056:29:0;;;;;;:25;:29;;;;;;;;:71;;;;-1:-1:-1;;;;;;22090:37:0;;;;;;:31;:37;;;;;;;;22089:38;22056:71;22052:387;;;22174:13;;22164:6;:23;;22156:78;;;;-1:-1:-1;;;22156:78:0;;24549:2:1;22156:78:0;;;24531:21:1;24588:2;24568:18;;;24561:30;24627:34;24607:18;;;24600:62;-1:-1:-1;;;24678:18:1;;;24671:40;24728:19;;22156:78:0;24347:406:1;22052:387:0;-1:-1:-1;;;;;22282:35:0;;;;;;:31;:35;;;;;;;;22277:162;;22375:15;;-1:-1:-1;;;;;4622:18:0;;4595:7;4622:18;;;;;;;;;;;22349:22;;:6;:22;:::i;:::-;:41;;22341:78;;;;-1:-1:-1;;;22341:78:0;;24196:2:1;22341:78:0;;;24178:21:1;24235:2;24215:18;;;24208:30;24274:26;24254:18;;;24247:54;24318:18;;22341:78:0;23994:348:1;22341:78:0;22526:4;22477:28;4622:18;;;;;;;;;;;22584;;22560:42;;;;;;;22618:22;;-1:-1:-1;22629:11:0;;;;;;;22618:22;:35;;;;-1:-1:-1;22645:8:0;;-1:-1:-1;;;22645:8:0;;;;22644:9;22618:35;:71;;;;-1:-1:-1;;;;;;22658:31:0;;;;;;:25;:31;;;;;;;;22657:32;22618:71;:101;;;;-1:-1:-1;;;;;;22694:25:0;;;;;;:19;:25;;;;;;;;22693:26;22618:101;:129;;;;-1:-1:-1;;;;;;22724:23:0;;;;;;:19;:23;;;;;;;;22723:24;22618:129;22615:236;;;22764:8;:15;;-1:-1:-1;;;;22764:15:0;-1:-1:-1;;;22764:15:0;;;22796:10;:8;:10::i;:::-;22823:8;:16;;-1:-1:-1;;;;22823:16:0;;;22615:236;-1:-1:-1;;;;;22981:25:0;;22863:12;22981:25;;;:19;:25;;;;;;22878:4;;22981:25;;;:52;;-1:-1:-1;;;;;;23010:23:0;;;;;;:19;:23;;;;;;;;22981:52;22978:99;;;-1:-1:-1;23060:5:0;22978:99;23089:12;23193:7;23190:1800;;;25145:18;;25130:12;:33;23255:60;;;;-1:-1:-1;;;;;;23284:31:0;;;;;;:25;:31;;;;;;;;23255:60;:94;;;;-1:-1:-1;;;;;;23320:29:0;;;;;;:25;:29;;;;;;;;23319:30;23255:94;:114;;;;;23368:1;23353:12;;:16;23255:114;23252:1594;;;-1:-1:-1;;;;;23395:15:0;;;;;;:11;:15;;;;;;;;23391:171;;-1:-1:-1;;;;;23434:15:0;;;;;;:11;:15;;;;;:22;;-1:-1:-1;;23434:22:0;23452:4;23434:22;;;;;;23479:10;:15;;23452:4;;23479:10;;:15;;23452:4;;23479:15;:::i;:::-;;;;-1:-1:-1;;23522:20:0;;-1:-1:-1;;;;;798:55:1;;780:74;;23522:20:0;;768:2:1;753:18;23522:20:0;;;;;;;23391:171;23613:3;23598:12;;23589:6;:21;;;;:::i;:::-;:27;;;;:::i;:::-;23582:34;;23679:12;;23661:15;;23654:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;23632:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;23759:12:0;;23740:16;;23733:23;;:4;:23;:::i;:::-;:38;;;;:::i;:::-;23710:19;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;23825:12:0;;23813:9;;23806:16;;:4;:16;:::i;:::-;:31;;;;:::i;:::-;23790:12;;:47;;;;;;;:::i;:::-;;;;-1:-1:-1;;23893:12:0;;23880:10;;23873:17;;:4;:17;:::i;:::-;:32;;;;:::i;:::-;23856:13;;:49;;;;;;;:::i;:::-;;;;-1:-1:-1;23252:1594:0;;-1:-1:-1;23252:1594:0;;-1:-1:-1;;;;;23970:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;24019:1;24003:13;;:17;23970:50;23966:880;;;24072:3;24056:13;;24047:6;:22;;;;:::i;:::-;:28;;;;:::i;:::-;24040:35;;24142:13;;24123:16;;24116:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;24094:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;24224:13:0;;24204:17;;24197:24;;:4;:24;:::i;:::-;:40;;;;:::i;:::-;24174:19;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;24292:13:0;;24279:10;;24272:17;;:4;:17;:::i;:::-;:33;;;;:::i;:::-;24256:12;;:49;;;;;;;:::i;:::-;;;;-1:-1:-1;;24362:13:0;;24348:11;;24341:18;;:4;:18;:::i;23966:880::-;-1:-1:-1;;;;;24438:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;24488:1;24473:12;;:16;24438:51;24435:411;;;24538:3;24523:12;;24514:6;:21;;;;:::i;:::-;:27;;;;:::i;:::-;24507:34;;24604:12;;24586:15;;24579:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;24557:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;24684:12:0;;24665:16;;24658:23;;:4;:23;:::i;:::-;:38;;;;:::i;:::-;24635:19;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;24750:12:0;;24738:9;;24731:16;;:4;:16;:::i;:::-;:31;;;;:::i;:::-;24715:12;;:47;;;;;;;:::i;:::-;;;;-1:-1:-1;;24818:12:0;;24805:10;;24798:17;;:4;:17;:::i;:::-;:32;;;;:::i;:::-;24781:13;;:49;;;;;;;:::i;:::-;;;;-1:-1:-1;;24435:411:0;24865:8;;24862:89;;24893:42;24909:4;24923;24930;24893:15;:42::i;:::-;24964:14;24974:4;24964:14;;:::i;:::-;;;23190:1800;25002:33;25018:4;25024:2;25028:6;25002:15;:33::i;:::-;20202:4841;;;;20123:4920;;;:::o;26277:1598::-;26337:1;26321:13;;:17;:62;;;;-1:-1:-1;26370:13:0;;26360:4;4595:7;4622:18;;;;;;;;;;;26342:41;;26321:62;26318:129;;;26400:35;26414:4;26421:13;;26400:5;:35::i;:::-;26473:1;26457:13;:17;;;26531:4;4622:18;;;;;;;;;;26487:50;;26548:25;26619:12;;26597:19;;26576:18;;:40;;;;:::i;:::-;:55;;;;:::i;:::-;26548:83;-1:-1:-1;26647:20:0;;;:46;;-1:-1:-1;26671:22:0;;26647:46;26644:60;;;26696:7;;26277:1598::o;26644:60::-;26737:18;;:23;;26758:2;26737:23;:::i;:::-;26719:15;:41;26716:113;;;26794:18;;:23;;26815:2;26794:23;:::i;:::-;26776:41;;26716:113;26841:12;26915:23;27000:1;26980:17;26959:18;;26941:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;26915:86;-1:-1:-1;27014:51:0;27031:33;26915:86;27031:15;:33;:::i;:::-;27014:16;:51::i;:::-;27264:18;;27099:21;;;;27078:18;;27264:20;;27283:1;;27264:20;:::i;:::-;27243:42;;:17;:42;:::i;:::-;27220:19;;27207:32;;:10;:32;:::i;:::-;:79;;;;:::i;:::-;27180:106;;27297:17;27386:1;27367:18;;:20;;;;:::i;:::-;27346:42;;:17;:42;:::i;:::-;27330:12;;27317:25;;:10;:25;:::i;:::-;:72;;;;:::i;:::-;27297:92;-1:-1:-1;27421:28:0;27297:92;27421:16;:28;:::i;:::-;27402:47;;;;:::i;:::-;27483:1;27462:18;:22;;;27495:19;:23;;;27529:12;:16;;;27556:13;:17;27402:47;-1:-1:-1;27589:19:0;;;;;:42;;;27630:1;27612:15;:19;27589:42;27586:119;;;27647:46;27660:15;27677;27647:12;:46::i;:::-;27738:10;;27730:46;;-1:-1:-1;;;;;27738:10:0;;;;27762:9;;27730:46;;;;27762:9;27738:10;27730:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;27810:17:0;;27802:65;;27717:59;;-1:-1:-1;;;;;;27810:17:0;;27841:21;;27802:65;;;;27841:21;27810:17;27802:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;26277:1598:0:o;18176:240::-;-1:-1:-1;;;;;18259:31:0;;;;;;:25;:31;;;;;:39;;-1:-1:-1;;18259:39:0;;;;;;;18311;18259:31;:39;18311:26;:39::i;7240:550::-;-1:-1:-1;;;;;7324:21:0;;7316:67;;;;-1:-1:-1;;;7316:67:0;;24960:2:1;7316:67:0;;;24942:21:1;24999:2;24979:18;;;24972:30;25038:34;25018:18;;;25011:62;-1:-1:-1;;;25089:18:1;;;25082:31;25130:19;;7316:67:0;24758:397:1;7316:67:0;-1:-1:-1;;;;;7419:18:0;;7394:22;7419:18;;;;;;;;;;;7456:24;;;;7448:71;;;;-1:-1:-1;;;7448:71:0;;25362:2:1;7448:71:0;;;25344:21:1;25401:2;25381:18;;;25374:30;25440:34;25420:18;;;25413:62;-1:-1:-1;;;25491:18:1;;;25484:32;25533:19;;7448:71:0;25160:398:1;7448:71:0;-1:-1:-1;;;;;7555:18:0;;:9;:18;;;;;;;;;;;7576:23;;;7555:44;;7694:12;:22;;;;;;;7745:37;1934:25:1;;;7555:9:0;;:18;7745:37;;1907:18:1;7745:37:0;1788:177:1;25179:573:0;25331:16;;;25345:1;25331:16;;;;;;;;25307:21;;25331:16;;;;;;;;;;-1:-1:-1;25331:16:0;25307:40;;25376:4;25358;25363:1;25358:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;25358:23:0;;;:7;;;;;;;;;;:23;;;;25402:9;;:16;;;-1:-1:-1;;;25402:16:0;;;;:9;;;;;:14;;:16;;;;;25358:7;;25402:16;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25392:4;25397:1;25392:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;25392:26:0;;;:7;;;;;;;;;:26;25463:9;;25431:56;;25448:4;;25463:9;25475:11;25431:8;:56::i;:::-;25526:9;;:218;;-1:-1:-1;;;25526:218:0;;-1:-1:-1;;;;;25526:9:0;;;;:60;;:218;;25601:11;;25526:9;;25671:4;;25698;;25718:15;;25526:218;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25234:518;25179:573;:::o;25760:509::-;25940:9;;25908:56;;25925:4;;-1:-1:-1;;;;;25940:9:0;25952:11;25908:8;:56::i;:::-;26007:9;;:254;;-1:-1:-1;;;26007:254:0;;26073:4;26007:254;;;26537:34:1;26587:18;;;26580:34;;;26007:9:0;26630:18:1;;;26623:34;;;26673:18;;;26666:34;26213:6:0;26716:19:1;;;26709:44;26235:15:0;26769:19:1;;;26762:35;-1:-1:-1;;;;;26007:9:0;;;;:25;;26040:9;;26448:19:1;;26007:254:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;25760:509;;:::o;16764:207::-;-1:-1:-1;;;;;16852:39:0;;;;;;:31;:39;;;;;;;;;:52;;-1:-1:-1;;16852:52:0;;;;;;;;;;16920:43;;27287:74:1;;;27377:18;;;27370:50;16920:43:0;;27260:18:1;16920:43:0;27119:307:1;14:597;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;;;452:6;449:1;446:13;443:91;;;522:1;517:2;508:6;497:9;493:22;489:31;482:42;443:91;-1:-1:-1;595:2:1;574:15;-1:-1:-1;;570:29:1;555:45;;;;602:2;551:54;;14:597;-1:-1:-1;;;14:597:1:o;865:154::-;-1:-1:-1;;;;;944:5:1;940:54;933:5;930:65;920:93;;1009:1;1006;999:12;920:93;865:154;:::o;1024:315::-;1092:6;1100;1153:2;1141:9;1132:7;1128:23;1124:32;1121:52;;;1169:1;1166;1159:12;1121:52;1208:9;1195:23;1227:31;1252:5;1227:31;:::i;:::-;1277:5;1329:2;1314:18;;;;1301:32;;-1:-1:-1;;;1024:315:1:o;1536:247::-;1595:6;1648:2;1636:9;1627:7;1623:23;1619:32;1616:52;;;1664:1;1661;1654:12;1616:52;1703:9;1690:23;1722:31;1747:5;1722:31;:::i;:::-;1772:5;1536:247;-1:-1:-1;;;1536:247:1:o;1970:127::-;2031:10;2026:3;2022:20;2019:1;2012:31;2062:4;2059:1;2052:15;2086:4;2083:1;2076:15;2102:275;2173:2;2167:9;2238:2;2219:13;;-1:-1:-1;;2215:27:1;2203:40;;2273:18;2258:34;;2294:22;;;2255:62;2252:88;;;2320:18;;:::i;:::-;2356:2;2349:22;2102:275;;-1:-1:-1;2102:275:1:o;2382:183::-;2442:4;2475:18;2467:6;2464:30;2461:56;;;2497:18;;:::i;:::-;-1:-1:-1;2542:1:1;2538:14;2554:4;2534:25;;2382:183::o;2570:662::-;2624:5;2677:3;2670:4;2662:6;2658:17;2654:27;2644:55;;2695:1;2692;2685:12;2644:55;2731:6;2718:20;2757:4;2781:60;2797:43;2837:2;2797:43;:::i;:::-;2781:60;:::i;:::-;2875:15;;;2961:1;2957:10;;;;2945:23;;2941:32;;;2906:12;;;;2985:15;;;2982:35;;;3013:1;3010;3003:12;2982:35;3049:2;3041:6;3037:15;3061:142;3077:6;3072:3;3069:15;3061:142;;;3143:17;;3131:30;;3181:12;;;;3094;;3061:142;;;-1:-1:-1;3221:5:1;2570:662;-1:-1:-1;;;;;;2570:662:1:o;3237:1215::-;3355:6;3363;3416:2;3404:9;3395:7;3391:23;3387:32;3384:52;;;3432:1;3429;3422:12;3384:52;3472:9;3459:23;3501:18;3542:2;3534:6;3531:14;3528:34;;;3558:1;3555;3548:12;3528:34;3596:6;3585:9;3581:22;3571:32;;3641:7;3634:4;3630:2;3626:13;3622:27;3612:55;;3663:1;3660;3653:12;3612:55;3699:2;3686:16;3721:4;3745:60;3761:43;3801:2;3761:43;:::i;3745:60::-;3839:15;;;3921:1;3917:10;;;;3909:19;;3905:28;;;3870:12;;;;3945:19;;;3942:39;;;3977:1;3974;3967:12;3942:39;4001:11;;;;4021:217;4037:6;4032:3;4029:15;4021:217;;;4117:3;4104:17;4134:31;4159:5;4134:31;:::i;:::-;4178:18;;4054:12;;;;4216;;;;4021:217;;;4257:5;-1:-1:-1;;4300:18:1;;4287:32;;-1:-1:-1;;4331:16:1;;;4328:36;;;4360:1;4357;4350:12;4328:36;;4383:63;4438:7;4427:8;4416:9;4412:24;4383:63;:::i;:::-;4373:73;;;3237:1215;;;;;:::o;4457:456::-;4534:6;4542;4550;4603:2;4591:9;4582:7;4578:23;4574:32;4571:52;;;4619:1;4616;4609:12;4571:52;4658:9;4645:23;4677:31;4702:5;4677:31;:::i;:::-;4727:5;-1:-1:-1;4784:2:1;4769:18;;4756:32;4797:33;4756:32;4797:33;:::i;:::-;4457:456;;4849:7;;-1:-1:-1;;;4903:2:1;4888:18;;;;4875:32;;4457:456::o;4918:180::-;4977:6;5030:2;5018:9;5009:7;5005:23;5001:32;4998:52;;;5046:1;5043;5036:12;4998:52;-1:-1:-1;5069:23:1;;4918:180;-1:-1:-1;4918:180:1:o;5103:385::-;5189:6;5197;5205;5213;5266:3;5254:9;5245:7;5241:23;5237:33;5234:53;;;5283:1;5280;5273:12;5234:53;-1:-1:-1;;5306:23:1;;;5376:2;5361:18;;5348:32;;-1:-1:-1;5427:2:1;5412:18;;5399:32;;5478:2;5463:18;5450:32;;-1:-1:-1;5103:385:1;-1:-1:-1;5103:385:1:o;5913:118::-;5999:5;5992:13;5985:21;5978:5;5975:32;5965:60;;6021:1;6018;6011:12;6036:382;6101:6;6109;6162:2;6150:9;6141:7;6137:23;6133:32;6130:52;;;6178:1;6175;6168:12;6130:52;6217:9;6204:23;6236:31;6261:5;6236:31;:::i;:::-;6286:5;-1:-1:-1;6343:2:1;6328:18;;6315:32;6356:30;6315:32;6356:30;:::i;:::-;6405:7;6395:17;;;6036:382;;;;;:::o;6423:388::-;6491:6;6499;6552:2;6540:9;6531:7;6527:23;6523:32;6520:52;;;6568:1;6565;6558:12;6520:52;6607:9;6594:23;6626:31;6651:5;6626:31;:::i;:::-;6676:5;-1:-1:-1;6733:2:1;6718:18;;6705:32;6746:33;6705:32;6746:33;:::i;6816:380::-;6895:1;6891:12;;;;6938;;;6959:61;;7013:4;7005:6;7001:17;6991:27;;6959:61;7066:2;7058:6;7055:14;7035:18;7032:38;7029:161;;7112:10;7107:3;7103:20;7100:1;7093:31;7147:4;7144:1;7137:15;7175:4;7172:1;7165:15;7029:161;;6816:380;;;:::o;8344:127::-;8405:10;8400:3;8396:20;8393:1;8386:31;8436:4;8433:1;8426:15;8460:4;8457:1;8450:15;8476:127;8537:10;8532:3;8528:20;8525:1;8518:31;8568:4;8565:1;8558:15;8592:4;8589:1;8582:15;8608:135;8647:3;8668:17;;;8665:43;;8688:18;;:::i;:::-;-1:-1:-1;8735:1:1;8724:13;;8608:135::o;9157:168::-;9197:7;9263:1;9259;9255:6;9251:14;9248:1;9245:21;9240:1;9233:9;9226:17;9222:45;9219:71;;;9270:18;;:::i;:::-;-1:-1:-1;9310:9:1;;9157:168::o;9330:217::-;9370:1;9396;9386:132;;9440:10;9435:3;9431:20;9428:1;9421:31;9475:4;9472:1;9465:15;9503:4;9500:1;9493:15;9386:132;-1:-1:-1;9532:9:1;;9330:217::o;9962:128::-;10002:3;10033:1;10029:6;10026:1;10023:13;10020:39;;;10039:18;;:::i;:::-;-1:-1:-1;10075:9:1;;9962:128::o;12772:184::-;12842:6;12895:2;12883:9;12874:7;12870:23;12866:32;12863:52;;;12911:1;12908;12901:12;12863:52;-1:-1:-1;12934:16:1;;12772:184;-1:-1:-1;12772:184:1:o;13263:245::-;13330:6;13383:2;13371:9;13362:7;13358:23;13354:32;13351:52;;;13399:1;13396;13389:12;13351:52;13431:9;13425:16;13450:28;13472:5;13450:28;:::i;18537:251::-;18607:6;18660:2;18648:9;18639:7;18635:23;18631:32;18628:52;;;18676:1;18673;18666:12;18628:52;18708:9;18702:16;18727:31;18752:5;18727:31;:::i;18793:484::-;18846:3;18884:5;18878:12;18911:6;18906:3;18899:19;18937:4;18966:2;18961:3;18957:12;18950:19;;19003:2;18996:5;18992:14;19024:1;19034:218;19048:6;19045:1;19042:13;19034:218;;;19113:13;;-1:-1:-1;;;;;19109:62:1;19097:75;;19192:12;;;;19227:15;;;;19070:1;19063:9;19034:218;;;-1:-1:-1;19268:3:1;;18793:484;-1:-1:-1;;;;;18793:484:1:o;19282:533::-;19553:6;19542:9;19535:25;19596:3;19591:2;19580:9;19576:18;19569:31;19516:4;19617:57;19669:3;19658:9;19654:19;19646:6;19617:57;:::i;:::-;-1:-1:-1;;;;;19710:55:1;;;;19705:2;19690:18;;19683:83;-1:-1:-1;19797:2:1;19782:18;19775:34;19609:65;19282:533;-1:-1:-1;;19282:533:1:o;23033:125::-;23073:4;23101:1;23098;23095:8;23092:34;;;23106:18;;:::i;:::-;-1:-1:-1;23143:9:1;;23033:125::o;25563:605::-;25862:6;25851:9;25844:25;25905:6;25900:2;25889:9;25885:18;25878:34;25948:3;25943:2;25932:9;25928:18;25921:31;25825:4;25969:57;26021:3;26010:9;26006:19;25998:6;25969:57;:::i;:::-;-1:-1:-1;;;;;26062:55:1;;;;26057:2;26042:18;;26035:83;-1:-1:-1;26149:3:1;26134:19;26127:35;25961:65;25563:605;-1:-1:-1;;;25563:605:1:o;26808:306::-;26896:6;26904;26912;26965:2;26953:9;26944:7;26940:23;26936:32;26933:52;;;26981:1;26978;26971:12;26933:52;27010:9;27004:16;26994:26;;27060:2;27049:9;27045:18;27039:25;27029:35;;27104:2;27093:9;27089:18;27083:25;27073:35;;26808:306;;;;;:::o

Swarm Source

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