ETH Price: $2,304.96 (+0.99%)

Token

SHIBAE (Shibae)
 

Overview

Max Total Supply

1,000,000,000,000 Shibae

Holders

36

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
16,915,000,000 Shibae

Value
$0.00
0x764f83275a33a1a1374decaa123e7e4c6be97b4b
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
SHIBAE

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-02-11
*/

/**
 *Submitted for verification at Etherscan.io on 2023-02-10
*/

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

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 ILpPair {
    function sync() external;
}

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 swapExactTokensForTokensSupportingFeeOnTransferTokens(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external;
    function addLiquidityETH(address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline) external payable returns (uint256 amountToken, uint256 amountETH, uint256 liquidity);
    function addLiquidity(address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline) external returns (uint amountA, uint amountB, uint liquidity);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
}

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

contract TokenHandler is Ownable {
    function sendTokenToOwner(address token) external onlyOwner {
        if(IERC20(token).balanceOf(address(this)) > 0){
            IERC20(token).transfer(owner(), IERC20(token).balanceOf(address(this)));
        }
    }
}

contract SHIBAE is ERC20, Ownable {

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

    IDexRouter public immutable dexRouter;
    address public immutable lpPair;

    TokenHandler public immutable tokenHandler;

    bool private swapping;
    uint256 public swapTokensAtAmount;

    address public operationsAddress;
    address public marketingAddress;

    uint256 public tradingActiveBlock = 0; // 0 means trading is not active

    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;

    IERC20 public constant SHIBA = IERC20(0x95aD61b0a150d79219dCF64E1E6Cc01f0B64C4cE);  //Mainnet: 0x95aD61b0a150d79219dCF64E1E6Cc01f0B64C4cE

    uint256 public buyTotalFees;
    uint256 public buyOperationsFee;
    uint256 public buyMarketingFee;
    uint256 public buyLiquidityFee;

    uint256 public sellTotalFees;
    uint256 public sellOperationsFee;
    uint256 public sellMarketingFee;
    uint256 public sellLiquidityFee;

    uint256 public tokensForOperations;
    uint256 public tokensForMarketing;
    uint256 public tokensForLiquidity;

    bool public zeroTaxMode;
    
    /******************/

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

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

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

    event EnabledTrading();
    event RemovedLimits();

    event ExcludeFromFees(address indexed account, bool isExcluded);

    event UpdatedMaxBuyAmount(uint256 newAmount);

    event UpdatedMaxSellAmount(uint256 newAmount);

    event UpdatedMaxWalletAmount(uint256 newAmount);

    event UpdatedOperationsAddress(address indexed newWallet);
    event UpdatedMarketingAddress(address indexed newWallet);

    event MaxTransactionExclusion(address _address, bool excluded);

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

    event TransferForeignToken(address token, uint256 amount);

    constructor() ERC20("SHIBAE", "Shibae") {
        
        address newOwner = msg.sender; // can leave alone if owner is deployer.
    
        IDexRouter _dexRouter = IDexRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);  //uniswap router

        _excludeFromMaxTransaction(address(_dexRouter), true);
        dexRouter = _dexRouter;
        
        lpPair = IDexFactory(_dexRouter.factory()).createPair(address(this), address(SHIBA));
        _setAutomatedMarketMakerPair(address(lpPair), true);

        tokenHandler = new TokenHandler();
 
        uint256 totalSupply = 1_000_000_000_000 * 1e18;
        
        maxBuyAmount = totalSupply * 2 / 100;
        maxSellAmount = totalSupply * 2 / 100;
        maxWalletAmount = totalSupply * 2 / 100;
        swapTokensAtAmount = totalSupply * 25 / 100000; // 0.025% swap amount

        buyOperationsFee = 0;
        buyMarketingFee = 15;
        buyLiquidityFee = 0;
        buyTotalFees = buyOperationsFee + buyMarketingFee + buyLiquidityFee;

        sellOperationsFee = 0;
        sellMarketingFee = 45;
        sellLiquidityFee = 0;
        sellTotalFees = sellOperationsFee + sellMarketingFee + sellLiquidityFee;
        zeroTaxMode = false;

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

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

        operationsAddress = address(0x0013C4fEE2D2539A7263D49b79F77285c40bFe57);
        marketingAddress = address(0x0013C4fEE2D2539A7263D49b79F77285c40bFe57);
        
        _createInitialSupply(newOwner, totalSupply);
        transferOwnership(newOwner);
    }

    receive() external payable {}

    // once enabled, can never be turned off
    function enableTrading() external onlyOwner {
        require(!tradingActive, "Cannot reenable trading");
        tradingActive = true;
        swapEnabled = true;
        tradingActiveBlock = block.number;
        emit EnabledTrading();
    }
    
    // remove limits after token is stable
    function removeLimits() external onlyOwner {
        limitsInEffect = false;
        transferDelayEnabled = false;
        emit RemovedLimits();
    }
    
   
    // disable Transfer delay - cannot be reenabled
    function disableTransferDelay() external onlyOwner {
        transferDelayEnabled = false;
    }
    
    function updateMaxBuyAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 1 / 1000)/1e18, "Cannot set max buy amount lower than 0.1%");
        maxBuyAmount = newNum * (10**18);
        emit UpdatedMaxBuyAmount(maxBuyAmount);
    }
    
    function updateMaxSellAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 1 / 1000)/1e18, "Cannot set max sell amount lower than 0.1%");
        maxSellAmount = newNum * (10**18);
        emit UpdatedMaxSellAmount(maxSellAmount);
    }

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

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

    function airdrop(address[] memory wallets, uint256[] memory amountsInTokens) external onlyOwner {
        require(wallets.length == amountsInTokens.length, "arrays must be the same length");
        require(wallets.length < 200, "Can only airdrop 200 wallets per txn due to gas limits");
        for(uint256 i = 0; i < wallets.length; i++){
            address wallet = wallets[i];
            uint256 amount = amountsInTokens[i]*1e18;
            _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);
    }

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

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function updateBuyFees(uint256 _operationsFee, uint256 _marketingFee, uint256 _liquidityFee) external onlyOwner {
        buyOperationsFee = _operationsFee;
        buyMarketingFee = _marketingFee;
        buyLiquidityFee = _liquidityFee;
        buyTotalFees = buyOperationsFee + buyMarketingFee + buyLiquidityFee;
    }

    function updateSellFees(uint256 _operationsFee, uint256 _marketingFee, uint256 _liquidityFee) external onlyOwner {
        sellOperationsFee = _operationsFee;
        sellMarketingFee = _marketingFee;
        sellLiquidityFee = _liquidityFee;
        sellTotalFees = sellOperationsFee + sellMarketingFee + sellLiquidityFee;
    }

    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(limitsInEffect){
            if (from != owner() && to != owner() && to != address(0) && to != address(0xdead)){
                if(!tradingActive){
                    require(_isExcludedMaxTransactionAmount[from] || _isExcludedMaxTransactionAmount[to], "Trading is not active.");
                }
                
                // 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 - 4 && _holderLastTransferTimestamp[to] < block.number - 4, "_transfer:: Transfer Delay enabled.  Try again later.");
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                        _holderLastTransferTimestamp[to] = block.number;
                    }
                }
                 
                //when buy
                if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
                        require(amount <= maxBuyAmount, "Buy transfer amount exceeds the max buy.");
                        require(amount + balanceOf(to) <= maxWalletAmount, "Cannot Exceed max wallet");
                } 
                //when sell
                else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
                        require(amount <= maxSellAmount, "Sell transfer amount exceeds the max sell.");
                } 
                else if (!_isExcludedMaxTransactionAmount[to] && !_isExcludedMaxTransactionAmount[from]){
                    require(amount + balanceOf(to) <= maxWalletAmount, "Cannot Exceed max wallet");
                }
            }
        }

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

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

            swapBack();

            swapping = false;
        }

        bool takeFee = true;
        // if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }
        
        uint256 fees = 0;
        uint256 penaltyAmount = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if(takeFee && !zeroTaxMode){
            // on sell
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0){
                fees = amount * sellTotalFees /100;
                tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees;
                tokensForOperations += fees * sellOperationsFee / sellTotalFees;
                tokensForMarketing += fees * sellMarketingFee / sellTotalFees;
            }
            // on buy
            else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) {
        	    fees = amount * buyTotalFees / 100;
        	    tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
                tokensForOperations += fees * buyOperationsFee / buyTotalFees;
                tokensForMarketing += fees * buyMarketingFee / buyTotalFees;
            }
            
            if(fees > 0){    
                super._transfer(from, address(this), fees);
            }
        	
        	amount -= fees + penaltyAmount;
        }

        super._transfer(from, to, amount);
    }
    
    function addLiquidity(uint256 tokenAmount, uint256 shibaAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(dexRouter), tokenAmount);
        SHIBA.approve(address(dexRouter), shibaAmount);

        // add the liquidity
        dexRouter.addLiquidity(address(this), address(SHIBA), tokenAmount, shibaAmount, 0,  0,  address(this), block.timestamp);
    }

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity + tokensForOperations + tokensForMarketing;
        
        if(contractBalance == 0 || totalTokensToSwap == 0) {return;}

        if(contractBalance > swapTokensAtAmount * 10){
            contractBalance = swapTokensAtAmount * 10;
        }
        
        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = contractBalance * tokensForLiquidity / totalTokensToSwap / 2;
        
        swapTokensForSHIBA(contractBalance - liquidityTokens); 

        tokenHandler.sendTokenToOwner(address(SHIBA));
        
        uint256 shibaBalance = SHIBA.balanceOf(address(this));
        uint256 shibaForLiquidity = shibaBalance;

        uint256 shibaForOperations = shibaBalance * tokensForOperations / (totalTokensToSwap - (tokensForLiquidity/2));
        uint256 shibaForMarketing = shibaBalance * tokensForMarketing / (totalTokensToSwap - (tokensForLiquidity/2));

        shibaForLiquidity -= shibaForOperations + shibaForMarketing;
            
        tokensForLiquidity = 0;
        tokensForOperations = 0;
        tokensForMarketing = 0;
        
        if(liquidityTokens > 0 && shibaForLiquidity > 0){
            addLiquidity(liquidityTokens, shibaForLiquidity);
        }


        if(shibaForMarketing > 0){
            SHIBA.transfer(marketingAddress, shibaForMarketing);
        }

        if(SHIBA.balanceOf(address(this)) > 0){
            SHIBA.transfer(operationsAddress, SHIBA.balanceOf(address(this)));
        }
    }

    function swapTokensForSHIBA(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = address(SHIBA);
        _approve(address(this), address(dexRouter), tokenAmount);

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

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

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

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

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

     function setZeroTaxMode(bool _zeroTaxMode) external onlyOwner {
        zeroTaxMode = _zeroTaxMode;
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[],"name":"EnabledTrading","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"bool","name":"excluded","type":"bool"}],"name":"MaxTransactionExclusion","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[],"name":"RemovedLimits","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TransferForeignToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"}],"name":"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":"UpdatedOperationsAddress","type":"event"},{"inputs":[],"name":"SHIBA","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"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":"airdrop","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":"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":"buyOperationsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IDexRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"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":[],"name":"maxBuyAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"operationsAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"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":"sellOperationsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingAddress","type":"address"}],"name":"setMarketingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_operationsAddress","type":"address"}],"name":"setOperationsAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_zeroTaxMode","type":"bool"}],"name":"setZeroTaxMode","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":"tokenHandler","outputs":[{"internalType":"contract TokenHandler","name":"","type":"address"}],"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":"tokensForOperations","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActiveBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_operationsFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxBuyAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxSellAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_operationsFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","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"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"withdrawStuckForeignTokens","outputs":[{"internalType":"bool","name":"_sent","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"zeroTaxMode","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60e06040526000600d55600e805462ffffff191660019081179091556010805460ff191690911790553480156200003557600080fd5b506040518060400160405280600681526020016553484942414560d01b8152506040518060400160405280600681526020016553686962616560d01b815250816003908162000085919062000801565b50600462000094828262000801565b5050506000620000a9620003eb60201b60201c565b600580546001600160a01b0319166001600160a01b03831690811790915560405191925090600090600080516020620045c8833981519152908290a35033737a250d5630b4cf539739df2c5dacb4c659f2488d62000109816001620003ef565b6001600160a01b03811660808190526040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa15801562000154573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200017a9190620008cd565b6040516364e329cb60e11b81523060048201527395ad61b0a150d79219dcf64e1e6cc01f0b64c4ce60248201526001600160a01b03919091169063c9c65396906044016020604051808303816000875af1158015620001dd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002039190620008cd565b6001600160a01b031660a08190526200021e90600162000452565b6040516200022c906200074e565b604051809103906000f08015801562000249573d6000803e3d6000fd5b506001600160a01b031660c0526c0c9f2c9cd04674edea4000000060646200027382600262000915565b6200027f919062000935565b60065560646200029182600262000915565b6200029d919062000935565b6007556064620002af82600262000915565b620002bb919062000935565b600855620186a0620002cf82601962000915565b620002db919062000935565b600a5560006012819055600f60138190556014829055620002fd908262000958565b62000309919062000958565b60115560006016819055602d601781905560188290556200032b908262000958565b62000337919062000958565b601555601c805460ff1916905562000351836001620003ef565b6200035e306001620003ef565b6200036d61dead6001620003ef565b6200037a836001620004be565b62000387306001620004be565b6200039661dead6001620004be565b600b80547213c4fee2d2539a7263d49b79f77285c40bfe576001600160a01b03199182168117909255600c80549091169091179055620003d783826200056c565b620003e28362000651565b5050506200096e565b3390565b6001600160a01b0382166000818152601e6020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6001600160a01b0382166000908152601f60205260409020805460ff1916821515179055620004828282620003ef565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6005546001600160a01b031633146200050d5760405162461bcd60e51b81526020600482018190526024820152600080516020620045a883398151915260448201526064015b60405180910390fd5b6001600160a01b0382166000818152601d6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038216620005c45760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640162000504565b8060026000828254620005d8919062000958565b90915550506001600160a01b038216600090815260208190526040812080548392906200060790849062000958565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005546001600160a01b031633146200069c5760405162461bcd60e51b81526020600482018190526024820152600080516020620045a8833981519152604482015260640162000504565b6001600160a01b038116620007035760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840162000504565b6005546040516001600160a01b03808416921690600080516020620045c883398151915290600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6104d680620040d283390190565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200078757607f821691505b602082108103620007a857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620007fc57600081815260208120601f850160051c81016020861015620007d75750805b601f850160051c820191505b81811015620007f857828155600101620007e3565b5050505b505050565b81516001600160401b038111156200081d576200081d6200075c565b62000835816200082e845462000772565b84620007ae565b602080601f8311600181146200086d5760008415620008545750858301515b600019600386901b1c1916600185901b178555620007f8565b600085815260208120601f198616915b828110156200089e578886015182559484019460019091019084016200087d565b5085821015620008bd5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600060208284031215620008e057600080fd5b81516001600160a01b0381168114620008f857600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b80820281158282048414176200092f576200092f620008ff565b92915050565b6000826200095357634e487b7160e01b600052601260045260246000fd5b500490565b808201808211156200092f576200092f620008ff565b60805160a05160c0516136e7620009eb600039600081816104d0015281816128710152612ed70152600081816105980152818161112001528181611405015261207a0152600081816103ef0152818161203d01528181612e6701528181612ea301528181612f3d01528181612f79015261305f01526136e76000f3fe6080604052600436106103a65760003560e01c8063906e9dd0116101e7578063c876d0b91161010d578063ea4cfe12116100a0578063f2fde38b1161006f578063f2fde38b14610aca578063f5648a4f14610aea578063f637434214610aff578063fb002c9714610b1557600080fd5b8063ea4cfe1214610a56578063eb41548514610a76578063ee40166e14610a9e578063f11a24d314610ab457600080fd5b8063dc3f0d0f116100dc578063dc3f0d0f146109c5578063dd62ed3e146109e5578063e2f4560514610a2b578063e884f26014610a4157600080fd5b8063c876d0b91461095b578063d257b34f14610975578063d798425714610995578063d85ba063146109af57600080fd5b8063aa4bde2811610185578063bbc0c74211610154578063bbc0c742146108dc578063c0246668146108fb578063c17b5b8c1461091b578063c18bc1951461093b57600080fd5b8063aa4bde2814610856578063b3bcca551461086c578063b561fe611461088c578063b62496f5146108ac57600080fd5b80639a7a23d6116101c15780639a7a23d6146107d6578063a457c2d7146107f6578063a5ece94114610816578063a9059cbb1461083657600080fd5b8063906e9dd01461078b57806392136913146107ab57806395d89b41146107c157600080fd5b80634f77f6c0116102cc578063715018a61161026a5780638095d564116102395780638095d5641461072257806388e765ff146107425780638a8c523c146107585780638da5cb5b1461076d57600080fd5b8063715018a6146106c2578063751039fc146106d75780637571336a146106ec5780637bce5a041461070c57600080fd5b806367243482116102a657806367243482146106365780636a486a8e146106565780636ddd17131461066c57806370a082311461068c57600080fd5b80634f77f6c0146105f45780635a139dd41461060a57806366d602ae1461062057600080fd5b80631f3fed8f1161034457806339509351116103135780633950935114610566578063452ed4f114610586578063499b8394146105ba5780634a62bb65146105da57600080fd5b80631f3fed8f146104f257806323b872dd146105085780632be32b6114610528578063313ce5671461054a57600080fd5b806310d5de531161038057806310d5de531461045957806318160ddd146104895780631a8145bb146104a85780631b3d6e87146104be57600080fd5b806306fdde03146103b25780630758d924146103dd578063095ea7b31461042957600080fd5b366103ad57005b600080fd5b3480156103be57600080fd5b506103c7610b2b565b6040516103d491906130dc565b60405180910390f35b3480156103e957600080fd5b506104117f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016103d4565b34801561043557600080fd5b50610449610444366004613146565b610bbd565b60405190151581526020016103d4565b34801561046557600080fd5b50610449610474366004613170565b601e6020526000908152604090205460ff1681565b34801561049557600080fd5b506002545b6040519081526020016103d4565b3480156104b457600080fd5b5061049a601b5481565b3480156104ca57600080fd5b506104117f000000000000000000000000000000000000000000000000000000000000000081565b3480156104fe57600080fd5b5061049a601a5481565b34801561051457600080fd5b50610449610523366004613192565b610bd4565b34801561053457600080fd5b506105486105433660046131ce565b610c83565b005b34801561055657600080fd5b50604051601281526020016103d4565b34801561057257600080fd5b50610449610581366004613146565b610d90565b34801561059257600080fd5b506104117f000000000000000000000000000000000000000000000000000000000000000081565b3480156105c657600080fd5b506105486105d5366004613170565b610dcc565b3480156105e657600080fd5b50600e546104499060ff1681565b34801561060057600080fd5b5061049a60165481565b34801561061657600080fd5b5061049a60125481565b34801561062c57600080fd5b5061049a60075481565b34801561064257600080fd5b506105486106513660046132bd565b610ea5565b34801561066257600080fd5b5061049a60155481565b34801561067857600080fd5b50600e546104499062010000900460ff1681565b34801561069857600080fd5b5061049a6106a7366004613170565b6001600160a01b031660009081526020819052604090205490565b3480156106ce57600080fd5b50610548611010565b3480156106e357600080fd5b50610548611084565b3480156106f857600080fd5b5061054861070736600461338e565b6110ef565b34801561071857600080fd5b5061049a60135481565b34801561072e57600080fd5b5061054861073d3660046133c5565b6111da565b34801561074e57600080fd5b5061049a60065481565b34801561076457600080fd5b50610548611230565b34801561077957600080fd5b506005546001600160a01b0316610411565b34801561079757600080fd5b506105486107a6366004613170565b6112f2565b3480156107b757600080fd5b5061049a60175481565b3480156107cd57600080fd5b506103c76113ca565b3480156107e257600080fd5b506105486107f136600461338e565b6113d9565b34801561080257600080fd5b50610449610811366004613146565b6114b8565b34801561082257600080fd5b50600c54610411906001600160a01b031681565b34801561084257600080fd5b50610449610851366004613146565b611551565b34801561086257600080fd5b5061049a60085481565b34801561087857600080fd5b506104496108873660046133f1565b61155e565b34801561089857600080fd5b506105486108a7366004613424565b611767565b3480156108b857600080fd5b506104496108c7366004613170565b601f6020526000908152604090205460ff1681565b3480156108e857600080fd5b50600e5461044990610100900460ff1681565b34801561090757600080fd5b5061054861091636600461338e565b6117a4565b34801561092757600080fd5b506105486109363660046133c5565b61182d565b34801561094757600080fd5b506105486109563660046131ce565b611883565b34801561096757600080fd5b506010546104499060ff1681565b34801561098157600080fd5b506105486109903660046131ce565b61198c565b3480156109a157600080fd5b50601c546104499060ff1681565b3480156109bb57600080fd5b5061049a60115481565b3480156109d157600080fd5b506105486109e03660046131ce565b611ad7565b3480156109f157600080fd5b5061049a610a003660046133f1565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610a3757600080fd5b5061049a600a5481565b348015610a4d57600080fd5b50610548611bde565b348015610a6257600080fd5b50600b54610411906001600160a01b031681565b348015610a8257600080fd5b506104117395ad61b0a150d79219dcf64e1e6cc01f0b64c4ce81565b348015610aaa57600080fd5b5061049a600d5481565b348015610ac057600080fd5b5061049a60145481565b348015610ad657600080fd5b50610548610ae5366004613170565b611c14565b348015610af657600080fd5b50610548611cff565b348015610b0b57600080fd5b5061049a60185481565b348015610b2157600080fd5b5061049a60195481565b606060038054610b3a90613441565b80601f0160208091040260200160405190810160405280929190818152602001828054610b6690613441565b8015610bb35780601f10610b8857610100808354040283529160200191610bb3565b820191906000526020600020905b815481529060010190602001808311610b9657829003601f168201915b5050505050905090565b6000610bca338484611d76565b5060015b92915050565b6000610be1848484611e9a565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610c6b5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084015b60405180910390fd5b610c788533858403611d76565b506001949350505050565b6005546001600160a01b03163314610cad5760405162461bcd60e51b8152600401610c629061347b565b670de0b6b3a76400006103e8610cc260025490565b610ccd9060016134c6565b610cd791906134dd565b610ce191906134dd565b811015610d425760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152687468616e20302e312560b81b6064820152608401610c62565b610d5481670de0b6b3a76400006134c6565b60068190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de41009906020015b60405180910390a150565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610bca918590610dc79086906134ff565b611d76565b6005546001600160a01b03163314610df65760405162461bcd60e51b8152600401610c629061347b565b6001600160a01b038116610e5b5760405162461bcd60e51b815260206004820152602660248201527f5f6f7065726174696f6e734164647265737320616464726573732063616e6e6f60448201526507420626520360d41b6064820152608401610c62565b600b80546001600160a01b0319166001600160a01b0383169081179091556040517f4efa56652237561d0f1fd31311aeaaa41f3b754a461545ed3cf6ced5876d298290600090a250565b6005546001600160a01b03163314610ecf5760405162461bcd60e51b8152600401610c629061347b565b8051825114610f205760405162461bcd60e51b815260206004820152601e60248201527f617272617973206d757374206265207468652073616d65206c656e67746800006044820152606401610c62565b60c8825110610f905760405162461bcd60e51b815260206004820152603660248201527f43616e206f6e6c792061697264726f70203230302077616c6c657473207065726044820152752074786e2064756520746f20676173206c696d69747360501b6064820152608401610c62565b60005b825181101561100b576000838281518110610fb057610fb0613512565b602002602001015190506000838381518110610fce57610fce613512565b6020026020010151670de0b6b3a7640000610fe991906134c6565b9050610ff6338383611e9a565b5050808061100390613528565b915050610f93565b505050565b6005546001600160a01b0316331461103a5760405162461bcd60e51b8152600401610c629061347b565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146110ae5760405162461bcd60e51b8152600401610c629061347b565b600e805460ff199081169091556010805490911690556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6005546001600160a01b031633146111195760405162461bcd60e51b8152600401610c629061347b565b806111af577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316036111af5760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610c62565b6001600160a01b03919091166000908152601e60205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146112045760405162461bcd60e51b8152600401610c629061347b565b6012839055601382905560148190558061121e83856134ff565b61122891906134ff565b601155505050565b6005546001600160a01b0316331461125a5760405162461bcd60e51b8152600401610c629061347b565b600e54610100900460ff16156112b25760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610c62565b600e805462ffff0019166201010017905543600d556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a1565b6005546001600160a01b0316331461131c5760405162461bcd60e51b8152600401610c629061347b565b6001600160a01b0381166113805760405162461bcd60e51b815260206004820152602560248201527f5f6d61726b6574696e674164647265737320616464726573732063616e6e6f74604482015264020626520360dc1b6064820152608401610c62565b600c80546001600160a01b0319166001600160a01b0383169081179091556040517fd1e7d6a3390dd5008bd1c57798817b9f806e4c417264e7d3d67e42e784dc24a990600090a250565b606060048054610b3a90613441565b6005546001600160a01b031633146114035760405162461bcd60e51b8152600401610c629061347b565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316036114aa5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610c62565b6114b48282612738565b5050565b3360009081526001602090815260408083206001600160a01b03861684529091528120548281101561153a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610c62565b6115473385858403611d76565b5060019392505050565b6000610bca338484611e9a565b6005546000906001600160a01b0316331461158b5760405162461bcd60e51b8152600401610c629061347b565b6001600160a01b0383166115e15760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610c62565b306001600160a01b038416036116395760405162461bcd60e51b815260206004820152601c60248201527f43616e2774207769746864726177206e617469766520746f6b656e73000000006044820152606401610c62565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa158015611680573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116a49190613541565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af11580156116f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061171b919061355a565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6005546001600160a01b031633146117915760405162461bcd60e51b8152600401610c629061347b565b601c805460ff1916911515919091179055565b6005546001600160a01b031633146117ce5760405162461bcd60e51b8152600401610c629061347b565b6001600160a01b0382166000818152601d6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146118575760405162461bcd60e51b8152600401610c629061347b565b6016839055601782905560188190558061187183856134ff565b61187b91906134ff565b601555505050565b6005546001600160a01b031633146118ad5760405162461bcd60e51b8152600401610c629061347b565b670de0b6b3a76400006103e86118c260025490565b6118cd9060036134c6565b6118d791906134dd565b6118e191906134dd565b8110156119455760405162461bcd60e51b815260206004820152602c60248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f7760448201526b6572207468616e20302e332560a01b6064820152608401610c62565b61195781670de0b6b3a76400006134c6565b60088190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc90602001610d85565b6005546001600160a01b031633146119b65760405162461bcd60e51b8152600401610c629061347b565b620186a06119c360025490565b6119ce9060016134c6565b6119d891906134dd565b811015611a455760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610c62565b6103e8611a5160025490565b611a5c9060016134c6565b611a6691906134dd565b811115611ad25760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171892903a37ba30b61039bab838363c9760611b6064820152608401610c62565b600a55565b6005546001600160a01b03163314611b015760405162461bcd60e51b8152600401610c629061347b565b670de0b6b3a76400006103e8611b1660025490565b611b219060016134c6565b611b2b91906134dd565b611b3591906134dd565b811015611b975760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e312560b01b6064820152608401610c62565b611ba981670de0b6b3a76400006134c6565b60078190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e90602001610d85565b6005546001600160a01b03163314611c085760405162461bcd60e51b8152600401610c629061347b565b6010805460ff19169055565b6005546001600160a01b03163314611c3e5760405162461bcd60e51b8152600401610c629061347b565b6001600160a01b038116611ca35760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c62565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314611d295760405162461bcd60e51b8152600401610c629061347b565b604051600090339047908381818185875af1925050503d8060008114611d6b576040519150601f19603f3d011682016040523d82523d6000602084013e611d70565b606091505b50505050565b6001600160a01b038316611dd85760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610c62565b6001600160a01b038216611e395760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610c62565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611ec05760405162461bcd60e51b8152600401610c6290613577565b6001600160a01b038216611ee65760405162461bcd60e51b8152600401610c62906135bc565b60008111611f365760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610c62565b600e5460ff161561240a576005546001600160a01b03848116911614801590611f6d57506005546001600160a01b03838116911614155b8015611f8157506001600160a01b03821615155b8015611f9857506001600160a01b03821661dead14155b1561240a57600e54610100900460ff16612030576001600160a01b0383166000908152601e602052604090205460ff1680611feb57506001600160a01b0382166000908152601e602052604090205460ff165b6120305760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610c62565b60105460ff161561218c577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316141580156120af57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b1561218c576120bf6004436135ff565b326000908152600f60205260409020541080156120fd57506120e26004436135ff565b6001600160a01b0383166000908152600f6020526040902054105b6121675760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527432b21710102a393c9030b3b0b4b7103630ba32b91760591b6064820152608401610c62565b326000908152600f602052604080822043908190556001600160a01b03851683529120555b6001600160a01b0383166000908152601f602052604090205460ff1680156121cd57506001600160a01b0382166000908152601e602052604090205460ff16155b156122a9576006548111156122355760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610c62565b6008546001600160a01b03831660009081526020819052604090205461225b90836134ff565b11156122a45760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08115e18d95959081b585e081dd85b1b195d60421b6044820152606401610c62565b61240a565b6001600160a01b0382166000908152601f602052604090205460ff1680156122ea57506001600160a01b0383166000908152601e602052604090205460ff16155b15612354576007548111156122a45760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610c62565b6001600160a01b0382166000908152601e602052604090205460ff1615801561239657506001600160a01b0383166000908152601e602052604090205460ff16155b1561240a576008546001600160a01b0383166000908152602081905260409020546123c190836134ff565b111561240a5760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08115e18d95959081b585e081dd85b1b195d60421b6044820152606401610c62565b30600090815260208190526040902054600a54811080159081906124365750600e5462010000900460ff165b8015612445575060095460ff16155b801561246a57506001600160a01b0385166000908152601f602052604090205460ff16155b801561248f57506001600160a01b0385166000908152601d602052604090205460ff16155b80156124b457506001600160a01b0384166000908152601d602052604090205460ff16155b156124d9576009805460ff191660011790556124ce6127a2565b6009805460ff191690555b6001600160a01b0385166000908152601d602052604090205460019060ff168061251b57506001600160a01b0385166000908152601d602052604090205460ff165b15612524575060005b6000808280156125375750601c5460ff16155b15612723576001600160a01b0387166000908152601f602052604090205460ff16801561256657506000601554115b1561261e5760646015548761257b91906134c6565b61258591906134dd565b91506015546018548361259891906134c6565b6125a291906134dd565b601b60008282546125b391906134ff565b90915550506015546016546125c890846134c6565b6125d291906134dd565b601960008282546125e391906134ff565b90915550506015546017546125f890846134c6565b61260291906134dd565b601a600082825461261391906134ff565b909155506126fb9050565b6001600160a01b0388166000908152601f602052604090205460ff16801561264857506000601154115b156126fb5760646011548761265d91906134c6565b61266791906134dd565b91506011546014548361267a91906134c6565b61268491906134dd565b601b600082825461269591906134ff565b90915550506011546012546126aa90846134c6565b6126b491906134dd565b601960008282546126c591906134ff565b90915550506011546013546126da90846134c6565b6126e491906134dd565b601a60008282546126f591906134ff565b90915550505b811561270c5761270c883084612c0c565b61271681836134ff565b61272090876135ff565b95505b61272e888888612c0c565b5050505050505050565b6001600160a01b0382166000908152601f60205260409020805460ff19168215151790556127668282612d61565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b3060009081526020819052604081205490506000601a54601954601b546127c991906134ff565b6127d391906134ff565b90508115806127e0575080155b156127e9575050565b600a80546127f6916134c6565b82111561280d57600a805461280a916134c6565b91505b6000600282601b548561282091906134c6565b61282a91906134dd565b61283491906134dd565b905061284861284382856135ff565b612dc4565b6040516304fa881160e21b81527395ad61b0a150d79219dcf64e1e6cc01f0b64c4ce60048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906313ea204490602401600060405180830381600087803b1580156128bd57600080fd5b505af11580156128d1573d6000803e3d6000fd5b50506040516370a0823160e01b8152306004820152600092507395ad61b0a150d79219dcf64e1e6cc01f0b64c4ce91506370a0823190602401602060405180830381865afa158015612927573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061294b9190613541565b9050600081905060006002601b5461296391906134dd565b61296d90866135ff565b60195461297a90856134c6565b61298491906134dd565b905060006002601b5461299791906134dd565b6129a190876135ff565b601a546129ae90866134c6565b6129b891906134dd565b90506129c481836134ff565b6129ce90846135ff565b6000601b8190556019819055601a55925084158015906129ee5750600083115b156129fd576129fd8584612f37565b8015612a8e57600c5460405163a9059cbb60e01b81526001600160a01b039091166004820152602481018290527395ad61b0a150d79219dcf64e1e6cc01f0b64c4ce9063a9059cbb906044016020604051808303816000875af1158015612a68573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a8c919061355a565b505b6040516370a0823160e01b81523060048201526000907395ad61b0a150d79219dcf64e1e6cc01f0b64c4ce906370a0823190602401602060405180830381865afa158015612ae0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b049190613541565b1115612c0357600b546040516370a0823160e01b81523060048201527395ad61b0a150d79219dcf64e1e6cc01f0b64c4ce9163a9059cbb916001600160a01b039091169083906370a0823190602401602060405180830381865afa158015612b70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b949190613541565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015612bdf573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061272e919061355a565b50505050505050565b6001600160a01b038316612c325760405162461bcd60e51b8152600401610c6290613577565b6001600160a01b038216612c585760405162461bcd60e51b8152600401610c62906135bc565b6001600160a01b03831660009081526020819052604090205481811015612cd05760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610c62565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290612d079084906134ff565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612d5391815260200190565b60405180910390a350505050565b6001600160a01b0382166000818152601e6020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612df957612df9613512565b60200260200101906001600160a01b031690816001600160a01b0316815250507395ad61b0a150d79219dcf64e1e6cc01f0b64c4ce81600181518110612e4157612e41613512565b60200260200101906001600160a01b031690816001600160a01b031681525050612e8c307f000000000000000000000000000000000000000000000000000000000000000084611d76565b604051635c11d79560e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635c11d79590612f0190859060009086907f0000000000000000000000000000000000000000000000000000000000000000904290600401613612565b600060405180830381600087803b158015612f1b57600080fd5b505af1158015612f2f573d6000803e3d6000fd5b505050505050565b612f62307f000000000000000000000000000000000000000000000000000000000000000084611d76565b60405163095ea7b360e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166004820152602481018290527395ad61b0a150d79219dcf64e1e6cc01f0b64c4ce9063095ea7b3906044016020604051808303816000875af1158015612fe3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613007919061355a565b5060405162e8e33760e81b815230600482018190527395ad61b0a150d79219dcf64e1e6cc01f0b64c4ce6024830152604482018490526064820183905260006084830181905260a483015260c48201524260e48201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063e8e3370090610104016060604051808303816000875af11580156130b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130d59190613683565b5050505050565b600060208083528351808285015260005b81811015613109578581018301518582016040015282016130ed565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b038116811461314157600080fd5b919050565b6000806040838503121561315957600080fd5b6131628361312a565b946020939093013593505050565b60006020828403121561318257600080fd5b61318b8261312a565b9392505050565b6000806000606084860312156131a757600080fd5b6131b08461312a565b92506131be6020850161312a565b9150604084013590509250925092565b6000602082840312156131e057600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715613226576132266131e7565b604052919050565b600067ffffffffffffffff821115613248576132486131e7565b5060051b60200190565b600082601f83011261326357600080fd5b813560206132786132738361322e565b6131fd565b82815260059290921b8401810191818101908684111561329757600080fd5b8286015b848110156132b2578035835291830191830161329b565b509695505050505050565b600080604083850312156132d057600080fd5b823567ffffffffffffffff808211156132e857600080fd5b818501915085601f8301126132fc57600080fd5b8135602061330c6132738361322e565b82815260059290921b8401810191818101908984111561332b57600080fd5b948201945b83861015613350576133418661312a565b82529482019490820190613330565b9650508601359250508082111561336657600080fd5b5061337385828601613252565b9150509250929050565b801515811461338b57600080fd5b50565b600080604083850312156133a157600080fd5b6133aa8361312a565b915060208301356133ba8161337d565b809150509250929050565b6000806000606084860312156133da57600080fd5b505081359360208301359350604090920135919050565b6000806040838503121561340457600080fd5b61340d8361312a565b915061341b6020840161312a565b90509250929050565b60006020828403121561343657600080fd5b813561318b8161337d565b600181811c9082168061345557607f821691505b60208210810361347557634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610bce57610bce6134b0565b6000826134fa57634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610bce57610bce6134b0565b634e487b7160e01b600052603260045260246000fd5b60006001820161353a5761353a6134b0565b5060010190565b60006020828403121561355357600080fd5b5051919050565b60006020828403121561356c57600080fd5b815161318b8161337d565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610bce57610bce6134b0565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156136625784516001600160a01b03168352938301939183019160010161363d565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561369857600080fd5b835192506020840151915060408401519050925092509256fea264697066735822122020f6b03d339bf38016db3a6bd0cc43f9cb0c1d6db46721cc1e66c147b8c0e13464736f6c63430008110033608060405234801561001057600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350610475806100616000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c806313ea204414610051578063715018a6146100665780638da5cb5b1461006e578063f2fde38b1461008d575b600080fd5b61006461005f36600461039f565b6100a0565b005b610064610241565b600054604080516001600160a01b039092168252519081900360200190f35b61006461009b36600461039f565b6102b5565b6000546001600160a01b031633146100d35760405162461bcd60e51b81526004016100ca906103cf565b60405180910390fd5b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a0823190602401602060405180830381865afa15801561011a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061013e9190610404565b111561023e57806001600160a01b031663a9059cbb6101656000546001600160a01b031690565b6040516370a0823160e01b81523060048201526001600160a01b038516906370a0823190602401602060405180830381865afa1580156101a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101cd9190610404565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015610218573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061023c919061041d565b505b50565b6000546001600160a01b0316331461026b5760405162461bcd60e51b81526004016100ca906103cf565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146102df5760405162461bcd60e51b81526004016100ca906103cf565b6001600160a01b0381166103445760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016100ca565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000602082840312156103b157600080fd5b81356001600160a01b03811681146103c857600080fd5b9392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60006020828403121561041657600080fd5b5051919050565b60006020828403121561042f57600080fd5b815180151581146103c857600080fdfea264697066735822122018f2e1a77487699f4cb8cd7283a1347f51e18f6e30cfb6bb942d04ef89772fd564736f6c634300081100334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65728be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0

Deployed Bytecode

0x6080604052600436106103a65760003560e01c8063906e9dd0116101e7578063c876d0b91161010d578063ea4cfe12116100a0578063f2fde38b1161006f578063f2fde38b14610aca578063f5648a4f14610aea578063f637434214610aff578063fb002c9714610b1557600080fd5b8063ea4cfe1214610a56578063eb41548514610a76578063ee40166e14610a9e578063f11a24d314610ab457600080fd5b8063dc3f0d0f116100dc578063dc3f0d0f146109c5578063dd62ed3e146109e5578063e2f4560514610a2b578063e884f26014610a4157600080fd5b8063c876d0b91461095b578063d257b34f14610975578063d798425714610995578063d85ba063146109af57600080fd5b8063aa4bde2811610185578063bbc0c74211610154578063bbc0c742146108dc578063c0246668146108fb578063c17b5b8c1461091b578063c18bc1951461093b57600080fd5b8063aa4bde2814610856578063b3bcca551461086c578063b561fe611461088c578063b62496f5146108ac57600080fd5b80639a7a23d6116101c15780639a7a23d6146107d6578063a457c2d7146107f6578063a5ece94114610816578063a9059cbb1461083657600080fd5b8063906e9dd01461078b57806392136913146107ab57806395d89b41146107c157600080fd5b80634f77f6c0116102cc578063715018a61161026a5780638095d564116102395780638095d5641461072257806388e765ff146107425780638a8c523c146107585780638da5cb5b1461076d57600080fd5b8063715018a6146106c2578063751039fc146106d75780637571336a146106ec5780637bce5a041461070c57600080fd5b806367243482116102a657806367243482146106365780636a486a8e146106565780636ddd17131461066c57806370a082311461068c57600080fd5b80634f77f6c0146105f45780635a139dd41461060a57806366d602ae1461062057600080fd5b80631f3fed8f1161034457806339509351116103135780633950935114610566578063452ed4f114610586578063499b8394146105ba5780634a62bb65146105da57600080fd5b80631f3fed8f146104f257806323b872dd146105085780632be32b6114610528578063313ce5671461054a57600080fd5b806310d5de531161038057806310d5de531461045957806318160ddd146104895780631a8145bb146104a85780631b3d6e87146104be57600080fd5b806306fdde03146103b25780630758d924146103dd578063095ea7b31461042957600080fd5b366103ad57005b600080fd5b3480156103be57600080fd5b506103c7610b2b565b6040516103d491906130dc565b60405180910390f35b3480156103e957600080fd5b506104117f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b0390911681526020016103d4565b34801561043557600080fd5b50610449610444366004613146565b610bbd565b60405190151581526020016103d4565b34801561046557600080fd5b50610449610474366004613170565b601e6020526000908152604090205460ff1681565b34801561049557600080fd5b506002545b6040519081526020016103d4565b3480156104b457600080fd5b5061049a601b5481565b3480156104ca57600080fd5b506104117f0000000000000000000000005773839c7497481c82bcecbd7309bc6c923052f081565b3480156104fe57600080fd5b5061049a601a5481565b34801561051457600080fd5b50610449610523366004613192565b610bd4565b34801561053457600080fd5b506105486105433660046131ce565b610c83565b005b34801561055657600080fd5b50604051601281526020016103d4565b34801561057257600080fd5b50610449610581366004613146565b610d90565b34801561059257600080fd5b506104117f0000000000000000000000007e2cc3e5c3b09bf921872d838a55936b77b20ed581565b3480156105c657600080fd5b506105486105d5366004613170565b610dcc565b3480156105e657600080fd5b50600e546104499060ff1681565b34801561060057600080fd5b5061049a60165481565b34801561061657600080fd5b5061049a60125481565b34801561062c57600080fd5b5061049a60075481565b34801561064257600080fd5b506105486106513660046132bd565b610ea5565b34801561066257600080fd5b5061049a60155481565b34801561067857600080fd5b50600e546104499062010000900460ff1681565b34801561069857600080fd5b5061049a6106a7366004613170565b6001600160a01b031660009081526020819052604090205490565b3480156106ce57600080fd5b50610548611010565b3480156106e357600080fd5b50610548611084565b3480156106f857600080fd5b5061054861070736600461338e565b6110ef565b34801561071857600080fd5b5061049a60135481565b34801561072e57600080fd5b5061054861073d3660046133c5565b6111da565b34801561074e57600080fd5b5061049a60065481565b34801561076457600080fd5b50610548611230565b34801561077957600080fd5b506005546001600160a01b0316610411565b34801561079757600080fd5b506105486107a6366004613170565b6112f2565b3480156107b757600080fd5b5061049a60175481565b3480156107cd57600080fd5b506103c76113ca565b3480156107e257600080fd5b506105486107f136600461338e565b6113d9565b34801561080257600080fd5b50610449610811366004613146565b6114b8565b34801561082257600080fd5b50600c54610411906001600160a01b031681565b34801561084257600080fd5b50610449610851366004613146565b611551565b34801561086257600080fd5b5061049a60085481565b34801561087857600080fd5b506104496108873660046133f1565b61155e565b34801561089857600080fd5b506105486108a7366004613424565b611767565b3480156108b857600080fd5b506104496108c7366004613170565b601f6020526000908152604090205460ff1681565b3480156108e857600080fd5b50600e5461044990610100900460ff1681565b34801561090757600080fd5b5061054861091636600461338e565b6117a4565b34801561092757600080fd5b506105486109363660046133c5565b61182d565b34801561094757600080fd5b506105486109563660046131ce565b611883565b34801561096757600080fd5b506010546104499060ff1681565b34801561098157600080fd5b506105486109903660046131ce565b61198c565b3480156109a157600080fd5b50601c546104499060ff1681565b3480156109bb57600080fd5b5061049a60115481565b3480156109d157600080fd5b506105486109e03660046131ce565b611ad7565b3480156109f157600080fd5b5061049a610a003660046133f1565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610a3757600080fd5b5061049a600a5481565b348015610a4d57600080fd5b50610548611bde565b348015610a6257600080fd5b50600b54610411906001600160a01b031681565b348015610a8257600080fd5b506104117395ad61b0a150d79219dcf64e1e6cc01f0b64c4ce81565b348015610aaa57600080fd5b5061049a600d5481565b348015610ac057600080fd5b5061049a60145481565b348015610ad657600080fd5b50610548610ae5366004613170565b611c14565b348015610af657600080fd5b50610548611cff565b348015610b0b57600080fd5b5061049a60185481565b348015610b2157600080fd5b5061049a60195481565b606060038054610b3a90613441565b80601f0160208091040260200160405190810160405280929190818152602001828054610b6690613441565b8015610bb35780601f10610b8857610100808354040283529160200191610bb3565b820191906000526020600020905b815481529060010190602001808311610b9657829003601f168201915b5050505050905090565b6000610bca338484611d76565b5060015b92915050565b6000610be1848484611e9a565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610c6b5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084015b60405180910390fd5b610c788533858403611d76565b506001949350505050565b6005546001600160a01b03163314610cad5760405162461bcd60e51b8152600401610c629061347b565b670de0b6b3a76400006103e8610cc260025490565b610ccd9060016134c6565b610cd791906134dd565b610ce191906134dd565b811015610d425760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152687468616e20302e312560b81b6064820152608401610c62565b610d5481670de0b6b3a76400006134c6565b60068190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de41009906020015b60405180910390a150565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610bca918590610dc79086906134ff565b611d76565b6005546001600160a01b03163314610df65760405162461bcd60e51b8152600401610c629061347b565b6001600160a01b038116610e5b5760405162461bcd60e51b815260206004820152602660248201527f5f6f7065726174696f6e734164647265737320616464726573732063616e6e6f60448201526507420626520360d41b6064820152608401610c62565b600b80546001600160a01b0319166001600160a01b0383169081179091556040517f4efa56652237561d0f1fd31311aeaaa41f3b754a461545ed3cf6ced5876d298290600090a250565b6005546001600160a01b03163314610ecf5760405162461bcd60e51b8152600401610c629061347b565b8051825114610f205760405162461bcd60e51b815260206004820152601e60248201527f617272617973206d757374206265207468652073616d65206c656e67746800006044820152606401610c62565b60c8825110610f905760405162461bcd60e51b815260206004820152603660248201527f43616e206f6e6c792061697264726f70203230302077616c6c657473207065726044820152752074786e2064756520746f20676173206c696d69747360501b6064820152608401610c62565b60005b825181101561100b576000838281518110610fb057610fb0613512565b602002602001015190506000838381518110610fce57610fce613512565b6020026020010151670de0b6b3a7640000610fe991906134c6565b9050610ff6338383611e9a565b5050808061100390613528565b915050610f93565b505050565b6005546001600160a01b0316331461103a5760405162461bcd60e51b8152600401610c629061347b565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146110ae5760405162461bcd60e51b8152600401610c629061347b565b600e805460ff199081169091556010805490911690556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6005546001600160a01b031633146111195760405162461bcd60e51b8152600401610c629061347b565b806111af577f0000000000000000000000007e2cc3e5c3b09bf921872d838a55936b77b20ed56001600160a01b0316826001600160a01b0316036111af5760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610c62565b6001600160a01b03919091166000908152601e60205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146112045760405162461bcd60e51b8152600401610c629061347b565b6012839055601382905560148190558061121e83856134ff565b61122891906134ff565b601155505050565b6005546001600160a01b0316331461125a5760405162461bcd60e51b8152600401610c629061347b565b600e54610100900460ff16156112b25760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610c62565b600e805462ffff0019166201010017905543600d556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a1565b6005546001600160a01b0316331461131c5760405162461bcd60e51b8152600401610c629061347b565b6001600160a01b0381166113805760405162461bcd60e51b815260206004820152602560248201527f5f6d61726b6574696e674164647265737320616464726573732063616e6e6f74604482015264020626520360dc1b6064820152608401610c62565b600c80546001600160a01b0319166001600160a01b0383169081179091556040517fd1e7d6a3390dd5008bd1c57798817b9f806e4c417264e7d3d67e42e784dc24a990600090a250565b606060048054610b3a90613441565b6005546001600160a01b031633146114035760405162461bcd60e51b8152600401610c629061347b565b7f0000000000000000000000007e2cc3e5c3b09bf921872d838a55936b77b20ed56001600160a01b0316826001600160a01b0316036114aa5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610c62565b6114b48282612738565b5050565b3360009081526001602090815260408083206001600160a01b03861684529091528120548281101561153a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610c62565b6115473385858403611d76565b5060019392505050565b6000610bca338484611e9a565b6005546000906001600160a01b0316331461158b5760405162461bcd60e51b8152600401610c629061347b565b6001600160a01b0383166115e15760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610c62565b306001600160a01b038416036116395760405162461bcd60e51b815260206004820152601c60248201527f43616e2774207769746864726177206e617469766520746f6b656e73000000006044820152606401610c62565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa158015611680573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116a49190613541565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af11580156116f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061171b919061355a565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6005546001600160a01b031633146117915760405162461bcd60e51b8152600401610c629061347b565b601c805460ff1916911515919091179055565b6005546001600160a01b031633146117ce5760405162461bcd60e51b8152600401610c629061347b565b6001600160a01b0382166000818152601d6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146118575760405162461bcd60e51b8152600401610c629061347b565b6016839055601782905560188190558061187183856134ff565b61187b91906134ff565b601555505050565b6005546001600160a01b031633146118ad5760405162461bcd60e51b8152600401610c629061347b565b670de0b6b3a76400006103e86118c260025490565b6118cd9060036134c6565b6118d791906134dd565b6118e191906134dd565b8110156119455760405162461bcd60e51b815260206004820152602c60248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f7760448201526b6572207468616e20302e332560a01b6064820152608401610c62565b61195781670de0b6b3a76400006134c6565b60088190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc90602001610d85565b6005546001600160a01b031633146119b65760405162461bcd60e51b8152600401610c629061347b565b620186a06119c360025490565b6119ce9060016134c6565b6119d891906134dd565b811015611a455760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610c62565b6103e8611a5160025490565b611a5c9060016134c6565b611a6691906134dd565b811115611ad25760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171892903a37ba30b61039bab838363c9760611b6064820152608401610c62565b600a55565b6005546001600160a01b03163314611b015760405162461bcd60e51b8152600401610c629061347b565b670de0b6b3a76400006103e8611b1660025490565b611b219060016134c6565b611b2b91906134dd565b611b3591906134dd565b811015611b975760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e312560b01b6064820152608401610c62565b611ba981670de0b6b3a76400006134c6565b60078190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e90602001610d85565b6005546001600160a01b03163314611c085760405162461bcd60e51b8152600401610c629061347b565b6010805460ff19169055565b6005546001600160a01b03163314611c3e5760405162461bcd60e51b8152600401610c629061347b565b6001600160a01b038116611ca35760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c62565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314611d295760405162461bcd60e51b8152600401610c629061347b565b604051600090339047908381818185875af1925050503d8060008114611d6b576040519150601f19603f3d011682016040523d82523d6000602084013e611d70565b606091505b50505050565b6001600160a01b038316611dd85760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610c62565b6001600160a01b038216611e395760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610c62565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611ec05760405162461bcd60e51b8152600401610c6290613577565b6001600160a01b038216611ee65760405162461bcd60e51b8152600401610c62906135bc565b60008111611f365760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610c62565b600e5460ff161561240a576005546001600160a01b03848116911614801590611f6d57506005546001600160a01b03838116911614155b8015611f8157506001600160a01b03821615155b8015611f9857506001600160a01b03821661dead14155b1561240a57600e54610100900460ff16612030576001600160a01b0383166000908152601e602052604090205460ff1680611feb57506001600160a01b0382166000908152601e602052604090205460ff165b6120305760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610c62565b60105460ff161561218c577f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0316826001600160a01b0316141580156120af57507f0000000000000000000000007e2cc3e5c3b09bf921872d838a55936b77b20ed56001600160a01b0316826001600160a01b031614155b1561218c576120bf6004436135ff565b326000908152600f60205260409020541080156120fd57506120e26004436135ff565b6001600160a01b0383166000908152600f6020526040902054105b6121675760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527432b21710102a393c9030b3b0b4b7103630ba32b91760591b6064820152608401610c62565b326000908152600f602052604080822043908190556001600160a01b03851683529120555b6001600160a01b0383166000908152601f602052604090205460ff1680156121cd57506001600160a01b0382166000908152601e602052604090205460ff16155b156122a9576006548111156122355760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610c62565b6008546001600160a01b03831660009081526020819052604090205461225b90836134ff565b11156122a45760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08115e18d95959081b585e081dd85b1b195d60421b6044820152606401610c62565b61240a565b6001600160a01b0382166000908152601f602052604090205460ff1680156122ea57506001600160a01b0383166000908152601e602052604090205460ff16155b15612354576007548111156122a45760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610c62565b6001600160a01b0382166000908152601e602052604090205460ff1615801561239657506001600160a01b0383166000908152601e602052604090205460ff16155b1561240a576008546001600160a01b0383166000908152602081905260409020546123c190836134ff565b111561240a5760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08115e18d95959081b585e081dd85b1b195d60421b6044820152606401610c62565b30600090815260208190526040902054600a54811080159081906124365750600e5462010000900460ff165b8015612445575060095460ff16155b801561246a57506001600160a01b0385166000908152601f602052604090205460ff16155b801561248f57506001600160a01b0385166000908152601d602052604090205460ff16155b80156124b457506001600160a01b0384166000908152601d602052604090205460ff16155b156124d9576009805460ff191660011790556124ce6127a2565b6009805460ff191690555b6001600160a01b0385166000908152601d602052604090205460019060ff168061251b57506001600160a01b0385166000908152601d602052604090205460ff165b15612524575060005b6000808280156125375750601c5460ff16155b15612723576001600160a01b0387166000908152601f602052604090205460ff16801561256657506000601554115b1561261e5760646015548761257b91906134c6565b61258591906134dd565b91506015546018548361259891906134c6565b6125a291906134dd565b601b60008282546125b391906134ff565b90915550506015546016546125c890846134c6565b6125d291906134dd565b601960008282546125e391906134ff565b90915550506015546017546125f890846134c6565b61260291906134dd565b601a600082825461261391906134ff565b909155506126fb9050565b6001600160a01b0388166000908152601f602052604090205460ff16801561264857506000601154115b156126fb5760646011548761265d91906134c6565b61266791906134dd565b91506011546014548361267a91906134c6565b61268491906134dd565b601b600082825461269591906134ff565b90915550506011546012546126aa90846134c6565b6126b491906134dd565b601960008282546126c591906134ff565b90915550506011546013546126da90846134c6565b6126e491906134dd565b601a60008282546126f591906134ff565b90915550505b811561270c5761270c883084612c0c565b61271681836134ff565b61272090876135ff565b95505b61272e888888612c0c565b5050505050505050565b6001600160a01b0382166000908152601f60205260409020805460ff19168215151790556127668282612d61565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b3060009081526020819052604081205490506000601a54601954601b546127c991906134ff565b6127d391906134ff565b90508115806127e0575080155b156127e9575050565b600a80546127f6916134c6565b82111561280d57600a805461280a916134c6565b91505b6000600282601b548561282091906134c6565b61282a91906134dd565b61283491906134dd565b905061284861284382856135ff565b612dc4565b6040516304fa881160e21b81527395ad61b0a150d79219dcf64e1e6cc01f0b64c4ce60048201527f0000000000000000000000005773839c7497481c82bcecbd7309bc6c923052f06001600160a01b0316906313ea204490602401600060405180830381600087803b1580156128bd57600080fd5b505af11580156128d1573d6000803e3d6000fd5b50506040516370a0823160e01b8152306004820152600092507395ad61b0a150d79219dcf64e1e6cc01f0b64c4ce91506370a0823190602401602060405180830381865afa158015612927573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061294b9190613541565b9050600081905060006002601b5461296391906134dd565b61296d90866135ff565b60195461297a90856134c6565b61298491906134dd565b905060006002601b5461299791906134dd565b6129a190876135ff565b601a546129ae90866134c6565b6129b891906134dd565b90506129c481836134ff565b6129ce90846135ff565b6000601b8190556019819055601a55925084158015906129ee5750600083115b156129fd576129fd8584612f37565b8015612a8e57600c5460405163a9059cbb60e01b81526001600160a01b039091166004820152602481018290527395ad61b0a150d79219dcf64e1e6cc01f0b64c4ce9063a9059cbb906044016020604051808303816000875af1158015612a68573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a8c919061355a565b505b6040516370a0823160e01b81523060048201526000907395ad61b0a150d79219dcf64e1e6cc01f0b64c4ce906370a0823190602401602060405180830381865afa158015612ae0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b049190613541565b1115612c0357600b546040516370a0823160e01b81523060048201527395ad61b0a150d79219dcf64e1e6cc01f0b64c4ce9163a9059cbb916001600160a01b039091169083906370a0823190602401602060405180830381865afa158015612b70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b949190613541565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015612bdf573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061272e919061355a565b50505050505050565b6001600160a01b038316612c325760405162461bcd60e51b8152600401610c6290613577565b6001600160a01b038216612c585760405162461bcd60e51b8152600401610c62906135bc565b6001600160a01b03831660009081526020819052604090205481811015612cd05760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610c62565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290612d079084906134ff565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612d5391815260200190565b60405180910390a350505050565b6001600160a01b0382166000818152601e6020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612df957612df9613512565b60200260200101906001600160a01b031690816001600160a01b0316815250507395ad61b0a150d79219dcf64e1e6cc01f0b64c4ce81600181518110612e4157612e41613512565b60200260200101906001600160a01b031690816001600160a01b031681525050612e8c307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611d76565b604051635c11d79560e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d1690635c11d79590612f0190859060009086907f0000000000000000000000005773839c7497481c82bcecbd7309bc6c923052f0904290600401613612565b600060405180830381600087803b158015612f1b57600080fd5b505af1158015612f2f573d6000803e3d6000fd5b505050505050565b612f62307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611d76565b60405163095ea7b360e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d166004820152602481018290527395ad61b0a150d79219dcf64e1e6cc01f0b64c4ce9063095ea7b3906044016020604051808303816000875af1158015612fe3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613007919061355a565b5060405162e8e33760e81b815230600482018190527395ad61b0a150d79219dcf64e1e6cc01f0b64c4ce6024830152604482018490526064820183905260006084830181905260a483015260c48201524260e48201527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b03169063e8e3370090610104016060604051808303816000875af11580156130b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130d59190613683565b5050505050565b600060208083528351808285015260005b81811015613109578581018301518582016040015282016130ed565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b038116811461314157600080fd5b919050565b6000806040838503121561315957600080fd5b6131628361312a565b946020939093013593505050565b60006020828403121561318257600080fd5b61318b8261312a565b9392505050565b6000806000606084860312156131a757600080fd5b6131b08461312a565b92506131be6020850161312a565b9150604084013590509250925092565b6000602082840312156131e057600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715613226576132266131e7565b604052919050565b600067ffffffffffffffff821115613248576132486131e7565b5060051b60200190565b600082601f83011261326357600080fd5b813560206132786132738361322e565b6131fd565b82815260059290921b8401810191818101908684111561329757600080fd5b8286015b848110156132b2578035835291830191830161329b565b509695505050505050565b600080604083850312156132d057600080fd5b823567ffffffffffffffff808211156132e857600080fd5b818501915085601f8301126132fc57600080fd5b8135602061330c6132738361322e565b82815260059290921b8401810191818101908984111561332b57600080fd5b948201945b83861015613350576133418661312a565b82529482019490820190613330565b9650508601359250508082111561336657600080fd5b5061337385828601613252565b9150509250929050565b801515811461338b57600080fd5b50565b600080604083850312156133a157600080fd5b6133aa8361312a565b915060208301356133ba8161337d565b809150509250929050565b6000806000606084860312156133da57600080fd5b505081359360208301359350604090920135919050565b6000806040838503121561340457600080fd5b61340d8361312a565b915061341b6020840161312a565b90509250929050565b60006020828403121561343657600080fd5b813561318b8161337d565b600181811c9082168061345557607f821691505b60208210810361347557634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610bce57610bce6134b0565b6000826134fa57634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610bce57610bce6134b0565b634e487b7160e01b600052603260045260246000fd5b60006001820161353a5761353a6134b0565b5060010190565b60006020828403121561355357600080fd5b5051919050565b60006020828403121561356c57600080fd5b815161318b8161337d565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610bce57610bce6134b0565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156136625784516001600160a01b03168352938301939183019160010161363d565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561369857600080fd5b835192506020840151915060408401519050925092509256fea264697066735822122020f6b03d339bf38016db3a6bd0cc43f9cb0c1d6db46721cc1e66c147b8c0e13464736f6c63430008110033

Deployed Bytecode Sourcemap

10278:17019:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4148:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10429:37;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;749:32:1;;;731:51;;719:2;704:18;10429:37:0;567:221:1;5062:169:0;;;;;;;;;;-1:-1:-1;5062:169:0;;;;;:::i;:::-;;:::i;:::-;;;1395:14:1;;1388:22;1370:41;;1358:2;1343:18;5062:169:0;1230:187:1;11888:64:0;;;;;;;;;;-1:-1:-1;11888:64:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;4469:108;;;;;;;;;;-1:-1:-1;4557:12:0;;4469:108;;;1759:25:1;;;1747:2;1732:18;4469:108:0;1613:177:1;11669:33:0;;;;;;;;;;;;;;;;10513:42;;;;;;;;;;;;;;;11629:33;;;;;;;;;;;;;;;;5239:492;;;;;;;;;;-1:-1:-1;5239:492:0;;;;;:::i;:::-;;:::i;15506:269::-;;;;;;;;;;-1:-1:-1;15506:269:0;;;;;:::i;:::-;;:::i;:::-;;4368:93;;;;;;;;;;-1:-1:-1;4368:93:0;;4451:2;2683:36:1;;2671:2;2656:18;4368:93:0;2541:184:1;5739:215:0;;;;;;;;;;-1:-1:-1;5739:215:0;;;;;:::i;:::-;;:::i;10473:31::-;;;;;;;;;;;;;;;26581:297;;;;;;;;;;-1:-1:-1;26581:297:0;;;;;:::i;:::-;;:::i;10792:33::-;;;;;;;;;;-1:-1:-1;10792:33:0;;;;;;;;11471:32;;;;;;;;;;;;;;;;11322:31;;;;;;;;;;;;;;;;10355:28;;;;;;;;;;;;;;;;16996:510;;;;;;;;;;-1:-1:-1;16996:510:0;;;;;:::i;:::-;;:::i;11436:28::-;;;;;;;;;;;;;;;;10872:31;;;;;;;;;;-1:-1:-1;10872:31:0;;;;;;;;;;;4585:127;;;;;;;;;;-1:-1:-1;4585:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;4686:18:0;4659:7;4686:18;;;;;;;;;;;;4585:127;8229:150;;;;;;;;;;;;;:::i;15172:154::-;;;;;;;;;;;;;:::i;17518:260::-;;;;;;;;;;-1:-1:-1;17518:260:0;;;;;:::i;:::-;;:::i;11360:30::-;;;;;;;;;;;;;;;;18289:326;;;;;;;;;;-1:-1:-1;18289:326:0;;;;;:::i;:::-;;:::i;10321:27::-;;;;;;;;;;;;;;;;14867:249;;;;;;;;;;;;;:::i;8015:79::-;;;;;;;;;;-1:-1:-1;8080:6:0;;-1:-1:-1;;;;;8080:6:0;8015:79;;26887:289;;;;;;;;;;-1:-1:-1;26887:289:0;;;;;:::i;:::-;;:::i;11510:31::-;;;;;;;;;;;;;;;;4256:104;;;;;;;;;;;;;:::i;17786:239::-;;;;;;;;;;-1:-1:-1;17786:239:0;;;;;:::i;:::-;;:::i;5962:413::-;;;;;;;;;;-1:-1:-1;5962:413:0;;;;;:::i;:::-;;:::i;10673:31::-;;;;;;;;;;-1:-1:-1;10673:31:0;;;;-1:-1:-1;;;;;10673:31:0;;;4720:175;;;;;;;;;;-1:-1:-1;4720:175:0;;;;;:::i;:::-;;:::i;10390:30::-;;;;;;;;;;;;;;;;25881:462;;;;;;;;;;-1:-1:-1;25881:462:0;;;;;:::i;:::-;;:::i;27185:107::-;;;;;;;;;;-1:-1:-1;27185:107:0;;;;;:::i;:::-;;:::i;12110:58::-;;;;;;;;;;-1:-1:-1;12110:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;10832:33;;;;;;;;;;-1:-1:-1;10832:33:0;;;;;;;;;;;18965:182;;;;;;;;;;-1:-1:-1;18965:182:0;;;;;:::i;:::-;;:::i;18623:334::-;;;;;;;;;;-1:-1:-1;18623:334:0;;;;;:::i;:::-;;:::i;16069:284::-;;;;;;;;;;-1:-1:-1;16069:284:0;;;;;:::i;:::-;;:::i;11095:39::-;;;;;;;;;;-1:-1:-1;11095:39:0;;;;;;;;16423:346;;;;;;;;;;-1:-1:-1;16423:346:0;;;;;:::i;:::-;;:::i;11711:23::-;;;;;;;;;;-1:-1:-1;11711:23:0;;;;;;;;11288:27;;;;;;;;;;;;;;;;15787:274;;;;;;;;;;-1:-1:-1;15787:274:0;;;;;:::i;:::-;;:::i;4903:151::-;;;;;;;;;;-1:-1:-1;4903:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;5019:18:0;;;4992:7;5019:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;4903:151;10592:33;;;;;;;;;;;;;;;;15396:98;;;;;;;;;;;;;:::i;10634:32::-;;;;;;;;;;-1:-1:-1;10634:32:0;;;;-1:-1:-1;;;;;10634:32:0;;;11143:81;;;;;;;;;;;;11181:42;11143:81;;10713:37;;;;;;;;;;;;;;;;11397:30;;;;;;;;;;;;;;;;8387:244;;;;;;;;;;-1:-1:-1;8387:244:0;;;;;:::i;:::-;;:::i;26413:160::-;;;;;;;;;;;;;:::i;11548:31::-;;;;;;;;;;;;;;;;11588:34;;;;;;;;;;;;;;;;4148:100;4202:13;4235:5;4228:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4148:100;:::o;5062:169::-;5145:4;5162:39;377:10;5185:7;5194:6;5162:8;:39::i;:::-;-1:-1:-1;5219:4:0;5062:169;;;;;:::o;5239:492::-;5379:4;5396:36;5406:6;5414:9;5425:6;5396:9;:36::i;:::-;-1:-1:-1;;;;;5472:19:0;;5445:24;5472:19;;;:11;:19;;;;;;;;377:10;5472:33;;;;;;;;5524:26;;;;5516:79;;;;-1:-1:-1;;;5516:79:0;;7439:2:1;5516:79:0;;;7421:21:1;7478:2;7458:18;;;7451:30;7517:34;7497:18;;;7490:62;-1:-1:-1;;;7568:18:1;;;7561:38;7616:19;;5516:79:0;;;;;;;;;5631:57;5640:6;377:10;5681:6;5662:16;:25;5631:8;:57::i;:::-;-1:-1:-1;5719:4:0;;5239:492;-1:-1:-1;;;;5239:492:0:o;15506:269::-;8142:6;;-1:-1:-1;;;;;8142:6:0;377:10;8142:22;8134:67;;;;-1:-1:-1;;;8134:67:0;;;;;;;:::i;:::-;15625:4:::1;15619;15599:13;4557:12:::0;;;4469:108;15599:13:::1;:17;::::0;15615:1:::1;15599:17;:::i;:::-;:24;;;;:::i;:::-;15598:31;;;;:::i;:::-;15588:6;:41;;15580:95;;;::::0;-1:-1:-1;;;15580:95:0;;8736:2:1;15580:95:0::1;::::0;::::1;8718:21:1::0;8775:2;8755:18;;;8748:30;8814:34;8794:18;;;8787:62;-1:-1:-1;;;8865:18:1;;;8858:39;8914:19;;15580:95:0::1;8534:405:1::0;15580:95:0::1;15701:17;:6:::0;15711::::1;15701:17;:::i;:::-;15686:12;:32:::0;;;15734:33:::1;::::0;1759:25:1;;;15734:33:0::1;::::0;1747:2:1;1732:18;15734:33:0::1;;;;;;;;15506:269:::0;:::o;5739:215::-;377:10;5827:4;5876:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;5876:34:0;;;;;;;;;;5827:4;;5844:80;;5867:7;;5876:47;;5913:10;;5876:47;:::i;:::-;5844:8;:80::i;26581:297::-;8142:6;;-1:-1:-1;;;;;8142:6:0;377:10;8142:22;8134:67;;;;-1:-1:-1;;;8134:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26677:32:0;::::1;26669:83;;;::::0;-1:-1:-1;;;26669:83:0;;9276:2:1;26669:83:0::1;::::0;::::1;9258:21:1::0;9315:2;9295:18;;;9288:30;9354:34;9334:18;;;9327:62;-1:-1:-1;;;9405:18:1;;;9398:36;9451:19;;26669:83:0::1;9074:402:1::0;26669:83:0::1;26763:17;:47:::0;;-1:-1:-1;;;;;;26763:47:0::1;-1:-1:-1::0;;;;;26763:47:0;::::1;::::0;;::::1;::::0;;;26826:44:::1;::::0;::::1;::::0;-1:-1:-1;;26826:44:0::1;26581:297:::0;:::o;16996:510::-;8142:6;;-1:-1:-1;;;;;8142:6:0;377:10;8142:22;8134:67;;;;-1:-1:-1;;;8134:67:0;;;;;;;:::i;:::-;17129:15:::1;:22;17111:7;:14;:40;17103:83;;;::::0;-1:-1:-1;;;17103:83:0;;9683:2:1;17103:83:0::1;::::0;::::1;9665:21:1::0;9722:2;9702:18;;;9695:30;9761:32;9741:18;;;9734:60;9811:18;;17103:83:0::1;9481:354:1::0;17103:83:0::1;17222:3;17205:7;:14;:20;17197:87;;;::::0;-1:-1:-1;;;17197:87:0;;10042:2:1;17197:87:0::1;::::0;::::1;10024:21:1::0;10081:2;10061:18;;;10054:30;10120:34;10100:18;;;10093:62;-1:-1:-1;;;10171:18:1;;;10164:52;10233:19;;17197:87:0::1;9840:418:1::0;17197:87:0::1;17299:9;17295:204;17318:7;:14;17314:1;:18;17295:204;;;17353:14;17370:7;17378:1;17370:10;;;;;;;;:::i;:::-;;;;;;;17353:27;;17395:14;17412:15;17428:1;17412:18;;;;;;;;:::i;:::-;;;;;;;17431:4;17412:23;;;;:::i;:::-;17395:40;;17450:37;17460:10;17472:6;17480;17450:9;:37::i;:::-;17338:161;;17334:3;;;;;:::i;:::-;;;;17295:204;;;;16996:510:::0;;:::o;8229:150::-;8142:6;;-1:-1:-1;;;;;8142:6:0;377:10;8142:22;8134:67;;;;-1:-1:-1;;;8134:67:0;;;;;;;:::i;:::-;8322:6:::1;::::0;8301:40:::1;::::0;8338:1:::1;::::0;-1:-1:-1;;;;;8322:6:0::1;::::0;8301:40:::1;::::0;8338:1;;8301:40:::1;8352:6;:19:::0;;-1:-1:-1;;;;;;8352:19:0::1;::::0;;8229:150::o;15172:154::-;8142:6;;-1:-1:-1;;;;;8142:6:0;377:10;8142:22;8134:67;;;;-1:-1:-1;;;8134:67:0;;;;;;;:::i;:::-;15226:14:::1;:22:::0;;-1:-1:-1;;15226:22:0;;::::1;::::0;;;15259:20:::1;:28:::0;;;;::::1;::::0;;15303:15:::1;::::0;::::1;::::0;15243:5:::1;::::0;15303:15:::1;15172:154::o:0;17518:260::-;8142:6;;-1:-1:-1;;;;;8142:6:0;377:10;8142:22;8134:67;;;;-1:-1:-1;;;8134:67:0;;;;;;;:::i;:::-;17614:4:::1;17610:104;;17652:6;-1:-1:-1::0;;;;;17642:16:0::1;:6;-1:-1:-1::0;;;;;17642:16:0::1;::::0;17634:68:::1;;;::::0;-1:-1:-1;;;17634:68:0;;10737:2:1;17634:68:0::1;::::0;::::1;10719:21:1::0;10776:2;10756:18;;;10749:30;10815:34;10795:18;;;10788:62;-1:-1:-1;;;10866:18:1;;;10859:37;10913:19;;17634:68:0::1;10535:403:1::0;17634:68:0::1;-1:-1:-1::0;;;;;17724:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;17724:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;17518:260::o;18289:326::-;8142:6;;-1:-1:-1;;;;;8142:6:0;377:10;8142:22;8134:67;;;;-1:-1:-1;;;8134:67:0;;;;;;;:::i;:::-;18412:16:::1;:33:::0;;;18456:15:::1;:31:::0;;;18498:15:::1;:31:::0;;;18516:13;18555:34:::1;18474:13:::0;18431:14;18555:34:::1;:::i;:::-;:52;;;;:::i;:::-;18540:12;:67:::0;-1:-1:-1;;;18289:326:0:o;14867:249::-;8142:6;;-1:-1:-1;;;;;8142:6:0;377:10;8142:22;8134:67;;;;-1:-1:-1;;;8134:67:0;;;;;;;:::i;:::-;14931:13:::1;::::0;::::1;::::0;::::1;;;14930:14;14922:50;;;::::0;-1:-1:-1;;;14922:50:0;;11145:2:1;14922:50:0::1;::::0;::::1;11127:21:1::0;11184:2;11164:18;;;11157:30;11223:25;11203:18;;;11196:53;11266:18;;14922:50:0::1;10943:347:1::0;14922:50:0::1;14983:13;:20:::0;;-1:-1:-1;;15014:18:0;;;;;15064:12:::1;15043:18;:33:::0;15092:16:::1;::::0;::::1;::::0;-1:-1:-1;;15092:16:0::1;14867:249::o:0;26887:289::-;8142:6;;-1:-1:-1;;;;;8142:6:0;377:10;8142:22;8134:67;;;;-1:-1:-1;;;8134:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26981:31:0;::::1;26973:81;;;::::0;-1:-1:-1;;;26973:81:0;;11497:2:1;26973:81:0::1;::::0;::::1;11479:21:1::0;11536:2;11516:18;;;11509:30;11575:34;11555:18;;;11548:62;-1:-1:-1;;;11626:18:1;;;11619:35;11671:19;;26973:81:0::1;11295:401:1::0;26973:81:0::1;27065:16;:45:::0;;-1:-1:-1;;;;;;27065:45:0::1;-1:-1:-1::0;;;;;27065:45:0;::::1;::::0;;::::1;::::0;;;27126:42:::1;::::0;::::1;::::0;-1:-1:-1;;27126:42:0::1;26887:289:::0;:::o;4256:104::-;4312:13;4345:7;4338:14;;;;;:::i;17786:239::-;8142:6;;-1:-1:-1;;;;;8142:6:0;377:10;8142:22;8134:67;;;;-1:-1:-1;;;8134:67:0;;;;;;;:::i;:::-;17895:6:::1;-1:-1:-1::0;;;;;17887:14:0::1;:4;-1:-1:-1::0;;;;;17887:14:0::1;::::0;17879:84:::1;;;::::0;-1:-1:-1;;;17879:84:0;;11903:2:1;17879:84:0::1;::::0;::::1;11885:21:1::0;11942:2;11922:18;;;11915:30;11981:34;11961:18;;;11954:62;12052:27;12032:18;;;12025:55;12097:19;;17879:84:0::1;11701:421:1::0;17879:84:0::1;17976:41;18005:4;18011:5;17976:28;:41::i;:::-;17786:239:::0;;:::o;5962:413::-;377:10;6055:4;6099:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;6099:34:0;;;;;;;;;;6152:35;;;;6144:85;;;;-1:-1:-1;;;6144:85:0;;12329:2:1;6144:85:0;;;12311:21:1;12368:2;12348:18;;;12341:30;12407:34;12387:18;;;12380:62;-1:-1:-1;;;12458:18:1;;;12451:35;12503:19;;6144:85:0;12127:401:1;6144:85:0;6265:67;377:10;6288:7;6316:15;6297:16;:34;6265:8;:67::i;:::-;-1:-1:-1;6363:4:0;;5962:413;-1:-1:-1;;;5962:413:0:o;4720:175::-;4806:4;4823:42;377:10;4847:9;4858:6;4823:9;:42::i;25881:462::-;8142:6;;25974:10;;-1:-1:-1;;;;;8142:6:0;377:10;8142:22;8134:67;;;;-1:-1:-1;;;8134:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26005:20:0;::::1;25997:59;;;::::0;-1:-1:-1;;;25997:59:0;;12735:2:1;25997:59:0::1;::::0;::::1;12717:21:1::0;12774:2;12754:18;;;12747:30;12813:28;12793:18;;;12786:56;12859:18;;25997:59:0::1;12533:350:1::0;25997:59:0::1;26093:4;-1:-1:-1::0;;;;;26075:23:0;::::1;::::0;26067:64:::1;;;::::0;-1:-1:-1;;;26067:64:0;;13090:2:1;26067:64:0::1;::::0;::::1;13072:21:1::0;13129:2;13109:18;;;13102:30;13168;13148:18;;;13141:58;13216:18;;26067:64:0::1;12888:352:1::0;26067:64:0::1;26169:39;::::0;-1:-1:-1;;;26169:39:0;;26202:4:::1;26169:39;::::0;::::1;731:51:1::0;26142:24:0::1;::::0;-1:-1:-1;;;;;26169:24:0;::::1;::::0;::::1;::::0;704:18:1;;26169:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26227:46;::::0;-1:-1:-1;;;26227:46:0;;-1:-1:-1;;;;;13626:32:1;;;26227:46:0::1;::::0;::::1;13608:51:1::0;13675:18;;;13668:34;;;26142:66:0;;-1:-1:-1;26227:23:0;;::::1;::::0;::::1;::::0;13581:18:1;;26227:46:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26289;::::0;;-1:-1:-1;;;;;13626:32:1;;13608:51;;13690:2;13675:18;;13668:34;;;26219:54:0;;-1:-1:-1;26289:46:0::1;::::0;13581:18:1;26289:46:0::1;;;;;;;25986:357;25881:462:::0;;;;:::o;27185:107::-;8142:6;;-1:-1:-1;;;;;8142:6:0;377:10;8142:22;8134:67;;;;-1:-1:-1;;;8134:67:0;;;;;;;:::i;:::-;27258:11:::1;:26:::0;;-1:-1:-1;;27258:26:0::1;::::0;::::1;;::::0;;;::::1;::::0;;27185:107::o;18965:182::-;8142:6;;-1:-1:-1;;;;;8142:6:0;377:10;8142:22;8134:67;;;;-1:-1:-1;;;8134:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19050:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;19050:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;19105:34;;1370:41:1;;;19105:34:0::1;::::0;1343:18:1;19105:34:0::1;;;;;;;18965:182:::0;;:::o;18623:334::-;8142:6;;-1:-1:-1;;;;;8142:6:0;377:10;8142:22;8134:67;;;;-1:-1:-1;;;8134:67:0;;;;;;;:::i;:::-;18747:17:::1;:34:::0;;;18792:16:::1;:32:::0;;;18835:16:::1;:32:::0;;;18854:13;18894:36:::1;18811:13:::0;18767:14;18894:36:::1;:::i;:::-;:55;;;;:::i;:::-;18878:13;:71:::0;-1:-1:-1;;;18623:334:0:o;16069:284::-;8142:6;;-1:-1:-1;;;;;8142:6:0;377:10;8142:22;8134:67;;;;-1:-1:-1;;;8134:67:0;;;;;;;:::i;:::-;16191:4:::1;16185;16165:13;4557:12:::0;;;4469:108;16165:13:::1;:17;::::0;16181:1:::1;16165:17;:::i;:::-;:24;;;;:::i;:::-;16164:31;;;;:::i;:::-;16154:6;:41;;16146:98;;;::::0;-1:-1:-1;;;16146:98:0;;14165:2:1;16146:98:0::1;::::0;::::1;14147:21:1::0;14204:2;14184:18;;;14177:30;14243:34;14223:18;;;14216:62;-1:-1:-1;;;14294:18:1;;;14287:42;14346:19;;16146:98:0::1;13963:408:1::0;16146:98:0::1;16273:17;:6:::0;16283::::1;16273:17;:::i;:::-;16255:15;:35:::0;;;16306:39:::1;::::0;1759:25:1;;;16306:39:0::1;::::0;1747:2:1;1732:18;16306:39:0::1;1613:177:1::0;16423:346:0;8142:6;;-1:-1:-1;;;;;8142:6:0;377:10;8142:22;8134:67;;;;-1:-1:-1;;;8134:67:0;;;;;;;:::i;:::-;16546:6:::1;16526:13;4557:12:::0;;;4469:108;16526:13:::1;:17;::::0;16542:1:::1;16526:17;:::i;:::-;:26;;;;:::i;:::-;16513:9;:39;;16505:105;;;::::0;-1:-1:-1;;;16505:105:0;;14578:2:1;16505:105:0::1;::::0;::::1;14560:21:1::0;14617:2;14597:18;;;14590:30;14656:34;14636:18;;;14629:62;-1:-1:-1;;;14707:18:1;;;14700:51;14768:19;;16505:105:0::1;14376:417:1::0;16505:105:0::1;16661:4;16641:13;4557:12:::0;;;4469:108;16641:13:::1;:17;::::0;16657:1:::1;16641:17;:::i;:::-;:24;;;;:::i;:::-;16628:9;:37;;16620:102;;;::::0;-1:-1:-1;;;16620:102:0;;15000:2:1;16620:102:0::1;::::0;::::1;14982:21:1::0;15039:2;15019:18;;;15012:30;15078:34;15058:18;;;15051:62;-1:-1:-1;;;15129:18:1;;;15122:50;15189:19;;16620:102:0::1;14798:416:1::0;16620:102:0::1;16732:18;:30:::0;16423:346::o;15787:274::-;8142:6;;-1:-1:-1;;;;;8142:6:0;377:10;8142:22;8134:67;;;;-1:-1:-1;;;8134:67:0;;;;;;;:::i;:::-;15907:4:::1;15901;15881:13;4557:12:::0;;;4469:108;15881:13:::1;:17;::::0;15897:1:::1;15881:17;:::i;:::-;:24;;;;:::i;:::-;15880:31;;;;:::i;:::-;15870:6;:41;;15862:96;;;::::0;-1:-1:-1;;;15862:96:0;;15421:2:1;15862:96:0::1;::::0;::::1;15403:21:1::0;15460:2;15440:18;;;15433:30;15499:34;15479:18;;;15472:62;-1:-1:-1;;;15550:18:1;;;15543:40;15600:19;;15862:96:0::1;15219:406:1::0;15862:96:0::1;15985:17;:6:::0;15995::::1;15985:17;:::i;:::-;15969:13;:33:::0;;;16018:35:::1;::::0;1759:25:1;;;16018:35:0::1;::::0;1747:2:1;1732:18;16018:35:0::1;1613:177:1::0;15396:98:0;8142:6;;-1:-1:-1;;;;;8142:6:0;377:10;8142:22;8134:67;;;;-1:-1:-1;;;8134:67:0;;;;;;;:::i;:::-;15458:20:::1;:28:::0;;-1:-1:-1;;15458:28:0::1;::::0;;15396:98::o;8387:244::-;8142:6;;-1:-1:-1;;;;;8142:6:0;377:10;8142:22;8134:67;;;;-1:-1:-1;;;8134:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;8476:22:0;::::1;8468:73;;;::::0;-1:-1:-1;;;8468:73:0;;15832:2:1;8468:73:0::1;::::0;::::1;15814:21:1::0;15871:2;15851:18;;;15844:30;15910:34;15890:18;;;15883:62;-1:-1:-1;;;15961:18:1;;;15954:36;16007:19;;8468:73:0::1;15630:402:1::0;8468:73:0::1;8578:6;::::0;8557:38:::1;::::0;-1:-1:-1;;;;;8557:38:0;;::::1;::::0;8578:6:::1;::::0;8557:38:::1;::::0;8578:6:::1;::::0;8557:38:::1;8606:6;:17:::0;;-1:-1:-1;;;;;;8606:17:0::1;-1:-1:-1::0;;;;;8606:17:0;;;::::1;::::0;;;::::1;::::0;;8387:244::o;26413:160::-;8142:6;;-1:-1:-1;;;;;8142:6:0;377:10;8142:22;8134:67;;;;-1:-1:-1;;;8134:67:0;;;;;;;:::i;:::-;26507:58:::1;::::0;26471:12:::1;::::0;26515:10:::1;::::0;26539:21:::1;::::0;26471:12;26507:58;26471:12;26507:58;26539:21;26515:10;26507:58:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;26413:160:0:o;7304:380::-;-1:-1:-1;;;;;7440:19:0;;7432:68;;;;-1:-1:-1;;;7432:68:0;;16449:2:1;7432:68:0;;;16431:21:1;16488:2;16468:18;;;16461:30;16527:34;16507:18;;;16500:62;-1:-1:-1;;;16578:18:1;;;16571:34;16622:19;;7432:68:0;16247:400:1;7432:68:0;-1:-1:-1;;;;;7519:21:0;;7511:68;;;;-1:-1:-1;;;7511:68:0;;16854:2:1;7511:68:0;;;16836:21:1;16893:2;16873:18;;;16866:30;16932:34;16912:18;;;16905:62;-1:-1:-1;;;16983:18:1;;;16976:32;17025:19;;7511:68:0;16652:398:1;7511:68:0;-1:-1:-1;;;;;7592:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;7644:32;;1759:25:1;;;7644:32:0;;1732:18:1;7644:32:0;;;;;;;7304:380;;;:::o;19155:4033::-;-1:-1:-1;;;;;19255:18:0;;19247:68;;;;-1:-1:-1;;;19247:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19334:16:0;;19326:64;;;;-1:-1:-1;;;19326:64:0;;;;;;;:::i;:::-;19418:1;19409:6;:10;19401:52;;;;-1:-1:-1;;;19401:52:0;;18067:2:1;19401:52:0;;;18049:21:1;18106:2;18086:18;;;18079:30;18145:31;18125:18;;;18118:59;18194:18;;19401:52:0;17865:353:1;19401:52:0;19487:14;;;;19484:1860;;;8080:6;;-1:-1:-1;;;;;19521:15:0;;;8080:6;;19521:15;;;;:32;;-1:-1:-1;8080:6:0;;-1:-1:-1;;;;;19540:13:0;;;8080:6;;19540:13;;19521:32;:52;;;;-1:-1:-1;;;;;;19557:16:0;;;;19521:52;:77;;;;-1:-1:-1;;;;;;19577:21:0;;19591:6;19577:21;;19521:77;19517:1816;;;19622:13;;;;;;;19618:172;;-1:-1:-1;;;;;19667:37:0;;;;;;:31;:37;;;;;;;;;:76;;-1:-1:-1;;;;;;19708:35:0;;;;;;:31;:35;;;;;;;;19667:76;19659:111;;;;-1:-1:-1;;;19659:111:0;;18425:2:1;19659:111:0;;;18407:21:1;18464:2;18444:18;;;18437:30;-1:-1:-1;;;18483:18:1;;;18476:52;18545:18;;19659:111:0;18223:346:1;19659:111:0;19964:20;;;;19960:506;;;20026:9;-1:-1:-1;;;;;20012:24:0;:2;-1:-1:-1;;;;;20012:24:0;;;:49;;;;;20054:6;-1:-1:-1;;;;;20040:21:0;:2;-1:-1:-1;;;;;20040:21:0;;;20012:49;20008:439;;;20139:16;20154:1;20139:12;:16;:::i;:::-;20126:9;20097:39;;;;:28;:39;;;;;;:58;:113;;;;-1:-1:-1;20194:16:0;20209:1;20194:12;:16;:::i;:::-;-1:-1:-1;;;;;20159:32:0;;;;;;:28;:32;;;;;;:51;20097:113;20089:179;;;;-1:-1:-1;;;20089:179:0;;18909:2:1;20089:179:0;;;18891:21:1;18948:2;18928:18;;;18921:30;18987:34;18967:18;;;18960:62;-1:-1:-1;;;19038:18:1;;;19031:51;19099:19;;20089:179:0;18707:417:1;20089:179:0;20324:9;20295:39;;;;:28;:39;;;;;;20337:12;20295:54;;;;-1:-1:-1;;;;;20376:32:0;;;;;;:47;20008:439;-1:-1:-1;;;;;20535:31:0;;;;;;:25;:31;;;;;;;;:71;;;;-1:-1:-1;;;;;;20571:35:0;;;;;;:31;:35;;;;;;;;20570:36;20535:71;20531:787;;;20653:12;;20643:6;:22;;20635:75;;;;-1:-1:-1;;;20635:75:0;;19331:2:1;20635:75:0;;;19313:21:1;19370:2;19350:18;;;19343:30;19409:34;19389:18;;;19382:62;-1:-1:-1;;;19460:18:1;;;19453:38;19508:19;;20635:75:0;19129:404:1;20635:75:0;20771:15;;-1:-1:-1;;;;;4686:18:0;;4659:7;4686:18;;;;;;;;;;;20745:22;;:6;:22;:::i;:::-;:41;;20737:78;;;;-1:-1:-1;;;20737:78:0;;19740:2:1;20737:78:0;;;19722:21:1;19779:2;19759:18;;;19752:30;-1:-1:-1;;;19798:18:1;;;19791:54;19862:18;;20737:78:0;19538:348:1;20737:78:0;20531:787;;;-1:-1:-1;;;;;20892:29:0;;;;;;:25;:29;;;;;;;;:71;;;;-1:-1:-1;;;;;;20926:37:0;;;;;;:31;:37;;;;;;;;20925:38;20892:71;20888:430;;;21010:13;;21000:6;:23;;20992:78;;;;-1:-1:-1;;;20992:78:0;;20093:2:1;20992:78:0;;;20075:21:1;20132:2;20112:18;;;20105:30;20171:34;20151:18;;;20144:62;-1:-1:-1;;;20222:18:1;;;20215:40;20272:19;;20992:78:0;19891:406:1;20888:430:0;-1:-1:-1;;;;;21119:35:0;;;;;;:31;:35;;;;;;;;21118:36;:78;;;;-1:-1:-1;;;;;;21159:37:0;;;;;;:31;:37;;;;;;;;21158:38;21118:78;21114:204;;;21254:15;;-1:-1:-1;;;;;4686:18:0;;4659:7;4686:18;;;;;;;;;;;21228:22;;:6;:22;:::i;:::-;:41;;21220:78;;;;-1:-1:-1;;;21220:78:0;;19740:2:1;21220:78:0;;;19722:21:1;19779:2;19759:18;;;19752:30;-1:-1:-1;;;19798:18:1;;;19791:54;19862:18;;21220:78:0;19538:348:1;21220:78:0;21405:4;21356:28;4686:18;;;;;;;;;;;21471;;21447:42;;;;;;;21505:22;;-1:-1:-1;21516:11:0;;;;;;;21505:22;:35;;;;-1:-1:-1;21532:8:0;;;;21531:9;21505:35;:71;;;;-1:-1:-1;;;;;;21545:31:0;;;;;;:25;:31;;;;;;;;21544:32;21505:71;:101;;;;-1:-1:-1;;;;;;21581:25:0;;;;;;:19;:25;;;;;;;;21580:26;21505:101;:129;;;;-1:-1:-1;;;;;;21611:23:0;;;;;;:19;:23;;;;;;;;21610:24;21505:129;21502:236;;;21651:8;:15;;-1:-1:-1;;21651:15:0;21662:4;21651:15;;;21683:10;:8;:10::i;:::-;21710:8;:16;;-1:-1:-1;;21710:16:0;;;21502:236;-1:-1:-1;;;;;21868:25:0;;21750:12;21868:25;;;:19;:25;;;;;;21765:4;;21868:25;;;:52;;-1:-1:-1;;;;;;21897:23:0;;;;;;:19;:23;;;;;;;;21868:52;21865:99;;;-1:-1:-1;21947:5:0;21865:99;21984:12;22011:21;22124:7;:23;;;;-1:-1:-1;22136:11:0;;;;22135:12;22124:23;22121:1014;;;-1:-1:-1;;;;;22191:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;22240:1;22224:13;;:17;22191:50;22187:763;;;22292:3;22277:13;;22268:6;:22;;;;:::i;:::-;:27;;;;:::i;:::-;22261:34;;22362:13;;22343:16;;22336:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;22314:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;22444:13:0;;22424:17;;22417:24;;:4;:24;:::i;:::-;:40;;;;:::i;:::-;22394:19;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;22524:13:0;;22505:16;;22498:23;;:4;:23;:::i;:::-;:39;;;;:::i;:::-;22476:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;22187:763:0;;-1:-1:-1;22187:763:0;;-1:-1:-1;;;;;22598:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;22648:1;22633:12;;:16;22598:51;22595:355;;;22698:3;22683:12;;22674:6;:21;;;;:::i;:::-;:27;;;;:::i;:::-;22667:34;;22764:12;;22746:15;;22739:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;22717:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;22844:12:0;;22825:16;;22818:23;;:4;:23;:::i;:::-;:38;;;;:::i;:::-;22795:19;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;22922:12:0;;22904:15;;22897:22;;:4;:22;:::i;:::-;:37;;;;:::i;:::-;22875:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;22595:355:0;22981:8;;22978:93;;23013:42;23029:4;23043;23050;23013:15;:42::i;:::-;23103:20;23110:13;23103:4;:20;:::i;:::-;23093:30;;;;:::i;:::-;;;22121:1014;23147:33;23163:4;23169:2;23173:6;23147:15;:33::i;:::-;19234:3954;;;;;19155:4033;;;:::o;18033:248::-;-1:-1:-1;;;;;18116:31:0;;;;;;:25;:31;;;;;:39;;-1:-1:-1;;18116:39:0;;;;;;;18176;18116:31;:39;18176:26;:39::i;:::-;18233:40;;;;;;-1:-1:-1;;;;;18233:40:0;;;;;;;;18033:248;;:::o;23641:1646::-;23724:4;23680:23;4686:18;;;;;;;;;;;23680:50;;23741:25;23812:18;;23790:19;;23769:18;;:40;;;;:::i;:::-;:61;;;;:::i;:::-;23741:89;-1:-1:-1;23854:20:0;;;:46;;-1:-1:-1;23878:22:0;;23854:46;23851:60;;;23903:7;;23641:1646::o;23851:60::-;23944:18;;;:23;;;:::i;:::-;23926:15;:41;23923:113;;;24001:18;;;:23;;;:::i;:::-;23983:41;;23923:113;24105:23;24190:1;24170:17;24149:18;;24131:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;24105:86;-1:-1:-1;24212:53:0;24231:33;24105:86;24231:15;:33;:::i;:::-;24212:18;:53::i;:::-;24279:45;;-1:-1:-1;;;24279:45:0;;11181:42;24279:45;;;731:51:1;24279:12:0;-1:-1:-1;;;;;24279:29:0;;;;704:18:1;;24279:45:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;24368:30:0;;-1:-1:-1;;;24368:30:0;;24392:4;24368:30;;;731:51:1;24345:20:0;;-1:-1:-1;11181:42:0;;-1:-1:-1;24368:15:0;;704:18:1;;24368:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24345:53;;24409:25;24437:12;24409:40;;24462:26;24569:1;24550:18;;:20;;;;:::i;:::-;24529:42;;:17;:42;:::i;:::-;24506:19;;24491:34;;:12;:34;:::i;:::-;:81;;;;:::i;:::-;24462:110;;24583:25;24688:1;24669:18;;:20;;;;:::i;:::-;24648:42;;:17;:42;:::i;:::-;24626:18;;24611:33;;:12;:33;:::i;:::-;:80;;;;:::i;:::-;24583:108;-1:-1:-1;24725:38:0;24583:108;24725:18;:38;:::i;:::-;24704:59;;;;:::i;:::-;24809:1;24788:18;:22;;;24821:19;:23;;;24855:18;:22;24704:59;-1:-1:-1;24901:19:0;;;;;:44;;;24944:1;24924:17;:21;24901:44;24898:123;;;24961:48;24974:15;24991:17;24961:12;:48::i;:::-;25038:21;;25035:103;;25090:16;;25075:51;;-1:-1:-1;;;25075:51:0;;-1:-1:-1;;;;;25090:16:0;;;25075:51;;;13608::1;13675:18;;;13668:34;;;11181:42:0;;25075:14;;13581:18:1;;25075:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;25035:103;25153:30;;-1:-1:-1;;;25153:30:0;;25177:4;25153:30;;;731:51:1;25186:1:0;;11181:42;;25153:15;;704:18:1;;25153:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:34;25150:130;;;25218:17;;25237:30;;-1:-1:-1;;;25237:30:0;;25261:4;25237:30;;;731:51:1;11181:42:0;;25203:14;;-1:-1:-1;;;;;25218:17:0;;;;11181:42;;25237:15;;704:18:1;;25237:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25203:65;;-1:-1:-1;;;;;;25203:65:0;;;;;;;-1:-1:-1;;;;;13626:32:1;;;25203:65:0;;;13608:51:1;13675:18;;;13668:34;13581:18;;25203:65:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;25150:130::-;23669:1618;;;;;;;23641:1646::o;6383:614::-;-1:-1:-1;;;;;6523:20:0;;6515:70;;;;-1:-1:-1;;;6515:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6604:23:0;;6596:71;;;;-1:-1:-1;;;6596:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6704:17:0;;6680:21;6704:17;;;;;;;;;;;6740:23;;;;6732:74;;;;-1:-1:-1;;;6732:74:0;;20504:2:1;6732:74:0;;;20486:21:1;20543:2;20523:18;;;20516:30;20582:34;20562:18;;;20555:62;-1:-1:-1;;;20633:18:1;;;20626:36;20679:19;;6732:74:0;20302:402:1;6732:74:0;-1:-1:-1;;;;;6842:17:0;;;:9;:17;;;;;;;;;;;6862:22;;;6842:42;;6906:20;;;;;;;;:30;;6878:6;;6842:9;6906:30;;6878:6;;6906:30;:::i;:::-;;;;;;;;6971:9;-1:-1:-1;;;;;6954:35:0;6963:6;-1:-1:-1;;;;;6954:35:0;;6982:6;6954:35;;;;1759:25:1;;1747:2;1732:18;;1613:177;6954:35:0;;;;;;;;6504:493;6383:614;;;:::o;16781:207::-;-1:-1:-1;;;;;16869:39:0;;;;;;:31;:39;;;;;;;;;:52;;-1:-1:-1;;16869:52:0;;;;;;;;;;16937:43;;20877:51:1;;;20944:18;;;20937:50;16937:43:0;;20850:18:1;16937:43:0;;;;;;;16781:207;;:::o;25295:580::-;25447:16;;;25461:1;25447:16;;;;;;;;25423:21;;25447:16;;;;;;;;;;-1:-1:-1;25447:16:0;25423:40;;25492:4;25474;25479:1;25474:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;25474:23:0;;;-1:-1:-1;;;;;25474:23:0;;;;;11181:42;25508:4;25513:1;25508:7;;;;;;;;:::i;:::-;;;;;;:24;-1:-1:-1;;;;;25508:24:0;;;-1:-1:-1;;;;;25508:24:0;;;;;25543:56;25560:4;25575:9;25587:11;25543:8;:56::i;:::-;25638:229;;-1:-1:-1;;;25638:229:0;;-1:-1:-1;;;;;25638:9:0;:63;;;;:229;;25716:11;;25742:1;;25786:4;;25813:12;;25841:15;;25638:229;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25352:523;25295:580;:::o;23200:433::-;23350:56;23367:4;23382:9;23394:11;23350:8;:56::i;:::-;23417:46;;-1:-1:-1;;;23417:46:0;;-1:-1:-1;;;;;23439:9:0;13626:32:1;23417:46:0;;;13608:51:1;13675:18;;;13668:34;;;11181:42:0;;23417:13;;13581:18:1;;23417:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;23506:119:0;;-1:-1:-1;;;23506:119:0;;23537:4;23506:119;;;22380:34:1;;;11181:42:0;22430:18:1;;;22423:43;22482:18;;;22475:34;;;22525:18;;;22518:34;;;23586:1:0;22568:19:1;;;22561:35;;;22612:19;;;22605:35;22656:19;;;22649:44;23609:15:0;22709:19:1;;;22702:35;23506:9:0;-1:-1:-1;;;;;23506:22:0;;;;22314:19:1;;23506:119:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;23200:433;;:::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:173::-;861:20;;-1:-1:-1;;;;;910:31:1;;900:42;;890:70;;956:1;953;946:12;890:70;793:173;;;:::o;971:254::-;1039:6;1047;1100:2;1088:9;1079:7;1075:23;1071:32;1068:52;;;1116:1;1113;1106:12;1068:52;1139:29;1158:9;1139:29;:::i;:::-;1129:39;1215:2;1200:18;;;;1187:32;;-1:-1:-1;;;971:254:1:o;1422:186::-;1481:6;1534:2;1522:9;1513:7;1509:23;1505:32;1502:52;;;1550:1;1547;1540:12;1502:52;1573:29;1592:9;1573:29;:::i;:::-;1563:39;1422:186;-1:-1:-1;;;1422:186:1:o;2023:328::-;2100:6;2108;2116;2169:2;2157:9;2148:7;2144:23;2140:32;2137:52;;;2185:1;2182;2175:12;2137:52;2208:29;2227:9;2208:29;:::i;:::-;2198:39;;2256:38;2290:2;2279:9;2275:18;2256:38;:::i;:::-;2246:48;;2341:2;2330:9;2326:18;2313:32;2303:42;;2023:328;;;;;:::o;2356:180::-;2415:6;2468:2;2456:9;2447:7;2443:23;2439:32;2436:52;;;2484:1;2481;2474:12;2436:52;-1:-1:-1;2507:23:1;;2356:180;-1:-1:-1;2356:180:1:o;2938:127::-;2999:10;2994:3;2990:20;2987:1;2980:31;3030:4;3027:1;3020:15;3054:4;3051:1;3044:15;3070:275;3141:2;3135:9;3206:2;3187:13;;-1:-1:-1;;3183:27:1;3171:40;;3241:18;3226:34;;3262:22;;;3223:62;3220:88;;;3288:18;;:::i;:::-;3324:2;3317:22;3070:275;;-1:-1:-1;3070:275:1:o;3350:183::-;3410:4;3443:18;3435:6;3432:30;3429:56;;;3465:18;;:::i;:::-;-1:-1:-1;3510:1:1;3506:14;3522:4;3502:25;;3350:183::o;3538:662::-;3592:5;3645:3;3638:4;3630:6;3626:17;3622:27;3612:55;;3663:1;3660;3653:12;3612:55;3699:6;3686:20;3725:4;3749:60;3765:43;3805:2;3765:43;:::i;:::-;3749:60;:::i;:::-;3843:15;;;3929:1;3925:10;;;;3913:23;;3909:32;;;3874:12;;;;3953:15;;;3950:35;;;3981:1;3978;3971:12;3950:35;4017:2;4009:6;4005:15;4029:142;4045:6;4040:3;4037:15;4029:142;;;4111:17;;4099:30;;4149:12;;;;4062;;4029:142;;;-1:-1:-1;4189:5:1;3538:662;-1:-1:-1;;;;;;3538:662:1:o;4205:1146::-;4323:6;4331;4384:2;4372:9;4363:7;4359:23;4355:32;4352:52;;;4400:1;4397;4390:12;4352:52;4440:9;4427:23;4469:18;4510:2;4502:6;4499:14;4496:34;;;4526:1;4523;4516:12;4496:34;4564:6;4553:9;4549:22;4539:32;;4609:7;4602:4;4598:2;4594:13;4590:27;4580:55;;4631:1;4628;4621:12;4580:55;4667:2;4654:16;4689:4;4713:60;4729:43;4769:2;4729:43;:::i;4713:60::-;4807:15;;;4889:1;4885:10;;;;4877:19;;4873:28;;;4838:12;;;;4913:19;;;4910:39;;;4945:1;4942;4935:12;4910:39;4969:11;;;;4989:148;5005:6;5000:3;4997:15;4989:148;;;5071:23;5090:3;5071:23;:::i;:::-;5059:36;;5022:12;;;;5115;;;;4989:148;;;5156:5;-1:-1:-1;;5199:18:1;;5186:32;;-1:-1:-1;;5230:16:1;;;5227:36;;;5259:1;5256;5249:12;5227:36;;5282:63;5337:7;5326:8;5315:9;5311:24;5282:63;:::i;:::-;5272:73;;;4205:1146;;;;;:::o;5356:118::-;5442:5;5435:13;5428:21;5421:5;5418:32;5408:60;;5464:1;5461;5454:12;5408:60;5356:118;:::o;5479:315::-;5544:6;5552;5605:2;5593:9;5584:7;5580:23;5576:32;5573:52;;;5621:1;5618;5611:12;5573:52;5644:29;5663:9;5644:29;:::i;:::-;5634:39;;5723:2;5712:9;5708:18;5695:32;5736:28;5758:5;5736:28;:::i;:::-;5783:5;5773:15;;;5479:315;;;;;:::o;5799:316::-;5876:6;5884;5892;5945:2;5933:9;5924:7;5920:23;5916:32;5913:52;;;5961:1;5958;5951:12;5913:52;-1:-1:-1;;5984:23:1;;;6054:2;6039:18;;6026:32;;-1:-1:-1;6105:2:1;6090:18;;;6077:32;;5799:316;-1:-1:-1;5799:316:1:o;6120:260::-;6188:6;6196;6249:2;6237:9;6228:7;6224:23;6220:32;6217:52;;;6265:1;6262;6255:12;6217:52;6288:29;6307:9;6288:29;:::i;:::-;6278:39;;6336:38;6370:2;6359:9;6355:18;6336:38;:::i;:::-;6326:48;;6120:260;;;;;:::o;6385:241::-;6441:6;6494:2;6482:9;6473:7;6469:23;6465:32;6462:52;;;6510:1;6507;6500:12;6462:52;6549:9;6536:23;6568:28;6590:5;6568:28;:::i;6852:380::-;6931:1;6927:12;;;;6974;;;6995:61;;7049:4;7041:6;7037:17;7027:27;;6995:61;7102:2;7094:6;7091:14;7071:18;7068:38;7065:161;;7148:10;7143:3;7139:20;7136:1;7129:31;7183:4;7180:1;7173:15;7211:4;7208:1;7201:15;7065:161;;6852:380;;;:::o;7646:356::-;7848:2;7830:21;;;7867:18;;;7860:30;7926:34;7921:2;7906:18;;7899:62;7993:2;7978:18;;7646:356::o;8007:127::-;8068:10;8063:3;8059:20;8056:1;8049:31;8099:4;8096:1;8089:15;8123:4;8120:1;8113:15;8139:168;8212:9;;;8243;;8260:15;;;8254:22;;8240:37;8230:71;;8281:18;;:::i;8312:217::-;8352:1;8378;8368:132;;8422:10;8417:3;8413:20;8410:1;8403:31;8457:4;8454:1;8447:15;8485:4;8482:1;8475:15;8368:132;-1:-1:-1;8514:9:1;;8312:217::o;8944:125::-;9009:9;;;9030:10;;;9027:36;;;9043:18;;:::i;10263:127::-;10324:10;10319:3;10315:20;10312:1;10305:31;10355:4;10352:1;10345:15;10379:4;10376:1;10369:15;10395:135;10434:3;10455:17;;;10452:43;;10475:18;;:::i;:::-;-1:-1:-1;10522:1:1;10511:13;;10395:135::o;13245:184::-;13315:6;13368:2;13356:9;13347:7;13343:23;13339:32;13336:52;;;13384:1;13381;13374:12;13336:52;-1:-1:-1;13407:16:1;;13245:184;-1:-1:-1;13245:184:1:o;13713:245::-;13780:6;13833:2;13821:9;13812:7;13808:23;13804:32;13801:52;;;13849:1;13846;13839:12;13801:52;13881:9;13875:16;13900:28;13922:5;13900:28;:::i;17055:401::-;17257:2;17239:21;;;17296:2;17276:18;;;17269:30;17335:34;17330:2;17315:18;;17308:62;-1:-1:-1;;;17401:2:1;17386:18;;17379:35;17446:3;17431:19;;17055:401::o;17461:399::-;17663:2;17645:21;;;17702:2;17682:18;;;17675:30;17741:34;17736:2;17721:18;;17714:62;-1:-1:-1;;;17807:2:1;17792:18;;17785:33;17850:3;17835:19;;17461:399::o;18574:128::-;18641:9;;;18662:11;;;18659:37;;;18676:18;;:::i;20998:980::-;21260:4;21308:3;21297:9;21293:19;21339:6;21328:9;21321:25;21365:2;21403:6;21398:2;21387:9;21383:18;21376:34;21446:3;21441:2;21430:9;21426:18;21419:31;21470:6;21505;21499:13;21536:6;21528;21521:22;21574:3;21563:9;21559:19;21552:26;;21613:2;21605:6;21601:15;21587:29;;21634:1;21644:195;21658:6;21655:1;21652:13;21644:195;;;21723:13;;-1:-1:-1;;;;;21719:39:1;21707:52;;21814:15;;;;21779:12;;;;21755:1;21673:9;21644:195;;;-1:-1:-1;;;;;;;21895:32:1;;;;21890:2;21875:18;;21868:60;-1:-1:-1;;;21959:3:1;21944:19;21937:35;21856:3;20998:980;-1:-1:-1;;;20998:980:1:o;22748:306::-;22836:6;22844;22852;22905:2;22893:9;22884:7;22880:23;22876:32;22873:52;;;22921:1;22918;22911:12;22873:52;22950:9;22944:16;22934:26;;23000:2;22989:9;22985:18;22979:25;22969:35;;23044:2;23033:9;23029:18;23023:25;23013:35;;22748:306;;;;;:::o

Swarm Source

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