ETH Price: $3,273.14 (-1.13%)
Gas: 10 Gwei

Token

FUCK PUTIN (FPUTIN)
 

Overview

Max Total Supply

100,000,000,000 FPUTIN

Holders

12

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
93,462,390.952967337546137877 FPUTIN

Value
$0.00
0x719aE4f6ed9220caDfE869Fa44dF189053DE7b8D
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:
FUCKPUTIN

Compiler Version
v0.8.11+commit.d7f03943

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

/**
 *Submitted for verification at Etherscan.io on 2022-02-22
 *https://t.me/FPUTIN1
 *Я тебе люблю Ukraine
*/

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

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 _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 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 FUCKPUTIN is ERC20, Ownable {
    // Variables
    IDexRouter public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    address public MarketingAddress;
    address public DevelopmentAddress;

    bool private swapEnabled = false;
    bool private limitsEnabled = true;
    bool private tradingEnabled = false;
    bool private transferDelayEnabled = true;

    uint256 public maxBuyAmount;
    uint256 public maxSellAmount;
    uint256 public maxWalletAmount;
    uint256 public tradingEnabledBlock = 0;
    uint256 private justicePeriod = 0;
    uint256 private swapTokensAtAmount;
    uint256 public buyTotalFees;
    uint256 public buyMarketingFee;
    uint256 public buyLiquidityFee;
    uint256 public buyDevelopmentFee;
    uint256 public sellTotalFees;
    uint256 public sellMarketingFee;
    uint256 public sellLiquidityFee;
    uint256 public sellDevelopmentFee;
    uint256 private tokensForMarketing;
    uint256 private tokensForLiquidity;
    uint256 private tokensForDevelopment;

    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) private _isExcludedMaxTransactionAmount;
    mapping (address => bool) private automatedMarketMakerPairs;
    mapping (address => uint256) private _holderLastTransferTimestamp; 
    mapping (address => uint256) public _lockedWallets;
    mapping (address => bool) public _evil;

    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
    event EnabledTrading();
    event RemovedLimits();
    event EvilPurged(address guiltyName);
    event ExcludeFromFees(address indexed account, bool isExcluded);
    event UpdatedMaxBuyAmount(uint256 newAmount);
    event UpdatedMaxSellAmount(uint256 newAmount);
    event UpdatedMaxWalletAmount(uint256 newAmount);
    event UpdatedSwapTokensAtAmount(uint256 newAmount);
    event UpdatedMarketingAddress(address indexed newWallet);
    event UpdatedDevelopmentAddress(address indexed newWallet);
    event MaxTransactionExclusion(address _address, bool excluded);
    event TransferForeignToken(address token, uint256 amount);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );

    constructor() ERC20("FUCK PUTIN", "FPUTIN") {
        address newOwner = msg.sender;
        
        IDexRouter _uniswapV2Router = IDexRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);

        _excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;
        
        uniswapV2Pair = IDexFactory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);
 
        uint256 totalSupply = 100000000000 * 10**18;
        maxBuyAmount = totalSupply * 8/1000;
        maxSellAmount = totalSupply * 1/100;
        maxWalletAmount = totalSupply * 2/100;
        swapTokensAtAmount = totalSupply * 1 / 4000;

        buyMarketingFee = 0;
        buyLiquidityFee = 3;
        buyDevelopmentFee = 0;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevelopmentFee;

        sellMarketingFee = 7;
        sellLiquidityFee = 3;
        sellDevelopmentFee = 7;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevelopmentFee;

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

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

        MarketingAddress = address(newOwner);
        DevelopmentAddress = address(newOwner);
        
        _createInitialSupply(newOwner, totalSupply);
        transferOwnership(newOwner);
    }

    receive() external payable {}

    // Exclude an address from the max transaction amount
    function excludeFromMaxTransaction(address updAds, bool isEx) external onlyOwner {
        if (!isEx) {
            require(updAds != uniswapV2Pair, "Cannot remove Uniswap pair from max txn");
        }
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }

    function _excludeFromMaxTransaction(address updAds, bool isExcluded) private {
        _isExcludedMaxTransactionAmount[updAds] = isExcluded;
        emit MaxTransactionExclusion(updAds, isExcluded);
    }

    // Exclude an address from transaction fees
    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }

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

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

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

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

    // Transfer tokens
    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");
        require(_lockedWallets[from] < block.timestamp, "Lock active");
        require(!_evil[from], "Guilty");
        
        // Check if limits are in place
        if (limitsEnabled) {
            if (from != owner() && to != owner() && to != address(0) && to != address(0xdead)) {
                if (!tradingEnabled) {
                    require(from != address(uniswapV2Router) && from != address(uniswapV2Pair), "Trading is not active");
                }

                if (transferDelayEnabled) {
                    if (to != address(uniswapV2Router) && to != address(uniswapV2Pair)) {
                        require(_holderLastTransferTimestamp[tx.origin] < block.number - 1 && _holderLastTransferTimestamp[to] < block.number - 1, "_transfer:: Transfer Delay enabled. Try again later");
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                        _holderLastTransferTimestamp[to] = block.number;
                    }
                }

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

        uint256 contractTokenBalance = balanceOf(address(this));
        bool canSwap = contractTokenBalance >= swapTokensAtAmount;
        // Check if threshold has been reached for contract to sell for liquidity, marketing and development
        if (canSwap && swapEnabled && !automatedMarketMakerPairs[from] && !_isExcludedFromFees[from] && !_isExcludedFromFees[to]) {
            swapBack();
        }
        
        // Transfer tokens for buy and sell, wallet transfers excluded
        if (!_isExcludedFromFees[from] && !_isExcludedFromFees[to]) {
            uint256 fees = 0;
            uint256 penaltyAmount = 0;
            if (block.number - tradingEnabledBlock <= justicePeriod && automatedMarketMakerPairs[from]) {
                penaltyAmount = amount * 99 / 100;
                super._transfer(from, MarketingAddress, penaltyAmount);
            } else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                if (block.number - tradingEnabledBlock - justicePeriod == 1) {
                    _evil[to] = true;
                    emit EvilPurged(to);
                }
        	    fees = amount * buyTotalFees / 100;
        	    tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
                tokensForMarketing += fees * buyMarketingFee / buyTotalFees;
                tokensForDevelopment += fees * buyDevelopmentFee / buyTotalFees;
            } else if (automatedMarketMakerPairs[to] && sellTotalFees > 0) {
                fees = amount * sellTotalFees / 100;
                tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees;
                tokensForMarketing += fees * sellMarketingFee / sellTotalFees;
                tokensForDevelopment += fees * sellDevelopmentFee / sellTotalFees;
            }

            if (fees > 0) {    
                super._transfer(from, address(this), fees);
            }
        	
        	amount -= fees + penaltyAmount;
        }
        super._transfer(from, to, amount);
    }

    // Enable trading and assign values of arguments to variables
    function enableTrading(uint256 blocks) external onlyOwner {
        require(!tradingEnabled, "Trading already enabled");
        require(blocks <= 5, "Must be less than 5 blocks");
        tradingEnabled = true;
        swapEnabled = true;
        tradingEnabledBlock = block.number;
        justicePeriod = blocks;
        emit EnabledTrading();
    }
    
    // Remove trading limits
    function removeLimits() external onlyOwner {
        limitsEnabled = false;
        transferDelayEnabled = false;
        emit RemovedLimits();
    }
    
    // Disable transfer delay
    function disableTransferDelay() external onlyOwner {
        transferDelayEnabled = false;
    }

    // Pass judgement on the guilty
    function passJudgement(address[] memory names) external onlyOwner {
        for (uint i = 0; i < names.length; i++) {
            _evil[names[i]] = true;
        }
    }

    // Reverse guilty verdict
    function reverseJudgement(address[] memory names) external onlyOwner {
        for (uint i = 0; i < names.length; i++) {
            _evil[names[i]] = false;
        }
    }

    // Lock wallet from transferring out for given time
    function lockTokens(address[] memory wallets, uint256[] memory numDays) external onlyOwner {
        require(wallets.length == numDays.length, "Arrays must be the same length");
        require(wallets.length < 200, "Can only lock 200 wallets per txn due to gas limits");
        for (uint i = 0; i < wallets.length; i++) {
            require(balanceOf(wallets[i]) > 0, "No tokens");
            require(_lockedWallets[wallets[i]] < block.timestamp, "Already locked");
            _lockedWallets[wallets[i]] = block.timestamp + numDays[i] * 1 days;
        }
    }

    // Update max buy amount
    function updateMaxBuyAmount(uint256 newAmount) external onlyOwner {
        require(newAmount >= (totalSupply() * 1 / 1000) / 10**18, "Max buy amount lower than 0.1%");
        maxBuyAmount = newAmount * (10**18);
        emit UpdatedMaxBuyAmount(maxBuyAmount);
    }
    
    // Update max sell amount
    function updateMaxSellAmount(uint256 newAmount) external onlyOwner {
        require(newAmount >= (totalSupply() * 1 / 1000) / 10**18, "Max sell amount lower than 0.1%");
        maxSellAmount = newAmount * (10**18);
        emit UpdatedMaxSellAmount(maxSellAmount);
    }

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

    // Update token threshold for when the contract sells for liquidity, marketing and development
    function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner {
  	    require(newAmount >= (totalSupply() * 1 / 100000) / 10**18, "Threshold lower than 0.001% total supply"); 
  	    require(newAmount <= (totalSupply() * 1 / 1000) / 10**18, "Threshold higher than 0.1% total supply");
  	    swapTokensAtAmount = newAmount * (10**18);
        emit UpdatedSwapTokensAtAmount(swapTokensAtAmount);
  	}
    
    // Transfer given number of tokens to given address
    function airdropToWallets(address[] memory wallets, uint256[] memory amountsInTokens) external onlyOwner {
        require(wallets.length == amountsInTokens.length, "Arrays must be the same length");
        require(wallets.length < 200, "Can only airdrop 200 wallets per txn due to gas limits"); 
        for (uint256 i = 0; i < wallets.length; i++) {
            _transfer(msg.sender, wallets[i], amountsInTokens[i] * 10**18);
        }
    }

    // Update fees on buys
    function updateBuyFees(uint256 _marketingFee, uint256 _liquidityFee, uint256 _developmentFee) external onlyOwner {
        buyMarketingFee = _marketingFee;
        buyLiquidityFee = _liquidityFee;
        buyDevelopmentFee = _developmentFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevelopmentFee;
        require(buyTotalFees <= 9, "Must keep fees at 9% or less");
    }

    // Update fees on sells
    function updateSellFees(uint256 _marketingFee, uint256 _liquidityFee, uint256 _developmentFee) external onlyOwner {
        sellMarketingFee = _marketingFee;
        sellLiquidityFee = _liquidityFee;
        sellDevelopmentFee = _developmentFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevelopmentFee;
        require(sellTotalFees <= 18, "Must keep fees at 18% or less");
    }
    
    // Contract sells
    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity + tokensForMarketing + tokensForDevelopment;
        
        if (contractBalance == 0 || totalTokensToSwap == 0) {
            return;
        }

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

        bool success;
        uint256 liquidityTokens = contractBalance * tokensForLiquidity / totalTokensToSwap / 2;
        
        swapTokensForEth(contractBalance - liquidityTokens); 
        
        uint256 ethBalance = address(this).balance;
        uint256 ethForLiquidity = ethBalance;
        uint256 ethForMarketing = ethBalance * tokensForMarketing / (totalTokensToSwap - (tokensForLiquidity / 2));
        uint256 ethForDevelopment = ethBalance * tokensForDevelopment / (totalTokensToSwap - (tokensForLiquidity / 2));

        ethForLiquidity -= ethForMarketing + ethForDevelopment;
            
        tokensForLiquidity = 0;
        tokensForMarketing = 0;
        tokensForDevelopment = 0;
        
        if (liquidityTokens > 0 && ethForLiquidity > 0) {
            addLiquidity(liquidityTokens, ethForLiquidity);
        }

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

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

    // Withdraw stuck ETH
    function withdrawStuckETH() external onlyOwner {
        bool success;
        (success,) = address(msg.sender).call{value: address(this).balance}("");
    }

    // Designate marketing wallet address
    function setMarketingAddress(address _marketingAddress) external onlyOwner {
        require(_marketingAddress != address(0), "_marketingAddress address cannot be 0");
        MarketingAddress = payable(_marketingAddress);
        emit UpdatedMarketingAddress(_marketingAddress);
    }

    // Designate development wallet address
    function setDevelopmentAddress(address _developmentAddress) external onlyOwner {
        require(_developmentAddress != address(0), "_developmentAddress address cannot be 0");
        DevelopmentAddress = payable(_developmentAddress);
        emit UpdatedDevelopmentAddress(_developmentAddress);
    }
}

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":[],"name":"EnabledTrading","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"guiltyName","type":"address"}],"name":"EvilPurged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"bool","name":"excluded","type":"bool"}],"name":"MaxTransactionExclusion","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[],"name":"RemovedLimits","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":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":true,"internalType":"address","name":"newWallet","type":"address"}],"name":"UpdatedDevelopmentAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"}],"name":"UpdatedMarketingAddress","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":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedSwapTokensAtAmount","type":"event"},{"inputs":[],"name":"DevelopmentAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MarketingAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_evil","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_lockedWallets","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevelopmentFee","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":"buyMarketingFee","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":"disableTransferDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"blocks","type":"uint256"}],"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":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"wallets","type":"address[]"},{"internalType":"uint256[]","name":"numDays","type":"uint256[]"}],"name":"lockTokens","outputs":[],"stateMutability":"nonpayable","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":"names","type":"address[]"}],"name":"passJudgement","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"names","type":"address[]"}],"name":"reverseJudgement","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevelopmentFee","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":"sellMarketingFee","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":"_developmentAddress","type":"address"}],"name":"setDevelopmentAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingAddress","type":"address"}],"name":"setMarketingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabledBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_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":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IDexRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_developmentFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateMaxBuyAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateMaxSellAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_developmentFee","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"}]

60c06040526007805463ffffffff60a01b19166201000160a81b1790556000600b819055600c553480156200003357600080fd5b50604080518082018252600a815269232aa1a590282aaa24a760b11b60208083019182528351808501909452600684526523282aaa24a760d11b908401528151919291620000849160039162000767565b5080516200009a90600490602084019062000767565b5050506000620000af6200040460201b60201c565b600580546001600160a01b0319166001600160a01b03831690811790915560405191925090600090600080516020620041dc833981519152908290a35033737a250d5630b4cf539739df2c5dacb4c659f2488d6200010f81600162000408565b6001600160a01b03811660808190526040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa1580156200015a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200018091906200080d565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001ce573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001f491906200080d565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000242573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200026891906200080d565b6001600160a01b031660a0819052620002839060016200046b565b6c01431e0fae6d7217caa00000006103e8620002a182600862000855565b620002ad919062000877565b6008556064620002bf82600162000855565b620002cb919062000877565b6009556064620002dd82600262000855565b620002e9919062000877565b600a55610fa0620002fc82600162000855565b62000308919062000877565b600d556000600f8190556003601081905560118290556200032a90826200089a565b6200033691906200089a565b600e55600760138190556003601481905560158290556200035890826200089a565b6200036491906200089a565b6012556200037483600162000408565b6200038130600162000408565b6200039061dead600162000408565b6200039d836001620004d7565b620003aa306001620004d7565b620003b961dead6001620004d7565b600680546001600160a01b0385166001600160a01b03199182168117909255600780549091169091179055620003f0838262000585565b620003fb836200066a565b505050620008f2565b3390565b6001600160a01b0382166000818152601a6020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6001600160a01b0382166000908152601b60205260409020805460ff19168215151790556200049b828262000408565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6005546001600160a01b03163314620005265760405162461bcd60e51b81526020600482018190526024820152600080516020620041bc83398151915260448201526064015b60405180910390fd5b6001600160a01b038216600081815260196020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038216620005dd5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016200051d565b8060026000828254620005f191906200089a565b90915550506001600160a01b03821660009081526020819052604081208054839290620006209084906200089a565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005546001600160a01b03163314620006b55760405162461bcd60e51b81526020600482018190526024820152600080516020620041bc83398151915260448201526064016200051d565b6001600160a01b0381166200071c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016200051d565b6005546040516001600160a01b03808416921690600080516020620041dc83398151915290600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b8280546200077590620008b5565b90600052602060002090601f016020900481019282620007995760008555620007e4565b82601f10620007b457805160ff1916838001178555620007e4565b82800160010185558215620007e4579182015b82811115620007e4578251825591602001919060010190620007c7565b50620007f2929150620007f6565b5090565b5b80821115620007f25760008155600101620007f7565b6000602082840312156200082057600080fd5b81516001600160a01b03811681146200083857600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b60008160001904831182151516156200087257620008726200083f565b500290565b6000826200089557634e487b7160e01b600052601260045260246000fd5b500490565b60008219821115620008b057620008b06200083f565b500190565b600181811c90821680620008ca57607f821691505b60208210811415620008ec57634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a05161385762000965600039600081816104fb015281816111cd015281816117100152818161230301526123cd01526000818161037c015281816122c60152818161239001528181612fae01528181613067015281816130a30152818161311d015261317a01526138576000f3fe6080604052600436106103035760003560e01c80638da5cb5b11610190578063c3e9c34f116100dc578063dd62ed3e11610095578063f11a24d31161006f578063f11a24d31461092e578063f2fde38b14610944578063f5648a4f14610964578063f63743421461097957600080fd5b8063dd62ed3e146108b3578063e884f260146108f9578063ec238a811461090e57600080fd5b8063c3e9c34f146107ed578063c96fd36d1461081d578063d1a0c9461461083d578063d257b34f1461085d578063d85ba0631461087d578063dc3f0d0f1461089357600080fd5b8063a457c2d711610149578063b204141111610123578063b204141114610777578063c02466681461078d578063c17b5b8c146107ad578063c18bc195146107cd57600080fd5b8063a457c2d714610721578063a9059cbb14610741578063aa4bde281461076157600080fd5b80638da5cb5b1461066b578063906e9dd01461068957806392136913146106a9578063930a6d07146106bf57806395d89b41146106ec5780639a7a23d61461070157600080fd5b806349bd5a5e1161024f5780637571336a116102085780638095d564116101e25780638095d564146105f557806382aa7c68146106155780638366e79a1461063557806388e765ff1461065557600080fd5b80637571336a146105a9578063764556dc146105c95780637bce5a04146105df57600080fd5b806349bd5a5e146104e957806366d602ae1461051d5780636a486a8e1461053357806370a0823114610549578063715018a61461057f578063751039fc1461059457600080fd5b806323b872dd116102bc578063313ce56711610296578063313ce5671461046d5780633547800a146104895780633936e8b9146104a957806339509351146104c957600080fd5b806323b872dd1461040d57806329b1c15c1461042d5780632be32b611461044d57600080fd5b806306fdde031461030f578063095ea7b31461033a5780631694505e1461036a57806318160ddd146103b657806318a94cf1146103d55780632307b441146103eb57600080fd5b3661030a57005b600080fd5b34801561031b57600080fd5b5061032461098f565b60405161033191906131f1565b60405180910390f35b34801561034657600080fd5b5061035a61035536600461325e565b610a21565b6040519015158152602001610331565b34801561037657600080fd5b5061039e7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610331565b3480156103c257600080fd5b506002545b604051908152602001610331565b3480156103e157600080fd5b506103c760155481565b3480156103f757600080fd5b5061040b610406366004613369565b610a37565b005b34801561041957600080fd5b5061035a610428366004613424565b610b9e565b34801561043957600080fd5b5061040b610448366004613465565b610c48565b34801561045957600080fd5b5061040b610468366004613489565b610d21565b34801561047957600080fd5b5060405160128152602001610331565b34801561049557600080fd5b5061040b6104a4366004613369565b610e1c565b3480156104b557600080fd5b5060065461039e906001600160a01b031681565b3480156104d557600080fd5b5061035a6104e436600461325e565b611088565b3480156104f557600080fd5b5061039e7f000000000000000000000000000000000000000000000000000000000000000081565b34801561052957600080fd5b506103c760095481565b34801561053f57600080fd5b506103c760125481565b34801561055557600080fd5b506103c7610564366004613465565b6001600160a01b031660009081526020819052604090205490565b34801561058b57600080fd5b5061040b6110c4565b3480156105a057600080fd5b5061040b611138565b3480156105b557600080fd5b5061040b6105c43660046134b0565b61119c565b3480156105d557600080fd5b506103c7600b5481565b3480156105eb57600080fd5b506103c7600f5481565b34801561060157600080fd5b5061040b6106103660046134e9565b611288565b34801561062157600080fd5b5061040b610630366004613489565b61132b565b34801561064157600080fd5b5061035a610650366004613515565b61144c565b34801561066157600080fd5b506103c760085481565b34801561067757600080fd5b506005546001600160a01b031661039e565b34801561069557600080fd5b5061040b6106a4366004613465565b6115fd565b3480156106b557600080fd5b506103c760135481565b3480156106cb57600080fd5b506103c76106da366004613465565b601d6020526000908152604090205481565b3480156106f857600080fd5b506103246116d5565b34801561070d57600080fd5b5061040b61071c3660046134b0565b6116e4565b34801561072d57600080fd5b5061035a61073c36600461325e565b6117c4565b34801561074d57600080fd5b5061035a61075c36600461325e565b61185d565b34801561076d57600080fd5b506103c7600a5481565b34801561078357600080fd5b506103c760115481565b34801561079957600080fd5b5061040b6107a83660046134b0565b61186a565b3480156107b957600080fd5b5061040b6107c83660046134e9565b6118f3565b3480156107d957600080fd5b5061040b6107e8366004613489565b611994565b3480156107f957600080fd5b5061035a610808366004613465565b601e6020526000908152604090205460ff1681565b34801561082957600080fd5b5061040b610838366004613543565b611a92565b34801561084957600080fd5b5060075461039e906001600160a01b031681565b34801561086957600080fd5b5061040b610878366004613489565b611b24565b34801561088957600080fd5b506103c7600e5481565b34801561089f57600080fd5b5061040b6108ae366004613489565b611cbd565b3480156108bf57600080fd5b506103c76108ce366004613515565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561090557600080fd5b5061040b611db1565b34801561091a57600080fd5b5061040b610929366004613543565b611dea565b34801561093a57600080fd5b506103c760105481565b34801561095057600080fd5b5061040b61095f366004613465565b611e7c565b34801561097057600080fd5b5061040b611f67565b34801561098557600080fd5b506103c760145481565b60606003805461099e90613580565b80601f01602080910402602001604051908101604052809291908181526020018280546109ca90613580565b8015610a175780601f106109ec57610100808354040283529160200191610a17565b820191906000526020600020905b8154815290600101906020018083116109fa57829003601f168201915b5050505050905090565b6000610a2e338484611fde565b50600192915050565b6005546001600160a01b03163314610a6a5760405162461bcd60e51b8152600401610a61906135bb565b60405180910390fd5b8051825114610abb5760405162461bcd60e51b815260206004820152601e60248201527f417272617973206d757374206265207468652073616d65206c656e67746800006044820152606401610a61565b60c8825110610b2b5760405162461bcd60e51b815260206004820152603660248201527f43616e206f6e6c792061697264726f70203230302077616c6c657473207065726044820152752074786e2064756520746f20676173206c696d69747360501b6064820152608401610a61565b60005b8251811015610b9957610b8733848381518110610b4d57610b4d6135f0565b6020026020010151848481518110610b6757610b676135f0565b6020026020010151670de0b6b3a7640000610b82919061361c565b612102565b80610b918161363b565b915050610b2e565b505050565b6000610bab848484612102565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610c305760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610a61565b610c3d8533858403611fde565b506001949350505050565b6005546001600160a01b03163314610c725760405162461bcd60e51b8152600401610a61906135bb565b6001600160a01b038116610cd85760405162461bcd60e51b815260206004820152602760248201527f5f646576656c6f706d656e744164647265737320616464726573732063616e6e60448201526606f7420626520360cc1b6064820152608401610a61565b600780546001600160a01b0319166001600160a01b0383169081179091556040517e9301a7a046a65d0304006b0bfee72798e7e8c804b21a3d33e0838d87680e9d90600090a250565b6005546001600160a01b03163314610d4b5760405162461bcd60e51b8152600401610a61906135bb565b670de0b6b3a76400006103e8610d6060025490565b610d6b90600161361c565b610d759190613656565b610d7f9190613656565b811015610dce5760405162461bcd60e51b815260206004820152601e60248201527f4d61782062757920616d6f756e74206c6f776572207468616e20302e312500006044820152606401610a61565b610de081670de0b6b3a764000061361c565b60088190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de41009906020015b60405180910390a150565b6005546001600160a01b03163314610e465760405162461bcd60e51b8152600401610a61906135bb565b8051825114610e975760405162461bcd60e51b815260206004820152601e60248201527f417272617973206d757374206265207468652073616d65206c656e67746800006044820152606401610a61565b60c8825110610f045760405162461bcd60e51b815260206004820152603360248201527f43616e206f6e6c79206c6f636b203230302077616c6c657473207065722074786044820152726e2064756520746f20676173206c696d69747360681b6064820152608401610a61565b60005b8251811015610b99576000610f4a848381518110610f2757610f276135f0565b60200260200101516001600160a01b031660009081526020819052604090205490565b11610f835760405162461bcd60e51b81526020600482015260096024820152684e6f20746f6b656e7360b81b6044820152606401610a61565b42601d6000858481518110610f9a57610f9a6135f0565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002054106110015760405162461bcd60e51b815260206004820152600e60248201526d105b1c9958591e481b1bd8dad95960921b6044820152606401610a61565b818181518110611013576110136135f0565b602002602001015162015180611029919061361c565b6110339042613678565b601d6000858481518110611049576110496135f0565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000208190555080806110809061363b565b915050610f07565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610a2e9185906110bf908690613678565b611fde565b6005546001600160a01b031633146110ee5760405162461bcd60e51b8152600401610a61906135bb565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146111625760405162461bcd60e51b8152600401610a61906135bb565b6007805462ff00ff60a81b191690556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6005546001600160a01b031633146111c65760405162461bcd60e51b8152600401610a61906135bb565b8061125d577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316141561125d5760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520556e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610a61565b6001600160a01b03919091166000908152601a60205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146112b25760405162461bcd60e51b8152600401610a61906135bb565b600f83905560108290556011819055806112cc8385613678565b6112d69190613678565b600e81905560091015610b995760405162461bcd60e51b815260206004820152601c60248201527f4d757374206b6565702066656573206174203925206f72206c657373000000006044820152606401610a61565b6005546001600160a01b031633146113555760405162461bcd60e51b8152600401610a61906135bb565b600754600160b01b900460ff16156113af5760405162461bcd60e51b815260206004820152601760248201527f54726164696e6720616c726561647920656e61626c65640000000000000000006044820152606401610a61565b60058111156114005760405162461bcd60e51b815260206004820152601a60248201527f4d757374206265206c657373207468616e203520626c6f636b730000000000006044820152606401610a61565b6007805462ff00ff60a01b19166201000160a01b17905543600b55600c8190556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a150565b6005546000906001600160a01b031633146114795760405162461bcd60e51b8152600401610a61906135bb565b6001600160a01b0383166114cf5760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610a61565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa158015611516573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061153a9190613690565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af115801561158d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115b191906136a9565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6005546001600160a01b031633146116275760405162461bcd60e51b8152600401610a61906135bb565b6001600160a01b03811661168b5760405162461bcd60e51b815260206004820152602560248201527f5f6d61726b6574696e674164647265737320616464726573732063616e6e6f74604482015264020626520360dc1b6064820152608401610a61565b600680546001600160a01b0319166001600160a01b0383169081179091556040517fd1e7d6a3390dd5008bd1c57798817b9f806e4c417264e7d3d67e42e784dc24a990600090a250565b60606004805461099e90613580565b6005546001600160a01b0316331461170e5760405162461bcd60e51b8152600401610a61906135bb565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614156117b65760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610a61565b6117c08282612b28565b5050565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156118465760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610a61565b6118533385858403611fde565b5060019392505050565b6000610a2e338484612102565b6005546001600160a01b031633146118945760405162461bcd60e51b8152600401610a61906135bb565b6001600160a01b038216600081815260196020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b0316331461191d5760405162461bcd60e51b8152600401610a61906135bb565b601383905560148290556015819055806119378385613678565b6119419190613678565b60128181551015610b995760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313825206f72206c6573730000006044820152606401610a61565b6005546001600160a01b031633146119be5760405162461bcd60e51b8152600401610a61906135bb565b670de0b6b3a76400006103e86119d360025490565b6119de90600361361c565b6119e89190613656565b6119f29190613656565b811015611a4b5760405162461bcd60e51b815260206004820152602160248201527f4d61782077616c6c657420616d6f756e74206c6f776572207468616e20302e336044820152602560f81b6064820152608401610a61565b611a5d81670de0b6b3a764000061361c565b600a8190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc90602001610e11565b6005546001600160a01b03163314611abc5760405162461bcd60e51b8152600401610a61906135bb565b60005b81518110156117c0576001601e6000848481518110611ae057611ae06135f0565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580611b1c8161363b565b915050611abf565b6005546001600160a01b03163314611b4e5760405162461bcd60e51b8152600401610a61906135bb565b670de0b6b3a7640000620186a0611b6460025490565b611b6f90600161361c565b611b799190613656565b611b839190613656565b811015611be35760405162461bcd60e51b815260206004820152602860248201527f5468726573686f6c64206c6f776572207468616e20302e3030312520746f74616044820152676c20737570706c7960c01b6064820152608401610a61565b670de0b6b3a76400006103e8611bf860025490565b611c0390600161361c565b611c0d9190613656565b611c179190613656565b811115611c765760405162461bcd60e51b815260206004820152602760248201527f5468726573686f6c6420686967686572207468616e20302e312520746f74616c60448201526620737570706c7960c81b6064820152608401610a61565b611c8881670de0b6b3a764000061361c565b600d8190556040519081527f6d2120e4008cf6f7ae5156e6e187d00ab7959b8a693490358ec2da589a6bd36490602001610e11565b6005546001600160a01b03163314611ce75760405162461bcd60e51b8152600401610a61906135bb565b670de0b6b3a76400006103e8611cfc60025490565b611d0790600161361c565b611d119190613656565b611d1b9190613656565b811015611d6a5760405162461bcd60e51b815260206004820152601f60248201527f4d61782073656c6c20616d6f756e74206c6f776572207468616e20302e3125006044820152606401610a61565b611d7c81670de0b6b3a764000061361c565b60098190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e90602001610e11565b6005546001600160a01b03163314611ddb5760405162461bcd60e51b8152600401610a61906135bb565b6007805460ff60b81b19169055565b6005546001600160a01b03163314611e145760405162461bcd60e51b8152600401610a61906135bb565b60005b81518110156117c0576000601e6000848481518110611e3857611e386135f0565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580611e748161363b565b915050611e17565b6005546001600160a01b03163314611ea65760405162461bcd60e51b8152600401610a61906135bb565b6001600160a01b038116611f0b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a61565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314611f915760405162461bcd60e51b8152600401610a61906135bb565b604051600090339047908381818185875af1925050503d8060008114611fd3576040519150601f19603f3d011682016040523d82523d6000602084013e611fd8565b606091505b50505050565b6001600160a01b0383166120405760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610a61565b6001600160a01b0382166120a15760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610a61565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166121285760405162461bcd60e51b8152600401610a61906136c6565b6001600160a01b03821661214e5760405162461bcd60e51b8152600401610a619061370b565b6000811161219e5760405162461bcd60e51b815260206004820152601d60248201527f416d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610a61565b6001600160a01b0383166000908152601d602052604090205442116121f35760405162461bcd60e51b815260206004820152600b60248201526a4c6f636b2061637469766560a81b6044820152606401610a61565b6001600160a01b0383166000908152601e602052604090205460ff16156122455760405162461bcd60e51b81526020600482015260066024820152654775696c747960d01b6044820152606401610a61565b600754600160a81b900460ff161561274d576005546001600160a01b0384811691161480159061228357506005546001600160a01b03838116911614155b801561229757506001600160a01b03821615155b80156122ae57506001600160a01b03821661dead14155b1561274d57600754600160b01b900460ff1661237c577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b03161415801561233857507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b031614155b61237c5760405162461bcd60e51b815260206004820152601560248201527454726164696e67206973206e6f742061637469766560581b6044820152606401610a61565b600754600160b81b900460ff16156124dd577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415801561240257507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b156124dd5761241260014361374e565b326000908152601c6020526040902054108015612450575061243560014361374e565b6001600160a01b0383166000908152601c6020526040902054105b6124b85760405162461bcd60e51b815260206004820152603360248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527232b217102a393c9030b3b0b4b7103630ba32b960691b6064820152608401610a61565b326000908152601c602052604080822043908190556001600160a01b03851683529120555b6001600160a01b0383166000908152601b602052604090205460ff16801561251e57506001600160a01b0382166000908152601a602052604090205460ff16155b156125f3576008548111156125855760405162461bcd60e51b815260206004820152602760248201527f427579207472616e7366657220616d6f756e74206578636565647320746865206044820152666d61782062757960c81b6064820152608401610a61565b600a546001600160a01b0383166000908152602081905260409020546125ab9083613678565b11156125ee5760405162461bcd60e51b8152602060048201526012602482015271115e18d959591cc81b585e081dd85b1b195d60721b6044820152606401610a61565b61274d565b6001600160a01b0382166000908152601b602052604090205460ff16801561263457506001600160a01b0383166000908152601a602052604090205460ff16155b1561269d576009548111156125ee5760405162461bcd60e51b815260206004820152602960248201527f53656c6c207472616e7366657220616d6f756e74206578636565647320746865604482015268081b585e081cd95b1b60ba1b6064820152608401610a61565b6001600160a01b0382166000908152601a602052604090205460ff161580156126df57506001600160a01b0383166000908152601a602052604090205460ff16155b1561274d57600a546001600160a01b03831660009081526020819052604090205461270a9083613678565b111561274d5760405162461bcd60e51b8152602060048201526012602482015271115e18d959591cc81b585e081dd85b1b195d60721b6044820152606401610a61565b30600090815260208190526040902054600d548110801590819061277a5750600754600160a01b900460ff165b801561279f57506001600160a01b0385166000908152601b602052604090205460ff16155b80156127c457506001600160a01b03851660009081526019602052604090205460ff16155b80156127e957506001600160a01b03841660009081526019602052604090205460ff16155b156127f6576127f6612b92565b6001600160a01b03851660009081526019602052604090205460ff1615801561283857506001600160a01b03841660009081526019602052604090205460ff16155b15612b1657600080600c54600b5443612851919061374e565b1115801561287757506001600160a01b0387166000908152601b602052604090205460ff165b156128b357606461288986606361361c565b6128939190613656565b6006549091506128ae9088906001600160a01b031683612d9f565b612aec565b6001600160a01b0387166000908152601b602052604090205460ff1680156128dd57506000600e54115b15612a0f57600c54600b546128f2904361374e565b6128fc919061374e565b6001141561295c576001600160a01b0386166000818152601e6020908152604091829020805460ff1916600117905590519182527fed275327edb02428d527ce974537501dfa0184b6cd668977aa732bdfd3f3504b910160405180910390a15b6064600e548661296c919061361c565b6129769190613656565b9150600e5460105483612989919061361c565b6129939190613656565b601760008282546129a49190613678565b9091555050600e54600f546129b9908461361c565b6129c39190613656565b601660008282546129d49190613678565b9091555050600e546011546129e9908461361c565b6129f39190613656565b60186000828254612a049190613678565b90915550612aec9050565b6001600160a01b0386166000908152601b602052604090205460ff168015612a3957506000601254115b15612aec57606460125486612a4e919061361c565b612a589190613656565b915060125460145483612a6b919061361c565b612a759190613656565b60176000828254612a869190613678565b9091555050601254601354612a9b908461361c565b612aa59190613656565b60166000828254612ab69190613678565b9091555050601254601554612acb908461361c565b612ad59190613656565b60186000828254612ae69190613678565b90915550505b8115612afd57612afd873084612d9f565b612b078183613678565b612b11908661374e565b945050505b612b21858585612d9f565b5050505050565b6001600160a01b0382166000908152601b60205260409020805460ff1916821515179055612b568282612ef4565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b3060009081526020819052604081205490506000601854601654601754612bb99190613678565b612bc39190613678565b9050811580612bd0575080155b15612bd9575050565b600d54612be790600a61361c565b821115612bff57600d54612bfc90600a61361c565b91505b60008060028360175486612c13919061361c565b612c1d9190613656565b612c279190613656565b9050612c3b612c36828661374e565b612f57565b60175447908190600090612c5190600290613656565b612c5b908761374e565b601654612c68908561361c565b612c729190613656565b905060006002601754612c859190613656565b612c8f908861374e565b601854612c9c908661361c565b612ca69190613656565b9050612cb28183613678565b612cbc908461374e565b60006017819055601681905560185592508415801590612cdc5750600083115b15612ceb57612ceb8584613117565b6007546040516001600160a01b03909116908290600081818185875af1925050503d8060008114612d38576040519150601f19603f3d011682016040523d82523d6000602084013e612d3d565b606091505b50506006546040519197506001600160a01b0316904790600081818185875af1925050503d8060008114612d8d576040519150601f19603f3d011682016040523d82523d6000602084013e612d92565b606091505b5050505050505050505050565b6001600160a01b038316612dc55760405162461bcd60e51b8152600401610a61906136c6565b6001600160a01b038216612deb5760405162461bcd60e51b8152600401610a619061370b565b6001600160a01b03831660009081526020819052604090205481811015612e635760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610a61565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290612e9a908490613678565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612ee691815260200190565b60405180910390a350505050565b6001600160a01b0382166000818152601a6020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612f8c57612f8c6135f0565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561300a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061302e9190613765565b81600181518110613041576130416135f0565b60200260200101906001600160a01b031690816001600160a01b03168152505061308c307f000000000000000000000000000000000000000000000000000000000000000084611fde565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac947906130e1908590600090869030904290600401613782565b600060405180830381600087803b1580156130fb57600080fd5b505af115801561310f573d6000803e3d6000fd5b505050505050565b613142307f000000000000000000000000000000000000000000000000000000000000000084611fde565b60405163f305d71960e01b815230600482015260248101839052600060448201819052606482015261dead60848201524260a48201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063f305d71990839060c40160606040518083038185885af11580156131cc573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612b2191906137f3565b600060208083528351808285015260005b8181101561321e57858101830151858201604001528201613202565b81811115613230576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b038116811461325b57600080fd5b50565b6000806040838503121561327157600080fd5b823561327c81613246565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156132c9576132c961328a565b604052919050565b600067ffffffffffffffff8211156132eb576132eb61328a565b5060051b60200190565b600082601f83011261330657600080fd5b8135602061331b613316836132d1565b6132a0565b82815260059290921b8401810191818101908684111561333a57600080fd5b8286015b8481101561335e57803561335181613246565b835291830191830161333e565b509695505050505050565b6000806040838503121561337c57600080fd5b823567ffffffffffffffff8082111561339457600080fd5b6133a0868387016132f5565b93506020915081850135818111156133b757600080fd5b85019050601f810186136133ca57600080fd5b80356133d8613316826132d1565b81815260059190911b820183019083810190888311156133f757600080fd5b928401925b82841015613415578335825292840192908401906133fc565b80955050505050509250929050565b60008060006060848603121561343957600080fd5b833561344481613246565b9250602084013561345481613246565b929592945050506040919091013590565b60006020828403121561347757600080fd5b813561348281613246565b9392505050565b60006020828403121561349b57600080fd5b5035919050565b801515811461325b57600080fd5b600080604083850312156134c357600080fd5b82356134ce81613246565b915060208301356134de816134a2565b809150509250929050565b6000806000606084860312156134fe57600080fd5b505081359360208301359350604090920135919050565b6000806040838503121561352857600080fd5b823561353381613246565b915060208301356134de81613246565b60006020828403121561355557600080fd5b813567ffffffffffffffff81111561356c57600080fd5b613578848285016132f5565b949350505050565b600181811c9082168061359457607f821691505b602082108114156135b557634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161561363657613636613606565b500290565b600060001982141561364f5761364f613606565b5060010190565b60008261367357634e487b7160e01b600052601260045260246000fd5b500490565b6000821982111561368b5761368b613606565b500190565b6000602082840312156136a257600080fd5b5051919050565b6000602082840312156136bb57600080fd5b8151613482816134a2565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60008282101561376057613760613606565b500390565b60006020828403121561377757600080fd5b815161348281613246565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156137d25784516001600160a01b0316835293830193918301916001016137ad565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561380857600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220432fcafe9ea7e066dda5c15df54afdadba92b33aa249bf17d74a2665f90dbd3f64736f6c634300080b00334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65728be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0

Deployed Bytecode

0x6080604052600436106103035760003560e01c80638da5cb5b11610190578063c3e9c34f116100dc578063dd62ed3e11610095578063f11a24d31161006f578063f11a24d31461092e578063f2fde38b14610944578063f5648a4f14610964578063f63743421461097957600080fd5b8063dd62ed3e146108b3578063e884f260146108f9578063ec238a811461090e57600080fd5b8063c3e9c34f146107ed578063c96fd36d1461081d578063d1a0c9461461083d578063d257b34f1461085d578063d85ba0631461087d578063dc3f0d0f1461089357600080fd5b8063a457c2d711610149578063b204141111610123578063b204141114610777578063c02466681461078d578063c17b5b8c146107ad578063c18bc195146107cd57600080fd5b8063a457c2d714610721578063a9059cbb14610741578063aa4bde281461076157600080fd5b80638da5cb5b1461066b578063906e9dd01461068957806392136913146106a9578063930a6d07146106bf57806395d89b41146106ec5780639a7a23d61461070157600080fd5b806349bd5a5e1161024f5780637571336a116102085780638095d564116101e25780638095d564146105f557806382aa7c68146106155780638366e79a1461063557806388e765ff1461065557600080fd5b80637571336a146105a9578063764556dc146105c95780637bce5a04146105df57600080fd5b806349bd5a5e146104e957806366d602ae1461051d5780636a486a8e1461053357806370a0823114610549578063715018a61461057f578063751039fc1461059457600080fd5b806323b872dd116102bc578063313ce56711610296578063313ce5671461046d5780633547800a146104895780633936e8b9146104a957806339509351146104c957600080fd5b806323b872dd1461040d57806329b1c15c1461042d5780632be32b611461044d57600080fd5b806306fdde031461030f578063095ea7b31461033a5780631694505e1461036a57806318160ddd146103b657806318a94cf1146103d55780632307b441146103eb57600080fd5b3661030a57005b600080fd5b34801561031b57600080fd5b5061032461098f565b60405161033191906131f1565b60405180910390f35b34801561034657600080fd5b5061035a61035536600461325e565b610a21565b6040519015158152602001610331565b34801561037657600080fd5b5061039e7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b039091168152602001610331565b3480156103c257600080fd5b506002545b604051908152602001610331565b3480156103e157600080fd5b506103c760155481565b3480156103f757600080fd5b5061040b610406366004613369565b610a37565b005b34801561041957600080fd5b5061035a610428366004613424565b610b9e565b34801561043957600080fd5b5061040b610448366004613465565b610c48565b34801561045957600080fd5b5061040b610468366004613489565b610d21565b34801561047957600080fd5b5060405160128152602001610331565b34801561049557600080fd5b5061040b6104a4366004613369565b610e1c565b3480156104b557600080fd5b5060065461039e906001600160a01b031681565b3480156104d557600080fd5b5061035a6104e436600461325e565b611088565b3480156104f557600080fd5b5061039e7f0000000000000000000000006e7e72852e1abf1b5b3f514137b294341aef7cbe81565b34801561052957600080fd5b506103c760095481565b34801561053f57600080fd5b506103c760125481565b34801561055557600080fd5b506103c7610564366004613465565b6001600160a01b031660009081526020819052604090205490565b34801561058b57600080fd5b5061040b6110c4565b3480156105a057600080fd5b5061040b611138565b3480156105b557600080fd5b5061040b6105c43660046134b0565b61119c565b3480156105d557600080fd5b506103c7600b5481565b3480156105eb57600080fd5b506103c7600f5481565b34801561060157600080fd5b5061040b6106103660046134e9565b611288565b34801561062157600080fd5b5061040b610630366004613489565b61132b565b34801561064157600080fd5b5061035a610650366004613515565b61144c565b34801561066157600080fd5b506103c760085481565b34801561067757600080fd5b506005546001600160a01b031661039e565b34801561069557600080fd5b5061040b6106a4366004613465565b6115fd565b3480156106b557600080fd5b506103c760135481565b3480156106cb57600080fd5b506103c76106da366004613465565b601d6020526000908152604090205481565b3480156106f857600080fd5b506103246116d5565b34801561070d57600080fd5b5061040b61071c3660046134b0565b6116e4565b34801561072d57600080fd5b5061035a61073c36600461325e565b6117c4565b34801561074d57600080fd5b5061035a61075c36600461325e565b61185d565b34801561076d57600080fd5b506103c7600a5481565b34801561078357600080fd5b506103c760115481565b34801561079957600080fd5b5061040b6107a83660046134b0565b61186a565b3480156107b957600080fd5b5061040b6107c83660046134e9565b6118f3565b3480156107d957600080fd5b5061040b6107e8366004613489565b611994565b3480156107f957600080fd5b5061035a610808366004613465565b601e6020526000908152604090205460ff1681565b34801561082957600080fd5b5061040b610838366004613543565b611a92565b34801561084957600080fd5b5060075461039e906001600160a01b031681565b34801561086957600080fd5b5061040b610878366004613489565b611b24565b34801561088957600080fd5b506103c7600e5481565b34801561089f57600080fd5b5061040b6108ae366004613489565b611cbd565b3480156108bf57600080fd5b506103c76108ce366004613515565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561090557600080fd5b5061040b611db1565b34801561091a57600080fd5b5061040b610929366004613543565b611dea565b34801561093a57600080fd5b506103c760105481565b34801561095057600080fd5b5061040b61095f366004613465565b611e7c565b34801561097057600080fd5b5061040b611f67565b34801561098557600080fd5b506103c760145481565b60606003805461099e90613580565b80601f01602080910402602001604051908101604052809291908181526020018280546109ca90613580565b8015610a175780601f106109ec57610100808354040283529160200191610a17565b820191906000526020600020905b8154815290600101906020018083116109fa57829003601f168201915b5050505050905090565b6000610a2e338484611fde565b50600192915050565b6005546001600160a01b03163314610a6a5760405162461bcd60e51b8152600401610a61906135bb565b60405180910390fd5b8051825114610abb5760405162461bcd60e51b815260206004820152601e60248201527f417272617973206d757374206265207468652073616d65206c656e67746800006044820152606401610a61565b60c8825110610b2b5760405162461bcd60e51b815260206004820152603660248201527f43616e206f6e6c792061697264726f70203230302077616c6c657473207065726044820152752074786e2064756520746f20676173206c696d69747360501b6064820152608401610a61565b60005b8251811015610b9957610b8733848381518110610b4d57610b4d6135f0565b6020026020010151848481518110610b6757610b676135f0565b6020026020010151670de0b6b3a7640000610b82919061361c565b612102565b80610b918161363b565b915050610b2e565b505050565b6000610bab848484612102565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610c305760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610a61565b610c3d8533858403611fde565b506001949350505050565b6005546001600160a01b03163314610c725760405162461bcd60e51b8152600401610a61906135bb565b6001600160a01b038116610cd85760405162461bcd60e51b815260206004820152602760248201527f5f646576656c6f706d656e744164647265737320616464726573732063616e6e60448201526606f7420626520360cc1b6064820152608401610a61565b600780546001600160a01b0319166001600160a01b0383169081179091556040517e9301a7a046a65d0304006b0bfee72798e7e8c804b21a3d33e0838d87680e9d90600090a250565b6005546001600160a01b03163314610d4b5760405162461bcd60e51b8152600401610a61906135bb565b670de0b6b3a76400006103e8610d6060025490565b610d6b90600161361c565b610d759190613656565b610d7f9190613656565b811015610dce5760405162461bcd60e51b815260206004820152601e60248201527f4d61782062757920616d6f756e74206c6f776572207468616e20302e312500006044820152606401610a61565b610de081670de0b6b3a764000061361c565b60088190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de41009906020015b60405180910390a150565b6005546001600160a01b03163314610e465760405162461bcd60e51b8152600401610a61906135bb565b8051825114610e975760405162461bcd60e51b815260206004820152601e60248201527f417272617973206d757374206265207468652073616d65206c656e67746800006044820152606401610a61565b60c8825110610f045760405162461bcd60e51b815260206004820152603360248201527f43616e206f6e6c79206c6f636b203230302077616c6c657473207065722074786044820152726e2064756520746f20676173206c696d69747360681b6064820152608401610a61565b60005b8251811015610b99576000610f4a848381518110610f2757610f276135f0565b60200260200101516001600160a01b031660009081526020819052604090205490565b11610f835760405162461bcd60e51b81526020600482015260096024820152684e6f20746f6b656e7360b81b6044820152606401610a61565b42601d6000858481518110610f9a57610f9a6135f0565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002054106110015760405162461bcd60e51b815260206004820152600e60248201526d105b1c9958591e481b1bd8dad95960921b6044820152606401610a61565b818181518110611013576110136135f0565b602002602001015162015180611029919061361c565b6110339042613678565b601d6000858481518110611049576110496135f0565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000208190555080806110809061363b565b915050610f07565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610a2e9185906110bf908690613678565b611fde565b6005546001600160a01b031633146110ee5760405162461bcd60e51b8152600401610a61906135bb565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146111625760405162461bcd60e51b8152600401610a61906135bb565b6007805462ff00ff60a81b191690556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6005546001600160a01b031633146111c65760405162461bcd60e51b8152600401610a61906135bb565b8061125d577f0000000000000000000000006e7e72852e1abf1b5b3f514137b294341aef7cbe6001600160a01b0316826001600160a01b0316141561125d5760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520556e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610a61565b6001600160a01b03919091166000908152601a60205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146112b25760405162461bcd60e51b8152600401610a61906135bb565b600f83905560108290556011819055806112cc8385613678565b6112d69190613678565b600e81905560091015610b995760405162461bcd60e51b815260206004820152601c60248201527f4d757374206b6565702066656573206174203925206f72206c657373000000006044820152606401610a61565b6005546001600160a01b031633146113555760405162461bcd60e51b8152600401610a61906135bb565b600754600160b01b900460ff16156113af5760405162461bcd60e51b815260206004820152601760248201527f54726164696e6720616c726561647920656e61626c65640000000000000000006044820152606401610a61565b60058111156114005760405162461bcd60e51b815260206004820152601a60248201527f4d757374206265206c657373207468616e203520626c6f636b730000000000006044820152606401610a61565b6007805462ff00ff60a01b19166201000160a01b17905543600b55600c8190556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a150565b6005546000906001600160a01b031633146114795760405162461bcd60e51b8152600401610a61906135bb565b6001600160a01b0383166114cf5760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610a61565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa158015611516573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061153a9190613690565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af115801561158d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115b191906136a9565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6005546001600160a01b031633146116275760405162461bcd60e51b8152600401610a61906135bb565b6001600160a01b03811661168b5760405162461bcd60e51b815260206004820152602560248201527f5f6d61726b6574696e674164647265737320616464726573732063616e6e6f74604482015264020626520360dc1b6064820152608401610a61565b600680546001600160a01b0319166001600160a01b0383169081179091556040517fd1e7d6a3390dd5008bd1c57798817b9f806e4c417264e7d3d67e42e784dc24a990600090a250565b60606004805461099e90613580565b6005546001600160a01b0316331461170e5760405162461bcd60e51b8152600401610a61906135bb565b7f0000000000000000000000006e7e72852e1abf1b5b3f514137b294341aef7cbe6001600160a01b0316826001600160a01b031614156117b65760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610a61565b6117c08282612b28565b5050565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156118465760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610a61565b6118533385858403611fde565b5060019392505050565b6000610a2e338484612102565b6005546001600160a01b031633146118945760405162461bcd60e51b8152600401610a61906135bb565b6001600160a01b038216600081815260196020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b0316331461191d5760405162461bcd60e51b8152600401610a61906135bb565b601383905560148290556015819055806119378385613678565b6119419190613678565b60128181551015610b995760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313825206f72206c6573730000006044820152606401610a61565b6005546001600160a01b031633146119be5760405162461bcd60e51b8152600401610a61906135bb565b670de0b6b3a76400006103e86119d360025490565b6119de90600361361c565b6119e89190613656565b6119f29190613656565b811015611a4b5760405162461bcd60e51b815260206004820152602160248201527f4d61782077616c6c657420616d6f756e74206c6f776572207468616e20302e336044820152602560f81b6064820152608401610a61565b611a5d81670de0b6b3a764000061361c565b600a8190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc90602001610e11565b6005546001600160a01b03163314611abc5760405162461bcd60e51b8152600401610a61906135bb565b60005b81518110156117c0576001601e6000848481518110611ae057611ae06135f0565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580611b1c8161363b565b915050611abf565b6005546001600160a01b03163314611b4e5760405162461bcd60e51b8152600401610a61906135bb565b670de0b6b3a7640000620186a0611b6460025490565b611b6f90600161361c565b611b799190613656565b611b839190613656565b811015611be35760405162461bcd60e51b815260206004820152602860248201527f5468726573686f6c64206c6f776572207468616e20302e3030312520746f74616044820152676c20737570706c7960c01b6064820152608401610a61565b670de0b6b3a76400006103e8611bf860025490565b611c0390600161361c565b611c0d9190613656565b611c179190613656565b811115611c765760405162461bcd60e51b815260206004820152602760248201527f5468726573686f6c6420686967686572207468616e20302e312520746f74616c60448201526620737570706c7960c81b6064820152608401610a61565b611c8881670de0b6b3a764000061361c565b600d8190556040519081527f6d2120e4008cf6f7ae5156e6e187d00ab7959b8a693490358ec2da589a6bd36490602001610e11565b6005546001600160a01b03163314611ce75760405162461bcd60e51b8152600401610a61906135bb565b670de0b6b3a76400006103e8611cfc60025490565b611d0790600161361c565b611d119190613656565b611d1b9190613656565b811015611d6a5760405162461bcd60e51b815260206004820152601f60248201527f4d61782073656c6c20616d6f756e74206c6f776572207468616e20302e3125006044820152606401610a61565b611d7c81670de0b6b3a764000061361c565b60098190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e90602001610e11565b6005546001600160a01b03163314611ddb5760405162461bcd60e51b8152600401610a61906135bb565b6007805460ff60b81b19169055565b6005546001600160a01b03163314611e145760405162461bcd60e51b8152600401610a61906135bb565b60005b81518110156117c0576000601e6000848481518110611e3857611e386135f0565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580611e748161363b565b915050611e17565b6005546001600160a01b03163314611ea65760405162461bcd60e51b8152600401610a61906135bb565b6001600160a01b038116611f0b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a61565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314611f915760405162461bcd60e51b8152600401610a61906135bb565b604051600090339047908381818185875af1925050503d8060008114611fd3576040519150601f19603f3d011682016040523d82523d6000602084013e611fd8565b606091505b50505050565b6001600160a01b0383166120405760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610a61565b6001600160a01b0382166120a15760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610a61565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166121285760405162461bcd60e51b8152600401610a61906136c6565b6001600160a01b03821661214e5760405162461bcd60e51b8152600401610a619061370b565b6000811161219e5760405162461bcd60e51b815260206004820152601d60248201527f416d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610a61565b6001600160a01b0383166000908152601d602052604090205442116121f35760405162461bcd60e51b815260206004820152600b60248201526a4c6f636b2061637469766560a81b6044820152606401610a61565b6001600160a01b0383166000908152601e602052604090205460ff16156122455760405162461bcd60e51b81526020600482015260066024820152654775696c747960d01b6044820152606401610a61565b600754600160a81b900460ff161561274d576005546001600160a01b0384811691161480159061228357506005546001600160a01b03838116911614155b801561229757506001600160a01b03821615155b80156122ae57506001600160a01b03821661dead14155b1561274d57600754600160b01b900460ff1661237c577f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0316836001600160a01b03161415801561233857507f0000000000000000000000006e7e72852e1abf1b5b3f514137b294341aef7cbe6001600160a01b0316836001600160a01b031614155b61237c5760405162461bcd60e51b815260206004820152601560248201527454726164696e67206973206e6f742061637469766560581b6044820152606401610a61565b600754600160b81b900460ff16156124dd577f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0316826001600160a01b03161415801561240257507f0000000000000000000000006e7e72852e1abf1b5b3f514137b294341aef7cbe6001600160a01b0316826001600160a01b031614155b156124dd5761241260014361374e565b326000908152601c6020526040902054108015612450575061243560014361374e565b6001600160a01b0383166000908152601c6020526040902054105b6124b85760405162461bcd60e51b815260206004820152603360248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527232b217102a393c9030b3b0b4b7103630ba32b960691b6064820152608401610a61565b326000908152601c602052604080822043908190556001600160a01b03851683529120555b6001600160a01b0383166000908152601b602052604090205460ff16801561251e57506001600160a01b0382166000908152601a602052604090205460ff16155b156125f3576008548111156125855760405162461bcd60e51b815260206004820152602760248201527f427579207472616e7366657220616d6f756e74206578636565647320746865206044820152666d61782062757960c81b6064820152608401610a61565b600a546001600160a01b0383166000908152602081905260409020546125ab9083613678565b11156125ee5760405162461bcd60e51b8152602060048201526012602482015271115e18d959591cc81b585e081dd85b1b195d60721b6044820152606401610a61565b61274d565b6001600160a01b0382166000908152601b602052604090205460ff16801561263457506001600160a01b0383166000908152601a602052604090205460ff16155b1561269d576009548111156125ee5760405162461bcd60e51b815260206004820152602960248201527f53656c6c207472616e7366657220616d6f756e74206578636565647320746865604482015268081b585e081cd95b1b60ba1b6064820152608401610a61565b6001600160a01b0382166000908152601a602052604090205460ff161580156126df57506001600160a01b0383166000908152601a602052604090205460ff16155b1561274d57600a546001600160a01b03831660009081526020819052604090205461270a9083613678565b111561274d5760405162461bcd60e51b8152602060048201526012602482015271115e18d959591cc81b585e081dd85b1b195d60721b6044820152606401610a61565b30600090815260208190526040902054600d548110801590819061277a5750600754600160a01b900460ff165b801561279f57506001600160a01b0385166000908152601b602052604090205460ff16155b80156127c457506001600160a01b03851660009081526019602052604090205460ff16155b80156127e957506001600160a01b03841660009081526019602052604090205460ff16155b156127f6576127f6612b92565b6001600160a01b03851660009081526019602052604090205460ff1615801561283857506001600160a01b03841660009081526019602052604090205460ff16155b15612b1657600080600c54600b5443612851919061374e565b1115801561287757506001600160a01b0387166000908152601b602052604090205460ff165b156128b357606461288986606361361c565b6128939190613656565b6006549091506128ae9088906001600160a01b031683612d9f565b612aec565b6001600160a01b0387166000908152601b602052604090205460ff1680156128dd57506000600e54115b15612a0f57600c54600b546128f2904361374e565b6128fc919061374e565b6001141561295c576001600160a01b0386166000818152601e6020908152604091829020805460ff1916600117905590519182527fed275327edb02428d527ce974537501dfa0184b6cd668977aa732bdfd3f3504b910160405180910390a15b6064600e548661296c919061361c565b6129769190613656565b9150600e5460105483612989919061361c565b6129939190613656565b601760008282546129a49190613678565b9091555050600e54600f546129b9908461361c565b6129c39190613656565b601660008282546129d49190613678565b9091555050600e546011546129e9908461361c565b6129f39190613656565b60186000828254612a049190613678565b90915550612aec9050565b6001600160a01b0386166000908152601b602052604090205460ff168015612a3957506000601254115b15612aec57606460125486612a4e919061361c565b612a589190613656565b915060125460145483612a6b919061361c565b612a759190613656565b60176000828254612a869190613678565b9091555050601254601354612a9b908461361c565b612aa59190613656565b60166000828254612ab69190613678565b9091555050601254601554612acb908461361c565b612ad59190613656565b60186000828254612ae69190613678565b90915550505b8115612afd57612afd873084612d9f565b612b078183613678565b612b11908661374e565b945050505b612b21858585612d9f565b5050505050565b6001600160a01b0382166000908152601b60205260409020805460ff1916821515179055612b568282612ef4565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b3060009081526020819052604081205490506000601854601654601754612bb99190613678565b612bc39190613678565b9050811580612bd0575080155b15612bd9575050565b600d54612be790600a61361c565b821115612bff57600d54612bfc90600a61361c565b91505b60008060028360175486612c13919061361c565b612c1d9190613656565b612c279190613656565b9050612c3b612c36828661374e565b612f57565b60175447908190600090612c5190600290613656565b612c5b908761374e565b601654612c68908561361c565b612c729190613656565b905060006002601754612c859190613656565b612c8f908861374e565b601854612c9c908661361c565b612ca69190613656565b9050612cb28183613678565b612cbc908461374e565b60006017819055601681905560185592508415801590612cdc5750600083115b15612ceb57612ceb8584613117565b6007546040516001600160a01b03909116908290600081818185875af1925050503d8060008114612d38576040519150601f19603f3d011682016040523d82523d6000602084013e612d3d565b606091505b50506006546040519197506001600160a01b0316904790600081818185875af1925050503d8060008114612d8d576040519150601f19603f3d011682016040523d82523d6000602084013e612d92565b606091505b5050505050505050505050565b6001600160a01b038316612dc55760405162461bcd60e51b8152600401610a61906136c6565b6001600160a01b038216612deb5760405162461bcd60e51b8152600401610a619061370b565b6001600160a01b03831660009081526020819052604090205481811015612e635760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610a61565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290612e9a908490613678565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612ee691815260200190565b60405180910390a350505050565b6001600160a01b0382166000818152601a6020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612f8c57612f8c6135f0565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561300a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061302e9190613765565b81600181518110613041576130416135f0565b60200260200101906001600160a01b031690816001600160a01b03168152505061308c307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611fde565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac947906130e1908590600090869030904290600401613782565b600060405180830381600087803b1580156130fb57600080fd5b505af115801561310f573d6000803e3d6000fd5b505050505050565b613142307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611fde565b60405163f305d71960e01b815230600482015260248101839052600060448201819052606482015261dead60848201524260a48201527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b03169063f305d71990839060c40160606040518083038185885af11580156131cc573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612b2191906137f3565b600060208083528351808285015260005b8181101561321e57858101830151858201604001528201613202565b81811115613230576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b038116811461325b57600080fd5b50565b6000806040838503121561327157600080fd5b823561327c81613246565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156132c9576132c961328a565b604052919050565b600067ffffffffffffffff8211156132eb576132eb61328a565b5060051b60200190565b600082601f83011261330657600080fd5b8135602061331b613316836132d1565b6132a0565b82815260059290921b8401810191818101908684111561333a57600080fd5b8286015b8481101561335e57803561335181613246565b835291830191830161333e565b509695505050505050565b6000806040838503121561337c57600080fd5b823567ffffffffffffffff8082111561339457600080fd5b6133a0868387016132f5565b93506020915081850135818111156133b757600080fd5b85019050601f810186136133ca57600080fd5b80356133d8613316826132d1565b81815260059190911b820183019083810190888311156133f757600080fd5b928401925b82841015613415578335825292840192908401906133fc565b80955050505050509250929050565b60008060006060848603121561343957600080fd5b833561344481613246565b9250602084013561345481613246565b929592945050506040919091013590565b60006020828403121561347757600080fd5b813561348281613246565b9392505050565b60006020828403121561349b57600080fd5b5035919050565b801515811461325b57600080fd5b600080604083850312156134c357600080fd5b82356134ce81613246565b915060208301356134de816134a2565b809150509250929050565b6000806000606084860312156134fe57600080fd5b505081359360208301359350604090920135919050565b6000806040838503121561352857600080fd5b823561353381613246565b915060208301356134de81613246565b60006020828403121561355557600080fd5b813567ffffffffffffffff81111561356c57600080fd5b613578848285016132f5565b949350505050565b600181811c9082168061359457607f821691505b602082108114156135b557634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161561363657613636613606565b500290565b600060001982141561364f5761364f613606565b5060010190565b60008261367357634e487b7160e01b600052601260045260246000fd5b500490565b6000821982111561368b5761368b613606565b500190565b6000602082840312156136a257600080fd5b5051919050565b6000602082840312156136bb57600080fd5b8151613482816134a2565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60008282101561376057613760613606565b500390565b60006020828403121561377757600080fd5b815161348281613246565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156137d25784516001600160a01b0316835293830193918301916001016137ad565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561380857600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220432fcafe9ea7e066dda5c15df54afdadba92b33aa249bf17d74a2665f90dbd3f64736f6c634300080b0033

Deployed Bytecode Sourcemap

9435:17876:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4073:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4987:169;;;;;;;;;;-1:-1:-1;4987:169:0;;;;;:::i;:::-;;:::i;:::-;;;1237:14:1;;1230:22;1212:41;;1200:2;1185:18;4987:169:0;1072:187:1;9497:43:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1446:32:1;;;1428:51;;1416:2;1401:18;9497:43:0;1264:221:1;4394:108:0;;;;;;;;;;-1:-1:-1;4482:12:0;;4394:108;;;1636:25:1;;;1624:2;1609:18;4394:108:0;1490:177:1;10332:33:0;;;;;;;;;;;;;;;;23151:450;;;;;;;;;;-1:-1:-1;23151:450:0;;;;;:::i;:::-;;:::i;:::-;;5164:492;;;;;;;;;;-1:-1:-1;5164:492:0;;;;;:::i;:::-;;:::i;27003:305::-;;;;;;;;;;-1:-1:-1;27003:305:0;;;;;:::i;:::-;;:::i;21642:271::-;;;;;;;;;;-1:-1:-1;21642:271:0;;;;;:::i;:::-;;:::i;4293:93::-;;;;;;;;;;-1:-1:-1;4293:93:0;;4376:2;5197:36:1;;5185:2;5170:18;4293:93:0;5055:184:1;21031:573:0;;;;;;;;;;-1:-1:-1;21031:573:0;;;;;:::i;:::-;;:::i;9592:31::-;;;;;;;;;;-1:-1:-1;9592:31:0;;;;-1:-1:-1;;;;;9592:31:0;;;5664:215;;;;;;;;;;-1:-1:-1;5664:215:0;;;;;:::i;:::-;;:::i;9547:38::-;;;;;;;;;;;;;;;9876:28;;;;;;;;;;;;;;;;10221;;;;;;;;;;;;;;;;4510:127;;;;;;;;;;-1:-1:-1;4510:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;4611:18:0;4584:7;4611:18;;;;;;;;;;;;4510:127;8154:150;;;;;;;;;;;;;:::i;20238:153::-;;;;;;;;;;;;;:::i;13468:269::-;;;;;;;;;;-1:-1:-1;13468:269:0;;;;;:::i;:::-;;:::i;9948:38::-;;;;;;;;;;;;;;;;10108:30;;;;;;;;;;;;;;;;23637:399;;;;;;;;;;-1:-1:-1;23637:399:0;;;;;:::i;:::-;;:::i;19836:360::-;;;;;;;;;;-1:-1:-1;19836:360:0;;;;;:::i;:::-;;:::i;26034:381::-;;;;;;;;;;-1:-1:-1;26034:381:0;;;;;:::i;:::-;;:::i;9842:27::-;;;;;;;;;;;;;;;;7940:79;;;;;;;;;;-1:-1:-1;8005:6:0;;-1:-1:-1;;;;;8005:6:0;7940:79;;26661:289;;;;;;;;;;-1:-1:-1;26661:289:0;;;;;:::i;:::-;;:::i;10256:31::-;;;;;;;;;;;;;;;;10770:50;;;;;;;;;;-1:-1:-1;10770:50:0;;;;;:::i;:::-;;;;;;;;;;;;;;4181:104;;;;;;;;;;;;;:::i;14227:244::-;;;;;;;;;;-1:-1:-1;14227:244:0;;;;;:::i;:::-;;:::i;5887:413::-;;;;;;;;;;-1:-1:-1;5887:413:0;;;;;:::i;:::-;;:::i;4645:175::-;;;;;;;;;;-1:-1:-1;4645:175:0;;;;;:::i;:::-;;:::i;9911:30::-;;;;;;;;;;;;;;;;10182:32;;;;;;;;;;;;;;;;14009:182;;;;;;;;;;-1:-1:-1;14009:182:0;;;;;:::i;:::-;;:::i;24073:410::-;;;;;;;;;;-1:-1:-1;24073:410:0;;;;;:::i;:::-;;:::i;22273:286::-;;;;;;;;;;-1:-1:-1;22273:286:0;;;;;:::i;:::-;;:::i;10827:38::-;;;;;;;;;;-1:-1:-1;10827:38:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;20577:173;;;;;;;;;;-1:-1:-1;20577:173:0;;;;;:::i;:::-;;:::i;9630:33::-;;;;;;;;;;-1:-1:-1;9630:33:0;;;;-1:-1:-1;;;;;9630:33:0;;;22667:415;;;;;;;;;;-1:-1:-1;22667:415:0;;;;;:::i;:::-;;:::i;10074:27::-;;;;;;;;;;;;;;;;21956:276;;;;;;;;;;-1:-1:-1;21956:276:0;;;;;:::i;:::-;;:::i;4828:151::-;;;;;;;;;;-1:-1:-1;4828:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;4944:18:0;;;4917:7;4944:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;4828:151;20434:98;;;;;;;;;;;;;:::i;20789:177::-;;;;;;;;;;-1:-1:-1;20789:177:0;;;;;:::i;:::-;;:::i;10145:30::-;;;;;;;;;;;;;;;;8312:244;;;;;;;;;;-1:-1:-1;8312:244:0;;;;;:::i;:::-;;:::i;26450:160::-;;;;;;;;;;;;;:::i;10294:31::-;;;;;;;;;;;;;;;;4073:100;4127:13;4160:5;4153:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4073:100;:::o;4987:169::-;5070:4;5087:39;302:10;5110:7;5119:6;5087:8;:39::i;:::-;-1:-1:-1;5144:4:0;4987:169;;;;:::o;23151:450::-;8067:6;;-1:-1:-1;;;;;8067:6:0;302:10;8067:22;8059:67;;;;-1:-1:-1;;;8059:67:0;;;;;;;:::i;:::-;;;;;;;;;23293:15:::1;:22;23275:7;:14;:40;23267:83;;;::::0;-1:-1:-1;;;23267:83:0;;7977:2:1;23267:83:0::1;::::0;::::1;7959:21:1::0;8016:2;7996:18;;;7989:30;8055:32;8035:18;;;8028:60;8105:18;;23267:83:0::1;7775:354:1::0;23267:83:0::1;23386:3;23369:7;:14;:20;23361:87;;;::::0;-1:-1:-1;;;23361:87:0;;8336:2:1;23361:87:0::1;::::0;::::1;8318:21:1::0;8375:2;8355:18;;;8348:30;8414:34;8394:18;;;8387:62;-1:-1:-1;;;8465:18:1;;;8458:52;8527:19;;23361:87:0::1;8134:418:1::0;23361:87:0::1;23465:9;23460:134;23484:7;:14;23480:1;:18;23460:134;;;23520:62;23530:10;23542:7;23550:1;23542:10;;;;;;;;:::i;:::-;;;;;;;23554:15;23570:1;23554:18;;;;;;;;:::i;:::-;;;;;;;23575:6;23554:27;;;;:::i;:::-;23520:9;:62::i;:::-;23500:3:::0;::::1;::::0;::::1;:::i;:::-;;;;23460:134;;;;23151:450:::0;;:::o;5164:492::-;5304:4;5321:36;5331:6;5339:9;5350:6;5321:9;:36::i;:::-;-1:-1:-1;;;;;5397:19:0;;5370:24;5397:19;;;:11;:19;;;;;;;;302:10;5397:33;;;;;;;;5449:26;;;;5441:79;;;;-1:-1:-1;;;5441:79:0;;9336:2:1;5441:79:0;;;9318:21:1;9375:2;9355:18;;;9348:30;9414:34;9394:18;;;9387:62;-1:-1:-1;;;9465:18:1;;;9458:38;9513:19;;5441:79:0;9134:404:1;5441:79:0;5556:57;5565:6;302:10;5606:6;5587:16;:25;5556:8;:57::i;:::-;-1:-1:-1;5644:4:0;;5164:492;-1:-1:-1;;;;5164:492:0:o;27003:305::-;8067:6;;-1:-1:-1;;;;;8067:6:0;302:10;8067:22;8059:67;;;;-1:-1:-1;;;8059:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27101:33:0;::::1;27093:85;;;::::0;-1:-1:-1;;;27093:85:0;;9745:2:1;27093:85:0::1;::::0;::::1;9727:21:1::0;9784:2;9764:18;;;9757:30;9823:34;9803:18;;;9796:62;-1:-1:-1;;;9874:18:1;;;9867:37;9921:19;;27093:85:0::1;9543:403:1::0;27093:85:0::1;27189:18;:49:::0;;-1:-1:-1;;;;;;27189:49:0::1;-1:-1:-1::0;;;;;27189:49:0;::::1;::::0;;::::1;::::0;;;27254:46:::1;::::0;::::1;::::0;-1:-1:-1;;27254:46:0::1;27003:305:::0;:::o;21642:271::-;8067:6;;-1:-1:-1;;;;;8067:6:0;302:10;8067:22;8059:67;;;;-1:-1:-1;;;8059:67:0;;;;;;;:::i;:::-;21769:6:::1;21761:4;21741:13;4482:12:::0;;;4394:108;21741:13:::1;:17;::::0;21757:1:::1;21741:17;:::i;:::-;:24;;;;:::i;:::-;21740:35;;;;:::i;:::-;21727:9;:48;;21719:91;;;::::0;-1:-1:-1;;;21719:91:0;;10375:2:1;21719:91:0::1;::::0;::::1;10357:21:1::0;10414:2;10394:18;;;10387:30;10453:32;10433:18;;;10426:60;10503:18;;21719:91:0::1;10173:354:1::0;21719:91:0::1;21836:20;:9:::0;21849:6:::1;21836:20;:::i;:::-;21821:12;:35:::0;;;21872:33:::1;::::0;1636:25:1;;;21872:33:0::1;::::0;1624:2:1;1609:18;21872:33:0::1;;;;;;;;21642:271:::0;:::o;21031:573::-;8067:6;;-1:-1:-1;;;;;8067:6:0;302:10;8067:22;8059:67;;;;-1:-1:-1;;;8059:67:0;;;;;;;:::i;:::-;21159:7:::1;:14;21141:7;:14;:32;21133:75;;;::::0;-1:-1:-1;;;21133:75:0;;7977:2:1;21133:75:0::1;::::0;::::1;7959:21:1::0;8016:2;7996:18;;;7989:30;8055:32;8035:18;;;8028:60;8105:18;;21133:75:0::1;7775:354:1::0;21133:75:0::1;21244:3;21227:7;:14;:20;21219:84;;;::::0;-1:-1:-1;;;21219:84:0;;10734:2:1;21219:84:0::1;::::0;::::1;10716:21:1::0;10773:2;10753:18;;;10746:30;10812:34;10792:18;;;10785:62;-1:-1:-1;;;10863:18:1;;;10856:49;10922:19;;21219:84:0::1;10532:415:1::0;21219:84:0::1;21319:6;21314:283;21335:7;:14;21331:1;:18;21314:283;;;21403:1;21379:21;21389:7;21397:1;21389:10;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;4611:18:0;4584:7;4611:18;;;;;;;;;;;;4510:127;21379:21:::1;:25;21371:47;;;::::0;-1:-1:-1;;;21371:47:0;;11154:2:1;21371:47:0::1;::::0;::::1;11136:21:1::0;11193:1;11173:18;;;11166:29;-1:-1:-1;;;11211:18:1;;;11204:39;11260:18;;21371:47:0::1;10952:332:1::0;21371:47:0::1;21470:15;21441:14;:26;21456:7;21464:1;21456:10;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;21441:26:0::1;-1:-1:-1::0;;;;;21441:26:0::1;;;;;;;;;;;;;:44;21433:71;;;::::0;-1:-1:-1;;;21433:71:0;;11491:2:1;21433:71:0::1;::::0;::::1;11473:21:1::0;11530:2;11510:18;;;11503:30;-1:-1:-1;;;11549:18:1;;;11542:44;11603:18;;21433:71:0::1;11289:338:1::0;21433:71:0::1;21566:7;21574:1;21566:10;;;;;;;;:::i;:::-;;;;;;;21579:6;21566:19;;;;:::i;:::-;21548:37;::::0;:15:::1;:37;:::i;:::-;21519:14;:26;21534:7;21542:1;21534:10;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;21519:26:0::1;-1:-1:-1::0;;;;;21519:26:0::1;;;;;;;;;;;;:66;;;;21351:3;;;;;:::i;:::-;;;;21314:283;;5664:215:::0;302:10;5752:4;5801:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;5801:34:0;;;;;;;;;;5752:4;;5769:80;;5792:7;;5801:47;;5838:10;;5801:47;:::i;:::-;5769:8;:80::i;8154:150::-;8067:6;;-1:-1:-1;;;;;8067:6:0;302:10;8067:22;8059:67;;;;-1:-1:-1;;;8059:67:0;;;;;;;:::i;:::-;8247:6:::1;::::0;8226:40:::1;::::0;8263:1:::1;::::0;-1:-1:-1;;;;;8247:6:0::1;::::0;8226:40:::1;::::0;8263:1;;8226:40:::1;8277:6;:19:::0;;-1:-1:-1;;;;;;8277:19:0::1;::::0;;8154:150::o;20238:153::-;8067:6;;-1:-1:-1;;;;;8067:6:0;302:10;8067:22;8059:67;;;;-1:-1:-1;;;8059:67:0;;;;;;;:::i;:::-;20292:13:::1;:21:::0;;-1:-1:-1;;;;20324:28:0;;;20368:15:::1;::::0;::::1;::::0;20308:5:::1;::::0;20368:15:::1;20238:153::o:0;13468:269::-;8067:6;;-1:-1:-1;;;;;8067:6:0;302:10;8067:22;8059:67;;;;-1:-1:-1;;;8059:67:0;;;;;;;:::i;:::-;13565:4:::1;13560:113;;13604:13;-1:-1:-1::0;;;;;13594:23:0::1;:6;-1:-1:-1::0;;;;;13594:23:0::1;;;13586:75;;;::::0;-1:-1:-1;;;13586:75:0;;11967:2:1;13586:75:0::1;::::0;::::1;11949:21:1::0;12006:2;11986:18;;;11979:30;12045:34;12025:18;;;12018:62;-1:-1:-1;;;12096:18:1;;;12089:37;12143:19;;13586:75:0::1;11765:403:1::0;13586:75:0::1;-1:-1:-1::0;;;;;13683:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;13683:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;13468:269::o;23637:399::-;8067:6;;-1:-1:-1;;;;;8067:6:0;302:10;8067:22;8059:67;;;;-1:-1:-1;;;8059:67:0;;;;;;;:::i;:::-;23761:15:::1;:31:::0;;;23803:15:::1;:31:::0;;;23845:17:::1;:35:::0;;;23865:15;23906:33:::1;23821:13:::0;23779;23906:33:::1;:::i;:::-;:53;;;;:::i;:::-;23891:12;:68:::0;;;23994:1:::1;-1:-1:-1::0;23978:17:0::1;23970:58;;;::::0;-1:-1:-1;;;23970:58:0;;12375:2:1;23970:58:0::1;::::0;::::1;12357:21:1::0;12414:2;12394:18;;;12387:30;12453;12433:18;;;12426:58;12501:18;;23970:58:0::1;12173:352:1::0;19836:360:0;8067:6;;-1:-1:-1;;;;;8067:6:0;302:10;8067:22;8059:67;;;;-1:-1:-1;;;8059:67:0;;;;;;;:::i;:::-;19914:14:::1;::::0;-1:-1:-1;;;19914:14:0;::::1;;;19913:15;19905:51;;;::::0;-1:-1:-1;;;19905:51:0;;12732:2:1;19905:51:0::1;::::0;::::1;12714:21:1::0;12771:2;12751:18;;;12744:30;12810:25;12790:18;;;12783:53;12853:18;;19905:51:0::1;12530:347:1::0;19905:51:0::1;19985:1;19975:6;:11;;19967:50;;;::::0;-1:-1:-1;;;19967:50:0;;13084:2:1;19967:50:0::1;::::0;::::1;13066:21:1::0;13123:2;13103:18;;;13096:30;13162:28;13142:18;;;13135:56;13208:18;;19967:50:0::1;12882:350:1::0;19967:50:0::1;20028:14;:21:::0;;-1:-1:-1;;;;20060:18:0;-1:-1:-1;;;20060:18:0;;;20111:12:::1;20089:19;:34:::0;20134:13:::1;:22:::0;;;20172:16:::1;::::0;::::1;::::0;-1:-1:-1;;20172:16:0::1;19836:360:::0;:::o;26034:381::-;8067:6;;26121:10;;-1:-1:-1;;;;;8067:6:0;302:10;8067:22;8059:67;;;;-1:-1:-1;;;8059:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26152:20:0;::::1;26144:59;;;::::0;-1:-1:-1;;;26144:59:0;;13439:2:1;26144:59:0::1;::::0;::::1;13421:21:1::0;13478:2;13458:18;;;13451:30;13517:28;13497:18;;;13490:56;13563:18;;26144:59:0::1;13237:350:1::0;26144:59:0::1;26241:39;::::0;-1:-1:-1;;;26241:39:0;;26274:4:::1;26241:39;::::0;::::1;1428:51:1::0;26214:24:0::1;::::0;-1:-1:-1;;;;;26241:24:0;::::1;::::0;::::1;::::0;1401:18:1;;26241:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26299:46;::::0;-1:-1:-1;;;26299:46:0;;-1:-1:-1;;;;;13973:32:1;;;26299:46:0::1;::::0;::::1;13955:51:1::0;14022:18;;;14015:34;;;26214:66:0;;-1:-1:-1;26299:23:0;;::::1;::::0;::::1;::::0;13928:18:1;;26299:46:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26361;::::0;;-1:-1:-1;;;;;13973:32:1;;13955:51;;14037:2;14022:18;;14015:34;;;26291:54:0;;-1:-1:-1;26361:46:0::1;::::0;13928:18:1;26361:46:0::1;;;;;;;26133:282;26034:381:::0;;;;:::o;26661:289::-;8067:6;;-1:-1:-1;;;;;8067:6:0;302:10;8067:22;8059:67;;;;-1:-1:-1;;;8059:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26755:31:0;::::1;26747:81;;;::::0;-1:-1:-1;;;26747:81:0;;14512:2:1;26747:81:0::1;::::0;::::1;14494:21:1::0;14551:2;14531:18;;;14524:30;14590:34;14570:18;;;14563:62;-1:-1:-1;;;14641:18:1;;;14634:35;14686:19;;26747:81:0::1;14310:401:1::0;26747:81:0::1;26839:16;:45:::0;;-1:-1:-1;;;;;;26839:45:0::1;-1:-1:-1::0;;;;;26839:45:0;::::1;::::0;;::::1;::::0;;;26900:42:::1;::::0;::::1;::::0;-1:-1:-1;;26900:42:0::1;26661:289:::0;:::o;4181:104::-;4237:13;4270:7;4263:14;;;;;:::i;14227:244::-;8067:6;;-1:-1:-1;;;;;8067:6:0;302:10;8067:22;8059:67;;;;-1:-1:-1;;;8059:67:0;;;;;;;:::i;:::-;14336:13:::1;-1:-1:-1::0;;;;;14328:21:0::1;:4;-1:-1:-1::0;;;;;14328:21:0::1;;;14320:91;;;::::0;-1:-1:-1;;;14320:91:0;;14918:2:1;14320:91:0::1;::::0;::::1;14900:21:1::0;14957:2;14937:18;;;14930:30;14996:34;14976:18;;;14969:62;15067:27;15047:18;;;15040:55;15112:19;;14320:91:0::1;14716:421:1::0;14320:91:0::1;14422:41;14451:4;14457:5;14422:28;:41::i;:::-;14227:244:::0;;:::o;5887:413::-;302:10;5980:4;6024:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;6024:34:0;;;;;;;;;;6077:35;;;;6069:85;;;;-1:-1:-1;;;6069:85:0;;15344:2:1;6069:85:0;;;15326:21:1;15383:2;15363:18;;;15356:30;15422:34;15402:18;;;15395:62;-1:-1:-1;;;15473:18:1;;;15466:35;15518:19;;6069:85:0;15142:401:1;6069:85:0;6190:67;302:10;6213:7;6241:15;6222:16;:34;6190:8;:67::i;:::-;-1:-1:-1;6288:4:0;;5887:413;-1:-1:-1;;;5887:413:0:o;4645:175::-;4731:4;4748:42;302:10;4772:9;4783:6;4748:9;:42::i;14009:182::-;8067:6;;-1:-1:-1;;;;;8067:6:0;302:10;8067:22;8059:67;;;;-1:-1:-1;;;8059:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;14094:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;14094:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;14149:34;;1212:41:1;;;14149:34:0::1;::::0;1185:18:1;14149:34:0::1;;;;;;;14009:182:::0;;:::o;24073:410::-;8067:6;;-1:-1:-1;;;;;8067:6:0;302:10;8067:22;8059:67;;;;-1:-1:-1;;;8059:67:0;;;;;;;:::i;:::-;24198:16:::1;:32:::0;;;24241:16:::1;:32:::0;;;24284:18:::1;:36:::0;;;24305:15;24347:35:::1;24260:13:::0;24217;24347:35:::1;:::i;:::-;:56;;;;:::i;:::-;24331:13;:72:::0;;;-1:-1:-1;24422:19:0::1;24414:61;;;::::0;-1:-1:-1;;;24414:61:0;;15750:2:1;24414:61:0::1;::::0;::::1;15732:21:1::0;15789:2;15769:18;;;15762:30;15828:31;15808:18;;;15801:59;15877:18;;24414:61:0::1;15548:353:1::0;22273:286:0;8067:6;;-1:-1:-1;;;;;8067:6:0;302:10;8067:22;8059:67;;;;-1:-1:-1;;;8059:67:0;;;;;;;:::i;:::-;22403:6:::1;22395:4;22375:13;4482:12:::0;;;4394:108;22375:13:::1;:17;::::0;22391:1:::1;22375:17;:::i;:::-;:24;;;;:::i;:::-;22374:35;;;;:::i;:::-;22361:9;:48;;22353:94;;;::::0;-1:-1:-1;;;22353:94:0;;16108:2:1;22353:94:0::1;::::0;::::1;16090:21:1::0;16147:2;16127:18;;;16120:30;16186:34;16166:18;;;16159:62;-1:-1:-1;;;16237:18:1;;;16230:31;16278:19;;22353:94:0::1;15906:397:1::0;22353:94:0::1;22476:20;:9:::0;22489:6:::1;22476:20;:::i;:::-;22458:15;:38:::0;;;22512:39:::1;::::0;1636:25:1;;;22512:39:0::1;::::0;1624:2:1;1609:18;22512:39:0::1;1490:177:1::0;20577:173:0;8067:6;;-1:-1:-1;;;;;8067:6:0;302:10;8067:22;8059:67;;;;-1:-1:-1;;;8059:67:0;;;;;;;:::i;:::-;20659:6:::1;20654:89;20675:5;:12;20671:1;:16;20654:89;;;20727:4;20709:5;:15;20715:5;20721:1;20715:8;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;20709:15:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;20709:15:0;:22;;-1:-1:-1;;20709:22:0::1;::::0;::::1;;::::0;;;::::1;::::0;;20689:3;::::1;::::0;::::1;:::i;:::-;;;;20654:89;;22667:415:::0;8067:6;;-1:-1:-1;;;;;8067:6:0;302:10;8067:22;8059:67;;;;-1:-1:-1;;;8059:67:0;;;;;;;:::i;:::-;22801:6:::1;22791;22771:13;4482:12:::0;;;4394:108;22771:13:::1;:17;::::0;22787:1:::1;22771:17;:::i;:::-;:26;;;;:::i;:::-;22770:37;;;;:::i;:::-;22757:9;:50;;22749:103;;;::::0;-1:-1:-1;;;22749:103:0;;16510:2:1;22749:103:0::1;::::0;::::1;16492:21:1::0;16549:2;16529:18;;;16522:30;16588:34;16568:18;;;16561:62;-1:-1:-1;;;16639:18:1;;;16632:38;16687:19;;22749:103:0::1;16308:404:1::0;22749:103:0::1;22913:6;22905:4;22885:13;4482:12:::0;;;4394:108;22885:13:::1;:17;::::0;22901:1:::1;22885:17;:::i;:::-;:24;;;;:::i;:::-;22884:35;;;;:::i;:::-;22871:9;:48;;22863:100;;;::::0;-1:-1:-1;;;22863:100:0;;16919:2:1;22863:100:0::1;::::0;::::1;16901:21:1::0;16958:2;16938:18;;;16931:30;16997:34;16977:18;;;16970:62;-1:-1:-1;;;17048:18:1;;;17041:37;17095:19;;22863:100:0::1;16717:403:1::0;22863:100:0::1;22994:20;:9:::0;23007:6:::1;22994:20;:::i;:::-;22973:18;:41:::0;;;23030:45:::1;::::0;1636:25:1;;;23030:45:0::1;::::0;1624:2:1;1609:18;23030:45:0::1;1490:177:1::0;21956:276:0;8067:6;;-1:-1:-1;;;;;8067:6:0;302:10;8067:22;8059:67;;;;-1:-1:-1;;;8059:67:0;;;;;;;:::i;:::-;22084:6:::1;22076:4;22056:13;4482:12:::0;;;4394:108;22056:13:::1;:17;::::0;22072:1:::1;22056:17;:::i;:::-;:24;;;;:::i;:::-;22055:35;;;;:::i;:::-;22042:9;:48;;22034:92;;;::::0;-1:-1:-1;;;22034:92:0;;17327:2:1;22034:92:0::1;::::0;::::1;17309:21:1::0;17366:2;17346:18;;;17339:30;17405:33;17385:18;;;17378:61;17456:18;;22034:92:0::1;17125:355:1::0;22034:92:0::1;22153:20;:9:::0;22166:6:::1;22153:20;:::i;:::-;22137:13;:36:::0;;;22189:35:::1;::::0;1636:25:1;;;22189:35:0::1;::::0;1624:2:1;1609:18;22189:35:0::1;1490:177:1::0;20434:98:0;8067:6;;-1:-1:-1;;;;;8067:6:0;302:10;8067:22;8059:67;;;;-1:-1:-1;;;8059:67:0;;;;;;;:::i;:::-;20496:20:::1;:28:::0;;-1:-1:-1;;;;20496:28:0::1;::::0;;20434:98::o;20789:177::-;8067:6;;-1:-1:-1;;;;;8067:6:0;302:10;8067:22;8059:67;;;;-1:-1:-1;;;8059:67:0;;;;;;;:::i;:::-;20874:6:::1;20869:90;20890:5;:12;20886:1;:16;20869:90;;;20942:5;20924;:15;20930:5;20936:1;20930:8;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;20924:15:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;20924:15:0;:23;;-1:-1:-1;;20924:23:0::1;::::0;::::1;;::::0;;;::::1;::::0;;20904:3;::::1;::::0;::::1;:::i;:::-;;;;20869:90;;8312:244:::0;8067:6;;-1:-1:-1;;;;;8067:6:0;302:10;8067:22;8059:67;;;;-1:-1:-1;;;8059:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;8401:22:0;::::1;8393:73;;;::::0;-1:-1:-1;;;8393:73:0;;17687:2:1;8393:73:0::1;::::0;::::1;17669:21:1::0;17726:2;17706:18;;;17699:30;17765:34;17745:18;;;17738:62;-1:-1:-1;;;17816:18:1;;;17809:36;17862:19;;8393:73:0::1;17485:402:1::0;8393:73:0::1;8503:6;::::0;8482:38:::1;::::0;-1:-1:-1;;;;;8482:38:0;;::::1;::::0;8503:6:::1;::::0;8482:38:::1;::::0;8503:6:::1;::::0;8482:38:::1;8531:6;:17:::0;;-1:-1:-1;;;;;;8531:17:0::1;-1:-1:-1::0;;;;;8531:17:0;;;::::1;::::0;;;::::1;::::0;;8312:244::o;26450:160::-;8067:6;;-1:-1:-1;;;;;8067:6:0;302:10;8067:22;8059:67;;;;-1:-1:-1;;;8059:67:0;;;;;;;:::i;:::-;26544:58:::1;::::0;26508:12:::1;::::0;26552:10:::1;::::0;26576:21:::1;::::0;26508:12;26544:58;26508:12;26544:58;26576:21;26552:10;26544:58:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;26450:160:0:o;7229:380::-;-1:-1:-1;;;;;7365:19:0;;7357:68;;;;-1:-1:-1;;;7357:68:0;;18304:2:1;7357:68:0;;;18286:21:1;18343:2;18323:18;;;18316:30;18382:34;18362:18;;;18355:62;-1:-1:-1;;;18433:18:1;;;18426:34;18477:19;;7357:68:0;18102:400:1;7357:68:0;-1:-1:-1;;;;;7444:21:0;;7436:68;;;;-1:-1:-1;;;7436:68:0;;18709:2:1;7436:68:0;;;18691:21:1;18748:2;18728:18;;;18721:30;18787:34;18767:18;;;18760:62;-1:-1:-1;;;18838:18:1;;;18831:32;18880:19;;7436:68:0;18507:398:1;7436:68:0;-1:-1:-1;;;;;7517:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;7569:32;;1636:25:1;;;7569:32:0;;1609:18:1;7569:32:0;;;;;;;7229:380;;;:::o;15674:4087::-;-1:-1:-1;;;;;15772:18:0;;15764:68;;;;-1:-1:-1;;;15764:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;15851:16:0;;15843:64;;;;-1:-1:-1;;;15843:64:0;;;;;;;:::i;:::-;15935:1;15926:6;:10;15918:52;;;;-1:-1:-1;;;15918:52:0;;19922:2:1;15918:52:0;;;19904:21:1;19961:2;19941:18;;;19934:30;20000:31;19980:18;;;19973:59;20049:18;;15918:52:0;19720:353:1;15918:52:0;-1:-1:-1;;;;;15989:20:0;;;;;;:14;:20;;;;;;16012:15;-1:-1:-1;15981:62:0;;;;-1:-1:-1;;;15981:62:0;;20280:2:1;15981:62:0;;;20262:21:1;20319:2;20299:18;;;20292:30;-1:-1:-1;;;20338:18:1;;;20331:41;20389:18;;15981:62:0;20078:335:1;15981:62:0;-1:-1:-1;;;;;16063:11:0;;;;;;:5;:11;;;;;;;;16062:12;16054:31;;;;-1:-1:-1;;;16054:31:0;;20620:2:1;16054:31:0;;;20602:21:1;20659:1;20639:18;;;20632:29;-1:-1:-1;;;20677:18:1;;;20670:36;20723:18;;16054:31:0;20418:329:1;16054:31:0;16151:13;;-1:-1:-1;;;16151:13:0;;;;16147:1582;;;8005:6;;-1:-1:-1;;;;;16185:15:0;;;8005:6;;16185:15;;;;:32;;-1:-1:-1;8005:6:0;;-1:-1:-1;;;;;16204:13:0;;;8005:6;;16204:13;;16185:32;:52;;;;-1:-1:-1;;;;;;16221:16:0;;;;16185:52;:77;;;;-1:-1:-1;;;;;;16241:21:0;;16255:6;16241:21;;16185:77;16181:1537;;;16288:14;;-1:-1:-1;;;16288:14:0;;;;16283:164;;16351:15;-1:-1:-1;;;;;16335:32:0;:4;-1:-1:-1;;;;;16335:32:0;;;:66;;;;;16387:13;-1:-1:-1;;;;;16371:30:0;:4;-1:-1:-1;;;;;16371:30:0;;;16335:66;16327:100;;;;-1:-1:-1;;;16327:100:0;;20954:2:1;16327:100:0;;;20936:21:1;20993:2;20973:18;;;20966:30;-1:-1:-1;;;21012:18:1;;;21005:51;21073:18;;16327:100:0;20752:345:1;16327:100:0;16471:20;;-1:-1:-1;;;16471:20:0;;;;16467:519;;;16534:15;-1:-1:-1;;;;;16520:30:0;:2;-1:-1:-1;;;;;16520:30:0;;;:62;;;;;16568:13;-1:-1:-1;;;;;16554:28:0;:2;-1:-1:-1;;;;;16554:28:0;;;16520:62;16516:451;;;16661:16;16676:1;16661:12;:16;:::i;:::-;16648:9;16619:39;;;;:28;:39;;;;;;:58;:113;;;;-1:-1:-1;16716:16:0;16731:1;16716:12;:16;:::i;:::-;-1:-1:-1;;;;;16681:32:0;;;;;;:28;:32;;;;;;:51;16619:113;16611:177;;;;-1:-1:-1;;;16611:177:0;;21434:2:1;16611:177:0;;;21416:21:1;21473:2;21453:18;;;21446:30;21512:34;21492:18;;;21485:62;-1:-1:-1;;;21563:18:1;;;21556:49;21622:19;;16611:177:0;21232:415:1;16611:177:0;16844:9;16815:39;;;;:28;:39;;;;;;16857:12;16815:54;;;;-1:-1:-1;;;;;16896:32:0;;;;;;:47;16516:451;-1:-1:-1;;;;;17010:31:0;;;;;;:25;:31;;;;;;;;:71;;;;-1:-1:-1;;;;;;17046:35:0;;;;;;:31;:35;;;;;;;;17045:36;17010:71;17006:697;;;17124:12;;17114:6;:22;;17106:74;;;;-1:-1:-1;;;17106:74:0;;21854:2:1;17106:74:0;;;21836:21:1;21893:2;21873:18;;;21866:30;21932:34;21912:18;;;21905:62;-1:-1:-1;;;21983:18:1;;;21976:37;22030:19;;17106:74:0;21652:403:1;17106:74:0;17237:15;;-1:-1:-1;;;;;4611:18:0;;4584:7;4611:18;;;;;;;;;;;17211:22;;:6;:22;:::i;:::-;:41;;17203:72;;;;-1:-1:-1;;;17203:72:0;;22262:2:1;17203:72:0;;;22244:21:1;22301:2;22281:18;;;22274:30;-1:-1:-1;;;22320:18:1;;;22313:48;22378:18;;17203:72:0;22060:342:1;17203:72:0;17006:697;;;-1:-1:-1;;;;;17305:29:0;;;;;;:25;:29;;;;;;;;:71;;;;-1:-1:-1;;;;;;17339:37:0;;;;;;:31;:37;;;;;;;;17338:38;17305:71;17301:402;;;17419:13;;17409:6;:23;;17401:77;;;;-1:-1:-1;;;17401:77:0;;22609:2:1;17401:77:0;;;22591:21:1;22648:2;22628:18;;;22621:30;22687:34;22667:18;;;22660:62;-1:-1:-1;;;22738:18:1;;;22731:39;22787:19;;17401:77:0;22407:405:1;17301:402:0;-1:-1:-1;;;;;17509:35:0;;;;;;:31;:35;;;;;;;;17508:36;:78;;;;-1:-1:-1;;;;;;17549:37:0;;;;;;:31;:37;;;;;;;;17548:38;17508:78;17504:199;;;17645:15;;-1:-1:-1;;;;;4611:18:0;;4584:7;4611:18;;;;;;;;;;;17619:22;;:6;:22;:::i;:::-;:41;;17611:72;;;;-1:-1:-1;;;17611:72:0;;22262:2:1;17611:72:0;;;22244:21:1;22301:2;22281:18;;;22274:30;-1:-1:-1;;;22320:18:1;;;22313:48;22378:18;;17611:72:0;22060:342:1;17611:72:0;17790:4;17741:28;4611:18;;;;;;;;;;;17846;;17822:42;;;;;;;17989:22;;-1:-1:-1;18000:11:0;;-1:-1:-1;;;18000:11:0;;;;17989:22;:58;;;;-1:-1:-1;;;;;;18016:31:0;;;;;;:25;:31;;;;;;;;18015:32;17989:58;:88;;;;-1:-1:-1;;;;;;18052:25:0;;;;;;:19;:25;;;;;;;;18051:26;17989:88;:116;;;;-1:-1:-1;;;;;;18082:23:0;;;;;;:19;:23;;;;;;;;18081:24;17989:116;17985:159;;;18122:10;:8;:10::i;:::-;-1:-1:-1;;;;;18241:25:0;;;;;;:19;:25;;;;;;;;18240:26;:54;;;;-1:-1:-1;;;;;;18271:23:0;;;;;;:19;:23;;;;;;;;18270:24;18240:54;18236:1474;;;18311:12;18342:21;18424:13;;18401:19;;18386:12;:34;;;;:::i;:::-;:51;;:86;;;;-1:-1:-1;;;;;;18441:31:0;;;;;;:25;:31;;;;;;;;18386:86;18382:1153;;;18523:3;18509:11;:6;18518:2;18509:11;:::i;:::-;:17;;;;:::i;:::-;18567:16;;18493:33;;-1:-1:-1;18545:54:0;;18561:4;;-1:-1:-1;;;;;18567:16:0;18493:33;18545:15;:54::i;:::-;18382:1153;;;-1:-1:-1;;;;;18625:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;18675:1;18660:12;;:16;18625:51;18621:914;;;18738:13;;18716:19;;18701:34;;:12;:34;:::i;:::-;:50;;;;:::i;:::-;18755:1;18701:55;18697:162;;;-1:-1:-1;;;;;18781:9:0;;;;;;:5;:9;;;;;;;;;:16;;-1:-1:-1;;18781:16:0;18793:4;18781:16;;;18825:14;;1428:51:1;;;18825:14:0;;1401:18:1;18825:14:0;;;;;;;18697:162;18905:3;18890:12;;18881:6;:21;;;;:::i;:::-;:27;;;;:::i;:::-;18874:34;;18971:12;;18953:15;;18946:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;18924:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;19049:12:0;;19031:15;;19024:22;;:4;:22;:::i;:::-;:37;;;;:::i;:::-;19002:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;19131:12:0;;19111:17;;19104:24;;:4;:24;:::i;:::-;:39;;;;:::i;:::-;19080:20;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;18621:914:0;;-1:-1:-1;18621:914:0;;-1:-1:-1;;;;;19169:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;19218:1;19202:13;;:17;19169:50;19165:370;;;19272:3;19256:13;;19247:6;:22;;;;:::i;:::-;:28;;;;:::i;:::-;19240:35;;19342:13;;19323:16;;19316:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;19294:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;19422:13:0;;19403:16;;19396:23;;:4;:23;:::i;:::-;:39;;;;:::i;:::-;19374:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;19506:13:0;;19485:18;;19478:25;;:4;:25;:::i;:::-;:41;;;;:::i;:::-;19454:20;;:65;;;;;;;:::i;:::-;;;;-1:-1:-1;;19165:370:0;19555:8;;19551:95;;19588:42;19604:4;19618;19625;19588:15;:42::i;:::-;19678:20;19685:13;19678:4;:20;:::i;:::-;19668:30;;;;:::i;:::-;;;18296:1414;;18236:1474;19720:33;19736:4;19742:2;19746:6;19720:15;:33::i;:::-;15753:4008;;15674:4087;;;:::o;14479:236::-;-1:-1:-1;;;;;14562:31:0;;;;;;:25;:31;;;;;:39;;-1:-1:-1;;14562:39:0;;;;;;;14612;14562:31;:39;14612:26;:39::i;:::-;14667:40;;;;;;-1:-1:-1;;;;;14667:40:0;;;;;;;;14479:236;;:::o;24518:1472::-;24601:4;24557:23;4611:18;;;;;;;;;;;24557:50;;24618:25;24688:20;;24667:18;;24646;;:39;;;;:::i;:::-;:62;;;;:::i;:::-;24618:90;-1:-1:-1;24733:20:0;;;:46;;-1:-1:-1;24757:22:0;;24733:46;24729:85;;;24796:7;;24518:1472::o;24729:85::-;24848:18;;:23;;24869:2;24848:23;:::i;:::-;24830:15;:41;24826:115;;;24906:18;;:23;;24927:2;24906:23;:::i;:::-;24888:41;;24826:115;24953:12;24976:23;25061:1;25041:17;25020:18;;25002:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;24976:86;-1:-1:-1;25083:51:0;25100:33;24976:86;25100:15;:33;:::i;:::-;25083:16;:51::i;:::-;25338:18;;25177:21;;;;25156:18;;25338:22;;25359:1;;25338:22;:::i;:::-;25317:44;;:17;:44;:::i;:::-;25295:18;;25282:31;;:10;:31;:::i;:::-;:80;;;;:::i;:::-;25256:106;;25373:25;25480:1;25459:18;;:22;;;;:::i;:::-;25438:44;;:17;:44;:::i;:::-;25414:20;;25401:33;;:10;:33;:::i;:::-;:82;;;;:::i;:::-;25373:110;-1:-1:-1;25515:35:0;25373:110;25515:15;:35;:::i;:::-;25496:54;;;;:::i;:::-;25596:1;25575:18;:22;;;25608:18;:22;;;25641:20;:24;25496:54;-1:-1:-1;25690:19:0;;;;;:42;;;25731:1;25713:15;:19;25690:42;25686:121;;;25749:46;25762:15;25779;25749:12;:46::i;:::-;25840:18;;25832:62;;-1:-1:-1;;;;;25840:18:0;;;;25872:17;;25832:62;;;;25872:17;25840:18;25832:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;25926:16:0;;25918:64;;25819:75;;-1:-1:-1;;;;;;25926:16:0;;25956:21;;25918:64;;;;25956:21;25926:16;25918:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;24518:1472:0:o;6308:614::-;-1:-1:-1;;;;;6448:20:0;;6440:70;;;;-1:-1:-1;;;6440:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6529:23:0;;6521:71;;;;-1:-1:-1;;;6521:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6629:17:0;;6605:21;6629:17;;;;;;;;;;;6665:23;;;;6657:74;;;;-1:-1:-1;;;6657:74:0;;23019:2:1;6657:74:0;;;23001:21:1;23058:2;23038:18;;;23031:30;23097:34;23077:18;;;23070:62;-1:-1:-1;;;23148:18:1;;;23141:36;23194:19;;6657:74:0;22817:402:1;6657:74:0;-1:-1:-1;;;;;6767:17:0;;;:9;:17;;;;;;;;;;;6787:22;;;6767:42;;6831:20;;;;;;;;:30;;6803:6;;6767:9;6831:30;;6803:6;;6831:30;:::i;:::-;;;;;;;;6896:9;-1:-1:-1;;;;;6879:35:0;6888:6;-1:-1:-1;;;;;6879:35:0;;6907:6;6879:35;;;;1636:25:1;;1624:2;1609:18;;1490:177;6879:35:0;;;;;;;;6429:493;6308:614;;;:::o;13745:207::-;-1:-1:-1;;;;;13833:39:0;;;;;;:31;:39;;;;;;;;;:52;;-1:-1:-1;;13833:52:0;;;;;;;;;;13901:43;;23392:51:1;;;23459:18;;;23452:50;13901:43:0;;23365:18:1;13901:43:0;;;;;;;13745:207;;:::o;15171:471::-;15261:16;;;15275:1;15261:16;;;;;;;;15237:21;;15261:16;;;;;;;;;;-1:-1:-1;15261:16:0;15237:40;;15306:4;15288;15293:1;15288:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;15288:23:0;;;-1:-1:-1;;;;;15288:23:0;;;;;15332:15;-1:-1:-1;;;;;15332:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15322:4;15327:1;15322:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;15322:32:0;;;-1:-1:-1;;;;;15322:32:0;;;;;15365:62;15382:4;15397:15;15415:11;15365:8;:62::i;:::-;15438:196;;-1:-1:-1;;;15438:196:0;;-1:-1:-1;;;;;15438:15:0;:66;;;;:196;;15519:11;;15545:1;;15561:4;;15588;;15608:15;;15438:196;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15226:416;15171:471;:::o;14761:368::-;14842:62;14859:4;14874:15;14892:11;14842:8;:62::i;:::-;14915:206;;-1:-1:-1;;;14915:206:0;;14987:4;14915:206;;;25095:34:1;25145:18;;;25138:34;;;15033:1:0;25188:18:1;;;25181:34;;;25231:18;;;25224:34;15073:6:0;25274:19:1;;;25267:44;15095:15:0;25327:19:1;;;25320:35;14915:15:0;-1:-1:-1;;;;;14915:31:0;;;;14954:9;;25029:19:1;;14915:206:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;14:597:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;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;616:131::-;-1:-1:-1;;;;;691:31:1;;681:42;;671:70;;737:1;734;727:12;671:70;616:131;:::o;752:315::-;820:6;828;881:2;869:9;860:7;856:23;852:32;849:52;;;897:1;894;887:12;849:52;936:9;923:23;955:31;980:5;955:31;:::i;:::-;1005:5;1057:2;1042:18;;;;1029:32;;-1:-1:-1;;;752:315:1:o;1672:127::-;1733:10;1728:3;1724:20;1721:1;1714:31;1764:4;1761:1;1754:15;1788:4;1785:1;1778:15;1804:275;1875:2;1869:9;1940:2;1921:13;;-1:-1:-1;;1917:27:1;1905:40;;1975:18;1960:34;;1996:22;;;1957:62;1954:88;;;2022:18;;:::i;:::-;2058:2;2051:22;1804:275;;-1:-1:-1;1804:275:1:o;2084:183::-;2144:4;2177:18;2169:6;2166:30;2163:56;;;2199:18;;:::i;:::-;-1:-1:-1;2244:1:1;2240:14;2256:4;2236:25;;2084:183::o;2272:737::-;2326:5;2379:3;2372:4;2364:6;2360:17;2356:27;2346:55;;2397:1;2394;2387:12;2346:55;2433:6;2420:20;2459:4;2483:60;2499:43;2539:2;2499:43;:::i;:::-;2483:60;:::i;:::-;2577:15;;;2663:1;2659:10;;;;2647:23;;2643:32;;;2608:12;;;;2687:15;;;2684:35;;;2715:1;2712;2705:12;2684:35;2751:2;2743:6;2739:15;2763:217;2779:6;2774:3;2771:15;2763:217;;;2859:3;2846:17;2876:31;2901:5;2876:31;:::i;:::-;2920:18;;2958:12;;;;2796;;2763:217;;;-1:-1:-1;2998:5:1;2272:737;-1:-1:-1;;;;;;2272:737:1:o;3014:1138::-;3132:6;3140;3193:2;3181:9;3172:7;3168:23;3164:32;3161:52;;;3209:1;3206;3199:12;3161:52;3249:9;3236:23;3278:18;3319:2;3311:6;3308:14;3305:34;;;3335:1;3332;3325:12;3305:34;3358:61;3411:7;3402:6;3391:9;3387:22;3358:61;:::i;:::-;3348:71;;3438:2;3428:12;;3493:2;3482:9;3478:18;3465:32;3522:2;3512:8;3509:16;3506:36;;;3538:1;3535;3528:12;3506:36;3561:24;;;-1:-1:-1;3616:4:1;3608:13;;3604:27;-1:-1:-1;3594:55:1;;3645:1;3642;3635:12;3594:55;3681:2;3668:16;3704:60;3720:43;3760:2;3720:43;:::i;3704:60::-;3798:15;;;3880:1;3876:10;;;;3868:19;;3864:28;;;3829:12;;;;3904:19;;;3901:39;;;3936:1;3933;3926:12;3901:39;3960:11;;;;3980:142;3996:6;3991:3;3988:15;3980:142;;;4062:17;;4050:30;;4013:12;;;;4100;;;;3980:142;;;4141:5;4131:15;;;;;;;3014:1138;;;;;:::o;4157:456::-;4234:6;4242;4250;4303:2;4291:9;4282:7;4278:23;4274:32;4271:52;;;4319:1;4316;4309:12;4271:52;4358:9;4345:23;4377:31;4402:5;4377:31;:::i;:::-;4427:5;-1:-1:-1;4484:2:1;4469:18;;4456:32;4497:33;4456:32;4497:33;:::i;:::-;4157:456;;4549:7;;-1:-1:-1;;;4603:2:1;4588:18;;;;4575:32;;4157:456::o;4618:247::-;4677:6;4730:2;4718:9;4709:7;4705:23;4701:32;4698:52;;;4746:1;4743;4736:12;4698:52;4785:9;4772:23;4804:31;4829:5;4804:31;:::i;:::-;4854:5;4618:247;-1:-1:-1;;;4618:247:1:o;4870:180::-;4929:6;4982:2;4970:9;4961:7;4957:23;4953:32;4950:52;;;4998:1;4995;4988:12;4950:52;-1:-1:-1;5021:23:1;;4870:180;-1:-1:-1;4870:180:1:o;5452:118::-;5538:5;5531:13;5524:21;5517:5;5514:32;5504:60;;5560:1;5557;5550:12;5575:382;5640:6;5648;5701:2;5689:9;5680:7;5676:23;5672:32;5669:52;;;5717:1;5714;5707:12;5669:52;5756:9;5743:23;5775:31;5800:5;5775:31;:::i;:::-;5825:5;-1:-1:-1;5882:2:1;5867:18;;5854:32;5895:30;5854:32;5895:30;:::i;:::-;5944:7;5934:17;;;5575:382;;;;;:::o;5962:316::-;6039:6;6047;6055;6108:2;6096:9;6087:7;6083:23;6079:32;6076:52;;;6124:1;6121;6114:12;6076:52;-1:-1:-1;;6147:23:1;;;6217:2;6202:18;;6189:32;;-1:-1:-1;6268:2:1;6253:18;;;6240:32;;5962:316;-1:-1:-1;5962:316:1:o;6283:388::-;6351:6;6359;6412:2;6400:9;6391:7;6387:23;6383:32;6380:52;;;6428:1;6425;6418:12;6380:52;6467:9;6454:23;6486:31;6511:5;6486:31;:::i;:::-;6536:5;-1:-1:-1;6593:2:1;6578:18;;6565:32;6606:33;6565:32;6606:33;:::i;6676:348::-;6760:6;6813:2;6801:9;6792:7;6788:23;6784:32;6781:52;;;6829:1;6826;6819:12;6781:52;6869:9;6856:23;6902:18;6894:6;6891:30;6888:50;;;6934:1;6931;6924:12;6888:50;6957:61;7010:7;7001:6;6990:9;6986:22;6957:61;:::i;:::-;6947:71;6676:348;-1:-1:-1;;;;6676:348:1:o;7029:380::-;7108:1;7104:12;;;;7151;;;7172:61;;7226:4;7218:6;7214:17;7204:27;;7172:61;7279:2;7271:6;7268:14;7248:18;7245:38;7242:161;;;7325:10;7320:3;7316:20;7313:1;7306:31;7360:4;7357:1;7350:15;7388:4;7385:1;7378:15;7242:161;;7029:380;;;:::o;7414:356::-;7616:2;7598:21;;;7635:18;;;7628:30;7694:34;7689:2;7674:18;;7667:62;7761:2;7746:18;;7414:356::o;8557:127::-;8618:10;8613:3;8609:20;8606:1;8599:31;8649:4;8646:1;8639:15;8673:4;8670:1;8663:15;8689:127;8750:10;8745:3;8741:20;8738:1;8731:31;8781:4;8778:1;8771:15;8805:4;8802:1;8795:15;8821:168;8861:7;8927:1;8923;8919:6;8915:14;8912:1;8909:21;8904:1;8897:9;8890:17;8886:45;8883:71;;;8934:18;;:::i;:::-;-1:-1:-1;8974:9:1;;8821:168::o;8994:135::-;9033:3;-1:-1:-1;;9054:17:1;;9051:43;;;9074:18;;:::i;:::-;-1:-1:-1;9121:1:1;9110:13;;8994:135::o;9951:217::-;9991:1;10017;10007:132;;10061:10;10056:3;10052:20;10049:1;10042:31;10096:4;10093:1;10086:15;10124:4;10121:1;10114:15;10007:132;-1:-1:-1;10153:9:1;;9951:217::o;11632:128::-;11672:3;11703:1;11699:6;11696:1;11693:13;11690:39;;;11709:18;;:::i;:::-;-1:-1:-1;11745:9:1;;11632:128::o;13592:184::-;13662:6;13715:2;13703:9;13694:7;13690:23;13686:32;13683:52;;;13731:1;13728;13721:12;13683:52;-1:-1:-1;13754:16:1;;13592:184;-1:-1:-1;13592:184:1:o;14060:245::-;14127:6;14180:2;14168:9;14159:7;14155:23;14151:32;14148:52;;;14196:1;14193;14186:12;14148:52;14228:9;14222:16;14247:28;14269:5;14247:28;:::i;18910:401::-;19112:2;19094:21;;;19151:2;19131:18;;;19124:30;19190:34;19185:2;19170:18;;19163:62;-1:-1:-1;;;19256:2:1;19241:18;;19234:35;19301:3;19286:19;;18910:401::o;19316:399::-;19518:2;19500:21;;;19557:2;19537:18;;;19530:30;19596:34;19591:2;19576:18;;19569:62;-1:-1:-1;;;19662:2:1;19647:18;;19640:33;19705:3;19690:19;;19316:399::o;21102:125::-;21142:4;21170:1;21167;21164:8;21161:34;;;21175:18;;:::i;:::-;-1:-1:-1;21212:9:1;;21102:125::o;23513:251::-;23583:6;23636:2;23624:9;23615:7;23611:23;23607:32;23604:52;;;23652:1;23649;23642:12;23604:52;23684:9;23678:16;23703:31;23728:5;23703:31;:::i;23769:980::-;24031:4;24079:3;24068:9;24064:19;24110:6;24099:9;24092:25;24136:2;24174:6;24169:2;24158:9;24154:18;24147:34;24217:3;24212:2;24201:9;24197:18;24190:31;24241:6;24276;24270:13;24307:6;24299;24292:22;24345:3;24334:9;24330:19;24323:26;;24384:2;24376:6;24372:15;24358:29;;24405:1;24415:195;24429:6;24426:1;24423:13;24415:195;;;24494:13;;-1:-1:-1;;;;;24490:39:1;24478:52;;24585:15;;;;24550:12;;;;24526:1;24444:9;24415:195;;;-1:-1:-1;;;;;;;24666:32:1;;;;24661:2;24646:18;;24639:60;-1:-1:-1;;;24730:3:1;24715:19;24708:35;24627:3;23769:980;-1:-1:-1;;;23769:980:1:o;25366:306::-;25454:6;25462;25470;25523:2;25511:9;25502:7;25498:23;25494:32;25491:52;;;25539:1;25536;25529:12;25491:52;25568:9;25562:16;25552:26;;25618:2;25607:9;25603:18;25597:25;25587:35;;25662:2;25651:9;25647:18;25641:25;25631:35;;25366:306;;;;;:::o

Swarm Source

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