ETH Price: $2,580.52 (-2.54%)

Token

Lance Inu (LINU)
 

Overview

Max Total Supply

10,000,000,000,000 LINU

Holders

149 (0.00%)

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
22,455,084,054.53350469746545853 LINU

Value
$0.00
0x9327fe4d065d01c412ebb93acc413f495db50000
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

A utility token, an in app currency for the Lance Inu marketplace platform.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
LanceInu

Compiler Version
v0.8.16+commit.07a7930e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

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

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 swapExactETHForTokensSupportingFeeOnTransferTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable;
    function addLiquidityETH(address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline) external payable returns (uint256 amountToken, uint256 amountETH, uint256 liquidity);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function removeLiquidityETH(address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline) external returns (uint amountToken, uint amountETH);
}

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

contract LanceInu is ERC20, Ownable {

    uint256 public maxBuyAmount;
    uint256 public maxSellAmount;
    uint256 public maxWallet;

    IDexRouter public dexRouter;
    address public lpPair;

    bool private swapping;
    uint256 public swapTokensAtAmount;

    address public marketingAddress;
    address public devAddress;
    address public treasuryAddress;

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

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

    uint256 public buyTotalFees;
    uint256 public buyMarketingFee;
    uint256 public buyLiquidityFee;
    uint256 public buyTreasuryFee;
    uint256 public buyDevFee;

    uint256 public sellTotalFees;
    uint256 public sellMarketingFee;
    uint256 public sellLiquidityFee;
    uint256 public sellTreasuryFee;
    uint256 public sellDevFee;

    uint256 public constant FEE_DIVISOR = 10000;

    uint256 public tokensForMarketing;
    uint256 public tokensForLiquidity;
    uint256 public tokensForDev;
    uint256 public tokensForTreasury;
    
    /******************/

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

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

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

    event EnabledTrading();

    event RemovedLimits();

    event ExcludeFromFees(address indexed account, bool isExcluded);

    event UpdatedMaxBuyAmount(uint256 newAmount);

    event UpdatedMaxSellAmount(uint256 newAmount);

    event UpdatedMaxWalletAmount(uint256 newAmount);

    event UpdatedMarketingAddress(address indexed newWallet);

    event UpdatedDevAddress(address indexed newWallet);

    event UpdatedTreasuryAddress(address indexed newWallet);

    event MaxTransactionExclusion(address _address, bool excluded);

    event OwnerForcedSwapBack(uint256 timestamp);

    event CaughtEarlyBuyer(address sniper);

    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );
    event TransferForeignToken(address token, uint256 amount);

    constructor() ERC20("Lance Inu", "LINU") payable {
        
        address _dexRouter;

        if(block.chainid == 1){
            _dexRouter = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; // ETH: Uniswap V2
        } else if(block.chainid == 4){
            _dexRouter = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; // Rinkeby ETH: Uniswap V2
        } else if(block.chainid == 56){
            _dexRouter = 0x10ED43C718714eb63d5aA57B78B54704E256024E; // BNB Chain: PCS V2
        } else if(block.chainid == 97){
            _dexRouter = 0xD99D1c33F9fC3444f8101754aBC46c52416550D1; // BNB Chain Testnet: PCS V2
        } else if(block.chainid == 42161){
            _dexRouter = 0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506; // Arbitrum: SushiSwap
        } else {
            revert("Chain not configured");
        }
        
        // initialize router
        dexRouter = IDexRouter(_dexRouter);

        // create pair
        lpPair = IDexFactory(dexRouter.factory()).createPair(address(this), dexRouter.WETH());
        _excludeFromMaxTransaction(address(lpPair), true);
        _setAutomatedMarketMakerPair(address(lpPair), true);
        
        uint256 totalSupply = 10 * 1e12 * (10 ** decimals());
        
        maxBuyAmount = totalSupply * 25 / 10000;
        maxSellAmount = totalSupply * 25 / 10000;
        maxWallet = totalSupply * 1 / 100;
        swapTokensAtAmount = totalSupply * 25 / 100000;

        buyMarketingFee = 100;
        buyLiquidityFee = 100;
        buyDevFee = 400;
        buyTreasuryFee = 200;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee + buyTreasuryFee;

        sellMarketingFee = 100;
        sellLiquidityFee = 100;
        sellDevFee = 500;
        sellTreasuryFee = 500;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee + sellTreasuryFee;

        marketingAddress = address(msg.sender);
        devAddress = address(msg.sender);
        treasuryAddress = address(msg.sender);

        _excludeFromMaxTransaction(msg.sender, true);
        _excludeFromMaxTransaction(address(this), true);
        _excludeFromMaxTransaction(address(0xdead), true);
        _excludeFromMaxTransaction(address(marketingAddress), true);
        _excludeFromMaxTransaction(address(dexRouter), true);

        excludeFromFees(msg.sender, true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        excludeFromFees(address(marketingAddress), true);
        excludeFromFees(address(dexRouter), true);

        
        _createInitialSupply(msg.sender, totalSupply);
    }

    receive() external payable {}

    
    function enableTrading(uint256 blocksForPenalty) external onlyOwner {
        require(!tradingActive, "Cannot reenable trading");
        require(blocksForPenalty <= 10, "Cannot make penalty blocks more than 10");
        tradingActive = true;
        swapEnabled = true;
        tradingActiveBlock = block.number;
        blockForPenaltyEnd = tradingActiveBlock + blocksForPenalty;
        
        emit EnabledTrading();
    }
    
    // remove limits after token is stable
    function removeLimits() external onlyOwner {

        limitsInEffect = false;
        transferDelayEnabled = false;
        maxBuyAmount = totalSupply();
        maxSellAmount = totalSupply();

        emit RemovedLimits();
    }

    function getEarlyBuyers() external view returns (address[] memory){
        return earlyBuyers;
    }

    function massManageRestrictedWallets(address[] calldata accounts, bool restricted) external onlyOwner {
        for(uint256 i = 0; i < accounts.length; i++){
            boughtEarly[accounts[i]] = restricted;
        }
    }

    // disable Transfer delay - cannot be reenabled
    function disableTransferDelay() external onlyOwner {
        transferDelayEnabled = false;
    }
    
    function updateMaxBuyAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 1 / 1000) / (10 ** decimals()), "Cannot set max buy amount lower than 0.1%");
        maxBuyAmount = newNum * (10 ** decimals());
        emit UpdatedMaxBuyAmount(maxBuyAmount);
    }
    
    function updateMaxSellAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 1 / 1000) / (10 ** decimals()), "Cannot set max sell amount lower than 0.1%");
        maxSellAmount = newNum * (10 ** decimals());
        emit UpdatedMaxSellAmount(maxSellAmount);
    }

    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 1 / 100) / (10 ** decimals()), "Cannot set max sell amount lower than 1%");
        maxWallet = newNum * (10 ** decimals());
        emit UpdatedMaxWalletAmount(maxWallet);
    }

    // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner {
  	    require(newAmount >= totalSupply() * 1 / 100000, "Swap amount cannot be lower than 0.001% total supply.");
  	    require(newAmount <= totalSupply() * 1 / 1000, "Swap amount cannot be higher than 0.1% total supply.");
  	    swapTokensAtAmount = newAmount;
  	}
    
    function _excludeFromMaxTransaction(address updAds, bool isExcluded) private {
        _isExcludedMaxTransactionAmount[updAds] = isExcluded;
        emit MaxTransactionExclusion(updAds, isExcluded);
    }

    function airdropToWallets(address[] memory wallets, uint256[] memory amountsInTokens) external onlyOwner {
        require(wallets.length == amountsInTokens.length, "arrays must be the same length");
        require(wallets.length < 300, "Can only airdrop 300 wallets per txn due to gas limits"); // allows for airdrop + launch at the same exact time, reducing delays and reducing sniper input.
        for(uint256 i = 0; i < wallets.length; i++){
            address wallet = wallets[i];
            uint256 amount = amountsInTokens[i];
            super._transfer(msg.sender, wallet, amount);
        }
    }
    
    function excludeFromMaxTransaction(address updAds, bool isEx) external onlyOwner {
        if(!isEx){
            require(updAds != lpPair, "Cannot remove uniswap pair from max txn");
        }
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }

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

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

    function updateBuyFees(uint256 _marketingFee, uint256 _liquidityFee, uint256 _devFee, uint256 _treasuryFee) external onlyOwner {
        buyMarketingFee = _marketingFee;
        buyLiquidityFee = _liquidityFee;
        buyDevFee = _devFee;
        buyTreasuryFee = _treasuryFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyTreasuryFee + buyDevFee;
        require(buyTotalFees <= 15 * FEE_DIVISOR / 100, "Must keep fees at 15% or less");
    }

    function updateSellFees(uint256 _marketingFee, uint256 _liquidityFee, uint256 _devFee, uint256 _treasuryFee) external onlyOwner {
        sellMarketingFee = _marketingFee;
        sellLiquidityFee = _liquidityFee;
        sellDevFee = _devFee;
        sellTreasuryFee = _treasuryFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee + sellTreasuryFee;
        require(sellTotalFees <= 20 * FEE_DIVISOR / 100, "Must keep fees at 20% or less");
    }

    function massExcludeFromFees(address[] calldata accounts, bool excluded) external onlyOwner {
        for(uint256 i = 0; i < accounts.length; i++){
            _isExcludedFromFees[accounts[i]] = excluded;
            emit ExcludeFromFees(accounts[i], excluded);
        }
    }

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

    function _transfer(address from, address to, uint256 amount) internal override {

        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "amount must be greater than 0");
        
        if(!tradingActive){
            require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active.");
        }

        if(tradingActive){
            require((!boughtEarly[from] && !boughtEarly[to]) || to == owner() || to == address(0xdead), "Bots cannot transfer tokens in or out except to owner or dead address.");
        }
        
        if(limitsInEffect){
            if (from != owner() && to != owner() && to != address(0) && to != address(0xdead) && !_isExcludedFromFees[from] && !_isExcludedFromFees[to]){
                
                // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.  
                if (transferDelayEnabled){
                    if (to != address(dexRouter) && to != address(lpPair)){
                        require(_holderLastTransferTimestamp[tx.origin] < block.number - 2 && _holderLastTransferTimestamp[to] < block.number - 2, "_transfer:: Transfer Delay enabled.  Try again later.");
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                        _holderLastTransferTimestamp[to] = block.number;
                    }
                }
                 
                //when buy
                if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
                    require(amount <= maxBuyAmount, "Buy transfer amount exceeds the max buy.");
                    require(amount + balanceOf(to) <= maxWallet, "Max Wallet Exceeded");
                } 
                //when sell
                else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
                    require(amount <= maxSellAmount, "Sell transfer amount exceeds the max sell.");
                } else if (!_isExcludedMaxTransactionAmount[to]){
                    require(amount + balanceOf(to) <= maxWallet, "Max Wallet Exceeded");
                }
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));
        
        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

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

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

        // only take fees on buys/sells, do not take on wallet transfers
        if(takeFee){
            // bot/sniper penalty.
            if(earlyBuyPenaltyInEffect() && automatedMarketMakerPairs[from] && !automatedMarketMakerPairs[to] && !_isExcludedFromFees[to] && buyTotalFees > 0){
                
                if(!earlyBuyPenaltyInEffect()){
                    // reduce by 1 wei per max buy over what Uniswap will allow to revert bots as best as possible to limit erroneously blacklisted wallets. First bot will get in and be blacklisted, rest will be reverted (*cross fingers*)
                    maxBuyAmount -= 1;
                }

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

                fees = amount * buyTotalFees / FEE_DIVISOR;
        	    tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
                tokensForMarketing += fees * buyMarketingFee / buyTotalFees;
                tokensForDev += fees * buyDevFee / buyTotalFees;
                tokensForTreasury += fees * buyTreasuryFee / buyTotalFees;
            }

            // on sell
            else if (automatedMarketMakerPairs[to] && sellTotalFees > 0){
                fees = amount * sellTotalFees / FEE_DIVISOR;
                tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees;
                tokensForMarketing += fees * sellMarketingFee / sellTotalFees;
                tokensForDev += fees * sellDevFee / sellTotalFees;
                tokensForTreasury += fees * sellTreasuryFee / sellTotalFees;
            }

            // on buy
            else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) {
        	    fees = amount * buyTotalFees / FEE_DIVISOR;
        	    tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
                tokensForMarketing += fees * buyMarketingFee / buyTotalFees;
                tokensForDev += fees * buyDevFee / buyTotalFees;
                tokensForTreasury += fees * buyTreasuryFee / buyTotalFees;
            }
            
            if(fees > 0){    
                super._transfer(from, address(this), fees);
            }
        	
        	amount -= fees;
        }

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

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

    function swapTokensForEth(uint256 tokenAmount) private {

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

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

        // make the swap
        dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }
    
    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(dexRouter), tokenAmount);

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

    function swapBack() private {

        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity + tokensForMarketing + tokensForDev + tokensForTreasury;
        
        if(contractBalance == 0 || totalTokensToSwap == 0) {return;}

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

        bool success;
        
        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = contractBalance * tokensForLiquidity / totalTokensToSwap / 2;
        
        swapTokensForEth(contractBalance - liquidityTokens); 
        
        uint256 ethBalance = address(this).balance;
        uint256 ethForLiquidity = ethBalance;

        uint256 ethForMarketing = ethBalance * tokensForMarketing / (totalTokensToSwap - (tokensForLiquidity/2));
        uint256 ethForDev = ethBalance * tokensForDev / (totalTokensToSwap - (tokensForLiquidity/2));
        uint256 ethForTreasury = ethBalance * tokensForTreasury / (totalTokensToSwap - (tokensForLiquidity/2));

        ethForLiquidity -= ethForMarketing + ethForDev + ethForTreasury;
            
        tokensForLiquidity = 0;
        tokensForMarketing = 0;
        tokensForDev = 0;
        tokensForTreasury = 0;
        
        if(liquidityTokens > 0 && ethForLiquidity > 0){
            addLiquidity(liquidityTokens, ethForLiquidity);
        }

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

        (success,) = address(treasuryAddress).call{value: ethForTreasury}("");

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

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

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

    function setMarketingAddress(address _marketingAddress) external onlyOwner {
        require(_marketingAddress != address(0), "_marketingAddress address cannot be 0");
        marketingAddress = payable(_marketingAddress);
        emit UpdatedMarketingAddress(_marketingAddress);
    }
    
    function setDevAddress(address _devAddress) external onlyOwner {
        require(_devAddress != address(0), "_marketingAddress address cannot be 0");
        devAddress = payable(_devAddress);
        emit UpdatedDevAddress(_devAddress);
    }

    function setTreasuryAddress(address _treasuryAddress) external onlyOwner {
        require(_treasuryAddress != address(0), "_marketingAddress address cannot be 0");
        treasuryAddress = payable(_treasuryAddress);
        emit UpdatedTreasuryAddress(_treasuryAddress);
    }

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

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sniper","type":"address"}],"name":"CaughtEarlyBuyer","type":"event"},{"anonymous":false,"inputs":[],"name":"EnabledTrading","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"bool","name":"excluded","type":"bool"}],"name":"MaxTransactionExclusion","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"OwnerForcedSwapBack","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[],"name":"RemovedLimits","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TransferForeignToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"}],"name":"UpdatedDevAddress","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":true,"internalType":"address","name":"newWallet","type":"address"}],"name":"UpdatedTreasuryAddress","type":"event"},{"inputs":[],"name":"FEE_DIVISOR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"wallets","type":"address[]"},{"internalType":"uint256[]","name":"amountsInTokens","type":"uint256[]"}],"name":"airdropToWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"blockForPenaltyEnd","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"botsCaught","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"boughtEarly","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"buyTreasuryFee","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":"devAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IDexRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"earlyBuyPenaltyInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"earlyBuyers","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"blocksForPenalty","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":[],"name":"forceSwapBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getEarlyBuyers","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"massExcludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"restricted","type":"bool"}],"name":"massManageRestrictedWallets","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":"maxWallet","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":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":[],"name":"sellTreasuryFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_devAddress","type":"address"}],"name":"setDevAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingAddress","type":"address"}],"name":"setMarketingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_treasuryAddress","type":"address"}],"name":"setTreasuryAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForTreasury","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActiveBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"transferForeignToken","outputs":[{"internalType":"bool","name":"_sent","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasuryAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"},{"internalType":"uint256","name":"_treasuryFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxBuyAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxSellAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"},{"internalType":"uint256","name":"_treasuryFee","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"}]

6000600f556014805462ffffff191660019081179091556016805460ff1916909117905560096080908152684c616e636520496e7560b81b60a052610100604052600460c0908152634c494e5560e01b60e0526003620000608382620008d0565b5060046200006f8282620008d0565b505050600062000084620005b860201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600046600103620000f95750737a250d5630b4cf539739df2c5dacb4c659f2488d620001db565b466004036200011e5750737a250d5630b4cf539739df2c5dacb4c659f2488d620001db565b466038036200014357507310ed43c718714eb63d5aa57b78b54704e256024e620001db565b4660610362000168575073d99d1c33f9fc3444f8101754abc46c52416550d1620001db565b4661a4b1036200018e5750731b02da8cb0d097eb8d57a175b88c7d8b47997506620001db565b60405162461bcd60e51b815260206004820152601460248201527f436861696e206e6f7420636f6e6669677572656400000000000000000000000060448201526064015b60405180910390fd5b600980546001600160a01b0319166001600160a01b0383169081179091556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa15801562000235573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200025b91906200099c565b6001600160a01b031663c9c6539630600960009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002be573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002e491906200099c565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000332573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200035891906200099c565b600a80546001600160a01b0319166001600160a01b0392909216918217905562000384906001620005bc565b600a546200039d906001600160a01b031660016200061f565b6000620003ad6012600a62000ae3565b620003bf906509184e72a00062000af4565b9050612710620003d182601962000af4565b620003dd919062000b16565b600655612710620003f082601962000af4565b620003fc919062000b16565b60075560646200040e82600162000af4565b6200041a919062000b16565b600855620186a06200042e82601962000af4565b6200043a919062000b16565b600b55606460188190556019819055610190601b81905560c8601a8190559162000465908062000b39565b62000471919062000b39565b6200047d919062000b39565b6017556064601d819055601e8190556101f46020819055601f819055908190620004a8908062000b39565b620004b4919062000b39565b620004c0919062000b39565b601c55600c8054336001600160a01b03199182168117909255600d8054821683179055600e805490911682179055620004fb906001620005bc565b62000508306001620005bc565b6200051761dead6001620005bc565b600c5462000530906001600160a01b03166001620005bc565b60095462000549906001600160a01b03166001620005bc565b620005563360016200068b565b620005633060016200068b565b6200057261dead60016200068b565b600c546200058b906001600160a01b031660016200068b565b600954620005a4906001600160a01b031660016200068b565b620005b0338262000746565b505062000b4f565b3390565b6001600160a01b038216600081815260266020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6001600160a01b0382166000908152602760205260409020805460ff19168215151790556200064f8282620005bc565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6005546001600160a01b03163314620006e75760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620001d2565b6001600160a01b038216600081815260256020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b0382166200079e5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401620001d2565b8060026000828254620007b2919062000b39565b90915550506001600160a01b03821660009081526020819052604081208054839290620007e190849062000b39565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200085657607f821691505b6020821081036200087757634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620008cb57600081815260208120601f850160051c81016020861015620008a65750805b601f850160051c820191505b81811015620008c757828155600101620008b2565b5050505b505050565b81516001600160401b03811115620008ec57620008ec6200082b565b6200090481620008fd845462000841565b846200087d565b602080601f8311600181146200093c5760008415620009235750858301515b600019600386901b1c1916600185901b178555620008c7565b600085815260208120601f198616915b828110156200096d578886015182559484019460019091019084016200094c565b50858210156200098c5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600060208284031215620009af57600080fd5b81516001600160a01b0381168114620009c757600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111562000a2557816000190482111562000a095762000a09620009ce565b8085161562000a1757918102915b93841c9390800290620009e9565b509250929050565b60008262000a3e5750600162000add565b8162000a4d5750600062000add565b816001811462000a66576002811462000a715762000a91565b600191505062000add565b60ff84111562000a855762000a85620009ce565b50506001821b62000add565b5060208310610133831016604e8410600b841016171562000ab6575081810a62000add565b62000ac28383620009e4565b806000190482111562000ad95762000ad9620009ce565b0290505b92915050565b6000620009c760ff84168362000a2d565b600081600019048311821515161562000b115762000b11620009ce565b500290565b60008262000b3457634e487b7160e01b600052601260045260246000fd5b500490565b8082018082111562000add5762000add620009ce565b613f528062000b5f6000396000f3fe60806040526004361061041f5760003560e01c8063906e9dd01161021e578063c5f956af11610123578063e7ad9fcd116100ab578063f11a24d31161007a578063f11a24d314610c1c578063f2fde38b14610c32578063f5648a4f14610c52578063f637434214610c67578063f8b45b0514610c7d57600080fd5b8063e7ad9fcd14610bb1578063e884f26014610bd1578063eb472fc414610be6578063ee40166e14610c0657600080fd5b8063d257b34f116100f2578063d257b34f14610aff578063d85ba06314610b1f578063dc3f0d0f14610b35578063dd62ed3e14610b55578063e2f4560514610b9b57600080fd5b8063c5f956af14610a8f578063c876d0b914610aaf578063cc2ffe7c14610ac9578063d0d41fe114610adf57600080fd5b8063a457c2d7116101a6578063b62496f511610175578063b62496f5146109e0578063bbc0c74214610a10578063bd5fb92014610a2f578063c024666814610a4f578063c18bc19514610a6f57600080fd5b8063a457c2d71461096a578063a5ece9411461098a578063a62068ce146109aa578063a9059cbb146109c057600080fd5b80639a7a23d6116101ed5780639a7a23d6146108f25780639c3b4fdc146109125780639e93ad8e146109285780639fccce321461093e578063a0d82dc51461095457600080fd5b8063906e9dd01461088557806392136913146108a557806395d89b41146108bb5780639a5bd2dd146108d057600080fd5b806358a6d53111610324578063715018a6116102ac57806382aa7c681161027b57806382aa7c68146107e15780638366e79a1461080157806385ecfd281461082157806388e765ff146108515780638da5cb5b1461086757600080fd5b8063715018a614610781578063751039fc146107965780637571336a146107ab5780637bce5a04146107cb57600080fd5b80636a486a8e116102f35780636a486a8e146106e95780636b0a894c146106ff5780636b2fb124146107155780636ddd17131461072b57806370a082311461074b57600080fd5b806358a6d531146106865780635c068a8c1461069d5780636605bfda146106b357806366d602ae146106d357600080fd5b80632be32b61116103a75780633ad10ef6116103765780633ad10ef6146105f7578063452ed4f1146106175780634a62bb651461063757806351f205e414610651578063552fd1481461066657600080fd5b80632be32b611461057b5780632e6ed7ef1461059b578063313ce567146105bb57806339509351146105d757600080fd5b806318160ddd116103ee57806318160ddd146104ee5780631a8145bb1461050d5780631f3fed8f146105235780632307b4411461053957806323b872dd1461055b57600080fd5b806306fdde031461042b5780630758d92414610456578063095ea7b31461048e57806310d5de53146104be57600080fd5b3661042657005b600080fd5b34801561043757600080fd5b50610440610c93565b60405161044d9190613758565b60405180910390f35b34801561046257600080fd5b50600954610476906001600160a01b031681565b6040516001600160a01b03909116815260200161044d565b34801561049a57600080fd5b506104ae6104a93660046137be565b610d25565b604051901515815260200161044d565b3480156104ca57600080fd5b506104ae6104d93660046137ea565b60266020526000908152604090205460ff1681565b3480156104fa57600080fd5b506002545b60405190815260200161044d565b34801561051957600080fd5b506104ff60225481565b34801561052f57600080fd5b506104ff60215481565b34801561054557600080fd5b506105596105543660046138e4565b610d3c565b005b34801561056757600080fd5b506104ae6105763660046139a6565b610e9e565b34801561058757600080fd5b506105596105963660046139e7565b610f48565b3480156105a757600080fd5b506105596105b6366004613a00565b61105c565b3480156105c757600080fd5b506040516012815260200161044d565b3480156105e357600080fd5b506104ae6105f23660046137be565b61112d565b34801561060357600080fd5b50600d54610476906001600160a01b031681565b34801561062357600080fd5b50600a54610476906001600160a01b031681565b34801561064357600080fd5b506014546104ae9060ff1681565b34801561065d57600080fd5b50610559611169565b34801561067257600080fd5b50610559610681366004613a40565b611279565b34801561069257600080fd5b5060105443106104ae565b3480156106a957600080fd5b506104ff601a5481565b3480156106bf57600080fd5b506105596106ce3660046137ea565b611314565b3480156106df57600080fd5b506104ff60075481565b3480156106f557600080fd5b506104ff601c5481565b34801561070b57600080fd5b506104ff60135481565b34801561072157600080fd5b506104ff601f5481565b34801561073757600080fd5b506014546104ae9062010000900460ff1681565b34801561075757600080fd5b506104ff6107663660046137ea565b6001600160a01b031660009081526020819052604090205490565b34801561078d57600080fd5b506105596113ae565b3480156107a257600080fd5b50610559611422565b3480156107b757600080fd5b506105596107c6366004613ac6565b611499565b3480156107d757600080fd5b506104ff60185481565b3480156107ed57600080fd5b506105596107fc3660046139e7565b611561565b34801561080d57600080fd5b506104ae61081c366004613aff565b611695565b34801561082d57600080fd5b506104ae61083c3660046137ea565b60116020526000908152604090205460ff1681565b34801561085d57600080fd5b506104ff60065481565b34801561087357600080fd5b506005546001600160a01b0316610476565b34801561089157600080fd5b506105596108a03660046137ea565b6118cf565b3480156108b157600080fd5b506104ff601d5481565b3480156108c757600080fd5b50610440611969565b3480156108dc57600080fd5b506108e5611978565b60405161044d9190613b71565b3480156108fe57600080fd5b5061055961090d366004613ac6565b6119d9565b34801561091e57600080fd5b506104ff601b5481565b34801561093457600080fd5b506104ff61271081565b34801561094a57600080fd5b506104ff60235481565b34801561096057600080fd5b506104ff60205481565b34801561097657600080fd5b506104ae6109853660046137be565b611acd565b34801561099657600080fd5b50600c54610476906001600160a01b031681565b3480156109b657600080fd5b506104ff60105481565b3480156109cc57600080fd5b506104ae6109db3660046137be565b611b66565b3480156109ec57600080fd5b506104ae6109fb3660046137ea565b60276020526000908152604090205460ff1681565b348015610a1c57600080fd5b506014546104ae90610100900460ff1681565b348015610a3b57600080fd5b50610559610a4a366004613a40565b611b73565b348015610a5b57600080fd5b50610559610a6a366004613ac6565b611c79565b348015610a7b57600080fd5b50610559610a8a3660046139e7565b611d02565b348015610a9b57600080fd5b50600e54610476906001600160a01b031681565b348015610abb57600080fd5b506016546104ae9060ff1681565b348015610ad557600080fd5b506104ff60245481565b348015610aeb57600080fd5b50610559610afa3660046137ea565b611e0d565b348015610b0b57600080fd5b50610559610b1a3660046139e7565b611ea7565b348015610b2b57600080fd5b506104ff60175481565b348015610b4157600080fd5b50610559610b503660046139e7565b611ff2565b348015610b6157600080fd5b506104ff610b70366004613aff565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610ba757600080fd5b506104ff600b5481565b348015610bbd57600080fd5b50610559610bcc366004613a00565b612100565b348015610bdd57600080fd5b506105596121cb565b348015610bf257600080fd5b50610476610c013660046139e7565b612201565b348015610c1257600080fd5b506104ff600f5481565b348015610c2857600080fd5b506104ff60195481565b348015610c3e57600080fd5b50610559610c4d3660046137ea565b61222b565b348015610c5e57600080fd5b50610559612316565b348015610c7357600080fd5b506104ff601e5481565b348015610c8957600080fd5b506104ff60085481565b606060038054610ca290613b84565b80601f0160208091040260200160405190810160405280929190818152602001828054610cce90613b84565b8015610d1b5780601f10610cf057610100808354040283529160200191610d1b565b820191906000526020600020905b815481529060010190602001808311610cfe57829003601f168201915b5050505050905090565b6000610d32338484612382565b5060015b92915050565b6005546001600160a01b03163314610d6f5760405162461bcd60e51b8152600401610d6690613bbe565b60405180910390fd5b8051825114610dc05760405162461bcd60e51b815260206004820152601e60248201527f617272617973206d757374206265207468652073616d65206c656e67746800006044820152606401610d66565b61012c825110610e315760405162461bcd60e51b815260206004820152603660248201527f43616e206f6e6c792061697264726f70203330302077616c6c657473207065726044820152752074786e2064756520746f20676173206c696d69747360501b6064820152608401610d66565b60005b8251811015610e99576000838281518110610e5157610e51613bf3565b602002602001015190506000838381518110610e6f57610e6f613bf3565b60200260200101519050610e843383836124a6565b50508080610e9190613c1f565b915050610e34565b505050565b6000610eab8484846125fb565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610f305760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610d66565b610f3d8533858403612382565b506001949350505050565b6005546001600160a01b03163314610f725760405162461bcd60e51b8152600401610d6690613bbe565b610f7e6012600a613d1c565b6103e8610f8a60025490565b610f95906001613d2b565b610f9f9190613d4a565b610fa99190613d4a565b81101561100a5760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152687468616e20302e312560b81b6064820152608401610d66565b6110166012600a613d1c565b6110209082613d2b565b60068190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de41009906020015b60405180910390a150565b6005546001600160a01b031633146110865760405162461bcd60e51b8152600401610d6690613bbe565b60188490556019839055601b829055601a81905581816110a68587613d6c565b6110b09190613d6c565b6110ba9190613d6c565b60175560646110cc612710600f613d2b565b6110d69190613d4a565b60175411156111275760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313525206f72206c6573730000006044820152606401610d66565b50505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610d32918590611164908690613d6c565b612382565b6005546001600160a01b031633146111935760405162461bcd60e51b8152600401610d6690613bbe565b600b5430600090815260208190526040902054101561121c576040805162461bcd60e51b81526020600482015260248101919091527f43616e206f6e6c792073776170207768656e20746f6b656e20616d6f756e742060448201527f6973206174206f7220686967686572207468616e207265737472696374696f6e6064820152608401610d66565b600a805460ff60a01b1916600160a01b179055611237613207565b600a805460ff60a01b191690556040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb329060200160405180910390a1565b6005546001600160a01b031633146112a35760405162461bcd60e51b8152600401610d6690613bbe565b60005b828110156111275781601160008686858181106112c5576112c5613bf3565b90506020020160208101906112da91906137ea565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558061130c81613c1f565b9150506112a6565b6005546001600160a01b0316331461133e5760405162461bcd60e51b8152600401610d6690613bbe565b6001600160a01b0381166113645760405162461bcd60e51b8152600401610d6690613d7f565b600e80546001600160a01b0319166001600160a01b0383169081179091556040517f2e1e696cfb265fa16e1170d24ef04cb2262772bde00ecf34d80bae6722487b7f90600090a250565b6005546001600160a01b031633146113d85760405162461bcd60e51b8152600401610d6690613bbe565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b0316331461144c5760405162461bcd60e51b8152600401610d6690613bbe565b6014805460ff199081169091556016805490911690556002546006556002546007556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6005546001600160a01b031633146114c35760405162461bcd60e51b8152600401610d6690613bbe565b8061153657600a546001600160a01b03908116908316036115365760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610d66565b6001600160a01b03919091166000908152602660205260409020805460ff1916911515919091179055565b6005546001600160a01b0316331461158b5760405162461bcd60e51b8152600401610d6690613bbe565b601454610100900460ff16156115e35760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610d66565b600a8111156116445760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f74206d616b652070656e616c747920626c6f636b73206d6f72652060448201526607468616e2031360cc1b6064820152608401610d66565b6014805462ffff0019166201010017905543600f819055611666908290613d6c565b6010556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a150565b6005546000906001600160a01b031633146116c25760405162461bcd60e51b8152600401610d6690613bbe565b6001600160a01b0383166117185760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610d66565b6001600160a01b038316301415806117385750601454610100900460ff16155b6117a15760405162461bcd60e51b815260206004820152603460248201527f43616e2774207769746864726177206e617469766520746f6b656e73207768696044820152736c652074726164696e672069732061637469766560601b6064820152608401610d66565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa1580156117e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061180c9190613dc4565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af115801561185f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118839190613ddd565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6005546001600160a01b031633146118f95760405162461bcd60e51b8152600401610d6690613bbe565b6001600160a01b03811661191f5760405162461bcd60e51b8152600401610d6690613d7f565b600c80546001600160a01b0319166001600160a01b0383169081179091556040517fd1e7d6a3390dd5008bd1c57798817b9f806e4c417264e7d3d67e42e784dc24a990600090a250565b606060048054610ca290613b84565b60606012805480602002602001604051908101604052809291908181526020018280548015610d1b57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116119b2575050505050905090565b6005546001600160a01b03163314611a035760405162461bcd60e51b8152600401610d6690613bbe565b600a546001600160a01b0390811690831603611a875760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610d66565b611a9182826134bb565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b3360009081526001602090815260408083206001600160a01b038616845290915281205482811015611b4f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610d66565b611b5c3385858403612382565b5060019392505050565b6000610d323384846125fb565b6005546001600160a01b03163314611b9d5760405162461bcd60e51b8152600401610d6690613bbe565b60005b82811015611127578160256000868685818110611bbf57611bbf613bf3565b9050602002016020810190611bd491906137ea565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055838382818110611c0e57611c0e613bf3565b9050602002016020810190611c2391906137ea565b6001600160a01b03167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df783604051611c5f911515815260200190565b60405180910390a280611c7181613c1f565b915050611ba0565b6005546001600160a01b03163314611ca35760405162461bcd60e51b8152600401610d6690613bbe565b6001600160a01b038216600081815260256020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b03163314611d2c5760405162461bcd60e51b8152600401610d6690613bbe565b611d386012600a613d1c565b6064611d4360025490565b611d4e906001613d2b565b611d589190613d4a565b611d629190613d4a565b811015611dc25760405162461bcd60e51b815260206004820152602860248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015267207468616e20312560c01b6064820152608401610d66565b611dce6012600a613d1c565b611dd89082613d2b565b60088190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc90602001611051565b6005546001600160a01b03163314611e375760405162461bcd60e51b8152600401610d6690613bbe565b6001600160a01b038116611e5d5760405162461bcd60e51b8152600401610d6690613d7f565b600d80546001600160a01b0319166001600160a01b0383169081179091556040517f804ec39c1aea0b9f2615a34c3fa437b6ddda2c72e6848abf0f23955589a7ad5490600090a250565b6005546001600160a01b03163314611ed15760405162461bcd60e51b8152600401610d6690613bbe565b620186a0611ede60025490565b611ee9906001613d2b565b611ef39190613d4a565b811015611f605760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610d66565b6103e8611f6c60025490565b611f77906001613d2b565b611f819190613d4a565b811115611fed5760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171892903a37ba30b61039bab838363c9760611b6064820152608401610d66565b600b55565b6005546001600160a01b0316331461201c5760405162461bcd60e51b8152600401610d6690613bbe565b6120286012600a613d1c565b6103e861203460025490565b61203f906001613d2b565b6120499190613d4a565b6120539190613d4a565b8110156120b55760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e312560b01b6064820152608401610d66565b6120c16012600a613d1c565b6120cb9082613d2b565b60078190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e90602001611051565b6005546001600160a01b0316331461212a5760405162461bcd60e51b8152600401610d6690613bbe565b601d849055601e8390556020829055601f819055808261214a8587613d6c565b6121549190613d6c565b61215e9190613d6c565b601c5560646121706127106014613d2b565b61217a9190613d4a565b601c5411156111275760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323025206f72206c6573730000006044820152606401610d66565b6005546001600160a01b031633146121f55760405162461bcd60e51b8152600401610d6690613bbe565b6016805460ff19169055565b6012818154811061221157600080fd5b6000918252602090912001546001600160a01b0316905081565b6005546001600160a01b031633146122555760405162461bcd60e51b8152600401610d6690613bbe565b6001600160a01b0381166122ba5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610d66565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146123405760405162461bcd60e51b8152600401610d6690613bbe565b604051600090339047908381818185875af1925050503d8060008114611127576040519150601f19603f3d011682016040523d82523d6000602084013e611127565b6001600160a01b0383166123e45760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610d66565b6001600160a01b0382166124455760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610d66565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166124cc5760405162461bcd60e51b8152600401610d6690613dfa565b6001600160a01b0382166124f25760405162461bcd60e51b8152600401610d6690613e3f565b6001600160a01b0383166000908152602081905260409020548181101561256a5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610d66565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906125a1908490613d6c565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516125ed91815260200190565b60405180910390a350505050565b6001600160a01b0383166126215760405162461bcd60e51b8152600401610d6690613dfa565b6001600160a01b0382166126475760405162461bcd60e51b8152600401610d6690613e3f565b600081116126975760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610d66565b601454610100900460ff1661272a576001600160a01b03831660009081526025602052604090205460ff16806126e557506001600160a01b03821660009081526025602052604090205460ff165b61272a5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610d66565b601454610100900460ff161561282a576001600160a01b03831660009081526011602052604090205460ff1615801561277c57506001600160a01b03821660009081526011602052604090205460ff16155b8061279457506005546001600160a01b038381169116145b806127a957506001600160a01b03821661dead145b61282a5760405162461bcd60e51b815260206004820152604660248201527f426f74732063616e6e6f74207472616e7366657220746f6b656e7320696e206f60448201527f72206f75742065786365707420746f206f776e6572206f722064656164206164606482015265323932b9b99760d11b608482015260a401610d66565b60145460ff1615612c3c576005546001600160a01b0384811691161480159061286157506005546001600160a01b03838116911614155b801561287557506001600160a01b03821615155b801561288c57506001600160a01b03821661dead14155b80156128b157506001600160a01b03831660009081526025602052604090205460ff16155b80156128d657506001600160a01b03821660009081526025602052604090205460ff16155b15612c3c5760165460ff16156129ef576009546001600160a01b038381169116148015906129125750600a546001600160a01b03838116911614155b156129ef57612922600243613e82565b326000908152601560205260409020541080156129605750612945600243613e82565b6001600160a01b038316600090815260156020526040902054105b6129ca5760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527432b21710102a393c9030b3b0b4b7103630ba32b91760591b6064820152608401610d66565b3260009081526015602052604080822043908190556001600160a01b03851683529120555b6001600160a01b03831660009081526027602052604090205460ff168015612a3057506001600160a01b03821660009081526026602052604090205460ff16155b15612b0757600654811115612a985760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610d66565b6008546001600160a01b038316600090815260208190526040902054612abe9083613d6c565b1115612b025760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610d66565b612c3c565b6001600160a01b03821660009081526027602052604090205460ff168015612b4857506001600160a01b03831660009081526026602052604090205460ff16155b15612bb257600754811115612b025760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610d66565b6001600160a01b03821660009081526026602052604090205460ff16612c3c576008546001600160a01b038316600090815260208190526040902054612bf89083613d6c565b1115612c3c5760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610d66565b30600090815260208190526040902054600b5481108015908190612c68575060145462010000900460ff165b8015612c7e5750600a54600160a01b900460ff16155b8015612ca357506001600160a01b03851660009081526027602052604090205460ff16155b8015612cc857506001600160a01b03851660009081526025602052604090205460ff16155b8015612ced57506001600160a01b03841660009081526025602052604090205460ff16155b15612d1b57600a805460ff60a01b1916600160a01b179055612d0d613207565b600a805460ff60a01b191690555b6001600160a01b03851660009081526025602052604090205460019060ff1680612d5d57506001600160a01b03851660009081526025602052604090205460ff165b15612d66575060005b600081156131f35760105443108015612d9757506001600160a01b03871660009081526027602052604090205460ff165b8015612dbc57506001600160a01b03861660009081526027602052604090205460ff16155b8015612de157506001600160a01b03861660009081526025602052604090205460ff16155b8015612def57506000601754115b15612fda576010544310612e1657600160066000828254612e109190613e82565b90915550505b6001600160a01b03861660009081526011602052604090205460ff16612ef6576001600160a01b0386166000908152601160205260408120805460ff191660019081179091556013805491929091612e6f908490613d6c565b9091555050601280546001810182556000919091527fbb8a6a4669ba250d26cd7a459eca9d215f8307e33aebe50379bc5a3617ec34440180546001600160a01b0319166001600160a01b0388169081179091556040519081527f55678e47d0a699d3ab99b0184c4ff14f2246ba80522deb921aa0c8823578c44a9060200160405180910390a15b61271060175486612f079190613d2b565b612f119190613d4a565b905060175460195482612f249190613d2b565b612f2e9190613d4a565b60226000828254612f3f9190613d6c565b9091555050601754601854612f549083613d2b565b612f5e9190613d4a565b60216000828254612f6f9190613d6c565b9091555050601754601b54612f849083613d2b565b612f8e9190613d4a565b60236000828254612f9f9190613d6c565b9091555050601754601a54612fb49083613d2b565b612fbe9190613d4a565b60246000828254612fcf9190613d6c565b909155506131d59050565b6001600160a01b03861660009081526027602052604090205460ff16801561300457506000601c54115b156130c757612710601c548661301a9190613d2b565b6130249190613d4a565b9050601c54601e54826130379190613d2b565b6130419190613d4a565b602260008282546130529190613d6c565b9091555050601c54601d546130679083613d2b565b6130719190613d4a565b602160008282546130829190613d6c565b9091555050601c546020546130979083613d2b565b6130a19190613d4a565b602360008282546130b29190613d6c565b9091555050601c54601f54612fb49083613d2b565b6001600160a01b03871660009081526027602052604090205460ff1680156130f157506000601754115b156131d557612710601754866131079190613d2b565b6131119190613d4a565b9050601754601954826131249190613d2b565b61312e9190613d4a565b6022600082825461313f9190613d6c565b90915550506017546018546131549083613d2b565b61315e9190613d4a565b6021600082825461316f9190613d6c565b9091555050601754601b546131849083613d2b565b61318e9190613d4a565b6023600082825461319f9190613d6c565b9091555050601754601a546131b49083613d2b565b6131be9190613d4a565b602460008282546131cf9190613d6c565b90915550505b80156131e6576131e68730836124a6565b6131f08186613e82565b94505b6131fe8787876124a6565b50505050505050565b30600090815260208190526040812054905060006024546023546021546022546132319190613d6c565b61323b9190613d6c565b6132459190613d6c565b9050811580613252575080155b1561325b575050565b600b54613269906014613d2b565b82111561328157600b5461327e906014613d2b565b91505b600080600283602254866132959190613d2b565b61329f9190613d4a565b6132a99190613d4a565b90506132bd6132b88286613e82565b6134e9565b602254479081906000906132d390600290613d4a565b6132dd9087613e82565b6021546132ea9085613d2b565b6132f49190613d4a565b9050600060026022546133079190613d4a565b6133119088613e82565b60235461331e9086613d2b565b6133289190613d4a565b90506000600260225461333b9190613d4a565b6133459089613e82565b6024546133529087613d2b565b61335c9190613d4a565b9050806133698385613d6c565b6133739190613d6c565b61337d9085613e82565b6000602281905560218190556023819055602455935085158015906133a25750600084115b156133b1576133b18685613643565b600d546040516001600160a01b03909116908390600081818185875af1925050503d80600081146133fe576040519150601f19603f3d011682016040523d82523d6000602084013e613403565b606091505b5050600e546040519198506001600160a01b0316908290600081818185875af1925050503d8060008114613453576040519150601f19603f3d011682016040523d82523d6000602084013e613458565b606091505b5050600c546040519198506001600160a01b0316904790600081818185875af1925050503d80600081146134a8576040519150601f19603f3d011682016040523d82523d6000602084013e6134ad565b606091505b505050505050505050505050565b6001600160a01b0382166000908152602760205260409020805460ff1916821515179055611a9182826136f5565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061351e5761351e613bf3565b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015613577573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061359b9190613e95565b816001815181106135ae576135ae613bf3565b6001600160a01b0392831660209182029290920101526009546135d49130911684612382565b60095460405163791ac94760e01b81526001600160a01b039091169063791ac9479061360d908590600090869030904290600401613eb2565b600060405180830381600087803b15801561362757600080fd5b505af115801561363b573d6000803e3d6000fd5b505050505050565b60095461365b9030906001600160a01b031684612382565b60095460405163f305d71960e01b815230600482015260248101849052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af11580156136c9573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906136ee9190613eee565b5050505050565b6001600160a01b038216600081815260266020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b600060208083528351808285015260005b8181101561378557858101830151858201604001528201613769565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146137bb57600080fd5b50565b600080604083850312156137d157600080fd5b82356137dc816137a6565b946020939093013593505050565b6000602082840312156137fc57600080fd5b8135613807816137a6565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561384d5761384d61380e565b604052919050565b600067ffffffffffffffff82111561386f5761386f61380e565b5060051b60200190565b600082601f83011261388a57600080fd5b8135602061389f61389a83613855565b613824565b82815260059290921b840181019181810190868411156138be57600080fd5b8286015b848110156138d957803583529183019183016138c2565b509695505050505050565b600080604083850312156138f757600080fd5b823567ffffffffffffffff8082111561390f57600080fd5b818501915085601f83011261392357600080fd5b8135602061393361389a83613855565b82815260059290921b8401810191818101908984111561395257600080fd5b948201945b8386101561397957853561396a816137a6565b82529482019490820190613957565b9650508601359250508082111561398f57600080fd5b5061399c85828601613879565b9150509250929050565b6000806000606084860312156139bb57600080fd5b83356139c6816137a6565b925060208401356139d6816137a6565b929592945050506040919091013590565b6000602082840312156139f957600080fd5b5035919050565b60008060008060808587031215613a1657600080fd5b5050823594602084013594506040840135936060013592509050565b80151581146137bb57600080fd5b600080600060408486031215613a5557600080fd5b833567ffffffffffffffff80821115613a6d57600080fd5b818601915086601f830112613a8157600080fd5b813581811115613a9057600080fd5b8760208260051b8501011115613aa557600080fd5b60209283019550935050840135613abb81613a32565b809150509250925092565b60008060408385031215613ad957600080fd5b8235613ae4816137a6565b91506020830135613af481613a32565b809150509250929050565b60008060408385031215613b1257600080fd5b8235613b1d816137a6565b91506020830135613af4816137a6565b600081518084526020808501945080840160005b83811015613b665781516001600160a01b031687529582019590820190600101613b41565b509495945050505050565b6020815260006138076020830184613b2d565b600181811c90821680613b9857607f821691505b602082108103613bb857634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201613c3157613c31613c09565b5060010190565b600181815b80851115613c73578160001904821115613c5957613c59613c09565b80851615613c6657918102915b93841c9390800290613c3d565b509250929050565b600082613c8a57506001610d36565b81613c9757506000610d36565b8160018114613cad5760028114613cb757613cd3565b6001915050610d36565b60ff841115613cc857613cc8613c09565b50506001821b610d36565b5060208310610133831016604e8410600b8410161715613cf6575081810a610d36565b613d008383613c38565b8060001904821115613d1457613d14613c09565b029392505050565b600061380760ff841683613c7b565b6000816000190483118215151615613d4557613d45613c09565b500290565b600082613d6757634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610d3657610d36613c09565b60208082526025908201527f5f6d61726b6574696e674164647265737320616464726573732063616e6e6f74604082015264020626520360dc1b606082015260800190565b600060208284031215613dd657600080fd5b5051919050565b600060208284031215613def57600080fd5b815161380781613a32565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610d3657610d36613c09565b600060208284031215613ea757600080fd5b8151613807816137a6565b85815284602082015260a060408201526000613ed160a0830186613b2d565b6001600160a01b0394909416606083015250608001529392505050565b600080600060608486031215613f0357600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220bdc2c4f00bff7613933b61225caa4d008a51b0bbe992aa5c6525a8437f845f8e64736f6c63430008100033

Deployed Bytecode

0x60806040526004361061041f5760003560e01c8063906e9dd01161021e578063c5f956af11610123578063e7ad9fcd116100ab578063f11a24d31161007a578063f11a24d314610c1c578063f2fde38b14610c32578063f5648a4f14610c52578063f637434214610c67578063f8b45b0514610c7d57600080fd5b8063e7ad9fcd14610bb1578063e884f26014610bd1578063eb472fc414610be6578063ee40166e14610c0657600080fd5b8063d257b34f116100f2578063d257b34f14610aff578063d85ba06314610b1f578063dc3f0d0f14610b35578063dd62ed3e14610b55578063e2f4560514610b9b57600080fd5b8063c5f956af14610a8f578063c876d0b914610aaf578063cc2ffe7c14610ac9578063d0d41fe114610adf57600080fd5b8063a457c2d7116101a6578063b62496f511610175578063b62496f5146109e0578063bbc0c74214610a10578063bd5fb92014610a2f578063c024666814610a4f578063c18bc19514610a6f57600080fd5b8063a457c2d71461096a578063a5ece9411461098a578063a62068ce146109aa578063a9059cbb146109c057600080fd5b80639a7a23d6116101ed5780639a7a23d6146108f25780639c3b4fdc146109125780639e93ad8e146109285780639fccce321461093e578063a0d82dc51461095457600080fd5b8063906e9dd01461088557806392136913146108a557806395d89b41146108bb5780639a5bd2dd146108d057600080fd5b806358a6d53111610324578063715018a6116102ac57806382aa7c681161027b57806382aa7c68146107e15780638366e79a1461080157806385ecfd281461082157806388e765ff146108515780638da5cb5b1461086757600080fd5b8063715018a614610781578063751039fc146107965780637571336a146107ab5780637bce5a04146107cb57600080fd5b80636a486a8e116102f35780636a486a8e146106e95780636b0a894c146106ff5780636b2fb124146107155780636ddd17131461072b57806370a082311461074b57600080fd5b806358a6d531146106865780635c068a8c1461069d5780636605bfda146106b357806366d602ae146106d357600080fd5b80632be32b61116103a75780633ad10ef6116103765780633ad10ef6146105f7578063452ed4f1146106175780634a62bb651461063757806351f205e414610651578063552fd1481461066657600080fd5b80632be32b611461057b5780632e6ed7ef1461059b578063313ce567146105bb57806339509351146105d757600080fd5b806318160ddd116103ee57806318160ddd146104ee5780631a8145bb1461050d5780631f3fed8f146105235780632307b4411461053957806323b872dd1461055b57600080fd5b806306fdde031461042b5780630758d92414610456578063095ea7b31461048e57806310d5de53146104be57600080fd5b3661042657005b600080fd5b34801561043757600080fd5b50610440610c93565b60405161044d9190613758565b60405180910390f35b34801561046257600080fd5b50600954610476906001600160a01b031681565b6040516001600160a01b03909116815260200161044d565b34801561049a57600080fd5b506104ae6104a93660046137be565b610d25565b604051901515815260200161044d565b3480156104ca57600080fd5b506104ae6104d93660046137ea565b60266020526000908152604090205460ff1681565b3480156104fa57600080fd5b506002545b60405190815260200161044d565b34801561051957600080fd5b506104ff60225481565b34801561052f57600080fd5b506104ff60215481565b34801561054557600080fd5b506105596105543660046138e4565b610d3c565b005b34801561056757600080fd5b506104ae6105763660046139a6565b610e9e565b34801561058757600080fd5b506105596105963660046139e7565b610f48565b3480156105a757600080fd5b506105596105b6366004613a00565b61105c565b3480156105c757600080fd5b506040516012815260200161044d565b3480156105e357600080fd5b506104ae6105f23660046137be565b61112d565b34801561060357600080fd5b50600d54610476906001600160a01b031681565b34801561062357600080fd5b50600a54610476906001600160a01b031681565b34801561064357600080fd5b506014546104ae9060ff1681565b34801561065d57600080fd5b50610559611169565b34801561067257600080fd5b50610559610681366004613a40565b611279565b34801561069257600080fd5b5060105443106104ae565b3480156106a957600080fd5b506104ff601a5481565b3480156106bf57600080fd5b506105596106ce3660046137ea565b611314565b3480156106df57600080fd5b506104ff60075481565b3480156106f557600080fd5b506104ff601c5481565b34801561070b57600080fd5b506104ff60135481565b34801561072157600080fd5b506104ff601f5481565b34801561073757600080fd5b506014546104ae9062010000900460ff1681565b34801561075757600080fd5b506104ff6107663660046137ea565b6001600160a01b031660009081526020819052604090205490565b34801561078d57600080fd5b506105596113ae565b3480156107a257600080fd5b50610559611422565b3480156107b757600080fd5b506105596107c6366004613ac6565b611499565b3480156107d757600080fd5b506104ff60185481565b3480156107ed57600080fd5b506105596107fc3660046139e7565b611561565b34801561080d57600080fd5b506104ae61081c366004613aff565b611695565b34801561082d57600080fd5b506104ae61083c3660046137ea565b60116020526000908152604090205460ff1681565b34801561085d57600080fd5b506104ff60065481565b34801561087357600080fd5b506005546001600160a01b0316610476565b34801561089157600080fd5b506105596108a03660046137ea565b6118cf565b3480156108b157600080fd5b506104ff601d5481565b3480156108c757600080fd5b50610440611969565b3480156108dc57600080fd5b506108e5611978565b60405161044d9190613b71565b3480156108fe57600080fd5b5061055961090d366004613ac6565b6119d9565b34801561091e57600080fd5b506104ff601b5481565b34801561093457600080fd5b506104ff61271081565b34801561094a57600080fd5b506104ff60235481565b34801561096057600080fd5b506104ff60205481565b34801561097657600080fd5b506104ae6109853660046137be565b611acd565b34801561099657600080fd5b50600c54610476906001600160a01b031681565b3480156109b657600080fd5b506104ff60105481565b3480156109cc57600080fd5b506104ae6109db3660046137be565b611b66565b3480156109ec57600080fd5b506104ae6109fb3660046137ea565b60276020526000908152604090205460ff1681565b348015610a1c57600080fd5b506014546104ae90610100900460ff1681565b348015610a3b57600080fd5b50610559610a4a366004613a40565b611b73565b348015610a5b57600080fd5b50610559610a6a366004613ac6565b611c79565b348015610a7b57600080fd5b50610559610a8a3660046139e7565b611d02565b348015610a9b57600080fd5b50600e54610476906001600160a01b031681565b348015610abb57600080fd5b506016546104ae9060ff1681565b348015610ad557600080fd5b506104ff60245481565b348015610aeb57600080fd5b50610559610afa3660046137ea565b611e0d565b348015610b0b57600080fd5b50610559610b1a3660046139e7565b611ea7565b348015610b2b57600080fd5b506104ff60175481565b348015610b4157600080fd5b50610559610b503660046139e7565b611ff2565b348015610b6157600080fd5b506104ff610b70366004613aff565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610ba757600080fd5b506104ff600b5481565b348015610bbd57600080fd5b50610559610bcc366004613a00565b612100565b348015610bdd57600080fd5b506105596121cb565b348015610bf257600080fd5b50610476610c013660046139e7565b612201565b348015610c1257600080fd5b506104ff600f5481565b348015610c2857600080fd5b506104ff60195481565b348015610c3e57600080fd5b50610559610c4d3660046137ea565b61222b565b348015610c5e57600080fd5b50610559612316565b348015610c7357600080fd5b506104ff601e5481565b348015610c8957600080fd5b506104ff60085481565b606060038054610ca290613b84565b80601f0160208091040260200160405190810160405280929190818152602001828054610cce90613b84565b8015610d1b5780601f10610cf057610100808354040283529160200191610d1b565b820191906000526020600020905b815481529060010190602001808311610cfe57829003601f168201915b5050505050905090565b6000610d32338484612382565b5060015b92915050565b6005546001600160a01b03163314610d6f5760405162461bcd60e51b8152600401610d6690613bbe565b60405180910390fd5b8051825114610dc05760405162461bcd60e51b815260206004820152601e60248201527f617272617973206d757374206265207468652073616d65206c656e67746800006044820152606401610d66565b61012c825110610e315760405162461bcd60e51b815260206004820152603660248201527f43616e206f6e6c792061697264726f70203330302077616c6c657473207065726044820152752074786e2064756520746f20676173206c696d69747360501b6064820152608401610d66565b60005b8251811015610e99576000838281518110610e5157610e51613bf3565b602002602001015190506000838381518110610e6f57610e6f613bf3565b60200260200101519050610e843383836124a6565b50508080610e9190613c1f565b915050610e34565b505050565b6000610eab8484846125fb565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610f305760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610d66565b610f3d8533858403612382565b506001949350505050565b6005546001600160a01b03163314610f725760405162461bcd60e51b8152600401610d6690613bbe565b610f7e6012600a613d1c565b6103e8610f8a60025490565b610f95906001613d2b565b610f9f9190613d4a565b610fa99190613d4a565b81101561100a5760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152687468616e20302e312560b81b6064820152608401610d66565b6110166012600a613d1c565b6110209082613d2b565b60068190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de41009906020015b60405180910390a150565b6005546001600160a01b031633146110865760405162461bcd60e51b8152600401610d6690613bbe565b60188490556019839055601b829055601a81905581816110a68587613d6c565b6110b09190613d6c565b6110ba9190613d6c565b60175560646110cc612710600f613d2b565b6110d69190613d4a565b60175411156111275760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313525206f72206c6573730000006044820152606401610d66565b50505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610d32918590611164908690613d6c565b612382565b6005546001600160a01b031633146111935760405162461bcd60e51b8152600401610d6690613bbe565b600b5430600090815260208190526040902054101561121c576040805162461bcd60e51b81526020600482015260248101919091527f43616e206f6e6c792073776170207768656e20746f6b656e20616d6f756e742060448201527f6973206174206f7220686967686572207468616e207265737472696374696f6e6064820152608401610d66565b600a805460ff60a01b1916600160a01b179055611237613207565b600a805460ff60a01b191690556040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb329060200160405180910390a1565b6005546001600160a01b031633146112a35760405162461bcd60e51b8152600401610d6690613bbe565b60005b828110156111275781601160008686858181106112c5576112c5613bf3565b90506020020160208101906112da91906137ea565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558061130c81613c1f565b9150506112a6565b6005546001600160a01b0316331461133e5760405162461bcd60e51b8152600401610d6690613bbe565b6001600160a01b0381166113645760405162461bcd60e51b8152600401610d6690613d7f565b600e80546001600160a01b0319166001600160a01b0383169081179091556040517f2e1e696cfb265fa16e1170d24ef04cb2262772bde00ecf34d80bae6722487b7f90600090a250565b6005546001600160a01b031633146113d85760405162461bcd60e51b8152600401610d6690613bbe565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b0316331461144c5760405162461bcd60e51b8152600401610d6690613bbe565b6014805460ff199081169091556016805490911690556002546006556002546007556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6005546001600160a01b031633146114c35760405162461bcd60e51b8152600401610d6690613bbe565b8061153657600a546001600160a01b03908116908316036115365760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610d66565b6001600160a01b03919091166000908152602660205260409020805460ff1916911515919091179055565b6005546001600160a01b0316331461158b5760405162461bcd60e51b8152600401610d6690613bbe565b601454610100900460ff16156115e35760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610d66565b600a8111156116445760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f74206d616b652070656e616c747920626c6f636b73206d6f72652060448201526607468616e2031360cc1b6064820152608401610d66565b6014805462ffff0019166201010017905543600f819055611666908290613d6c565b6010556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a150565b6005546000906001600160a01b031633146116c25760405162461bcd60e51b8152600401610d6690613bbe565b6001600160a01b0383166117185760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610d66565b6001600160a01b038316301415806117385750601454610100900460ff16155b6117a15760405162461bcd60e51b815260206004820152603460248201527f43616e2774207769746864726177206e617469766520746f6b656e73207768696044820152736c652074726164696e672069732061637469766560601b6064820152608401610d66565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa1580156117e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061180c9190613dc4565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af115801561185f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118839190613ddd565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6005546001600160a01b031633146118f95760405162461bcd60e51b8152600401610d6690613bbe565b6001600160a01b03811661191f5760405162461bcd60e51b8152600401610d6690613d7f565b600c80546001600160a01b0319166001600160a01b0383169081179091556040517fd1e7d6a3390dd5008bd1c57798817b9f806e4c417264e7d3d67e42e784dc24a990600090a250565b606060048054610ca290613b84565b60606012805480602002602001604051908101604052809291908181526020018280548015610d1b57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116119b2575050505050905090565b6005546001600160a01b03163314611a035760405162461bcd60e51b8152600401610d6690613bbe565b600a546001600160a01b0390811690831603611a875760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610d66565b611a9182826134bb565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b3360009081526001602090815260408083206001600160a01b038616845290915281205482811015611b4f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610d66565b611b5c3385858403612382565b5060019392505050565b6000610d323384846125fb565b6005546001600160a01b03163314611b9d5760405162461bcd60e51b8152600401610d6690613bbe565b60005b82811015611127578160256000868685818110611bbf57611bbf613bf3565b9050602002016020810190611bd491906137ea565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055838382818110611c0e57611c0e613bf3565b9050602002016020810190611c2391906137ea565b6001600160a01b03167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df783604051611c5f911515815260200190565b60405180910390a280611c7181613c1f565b915050611ba0565b6005546001600160a01b03163314611ca35760405162461bcd60e51b8152600401610d6690613bbe565b6001600160a01b038216600081815260256020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b03163314611d2c5760405162461bcd60e51b8152600401610d6690613bbe565b611d386012600a613d1c565b6064611d4360025490565b611d4e906001613d2b565b611d589190613d4a565b611d629190613d4a565b811015611dc25760405162461bcd60e51b815260206004820152602860248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015267207468616e20312560c01b6064820152608401610d66565b611dce6012600a613d1c565b611dd89082613d2b565b60088190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc90602001611051565b6005546001600160a01b03163314611e375760405162461bcd60e51b8152600401610d6690613bbe565b6001600160a01b038116611e5d5760405162461bcd60e51b8152600401610d6690613d7f565b600d80546001600160a01b0319166001600160a01b0383169081179091556040517f804ec39c1aea0b9f2615a34c3fa437b6ddda2c72e6848abf0f23955589a7ad5490600090a250565b6005546001600160a01b03163314611ed15760405162461bcd60e51b8152600401610d6690613bbe565b620186a0611ede60025490565b611ee9906001613d2b565b611ef39190613d4a565b811015611f605760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610d66565b6103e8611f6c60025490565b611f77906001613d2b565b611f819190613d4a565b811115611fed5760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171892903a37ba30b61039bab838363c9760611b6064820152608401610d66565b600b55565b6005546001600160a01b0316331461201c5760405162461bcd60e51b8152600401610d6690613bbe565b6120286012600a613d1c565b6103e861203460025490565b61203f906001613d2b565b6120499190613d4a565b6120539190613d4a565b8110156120b55760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e312560b01b6064820152608401610d66565b6120c16012600a613d1c565b6120cb9082613d2b565b60078190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e90602001611051565b6005546001600160a01b0316331461212a5760405162461bcd60e51b8152600401610d6690613bbe565b601d849055601e8390556020829055601f819055808261214a8587613d6c565b6121549190613d6c565b61215e9190613d6c565b601c5560646121706127106014613d2b565b61217a9190613d4a565b601c5411156111275760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323025206f72206c6573730000006044820152606401610d66565b6005546001600160a01b031633146121f55760405162461bcd60e51b8152600401610d6690613bbe565b6016805460ff19169055565b6012818154811061221157600080fd5b6000918252602090912001546001600160a01b0316905081565b6005546001600160a01b031633146122555760405162461bcd60e51b8152600401610d6690613bbe565b6001600160a01b0381166122ba5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610d66565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146123405760405162461bcd60e51b8152600401610d6690613bbe565b604051600090339047908381818185875af1925050503d8060008114611127576040519150601f19603f3d011682016040523d82523d6000602084013e611127565b6001600160a01b0383166123e45760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610d66565b6001600160a01b0382166124455760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610d66565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166124cc5760405162461bcd60e51b8152600401610d6690613dfa565b6001600160a01b0382166124f25760405162461bcd60e51b8152600401610d6690613e3f565b6001600160a01b0383166000908152602081905260409020548181101561256a5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610d66565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906125a1908490613d6c565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516125ed91815260200190565b60405180910390a350505050565b6001600160a01b0383166126215760405162461bcd60e51b8152600401610d6690613dfa565b6001600160a01b0382166126475760405162461bcd60e51b8152600401610d6690613e3f565b600081116126975760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610d66565b601454610100900460ff1661272a576001600160a01b03831660009081526025602052604090205460ff16806126e557506001600160a01b03821660009081526025602052604090205460ff165b61272a5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610d66565b601454610100900460ff161561282a576001600160a01b03831660009081526011602052604090205460ff1615801561277c57506001600160a01b03821660009081526011602052604090205460ff16155b8061279457506005546001600160a01b038381169116145b806127a957506001600160a01b03821661dead145b61282a5760405162461bcd60e51b815260206004820152604660248201527f426f74732063616e6e6f74207472616e7366657220746f6b656e7320696e206f60448201527f72206f75742065786365707420746f206f776e6572206f722064656164206164606482015265323932b9b99760d11b608482015260a401610d66565b60145460ff1615612c3c576005546001600160a01b0384811691161480159061286157506005546001600160a01b03838116911614155b801561287557506001600160a01b03821615155b801561288c57506001600160a01b03821661dead14155b80156128b157506001600160a01b03831660009081526025602052604090205460ff16155b80156128d657506001600160a01b03821660009081526025602052604090205460ff16155b15612c3c5760165460ff16156129ef576009546001600160a01b038381169116148015906129125750600a546001600160a01b03838116911614155b156129ef57612922600243613e82565b326000908152601560205260409020541080156129605750612945600243613e82565b6001600160a01b038316600090815260156020526040902054105b6129ca5760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527432b21710102a393c9030b3b0b4b7103630ba32b91760591b6064820152608401610d66565b3260009081526015602052604080822043908190556001600160a01b03851683529120555b6001600160a01b03831660009081526027602052604090205460ff168015612a3057506001600160a01b03821660009081526026602052604090205460ff16155b15612b0757600654811115612a985760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610d66565b6008546001600160a01b038316600090815260208190526040902054612abe9083613d6c565b1115612b025760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610d66565b612c3c565b6001600160a01b03821660009081526027602052604090205460ff168015612b4857506001600160a01b03831660009081526026602052604090205460ff16155b15612bb257600754811115612b025760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610d66565b6001600160a01b03821660009081526026602052604090205460ff16612c3c576008546001600160a01b038316600090815260208190526040902054612bf89083613d6c565b1115612c3c5760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610d66565b30600090815260208190526040902054600b5481108015908190612c68575060145462010000900460ff165b8015612c7e5750600a54600160a01b900460ff16155b8015612ca357506001600160a01b03851660009081526027602052604090205460ff16155b8015612cc857506001600160a01b03851660009081526025602052604090205460ff16155b8015612ced57506001600160a01b03841660009081526025602052604090205460ff16155b15612d1b57600a805460ff60a01b1916600160a01b179055612d0d613207565b600a805460ff60a01b191690555b6001600160a01b03851660009081526025602052604090205460019060ff1680612d5d57506001600160a01b03851660009081526025602052604090205460ff165b15612d66575060005b600081156131f35760105443108015612d9757506001600160a01b03871660009081526027602052604090205460ff165b8015612dbc57506001600160a01b03861660009081526027602052604090205460ff16155b8015612de157506001600160a01b03861660009081526025602052604090205460ff16155b8015612def57506000601754115b15612fda576010544310612e1657600160066000828254612e109190613e82565b90915550505b6001600160a01b03861660009081526011602052604090205460ff16612ef6576001600160a01b0386166000908152601160205260408120805460ff191660019081179091556013805491929091612e6f908490613d6c565b9091555050601280546001810182556000919091527fbb8a6a4669ba250d26cd7a459eca9d215f8307e33aebe50379bc5a3617ec34440180546001600160a01b0319166001600160a01b0388169081179091556040519081527f55678e47d0a699d3ab99b0184c4ff14f2246ba80522deb921aa0c8823578c44a9060200160405180910390a15b61271060175486612f079190613d2b565b612f119190613d4a565b905060175460195482612f249190613d2b565b612f2e9190613d4a565b60226000828254612f3f9190613d6c565b9091555050601754601854612f549083613d2b565b612f5e9190613d4a565b60216000828254612f6f9190613d6c565b9091555050601754601b54612f849083613d2b565b612f8e9190613d4a565b60236000828254612f9f9190613d6c565b9091555050601754601a54612fb49083613d2b565b612fbe9190613d4a565b60246000828254612fcf9190613d6c565b909155506131d59050565b6001600160a01b03861660009081526027602052604090205460ff16801561300457506000601c54115b156130c757612710601c548661301a9190613d2b565b6130249190613d4a565b9050601c54601e54826130379190613d2b565b6130419190613d4a565b602260008282546130529190613d6c565b9091555050601c54601d546130679083613d2b565b6130719190613d4a565b602160008282546130829190613d6c565b9091555050601c546020546130979083613d2b565b6130a19190613d4a565b602360008282546130b29190613d6c565b9091555050601c54601f54612fb49083613d2b565b6001600160a01b03871660009081526027602052604090205460ff1680156130f157506000601754115b156131d557612710601754866131079190613d2b565b6131119190613d4a565b9050601754601954826131249190613d2b565b61312e9190613d4a565b6022600082825461313f9190613d6c565b90915550506017546018546131549083613d2b565b61315e9190613d4a565b6021600082825461316f9190613d6c565b9091555050601754601b546131849083613d2b565b61318e9190613d4a565b6023600082825461319f9190613d6c565b9091555050601754601a546131b49083613d2b565b6131be9190613d4a565b602460008282546131cf9190613d6c565b90915550505b80156131e6576131e68730836124a6565b6131f08186613e82565b94505b6131fe8787876124a6565b50505050505050565b30600090815260208190526040812054905060006024546023546021546022546132319190613d6c565b61323b9190613d6c565b6132459190613d6c565b9050811580613252575080155b1561325b575050565b600b54613269906014613d2b565b82111561328157600b5461327e906014613d2b565b91505b600080600283602254866132959190613d2b565b61329f9190613d4a565b6132a99190613d4a565b90506132bd6132b88286613e82565b6134e9565b602254479081906000906132d390600290613d4a565b6132dd9087613e82565b6021546132ea9085613d2b565b6132f49190613d4a565b9050600060026022546133079190613d4a565b6133119088613e82565b60235461331e9086613d2b565b6133289190613d4a565b90506000600260225461333b9190613d4a565b6133459089613e82565b6024546133529087613d2b565b61335c9190613d4a565b9050806133698385613d6c565b6133739190613d6c565b61337d9085613e82565b6000602281905560218190556023819055602455935085158015906133a25750600084115b156133b1576133b18685613643565b600d546040516001600160a01b03909116908390600081818185875af1925050503d80600081146133fe576040519150601f19603f3d011682016040523d82523d6000602084013e613403565b606091505b5050600e546040519198506001600160a01b0316908290600081818185875af1925050503d8060008114613453576040519150601f19603f3d011682016040523d82523d6000602084013e613458565b606091505b5050600c546040519198506001600160a01b0316904790600081818185875af1925050503d80600081146134a8576040519150601f19603f3d011682016040523d82523d6000602084013e6134ad565b606091505b505050505050505050505050565b6001600160a01b0382166000908152602760205260409020805460ff1916821515179055611a9182826136f5565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061351e5761351e613bf3565b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015613577573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061359b9190613e95565b816001815181106135ae576135ae613bf3565b6001600160a01b0392831660209182029290920101526009546135d49130911684612382565b60095460405163791ac94760e01b81526001600160a01b039091169063791ac9479061360d908590600090869030904290600401613eb2565b600060405180830381600087803b15801561362757600080fd5b505af115801561363b573d6000803e3d6000fd5b505050505050565b60095461365b9030906001600160a01b031684612382565b60095460405163f305d71960e01b815230600482015260248101849052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af11580156136c9573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906136ee9190613eee565b5050505050565b6001600160a01b038216600081815260266020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b600060208083528351808285015260005b8181101561378557858101830151858201604001528201613769565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146137bb57600080fd5b50565b600080604083850312156137d157600080fd5b82356137dc816137a6565b946020939093013593505050565b6000602082840312156137fc57600080fd5b8135613807816137a6565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561384d5761384d61380e565b604052919050565b600067ffffffffffffffff82111561386f5761386f61380e565b5060051b60200190565b600082601f83011261388a57600080fd5b8135602061389f61389a83613855565b613824565b82815260059290921b840181019181810190868411156138be57600080fd5b8286015b848110156138d957803583529183019183016138c2565b509695505050505050565b600080604083850312156138f757600080fd5b823567ffffffffffffffff8082111561390f57600080fd5b818501915085601f83011261392357600080fd5b8135602061393361389a83613855565b82815260059290921b8401810191818101908984111561395257600080fd5b948201945b8386101561397957853561396a816137a6565b82529482019490820190613957565b9650508601359250508082111561398f57600080fd5b5061399c85828601613879565b9150509250929050565b6000806000606084860312156139bb57600080fd5b83356139c6816137a6565b925060208401356139d6816137a6565b929592945050506040919091013590565b6000602082840312156139f957600080fd5b5035919050565b60008060008060808587031215613a1657600080fd5b5050823594602084013594506040840135936060013592509050565b80151581146137bb57600080fd5b600080600060408486031215613a5557600080fd5b833567ffffffffffffffff80821115613a6d57600080fd5b818601915086601f830112613a8157600080fd5b813581811115613a9057600080fd5b8760208260051b8501011115613aa557600080fd5b60209283019550935050840135613abb81613a32565b809150509250925092565b60008060408385031215613ad957600080fd5b8235613ae4816137a6565b91506020830135613af481613a32565b809150509250929050565b60008060408385031215613b1257600080fd5b8235613b1d816137a6565b91506020830135613af4816137a6565b600081518084526020808501945080840160005b83811015613b665781516001600160a01b031687529582019590820190600101613b41565b509495945050505050565b6020815260006138076020830184613b2d565b600181811c90821680613b9857607f821691505b602082108103613bb857634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201613c3157613c31613c09565b5060010190565b600181815b80851115613c73578160001904821115613c5957613c59613c09565b80851615613c6657918102915b93841c9390800290613c3d565b509250929050565b600082613c8a57506001610d36565b81613c9757506000610d36565b8160018114613cad5760028114613cb757613cd3565b6001915050610d36565b60ff841115613cc857613cc8613c09565b50506001821b610d36565b5060208310610133831016604e8410600b8410161715613cf6575081810a610d36565b613d008383613c38565b8060001904821115613d1457613d14613c09565b029392505050565b600061380760ff841683613c7b565b6000816000190483118215151615613d4557613d45613c09565b500290565b600082613d6757634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610d3657610d36613c09565b60208082526025908201527f5f6d61726b6574696e674164647265737320616464726573732063616e6e6f74604082015264020626520360dc1b606082015260800190565b600060208284031215613dd657600080fd5b5051919050565b600060208284031215613def57600080fd5b815161380781613a32565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610d3657610d36613c09565b600060208284031215613ea757600080fd5b8151613807816137a6565b85815284602082015260a060408201526000613ed160a0830186613b2d565b6001600160a01b0394909416606083015250608001529392505050565b600080600060608486031215613f0357600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220bdc2c4f00bff7613933b61225caa4d008a51b0bbe992aa5c6525a8437f845f8e64736f6c63430008100033

Deployed Bytecode Sourcemap

9676:21630:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4077:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9823:27;;;;;;;;;;-1:-1:-1;9823:27:0;;;;-1:-1:-1;;;;;9823:27:0;;;;;;-1:-1:-1;;;;;749:32:1;;;731:51;;719:2;704:18;9823:27:0;567:221:1;4991:169:0;;;;;;;;;;-1:-1:-1;4991:169:0;;;;;:::i;:::-;;:::i;:::-;;;1414:14:1;;1407:22;1389:41;;1377:2;1362:18;4991:169:0;1249:187:1;11365:64:0;;;;;;;;;;-1:-1:-1;11365:64:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;4398:108;;;;;;;;;;-1:-1:-1;4486:12:0;;4398:108;;;1839:25:1;;;1827:2;1812:18;4398:108:0;1693:177:1;11105:33:0;;;;;;;;;;;;;;;;11065;;;;;;;;;;;;;;;;18099:618;;;;;;;;;;-1:-1:-1;18099:618:0;;;;;:::i;:::-;;:::i;:::-;;5168:492;;;;;;;;;;-1:-1:-1;5168:492:0;;;;;:::i;:::-;;:::i;16548:295::-;;;;;;;;;;-1:-1:-1;16548:295:0;;;;;:::i;:::-;;:::i;19542:468::-;;;;;;;;;;-1:-1:-1;19542:468:0;;;;;:::i;:::-;;:::i;4297:93::-;;;;;;;;;;-1:-1:-1;4297:93:0;;4380:2;5540:36:1;;5528:2;5513:18;4297:93:0;5398:184:1;5668:215:0;;;;;;;;;;-1:-1:-1;5668:215:0;;;;;:::i;:::-;;:::i;9995:25::-;;;;;;;;;;-1:-1:-1;9995:25:0;;;;-1:-1:-1;;;;;9995:25:0;;;9857:21;;;;;;;;;;-1:-1:-1;9857:21:0;;;;-1:-1:-1;;;;;9857:21:0;;;10303:33;;;;;;;;;;-1:-1:-1;10303:33:0;;;;;;;;30991:312;;;;;;;;;;;;;:::i;16149:228::-;;;;;;;;;;-1:-1:-1;16149:228:0;;;;;:::i;:::-;;:::i;26415:120::-;;;;;;;;;;-1:-1:-1;26509:18:0;;26494:12;:33;26415:120;;10762:29;;;;;;;;;;;;;;;;30657:282;;;;;;;;;;-1:-1:-1;30657:282:0;;;;;:::i;:::-;;:::i;9755:28::-;;;;;;;;;;;;;;;;10831;;;;;;;;;;;;;;;;10269:25;;;;;;;;;;;;;;;;10942:30;;;;;;;;;;;;;;;;10383:31;;;;;;;;;;-1:-1:-1;10383:31:0;;;;;;;;;;;4514:127;;;;;;;;;;-1:-1:-1;4514:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;4615:18:0;4588:7;4615:18;;;;;;;;;;;;4514:127;8158:150;;;;;;;;;;;;;:::i;15793:237::-;;;;;;;;;;;;;:::i;18729:260::-;;;;;;;;;;-1:-1:-1;18729:260:0;;;;;:::i;:::-;;:::i;10688:30::-;;;;;;;;;;;;;;;;15300:437;;;;;;;;;;-1:-1:-1;15300:437:0;;;;;:::i;:::-;;:::i;29365:498::-;;;;;;;;;;-1:-1:-1;29365:498:0;;;;;:::i;:::-;;:::i;10183:44::-;;;;;;;;;;-1:-1:-1;10183:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;9721:27;;;;;;;;;;;;;;;;7944:79;;;;;;;;;;-1:-1:-1;8009:6:0;;-1:-1:-1;;;;;8009:6:0;7944:79;;30101:289;;;;;;;;;;-1:-1:-1;30101:289:0;;;;;:::i;:::-;;:::i;10866:31::-;;;;;;;;;;;;;;;;4185:104;;;;;;;;;;;;;:::i;16038:103::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;18997:293::-;;;;;;;;;;-1:-1:-1;18997:293:0;;;;;:::i;:::-;;:::i;10798:24::-;;;;;;;;;;;;;;;;11013:43;;;;;;;;;;;;11051:5;11013:43;;11145:27;;;;;;;;;;;;;;;;10979:25;;;;;;;;;;;;;;;;5891:413;;;;;;;;;;-1:-1:-1;5891:413:0;;;;;:::i;:::-;;:::i;9957:31::-;;;;;;;;;;-1:-1:-1;9957:31:0;;;;-1:-1:-1;;;;;9957:31:0;;;10143:33;;;;;;;;;;;;;;;;4649:175;;;;;;;;;;-1:-1:-1;4649:175:0;;;;;:::i;:::-;;:::i;11587:58::-;;;;;;;;;;-1:-1:-1;11587:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;10343:33;;;;;;;;;;-1:-1:-1;10343:33:0;;;;;;;;;;;20505:282;;;;;;;;;;-1:-1:-1;20505:282:0;;;;;:::i;:::-;;:::i;20795:182::-;;;;;;;;;;-1:-1:-1;20795:182:0;;;;;:::i;:::-;;:::i;17163:293::-;;;;;;;;;;-1:-1:-1;17163:293:0;;;;;:::i;:::-;;:::i;10027:30::-;;;;;;;;;;-1:-1:-1;10027:30:0;;;;-1:-1:-1;;;;;10027:30:0;;;10606:39;;;;;;;;;;-1:-1:-1;10606:39:0;;;;;;;;11179:32;;;;;;;;;;;;;;;;30402:247;;;;;;;;;;-1:-1:-1;30402:247:0;;;;;:::i;:::-;;:::i;17526:346::-;;;;;;;;;;-1:-1:-1;17526:346:0;;;;;:::i;:::-;;:::i;10654:27::-;;;;;;;;;;;;;;;;16855:300;;;;;;;;;;-1:-1:-1;16855:300:0;;;;;:::i;:::-;;:::i;4832:151::-;;;;;;;;;;-1:-1:-1;4832:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;4948:18:0;;;4921:7;4948:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;4832:151;9915:33;;;;;;;;;;;;;;;;20018:479;;;;;;;;;;-1:-1:-1;20018:479:0;;;;;:::i;:::-;;:::i;16438:98::-;;;;;;;;;;;;;:::i;10234:28::-;;;;;;;;;;-1:-1:-1;10234:28:0;;;;;:::i;:::-;;:::i;10066:37::-;;;;;;;;;;;;;;;;10725:30;;;;;;;;;;;;;;;;8316:244;;;;;;;;;;-1:-1:-1;8316:244:0;;;;;:::i;:::-;;:::i;29933:160::-;;;;;;;;;;;;;:::i;10904:31::-;;;;;;;;;;;;;;;;9790:24;;;;;;;;;;;;;;;;4077:100;4131:13;4164:5;4157:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4077:100;:::o;4991:169::-;5074:4;5091:39;306:10;5114:7;5123:6;5091:8;:39::i;:::-;-1:-1:-1;5148:4:0;4991:169;;;;;:::o;18099:618::-;8071:6;;-1:-1:-1;;;;;8071:6:0;306:10;8071:22;8063:67;;;;-1:-1:-1;;;8063:67:0;;;;;;;:::i;:::-;;;;;;;;;18241:15:::1;:22;18223:7;:14;:40;18215:83;;;::::0;-1:-1:-1;;;18215:83:0;;9133:2:1;18215:83:0::1;::::0;::::1;9115:21:1::0;9172:2;9152:18;;;9145:30;9211:32;9191:18;;;9184:60;9261:18;;18215:83:0::1;8931:354:1::0;18215:83:0::1;18334:3;18317:7;:14;:20;18309:87;;;::::0;-1:-1:-1;;;18309:87:0;;9492:2:1;18309:87:0::1;::::0;::::1;9474:21:1::0;9531:2;9511:18;;;9504:30;9570:34;9550:18;;;9543:62;-1:-1:-1;;;9621:18:1;;;9614:52;9683:19;;18309:87:0::1;9290:418:1::0;18309:87:0::1;18509:9;18505:205;18528:7;:14;18524:1;:18;18505:205;;;18563:14;18580:7;18588:1;18580:10;;;;;;;;:::i;:::-;;;;;;;18563:27;;18605:14;18622:15;18638:1;18622:18;;;;;;;;:::i;:::-;;;;;;;18605:35;;18655:43;18671:10;18683:6;18691;18655:15;:43::i;:::-;18548:162;;18544:3;;;;;:::i;:::-;;;;18505:205;;;;18099:618:::0;;:::o;5168:492::-;5308:4;5325:36;5335:6;5343:9;5354:6;5325:9;:36::i;:::-;-1:-1:-1;;;;;5401:19:0;;5374:24;5401:19;;;:11;:19;;;;;;;;306:10;5401:33;;;;;;;;5453:26;;;;5445:79;;;;-1:-1:-1;;;5445:79:0;;10319:2:1;5445:79:0;;;10301:21:1;10358:2;10338:18;;;10331:30;10397:34;10377:18;;;10370:62;-1:-1:-1;;;10448:18:1;;;10441:38;10496:19;;5445:79:0;10117:404:1;5445:79:0;5560:57;5569:6;306:10;5610:6;5591:16;:25;5560:8;:57::i;:::-;-1:-1:-1;5648:4:0;;5168:492;-1:-1:-1;;;;5168:492:0:o;16548:295::-;8071:6;;-1:-1:-1;;;;;8071:6:0;306:10;8071:22;8063:67;;;;-1:-1:-1;;;8063:67:0;;;;;;;:::i;:::-;16670:16:::1;4380:2:::0;16670::::1;:16;:::i;:::-;16661:4;16641:13;4486:12:::0;;;4398:108;16641:13:::1;:17;::::0;16657:1:::1;16641:17;:::i;:::-;:24;;;;:::i;:::-;16640:47;;;;:::i;:::-;16630:6;:57;;16622:111;;;::::0;-1:-1:-1;;;16622:111:0;;12506:2:1;16622:111:0::1;::::0;::::1;12488:21:1::0;12545:2;12525:18;;;12518:30;12584:34;12564:18;;;12557:62;-1:-1:-1;;;12635:18:1;;;12628:39;12684:19;;16622:111:0::1;12304:405:1::0;16622:111:0::1;16769:16;4380:2:::0;16769::::1;:16;:::i;:::-;16759:27;::::0;:6;:27:::1;:::i;:::-;16744:12;:42:::0;;;16802:33:::1;::::0;1839:25:1;;;16802:33:0::1;::::0;1827:2:1;1812:18;16802:33:0::1;;;;;;;;16548:295:::0;:::o;19542:468::-;8071:6;;-1:-1:-1;;;;;8071:6:0;306:10;8071:22;8063:67;;;;-1:-1:-1;;;8063:67:0;;;;;;;:::i;:::-;19680:15:::1;:31:::0;;;19722:15:::1;:31:::0;;;19764:9:::1;:19:::0;;;19794:14:::1;:29:::0;;;19776:7;19811:12;19849:33:::1;19740:13:::0;19698;19849:33:::1;:::i;:::-;:50;;;;:::i;:::-;:62;;;;:::i;:::-;19834:12;:77:::0;19965:3:::1;19946:16;11051:5;19946:2;:16;:::i;:::-;:22;;;;:::i;:::-;19930:12;;:38;;19922:80;;;::::0;-1:-1:-1;;;19922:80:0;;13046:2:1;19922:80:0::1;::::0;::::1;13028:21:1::0;13085:2;13065:18;;;13058:30;13124:31;13104:18;;;13097:59;13173:18;;19922:80:0::1;12844:353:1::0;19922:80:0::1;19542:468:::0;;;;:::o;5668:215::-;306:10;5756:4;5805:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;5805:34:0;;;;;;;;;;5756:4;;5773:80;;5796:7;;5805:47;;5842:10;;5805:47;:::i;:::-;5773:8;:80::i;30991:312::-;8071:6;;-1:-1:-1;;;;;8071:6:0;306:10;8071:22;8063:67;;;;-1:-1:-1;;;8063:67:0;;;;;;;:::i;:::-;31082:18:::1;::::0;31072:4:::1;4588:7:::0;4615:18;;;;;;;;;;;31054:46:::1;;31046:123;;;::::0;;-1:-1:-1;;;31046:123:0;;13404:2:1;31046:123:0::1;::::0;::::1;13386:21:1::0;13423:18;;;13416:30;;;;13482:34;13462:18;;;13455:62;13553:34;13533:18;;;13526:62;13605:19;;31046:123:0::1;13202:428:1::0;31046:123:0::1;31180:8;:15:::0;;-1:-1:-1;;;;31180:15:0::1;-1:-1:-1::0;;;31180:15:0::1;::::0;;31206:10:::1;:8;:10::i;:::-;31227:8;:16:::0;;-1:-1:-1;;;;31227:16:0::1;::::0;;31259:36:::1;::::0;31279:15:::1;1839:25:1::0;;31259:36:0::1;::::0;1827:2:1;1812:18;31259:36:0::1;;;;;;;30991:312::o:0;16149:228::-;8071:6;;-1:-1:-1;;;;;8071:6:0;306:10;8071:22;8063:67;;;;-1:-1:-1;;;8063:67:0;;;;;;;:::i;:::-;16266:9:::1;16262:108;16281:19:::0;;::::1;16262:108;;;16348:10;16321:11;:24;16333:8;;16342:1;16333:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;16321:24:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;16321:24:0;:37;;-1:-1:-1;;16321:37:0::1;::::0;::::1;;::::0;;;::::1;::::0;;16302:3;::::1;::::0;::::1;:::i;:::-;;;;16262:108;;30657:282:::0;8071:6;;-1:-1:-1;;;;;8071:6:0;306:10;8071:22;8063:67;;;;-1:-1:-1;;;8063:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;30749:30:0;::::1;30741:80;;;;-1:-1:-1::0;;;30741:80:0::1;;;;;;;:::i;:::-;30832:15;:43:::0;;-1:-1:-1;;;;;;30832:43:0::1;-1:-1:-1::0;;;;;30832:43:0;::::1;::::0;;::::1;::::0;;;30891:40:::1;::::0;::::1;::::0;-1:-1:-1;;30891:40:0::1;30657:282:::0;:::o;8158:150::-;8071:6;;-1:-1:-1;;;;;8071:6:0;306:10;8071:22;8063:67;;;;-1:-1:-1;;;8063:67:0;;;;;;;:::i;:::-;8251:6:::1;::::0;8230:40:::1;::::0;8267:1:::1;::::0;-1:-1:-1;;;;;8251:6:0::1;::::0;8230:40:::1;::::0;8267:1;;8230:40:::1;8281:6;:19:::0;;-1:-1:-1;;;;;;8281:19:0::1;::::0;;8158:150::o;15793:237::-;8071:6;;-1:-1:-1;;;;;8071:6:0;306:10;8071:22;8063:67;;;;-1:-1:-1;;;8063:67:0;;;;;;;:::i;:::-;15849:14:::1;:22:::0;;-1:-1:-1;;15849:22:0;;::::1;::::0;;;15882:20:::1;:28:::0;;;;::::1;::::0;;4486:12;;15921::::1;:28:::0;4486:12;;15960:13:::1;:29:::0;16007:15:::1;::::0;::::1;::::0;;;::::1;15793:237::o:0;18729:260::-;8071:6;;-1:-1:-1;;;;;8071:6:0;306:10;8071:22;8063:67;;;;-1:-1:-1;;;8063:67:0;;;;;;;:::i;:::-;18825:4:::1;18821:104;;18863:6;::::0;-1:-1:-1;;;;;18863:6:0;;::::1;18853:16:::0;;::::1;::::0;18845:68:::1;;;::::0;-1:-1:-1;;;18845:68:0;;14243:2:1;18845:68:0::1;::::0;::::1;14225:21:1::0;14282:2;14262:18;;;14255:30;14321:34;14301:18;;;14294:62;-1:-1:-1;;;14372:18:1;;;14365:37;14419:19;;18845:68:0::1;14041:403:1::0;18845:68:0::1;-1:-1:-1::0;;;;;18935:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;18935:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;18729:260::o;15300:437::-;8071:6;;-1:-1:-1;;;;;8071:6:0;306:10;8071:22;8063:67;;;;-1:-1:-1;;;8063:67:0;;;;;;;:::i;:::-;15388:13:::1;::::0;::::1;::::0;::::1;;;15387:14;15379:50;;;::::0;-1:-1:-1;;;15379:50:0;;14651:2:1;15379:50:0::1;::::0;::::1;14633:21:1::0;14690:2;14670:18;;;14663:30;14729:25;14709:18;;;14702:53;14772:18;;15379:50:0::1;14449:347:1::0;15379:50:0::1;15468:2;15448:16;:22;;15440:74;;;::::0;-1:-1:-1;;;15440:74:0;;15003:2:1;15440:74:0::1;::::0;::::1;14985:21:1::0;15042:2;15022:18;;;15015:30;15081:34;15061:18;;;15054:62;-1:-1:-1;;;15132:18:1;;;15125:37;15179:19;;15440:74:0::1;14801:403:1::0;15440:74:0::1;15525:13;:20:::0;;-1:-1:-1;;15556:18:0;;;;;15606:12:::1;15585:18;:33:::0;;;15650:37:::1;::::0;15671:16;;15650:37:::1;:::i;:::-;15629:18;:58:::0;15713:16:::1;::::0;::::1;::::0;;;::::1;15300:437:::0;:::o;29365:498::-;8071:6;;29452:10;;-1:-1:-1;;;;;8071:6:0;306:10;8071:22;8063:67;;;;-1:-1:-1;;;8063:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;29483:20:0;::::1;29475:59;;;::::0;-1:-1:-1;;;29475:59:0;;15411:2:1;29475:59:0::1;::::0;::::1;15393:21:1::0;15450:2;15430:18;;;15423:30;15489:28;15469:18;;;15462:56;15535:18;;29475:59:0::1;15209:350:1::0;29475:59:0::1;-1:-1:-1::0;;;;;29553:23:0;::::1;29571:4;29553:23;;::::0;:41:::1;;-1:-1:-1::0;29581:13:0::1;::::0;::::1;::::0;::::1;;;29580:14;29553:41;29545:106;;;::::0;-1:-1:-1;;;29545:106:0;;15766:2:1;29545:106:0::1;::::0;::::1;15748:21:1::0;15805:2;15785:18;;;15778:30;15844:34;15824:18;;;15817:62;-1:-1:-1;;;15895:18:1;;;15888:50;15955:19;;29545:106:0::1;15564:416:1::0;29545:106:0::1;29689:39;::::0;-1:-1:-1;;;29689:39:0;;29722:4:::1;29689:39;::::0;::::1;731:51:1::0;29662:24:0::1;::::0;-1:-1:-1;;;;;29689:24:0;::::1;::::0;::::1;::::0;704:18:1;;29689:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29747:46;::::0;-1:-1:-1;;;29747:46:0;;-1:-1:-1;;;;;16366:32:1;;;29747:46:0::1;::::0;::::1;16348:51:1::0;16415:18;;;16408:34;;;29662:66:0;;-1:-1:-1;29747:23:0;;::::1;::::0;::::1;::::0;16321:18:1;;29747:46:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29809;::::0;;-1:-1:-1;;;;;16366:32:1;;16348:51;;16430:2;16415:18;;16408:34;;;29739:54:0;;-1:-1:-1;29809:46:0::1;::::0;16321:18:1;29809:46:0::1;;;;;;;29464:399;29365:498:::0;;;;:::o;30101:289::-;8071:6;;-1:-1:-1;;;;;8071:6:0;306:10;8071:22;8063:67;;;;-1:-1:-1;;;8063:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;30195:31:0;::::1;30187:81;;;;-1:-1:-1::0;;;30187:81:0::1;;;;;;;:::i;:::-;30279:16;:45:::0;;-1:-1:-1;;;;;;30279:45:0::1;-1:-1:-1::0;;;;;30279:45:0;::::1;::::0;;::::1;::::0;;;30340:42:::1;::::0;::::1;::::0;-1:-1:-1;;30340:42:0::1;30101:289:::0;:::o;4185:104::-;4241:13;4274:7;4267:14;;;;;:::i;16038:103::-;16087:16;16122:11;16115:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;16115:18:0;;;;;;;;;;;;;;;;;;;;;;16038:103;:::o;18997:293::-;8071:6;;-1:-1:-1;;;;;8071:6:0;306:10;8071:22;8063:67;;;;-1:-1:-1;;;8063:67:0;;;;;;;:::i;:::-;19106:6:::1;::::0;-1:-1:-1;;;;;19106:6:0;;::::1;19098:14:::0;;::::1;::::0;19090:84:::1;;;::::0;-1:-1:-1;;;19090:84:0;;16905:2:1;19090:84:0::1;::::0;::::1;16887:21:1::0;16944:2;16924:18;;;16917:30;16983:34;16963:18;;;16956:62;17054:27;17034:18;;;17027:55;17099:19;;19090:84:0::1;16703:421:1::0;19090:84:0::1;19185:41;19214:4;19220:5;19185:28;:41::i;:::-;19242:40;::::0;;::::1;;::::0;-1:-1:-1;;;;;19242:40:0;::::1;::::0;::::1;::::0;;;::::1;18997:293:::0;;:::o;5891:413::-;306:10;5984:4;6028:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;6028:34:0;;;;;;;;;;6081:35;;;;6073:85;;;;-1:-1:-1;;;6073:85:0;;17331:2:1;6073:85:0;;;17313:21:1;17370:2;17350:18;;;17343:30;17409:34;17389:18;;;17382:62;-1:-1:-1;;;17460:18:1;;;17453:35;17505:19;;6073:85:0;17129:401:1;6073:85:0;6194:67;306:10;6217:7;6245:15;6226:16;:34;6194:8;:67::i;:::-;-1:-1:-1;6292:4:0;;5891:413;-1:-1:-1;;;5891:413:0:o;4649:175::-;4735:4;4752:42;306:10;4776:9;4787:6;4752:9;:42::i;20505:282::-;8071:6;;-1:-1:-1;;;;;8071:6:0;306:10;8071:22;8063:67;;;;-1:-1:-1;;;8063:67:0;;;;;;;:::i;:::-;20612:9:::1;20608:172;20627:19:::0;;::::1;20608:172;;;20702:8;20667:19;:32;20687:8;;20696:1;20687:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;20667:32:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;20667:32:0;:43;;-1:-1:-1;;20667:43:0::1;::::0;::::1;;::::0;;;::::1;::::0;;20746:8;;20755:1;20746:11;;::::1;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;20730:38:0::1;;20759:8;20730:38;;;;1414:14:1::0;1407:22;1389:41;;1377:2;1362:18;;1249:187;20730:38:0::1;;;;;;;;20648:3:::0;::::1;::::0;::::1;:::i;:::-;;;;20608:172;;20795:182:::0;8071:6;;-1:-1:-1;;;;;8071:6:0;306:10;8071:22;8063:67;;;;-1:-1:-1;;;8063:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20880:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;20880:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;20935:34;;1389:41:1;;;20935:34:0::1;::::0;1362:18:1;20935:34:0::1;;;;;;;20795:182:::0;;:::o;17163:293::-;8071:6;;-1:-1:-1;;;;;8071:6:0;306:10;8071:22;8063:67;;;;-1:-1:-1;;;8063:67:0;;;;;;;:::i;:::-;17287:16:::1;4380:2:::0;17287::::1;:16;:::i;:::-;17279:3;17259:13;4486:12:::0;;;4398:108;17259:13:::1;:17;::::0;17275:1:::1;17259:17;:::i;:::-;:23;;;;:::i;:::-;17258:46;;;;:::i;:::-;17248:6;:56;;17240:109;;;::::0;-1:-1:-1;;;17240:109:0;;17737:2:1;17240:109:0::1;::::0;::::1;17719:21:1::0;17776:2;17756:18;;;17749:30;17815:34;17795:18;;;17788:62;-1:-1:-1;;;17866:18:1;;;17859:38;17914:19;;17240:109:0::1;17535:404:1::0;17240:109:0::1;17382:16;4380:2:::0;17382::::1;:16;:::i;:::-;17372:27;::::0;:6;:27:::1;:::i;:::-;17360:9;:39:::0;;;17415:33:::1;::::0;1839:25:1;;;17415:33:0::1;::::0;1827:2:1;1812:18;17415:33:0::1;1693:177:1::0;30402:247:0;8071:6;;-1:-1:-1;;;;;8071:6:0;306:10;8071:22;8063:67;;;;-1:-1:-1;;;8063:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;30484:25:0;::::1;30476:75;;;;-1:-1:-1::0;;;30476:75:0::1;;;;;;;:::i;:::-;30562:10;:33:::0;;-1:-1:-1;;;;;;30562:33:0::1;-1:-1:-1::0;;;;;30562:33:0;::::1;::::0;;::::1;::::0;;;30611:30:::1;::::0;::::1;::::0;-1:-1:-1;;30611:30:0::1;30402:247:::0;:::o;17526:346::-;8071:6;;-1:-1:-1;;;;;8071:6:0;306:10;8071:22;8063:67;;;;-1:-1:-1;;;8063:67:0;;;;;;;:::i;:::-;17649:6:::1;17629:13;4486:12:::0;;;4398:108;17629:13:::1;:17;::::0;17645:1:::1;17629:17;:::i;:::-;:26;;;;:::i;:::-;17616:9;:39;;17608:105;;;::::0;-1:-1:-1;;;17608:105:0;;18146:2:1;17608:105:0::1;::::0;::::1;18128:21:1::0;18185:2;18165:18;;;18158:30;18224:34;18204:18;;;18197:62;-1:-1:-1;;;18275:18:1;;;18268:51;18336:19;;17608:105:0::1;17944:417:1::0;17608:105:0::1;17764:4;17744:13;4486:12:::0;;;4398:108;17744:13:::1;:17;::::0;17760:1:::1;17744:17;:::i;:::-;:24;;;;:::i;:::-;17731:9;:37;;17723:102;;;::::0;-1:-1:-1;;;17723:102:0;;18568:2:1;17723:102:0::1;::::0;::::1;18550:21:1::0;18607:2;18587:18;;;18580:30;18646:34;18626:18;;;18619:62;-1:-1:-1;;;18697:18:1;;;18690:50;18757:19;;17723:102:0::1;18366:416:1::0;17723:102:0::1;17835:18;:30:::0;17526:346::o;16855:300::-;8071:6;;-1:-1:-1;;;;;8071:6:0;306:10;8071:22;8063:67;;;;-1:-1:-1;;;8063:67:0;;;;;;;:::i;:::-;16978:16:::1;4380:2:::0;16978::::1;:16;:::i;:::-;16969:4;16949:13;4486:12:::0;;;4398:108;16949:13:::1;:17;::::0;16965:1:::1;16949:17;:::i;:::-;:24;;;;:::i;:::-;16948:47;;;;:::i;:::-;16938:6;:57;;16930:112;;;::::0;-1:-1:-1;;;16930:112:0;;18989:2:1;16930:112:0::1;::::0;::::1;18971:21:1::0;19028:2;19008:18;;;19001:30;19067:34;19047:18;;;19040:62;-1:-1:-1;;;19118:18:1;;;19111:40;19168:19;;16930:112:0::1;18787:406:1::0;16930:112:0::1;17079:16;4380:2:::0;17079::::1;:16;:::i;:::-;17069:27;::::0;:6;:27:::1;:::i;:::-;17053:13;:43:::0;;;17112:35:::1;::::0;1839:25:1;;;17112:35:0::1;::::0;1827:2:1;1812:18;17112:35:0::1;1693:177:1::0;20018:479:0;8071:6;;-1:-1:-1;;;;;8071:6:0;306:10;8071:22;8063:67;;;;-1:-1:-1;;;8063:67:0;;;;;;;:::i;:::-;20157:16:::1;:32:::0;;;20200:16:::1;:32:::0;;;20243:10:::1;:20:::0;;;20274:15:::1;:30:::0;;;20292:12;20256:7;20331:35:::1;20219:13:::0;20176;20331:35:::1;:::i;:::-;:48;;;;:::i;:::-;:66;;;;:::i;:::-;20315:13;:82:::0;20452:3:::1;20433:16;11051:5;20433:2;:16;:::i;:::-;:22;;;;:::i;:::-;20416:13;;:39;;20408:81;;;::::0;-1:-1:-1;;;20408:81:0;;19400:2:1;20408:81:0::1;::::0;::::1;19382:21:1::0;19439:2;19419:18;;;19412:30;19478:31;19458:18;;;19451:59;19527:18;;20408:81:0::1;19198:353:1::0;16438:98:0;8071:6;;-1:-1:-1;;;;;8071:6:0;306:10;8071:22;8063:67;;;;-1:-1:-1;;;8063:67:0;;;;;;;:::i;:::-;16500:20:::1;:28:::0;;-1:-1:-1;;16500:28:0::1;::::0;;16438:98::o;10234:28::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10234:28:0;;-1:-1:-1;10234:28:0;:::o;8316:244::-;8071:6;;-1:-1:-1;;;;;8071:6:0;306:10;8071:22;8063:67;;;;-1:-1:-1;;;8063:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;8405:22:0;::::1;8397:73;;;::::0;-1:-1:-1;;;8397:73:0;;19758:2:1;8397:73:0::1;::::0;::::1;19740:21:1::0;19797:2;19777:18;;;19770:30;19836:34;19816:18;;;19809:62;-1:-1:-1;;;19887:18:1;;;19880:36;19933:19;;8397:73:0::1;19556:402:1::0;8397:73:0::1;8507:6;::::0;8486:38:::1;::::0;-1:-1:-1;;;;;8486:38:0;;::::1;::::0;8507:6:::1;::::0;8486:38:::1;::::0;8507:6:::1;::::0;8486:38:::1;8535:6;:17:::0;;-1:-1:-1;;;;;;8535:17:0::1;-1:-1:-1::0;;;;;8535:17:0;;;::::1;::::0;;;::::1;::::0;;8316:244::o;29933:160::-;8071:6;;-1:-1:-1;;;;;8071:6:0;306:10;8071:22;8063:67;;;;-1:-1:-1;;;8063:67:0;;;;;;;:::i;:::-;30027:58:::1;::::0;29991:12:::1;::::0;30035:10:::1;::::0;30059:21:::1;::::0;29991:12;30027:58;29991:12;30027:58;30059:21;30035:10;30027:58:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7233:380:::0;-1:-1:-1;;;;;7369:19:0;;7361:68;;;;-1:-1:-1;;;7361:68:0;;20375:2:1;7361:68:0;;;20357:21:1;20414:2;20394:18;;;20387:30;20453:34;20433:18;;;20426:62;-1:-1:-1;;;20504:18:1;;;20497:34;20548:19;;7361:68:0;20173:400:1;7361:68:0;-1:-1:-1;;;;;7448:21:0;;7440:68;;;;-1:-1:-1;;;7440:68:0;;20780:2:1;7440:68:0;;;20762:21:1;20819:2;20799:18;;;20792:30;20858:34;20838:18;;;20831:62;-1:-1:-1;;;20909:18:1;;;20902:32;20951:19;;7440:68:0;20578:398:1;7440:68:0;-1:-1:-1;;;;;7521:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;7573:32;;1839:25:1;;;7573:32:0;;1812:18:1;7573:32:0;;;;;;;7233:380;;;:::o;6312:614::-;-1:-1:-1;;;;;6452:20:0;;6444:70;;;;-1:-1:-1;;;6444:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6533:23:0;;6525:71;;;;-1:-1:-1;;;6525:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6633:17:0;;6609:21;6633:17;;;;;;;;;;;6669:23;;;;6661:74;;;;-1:-1:-1;;;6661:74:0;;21993:2:1;6661:74:0;;;21975:21:1;22032:2;22012:18;;;22005:30;22071:34;22051:18;;;22044:62;-1:-1:-1;;;22122:18:1;;;22115:36;22168:19;;6661:74:0;21791:402:1;6661:74:0;-1:-1:-1;;;;;6771:17:0;;;:9;:17;;;;;;;;;;;6791:22;;;6771:42;;6835:20;;;;;;;;:30;;6807:6;;6771:9;6835:30;;6807:6;;6835:30;:::i;:::-;;;;;;;;6900:9;-1:-1:-1;;;;;6883:35:0;6892:6;-1:-1:-1;;;;;6883:35:0;;6911:6;6883:35;;;;1839:25:1;;1827:2;1812:18;;1693:177;6883:35:0;;;;;;;;6433:493;6312:614;;;:::o;20985:5422::-;-1:-1:-1;;;;;21085:18:0;;21077:68;;;;-1:-1:-1;;;21077:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21164:16:0;;21156:64;;;;-1:-1:-1;;;21156:64:0;;;;;;;:::i;:::-;21248:1;21239:6;:10;21231:52;;;;-1:-1:-1;;;21231:52:0;;22400:2:1;21231:52:0;;;22382:21:1;22439:2;22419:18;;;22412:30;22478:31;22458:18;;;22451:59;22527:18;;21231:52:0;22198:353:1;21231:52:0;21308:13;;;;;;;21304:132;;-1:-1:-1;;;;;21345:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;21374:23:0;;;;;;:19;:23;;;;;;;;21345:52;21337:87;;;;-1:-1:-1;;;21337:87:0;;22758:2:1;21337:87:0;;;22740:21:1;22797:2;22777:18;;;22770:30;-1:-1:-1;;;22816:18:1;;;22809:52;22878:18;;21337:87:0;22556:346:1;21337:87:0;21451:13;;;;;;;21448:209;;;-1:-1:-1;;;;;21490:17:0;;;;;;:11;:17;;;;;;;;21489:18;:38;;;;-1:-1:-1;;;;;;21512:15:0;;;;;;:11;:15;;;;;;;;21511:16;21489:38;21488:57;;;-1:-1:-1;8009:6:0;;-1:-1:-1;;;;;21532:13:0;;;8009:6;;21532:13;21488:57;:82;;;-1:-1:-1;;;;;;21549:21:0;;21563:6;21549:21;21488:82;21480:165;;;;-1:-1:-1;;;21480:165:0;;23109:2:1;21480:165:0;;;23091:21:1;23148:2;23128:18;;;23121:30;23187:34;23167:18;;;23160:62;23258:34;23238:18;;;23231:62;-1:-1:-1;;;23309:19:1;;;23302:37;23356:19;;21480:165:0;22907:474:1;21480:165:0;21680:14;;;;21677:1634;;;8009:6;;-1:-1:-1;;;;;21714:15:0;;;8009:6;;21714:15;;;;:32;;-1:-1:-1;8009:6:0;;-1:-1:-1;;;;;21733:13:0;;;8009:6;;21733:13;;21714:32;:52;;;;-1:-1:-1;;;;;;21750:16:0;;;;21714:52;:77;;;;-1:-1:-1;;;;;;21770:21:0;;21784:6;21770:21;;21714:77;:107;;;;-1:-1:-1;;;;;;21796:25:0;;;;;;:19;:25;;;;;;;;21795:26;21714:107;:135;;;;-1:-1:-1;;;;;;21826:23:0;;;;;;:19;:23;;;;;;;;21825:24;21714:135;21710:1590;;;22025:20;;;;22021:506;;;22087:9;;-1:-1:-1;;;;;22073:24:0;;;22087:9;;22073:24;;;;:49;;-1:-1:-1;22115:6:0;;-1:-1:-1;;;;;22101:21:0;;;22115:6;;22101:21;;22073:49;22069:439;;;22200:16;22215:1;22200:12;:16;:::i;:::-;22187:9;22158:39;;;;:28;:39;;;;;;:58;:113;;;;-1:-1:-1;22255:16:0;22270:1;22255:12;:16;:::i;:::-;-1:-1:-1;;;;;22220:32:0;;;;;;:28;:32;;;;;;:51;22158:113;22150:179;;;;-1:-1:-1;;;22150:179:0;;23721:2:1;22150:179:0;;;23703:21:1;23760:2;23740:18;;;23733:30;23799:34;23779:18;;;23772:62;-1:-1:-1;;;23850:18:1;;;23843:51;23911:19;;22150:179:0;23519:417:1;22150:179:0;22385:9;22356:39;;;;:28;:39;;;;;;22398:12;22356:54;;;;-1:-1:-1;;;;;22437:32:0;;;;;;:47;22069:439;-1:-1:-1;;;;;22596:31:0;;;;;;:25;:31;;;;;;;;:71;;;;-1:-1:-1;;;;;;22632:35:0;;;;;;:31;:35;;;;;;;;22631:36;22596:71;22592:693;;;22710:12;;22700:6;:22;;22692:75;;;;-1:-1:-1;;;22692:75:0;;24143:2:1;22692:75:0;;;24125:21:1;24182:2;24162:18;;;24155:30;24221:34;24201:18;;;24194:62;-1:-1:-1;;;24272:18:1;;;24265:38;24320:19;;22692:75:0;23941:404:1;22692:75:0;22824:9;;-1:-1:-1;;;;;4615:18:0;;4588:7;4615:18;;;;;;;;;;;22798:22;;:6;:22;:::i;:::-;:35;;22790:67;;;;-1:-1:-1;;;22790:67:0;;24552:2:1;22790:67:0;;;24534:21:1;24591:2;24571:18;;;24564:30;-1:-1:-1;;;24610:18:1;;;24603:49;24669:18;;22790:67:0;24350:343:1;22790:67:0;22592:693;;;-1:-1:-1;;;;;22934:29:0;;;;;;:25;:29;;;;;;;;:71;;;;-1:-1:-1;;;;;;22968:37:0;;;;;;:31;:37;;;;;;;;22967:38;22934:71;22930:355;;;23048:13;;23038:6;:23;;23030:78;;;;-1:-1:-1;;;23030:78:0;;24900:2:1;23030:78:0;;;24882:21:1;24939:2;24919:18;;;24912:30;24978:34;24958:18;;;24951:62;-1:-1:-1;;;25029:18:1;;;25022:40;25079:19;;23030:78:0;24698:406:1;22930:355:0;-1:-1:-1;;;;;23139:35:0;;;;;;:31;:35;;;;;;;;23134:151;;23232:9;;-1:-1:-1;;;;;4615:18:0;;4588:7;4615:18;;;;;;;;;;;23206:22;;:6;:22;:::i;:::-;:35;;23198:67;;;;-1:-1:-1;;;23198:67:0;;24552:2:1;23198:67:0;;;24534:21:1;24591:2;24571:18;;;24564:30;-1:-1:-1;;;24610:18:1;;;24603:49;24669:18;;23198:67:0;24350:343:1;23198:67:0;23372:4;23323:28;4615:18;;;;;;;;;;;23438;;23414:42;;;;;;;23472:22;;-1:-1:-1;23483:11:0;;;;;;;23472:22;:35;;;;-1:-1:-1;23499:8:0;;-1:-1:-1;;;23499:8:0;;;;23498:9;23472:35;:71;;;;-1:-1:-1;;;;;;23512:31:0;;;;;;:25;:31;;;;;;;;23511:32;23472:71;:101;;;;-1:-1:-1;;;;;;23548:25:0;;;;;;:19;:25;;;;;;;;23547:26;23472:101;:129;;;;-1:-1:-1;;;;;;23578:23:0;;;;;;:19;:23;;;;;;;;23577:24;23472:129;23469:232;;;23618:8;:15;;-1:-1:-1;;;;23618:15:0;-1:-1:-1;;;23618:15:0;;;23648:10;:8;:10::i;:::-;23673:8;:16;;-1:-1:-1;;;;23673:16:0;;;23469:232;-1:-1:-1;;;;;23831:25:0;;23713:12;23831:25;;;:19;:25;;;;;;23728:4;;23831:25;;;:52;;-1:-1:-1;;;;;;23860:23:0;;;;;;:19;:23;;;;;;;;23831:52;23828:99;;;-1:-1:-1;23910:5:0;23828:99;23947:12;24053:7;24050:2304;;;26509:18;;26494:12;:33;24115:60;;;;-1:-1:-1;;;;;;24144:31:0;;;;;;:25;:31;;;;;;;;24115:60;:94;;;;-1:-1:-1;;;;;;24180:29:0;;;;;;:25;:29;;;;;;;;24179:30;24115:94;:122;;;;-1:-1:-1;;;;;;24214:23:0;;;;;;:19;:23;;;;;;;;24213:24;24115:122;:142;;;;;24256:1;24241:12;;:16;24115:142;24112:2073;;;26509:18;;26494:12;:33;24295:330;;24604:1;24588:12;;:17;;;;;;;:::i;:::-;;;;-1:-1:-1;;24295:330:0;-1:-1:-1;;;;;24649:15:0;;;;;;:11;:15;;;;;;;;24645:214;;-1:-1:-1;;;;;24688:15:0;;;;;;:11;:15;;;;;:22;;-1:-1:-1;;24688:22:0;24706:4;24688:22;;;;;;24733:10;:15;;24706:4;;24733:10;;:15;;24706:4;;24733:15;:::i;:::-;;;;-1:-1:-1;;24771:11:0;:20;;;;;;;-1:-1:-1;24771:20:0;;;;;;;;-1:-1:-1;;;;;;24771:20:0;-1:-1:-1;;;;;24771:20:0;;;;;;;;24819;;731:51:1;;;24819:20:0;;719:2:1;704:18;24819:20:0;;;;;;;24645:214;11051:5;24895:12;;24886:6;:21;;;;:::i;:::-;:35;;;;:::i;:::-;24879:42;;24984:12;;24966:15;;24959:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;24937:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;25062:12:0;;25044:15;;25037:22;;:4;:22;:::i;:::-;:37;;;;:::i;:::-;25015:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;25128:12:0;;25116:9;;25109:16;;:4;:16;:::i;:::-;:31;;;;:::i;:::-;25093:12;;:47;;;;;;;:::i;:::-;;;;-1:-1:-1;;25204:12:0;;25187:14;;25180:21;;:4;:21;:::i;:::-;:36;;;;:::i;:::-;25159:17;;:57;;;;;;;:::i;:::-;;;;-1:-1:-1;24112:2073:0;;-1:-1:-1;24112:2073:0;;-1:-1:-1;;;;;25281:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;25330:1;25314:13;;:17;25281:50;25277:908;;;11051:5;25367:13;;25358:6;:22;;;;:::i;:::-;:36;;;;:::i;:::-;25351:43;;25461:13;;25442:16;;25435:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;25413:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;25541:13:0;;25522:16;;25515:23;;:4;:23;:::i;:::-;:39;;;;:::i;:::-;25493:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;25609:13:0;;25596:10;;25589:17;;:4;:17;:::i;:::-;:33;;;;:::i;:::-;25573:12;;:49;;;;;;;:::i;:::-;;;;-1:-1:-1;;25687:13:0;;25669:15;;25662:22;;:4;:22;:::i;25277:908::-;-1:-1:-1;;;;;25763:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;25813:1;25798:12;;:16;25763:51;25760:425;;;11051:5;25848:12;;25839:6;:21;;;;:::i;:::-;:35;;;;:::i;:::-;25832:42;;25937:12;;25919:15;;25912:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;25890:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;26015:12:0;;25997:15;;25990:22;;:4;:22;:::i;:::-;:37;;;;:::i;:::-;25968:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;26081:12:0;;26069:9;;26062:16;;:4;:16;:::i;:::-;:31;;;;:::i;:::-;26046:12;;:47;;;;;;;:::i;:::-;;;;-1:-1:-1;;26157:12:0;;26140:14;;26133:21;;:4;:21;:::i;:::-;:36;;;;:::i;:::-;26112:17;;:57;;;;;;;:::i;:::-;;;;-1:-1:-1;;25760:425:0;26216:8;;26213:93;;26248:42;26264:4;26278;26285;26248:15;:42::i;:::-;26328:14;26338:4;26328:14;;:::i;:::-;;;24050:2304;26366:33;26382:4;26388:2;26392:6;26366:15;:33::i;:::-;21064:5343;;;;20985:5422;;;:::o;27645:1712::-;27730:4;27686:23;4615:18;;;;;;;;;;;27686:50;;27747:25;27832:17;;27817:12;;27796:18;;27775;;:39;;;;:::i;:::-;:54;;;;:::i;:::-;:74;;;;:::i;:::-;27747:102;-1:-1:-1;27873:20:0;;;:46;;-1:-1:-1;27897:22:0;;27873:46;27870:60;;;27922:7;;27645:1712::o;27870:60::-;27963:18;;:23;;27984:2;27963:23;:::i;:::-;27945:15;:41;27942:113;;;28020:18;;:23;;28041:2;28020:23;:::i;:::-;28002:41;;27942:113;28067:12;28149:23;28234:1;28214:17;28193:18;;28175:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;28149:86;-1:-1:-1;28256:51:0;28273:33;28149:86;28273:15;:33;:::i;:::-;28256:16;:51::i;:::-;28513:18;;28350:21;;;;28329:18;;28513:20;;28532:1;;28513:20;:::i;:::-;28492:42;;:17;:42;:::i;:::-;28470:18;;28457:31;;:10;:31;:::i;:::-;:78;;;;:::i;:::-;28431:104;;28546:17;28635:1;28616:18;;:20;;;;:::i;:::-;28595:42;;:17;:42;:::i;:::-;28579:12;;28566:25;;:10;:25;:::i;:::-;:72;;;;:::i;:::-;28546:92;;28649:22;28748:1;28729:18;;:20;;;;:::i;:::-;28708:42;;:17;:42;:::i;:::-;28687:17;;28674:30;;:10;:30;:::i;:::-;:77;;;;:::i;:::-;28649:102;-1:-1:-1;28649:102:0;28783:27;28801:9;28783:15;:27;:::i;:::-;:44;;;;:::i;:::-;28764:63;;;;:::i;:::-;28873:1;28852:18;:22;;;28885:18;:22;;;28918:12;:16;;;28945:17;:21;28764:63;-1:-1:-1;28990:19:0;;;;;:42;;;29031:1;29013:15;:19;28990:42;28987:119;;;29048:46;29061:15;29078;29048:12;:46::i;:::-;29139:10;;29131:46;;-1:-1:-1;;;;;29139:10:0;;;;29163:9;;29131:46;;;;29163:9;29139:10;29131:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;29211:15:0;;29203:56;;29118:59;;-1:-1:-1;;;;;;29211:15:0;;29240:14;;29203:56;;;;29240:14;29211:15;29203:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;29293:16:0;;29285:64;;29190:69;;-1:-1:-1;;;;;;29293:16:0;;29323:21;;29285:64;;;;29323:21;29293:16;29285:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;27645:1712:0:o;19298:236::-;-1:-1:-1;;;;;19381:31:0;;;;;;:25;:31;;;;;:39;;-1:-1:-1;;19381:39:0;;;;;;;19431;19381:31;:39;19431:26;:39::i;26543:573::-;26695:16;;;26709:1;26695:16;;;;;;;;26671:21;;26695:16;;;;;;;;;;-1:-1:-1;26695:16:0;26671:40;;26740:4;26722;26727:1;26722:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;26722:23:0;;;:7;;;;;;;;;;:23;;;;26766:9;;:16;;;-1:-1:-1;;;26766:16:0;;;;:9;;;;;:14;;:16;;;;;26722:7;;26766:16;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26756:4;26761:1;26756:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;26756:26:0;;;:7;;;;;;;;;:26;26827:9;;26795:56;;26812:4;;26827:9;26839:11;26795:8;:56::i;:::-;26890:9;;:218;;-1:-1:-1;;;26890:218:0;;-1:-1:-1;;;;;26890:9:0;;;;:60;;:218;;26965:11;;26890:9;;27035:4;;27062;;27082:15;;26890:218;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26598:518;26543:573;:::o;27128:509::-;27308:9;;27276:56;;27293:4;;-1:-1:-1;;;;;27308:9:0;27320:11;27276:8;:56::i;:::-;27375:9;;:254;;-1:-1:-1;;;27375:254:0;;27441:4;27375:254;;;26293:34:1;26343:18;;;26336:34;;;27375:9:0;26386:18:1;;;26379:34;;;26429:18;;;26422:34;27581:6:0;26472:19:1;;;26465:44;27603:15:0;26525:19:1;;;26518:35;-1:-1:-1;;;;;27375:9:0;;;;:25;;27408:9;;26227:19:1;;27375:254:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;27128:509;;:::o;17884:207::-;-1:-1:-1;;;;;17972:39:0;;;;;;:31;:39;;;;;;;;;:52;;-1:-1:-1;;17972:52:0;;;;;;;;;;18040:43;;27043:51:1;;;27110:18;;;27103:50;18040:43:0;;27016:18:1;18040:43:0;;;;;;;17884:207;;:::o;14:548:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;793:131::-;-1:-1:-1;;;;;868:31:1;;858:42;;848:70;;914:1;911;904:12;848:70;793:131;:::o;929:315::-;997:6;1005;1058:2;1046:9;1037:7;1033:23;1029:32;1026:52;;;1074:1;1071;1064:12;1026:52;1113:9;1100:23;1132:31;1157:5;1132:31;:::i;:::-;1182:5;1234:2;1219:18;;;;1206:32;;-1:-1:-1;;;929:315:1:o;1441:247::-;1500:6;1553:2;1541:9;1532:7;1528:23;1524:32;1521:52;;;1569:1;1566;1559:12;1521:52;1608:9;1595:23;1627:31;1652:5;1627:31;:::i;:::-;1677:5;1441:247;-1:-1:-1;;;1441:247:1:o;1875:127::-;1936:10;1931:3;1927:20;1924:1;1917:31;1967:4;1964:1;1957:15;1991:4;1988:1;1981:15;2007:275;2078:2;2072:9;2143:2;2124:13;;-1:-1:-1;;2120:27:1;2108:40;;2178:18;2163:34;;2199:22;;;2160:62;2157:88;;;2225:18;;:::i;:::-;2261:2;2254:22;2007:275;;-1:-1:-1;2007:275:1:o;2287:183::-;2347:4;2380:18;2372:6;2369:30;2366:56;;;2402:18;;:::i;:::-;-1:-1:-1;2447:1:1;2443:14;2459:4;2439:25;;2287:183::o;2475:662::-;2529:5;2582:3;2575:4;2567:6;2563:17;2559:27;2549:55;;2600:1;2597;2590:12;2549:55;2636:6;2623:20;2662:4;2686:60;2702:43;2742:2;2702:43;:::i;:::-;2686:60;:::i;:::-;2780:15;;;2866:1;2862:10;;;;2850:23;;2846:32;;;2811:12;;;;2890:15;;;2887:35;;;2918:1;2915;2908:12;2887:35;2954:2;2946:6;2942:15;2966:142;2982:6;2977:3;2974:15;2966:142;;;3048:17;;3036:30;;3086:12;;;;2999;;2966:142;;;-1:-1:-1;3126:5:1;2475:662;-1:-1:-1;;;;;;2475:662:1:o;3142:1215::-;3260:6;3268;3321:2;3309:9;3300:7;3296:23;3292:32;3289:52;;;3337:1;3334;3327:12;3289:52;3377:9;3364:23;3406:18;3447:2;3439:6;3436:14;3433:34;;;3463:1;3460;3453:12;3433:34;3501:6;3490:9;3486:22;3476:32;;3546:7;3539:4;3535:2;3531:13;3527:27;3517:55;;3568:1;3565;3558:12;3517:55;3604:2;3591:16;3626:4;3650:60;3666:43;3706:2;3666:43;:::i;3650:60::-;3744:15;;;3826:1;3822:10;;;;3814:19;;3810:28;;;3775:12;;;;3850:19;;;3847:39;;;3882:1;3879;3872:12;3847:39;3906:11;;;;3926:217;3942:6;3937:3;3934:15;3926:217;;;4022:3;4009:17;4039:31;4064:5;4039:31;:::i;:::-;4083:18;;3959:12;;;;4121;;;;3926:217;;;4162:5;-1:-1:-1;;4205:18:1;;4192:32;;-1:-1:-1;;4236:16:1;;;4233:36;;;4265:1;4262;4255:12;4233:36;;4288:63;4343:7;4332:8;4321:9;4317:24;4288:63;:::i;:::-;4278:73;;;3142:1215;;;;;:::o;4362:456::-;4439:6;4447;4455;4508:2;4496:9;4487:7;4483:23;4479:32;4476:52;;;4524:1;4521;4514:12;4476:52;4563:9;4550:23;4582:31;4607:5;4582:31;:::i;:::-;4632:5;-1:-1:-1;4689:2:1;4674:18;;4661:32;4702:33;4661:32;4702:33;:::i;:::-;4362:456;;4754:7;;-1:-1:-1;;;4808:2:1;4793:18;;;;4780:32;;4362:456::o;4823:180::-;4882:6;4935:2;4923:9;4914:7;4910:23;4906:32;4903:52;;;4951:1;4948;4941:12;4903:52;-1:-1:-1;4974:23:1;;4823:180;-1:-1:-1;4823:180:1:o;5008:385::-;5094:6;5102;5110;5118;5171:3;5159:9;5150:7;5146:23;5142:33;5139:53;;;5188:1;5185;5178:12;5139:53;-1:-1:-1;;5211:23:1;;;5281:2;5266:18;;5253:32;;-1:-1:-1;5332:2:1;5317:18;;5304:32;;5383:2;5368:18;5355:32;;-1:-1:-1;5008:385:1;-1:-1:-1;5008:385:1:o;5795:118::-;5881:5;5874:13;5867:21;5860:5;5857:32;5847:60;;5903:1;5900;5893:12;5918:750;6010:6;6018;6026;6079:2;6067:9;6058:7;6054:23;6050:32;6047:52;;;6095:1;6092;6085:12;6047:52;6135:9;6122:23;6164:18;6205:2;6197:6;6194:14;6191:34;;;6221:1;6218;6211:12;6191:34;6259:6;6248:9;6244:22;6234:32;;6304:7;6297:4;6293:2;6289:13;6285:27;6275:55;;6326:1;6323;6316:12;6275:55;6366:2;6353:16;6392:2;6384:6;6381:14;6378:34;;;6408:1;6405;6398:12;6378:34;6463:7;6456:4;6446:6;6443:1;6439:14;6435:2;6431:23;6427:34;6424:47;6421:67;;;6484:1;6481;6474:12;6421:67;6515:4;6507:13;;;;-1:-1:-1;6539:6:1;-1:-1:-1;;6580:20:1;;6567:34;6610:28;6567:34;6610:28;:::i;:::-;6657:5;6647:15;;;5918:750;;;;;:::o;6673:382::-;6738:6;6746;6799:2;6787:9;6778:7;6774:23;6770:32;6767:52;;;6815:1;6812;6805:12;6767:52;6854:9;6841:23;6873:31;6898:5;6873:31;:::i;:::-;6923:5;-1:-1:-1;6980:2:1;6965:18;;6952:32;6993:30;6952:32;6993:30;:::i;:::-;7042:7;7032:17;;;6673:382;;;;;:::o;7060:388::-;7128:6;7136;7189:2;7177:9;7168:7;7164:23;7160:32;7157:52;;;7205:1;7202;7195:12;7157:52;7244:9;7231:23;7263:31;7288:5;7263:31;:::i;:::-;7313:5;-1:-1:-1;7370:2:1;7355:18;;7342:32;7383:33;7342:32;7383:33;:::i;7453:461::-;7506:3;7544:5;7538:12;7571:6;7566:3;7559:19;7597:4;7626:2;7621:3;7617:12;7610:19;;7663:2;7656:5;7652:14;7684:1;7694:195;7708:6;7705:1;7702:13;7694:195;;;7773:13;;-1:-1:-1;;;;;7769:39:1;7757:52;;7829:12;;;;7864:15;;;;7805:1;7723:9;7694:195;;;-1:-1:-1;7905:3:1;;7453:461;-1:-1:-1;;;;;7453:461:1:o;7919:261::-;8098:2;8087:9;8080:21;8061:4;8118:56;8170:2;8159:9;8155:18;8147:6;8118:56;:::i;8185:380::-;8264:1;8260:12;;;;8307;;;8328:61;;8382:4;8374:6;8370:17;8360:27;;8328:61;8435:2;8427:6;8424:14;8404:18;8401:38;8398:161;;8481:10;8476:3;8472:20;8469:1;8462:31;8516:4;8513:1;8506:15;8544:4;8541:1;8534:15;8398:161;;8185:380;;;:::o;8570:356::-;8772:2;8754:21;;;8791:18;;;8784:30;8850:34;8845:2;8830:18;;8823:62;8917:2;8902:18;;8570:356::o;9713:127::-;9774:10;9769:3;9765:20;9762:1;9755:31;9805:4;9802:1;9795:15;9829:4;9826:1;9819:15;9845:127;9906:10;9901:3;9897:20;9894:1;9887:31;9937:4;9934:1;9927:15;9961:4;9958:1;9951:15;9977:135;10016:3;10037:17;;;10034:43;;10057:18;;:::i;:::-;-1:-1:-1;10104:1:1;10093:13;;9977:135::o;10526:422::-;10615:1;10658:5;10615:1;10672:270;10693:7;10683:8;10680:21;10672:270;;;10752:4;10748:1;10744:6;10740:17;10734:4;10731:27;10728:53;;;10761:18;;:::i;:::-;10811:7;10801:8;10797:22;10794:55;;;10831:16;;;;10794:55;10910:22;;;;10870:15;;;;10672:270;;;10676:3;10526:422;;;;;:::o;10953:806::-;11002:5;11032:8;11022:80;;-1:-1:-1;11073:1:1;11087:5;;11022:80;11121:4;11111:76;;-1:-1:-1;11158:1:1;11172:5;;11111:76;11203:4;11221:1;11216:59;;;;11289:1;11284:130;;;;11196:218;;11216:59;11246:1;11237:10;;11260:5;;;11284:130;11321:3;11311:8;11308:17;11305:43;;;11328:18;;:::i;:::-;-1:-1:-1;;11384:1:1;11370:16;;11399:5;;11196:218;;11498:2;11488:8;11485:16;11479:3;11473:4;11470:13;11466:36;11460:2;11450:8;11447:16;11442:2;11436:4;11433:12;11429:35;11426:77;11423:159;;;-1:-1:-1;11535:19:1;;;11567:5;;11423:159;11614:34;11639:8;11633:4;11614:34;:::i;:::-;11684:6;11680:1;11676:6;11672:19;11663:7;11660:32;11657:58;;;11695:18;;:::i;:::-;11733:20;;10953:806;-1:-1:-1;;;10953:806:1:o;11764:140::-;11822:5;11851:47;11892:4;11882:8;11878:19;11872:4;11851:47;:::i;11909:168::-;11949:7;12015:1;12011;12007:6;12003:14;12000:1;11997:21;11992:1;11985:9;11978:17;11974:45;11971:71;;;12022:18;;:::i;:::-;-1:-1:-1;12062:9:1;;11909:168::o;12082:217::-;12122:1;12148;12138:132;;12192:10;12187:3;12183:20;12180:1;12173:31;12227:4;12224:1;12217:15;12255:4;12252:1;12245:15;12138:132;-1:-1:-1;12284:9:1;;12082:217::o;12714:125::-;12779:9;;;12800:10;;;12797:36;;;12813:18;;:::i;13635:401::-;13837:2;13819:21;;;13876:2;13856:18;;;13849:30;13915:34;13910:2;13895:18;;13888:62;-1:-1:-1;;;13981:2:1;13966:18;;13959:35;14026:3;14011:19;;13635:401::o;15985:184::-;16055:6;16108:2;16096:9;16087:7;16083:23;16079:32;16076:52;;;16124:1;16121;16114:12;16076:52;-1:-1:-1;16147:16:1;;15985:184;-1:-1:-1;15985:184:1:o;16453:245::-;16520:6;16573:2;16561:9;16552:7;16548:23;16544:32;16541:52;;;16589:1;16586;16579:12;16541:52;16621:9;16615:16;16640:28;16662:5;16640:28;:::i;20981:401::-;21183:2;21165:21;;;21222:2;21202:18;;;21195:30;21261:34;21256:2;21241:18;;21234:62;-1:-1:-1;;;21327:2:1;21312:18;;21305:35;21372:3;21357:19;;20981:401::o;21387:399::-;21589:2;21571:21;;;21628:2;21608:18;;;21601:30;21667:34;21662:2;21647:18;;21640:62;-1:-1:-1;;;21733:2:1;21718:18;;21711:33;21776:3;21761:19;;21387:399::o;23386:128::-;23453:9;;;23474:11;;;23471:37;;;23488:18;;:::i;25109:251::-;25179:6;25232:2;25220:9;25211:7;25207:23;25203:32;25200:52;;;25248:1;25245;25238:12;25200:52;25280:9;25274:16;25299:31;25324:5;25299:31;:::i;25365:582::-;25664:6;25653:9;25646:25;25707:6;25702:2;25691:9;25687:18;25680:34;25750:3;25745:2;25734:9;25730:18;25723:31;25627:4;25771:57;25823:3;25812:9;25808:19;25800:6;25771:57;:::i;:::-;-1:-1:-1;;;;;25864:32:1;;;;25859:2;25844:18;;25837:60;-1:-1:-1;25928:3:1;25913:19;25906:35;25763:65;25365:582;-1:-1:-1;;;25365:582:1:o;26564:306::-;26652:6;26660;26668;26721:2;26709:9;26700:7;26696:23;26692:32;26689:52;;;26737:1;26734;26727:12;26689:52;26766:9;26760:16;26750:26;;26816:2;26805:9;26801:18;26795:25;26785:35;;26860:2;26849:9;26845:18;26839:25;26829:35;;26564:306;;;;;:::o

Swarm Source

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