ETH Price: $3,686.42 (+1.56%)
 

Overview

Max Total Supply

1,000,000,000 $Vanish

Holders

172

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
8,000,000 $Vanish

Value
$0.00
0xd18e0ba6f791220249ddb821cb2d758eefdac850
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:
Vanish

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-06-30
*/

/**

$𝓥𝓝𝓢 - 𝓛𝓔𝓐𝓥𝓔 𝓦𝓘𝓣𝓗𝓞𝓤𝓣 𝓐 𝓣𝓡𝓐𝓒𝓔.
*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.4;

abstract contract Context {

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

    function _msgData() internal view virtual returns (bytes memory) {
      
        return msg.data;
    }
}

interface IERC20 {

    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

library SafeMath {

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

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() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0x000000000000000000000000000000000000dEaD));
        _owner = address(0x000000000000000000000000000000000000dEaD);
    }

    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 IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);

    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);

    function createPair(address tokenA, address tokenB) external returns (address pair);

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}

interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;
    
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}

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

    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 addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        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 swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

contract Vanish is Context, IERC20, Ownable {
    
    using SafeMath for uint256;
    
    string private _name = "Vanish";
    string private _symbol = "$Vanish";
    uint8 private _decimals = 18;

    address payable public marketingWallet = payable(0xd2F06B0F16925fd9Bda60da1B004eDfC9588db49);
    address payable public DeveloperWallet = payable(0xd2F06B0F16925fd9Bda60da1B004eDfC9588db49);
    address public liquidityReciever;
    
    address public immutable deadAddress = 0x000000000000000000000000000000000000dEaD;
    address public immutable zeroAddress = 0x0000000000000000000000000000000000000000;

    mapping (address => uint256) _balances;
    mapping (address => mapping (address => uint256)) private _allowances;
    
    bool public tradingEnabled;

    mapping (address => bool) public isExcludedFromFee;
    mapping (address => bool) public isMarketPair;
    
    // mapping (address => bool) public blacklist;
    mapping (address => bool) public isWalletLimitExempt;
    mapping (address => bool) public isTxLimitExempt;

    uint256 public _buyLiquidityFee = 0;
    uint256 public _buyMarketingFee = 0;
    uint256 public _buyDeveloperFee = 0;
    
    uint256 public _sellLiquidityFee = 0;
    uint256 public _sellMarketingFee = 0;
    uint256 public _sellDeveloperFee = 0;

    uint256 public feeUnits = 100;

    uint256 public _totalTaxIfBuying;
    uint256 public _totalTaxIfSelling;

    uint256 private _totalSupply = 1000000000 * 10**_decimals;

    uint256 public minimumTokensBeforeSwap = _totalSupply.mul(1).div(1000);   //0.1%

    uint256 public _maxTxAmount =  _totalSupply.mul(100).div(100);  //100%
    uint256 public _walletMax =   _totalSupply.mul(100).div(100);   //100%

    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapPair;
    
    bool inSwapAndLiquify;

    bool public swapAndLiquifyEnabled = true;
    bool public swapAndLiquifyByLimitOnly = false;

    bool public checkWalletLimit = true;
    bool public EnableTransactionLimit = true;

    event SwapAndLiquifyEnabledUpdated(bool enabled);

    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );
    
    event SwapETHForTokens(
        uint256 amountIn,
        address[] path
    );
    
    event SwapTokensForETH(
        uint256 amountIn,
        address[] path
    );
    
    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }
    
    constructor () {
        
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); 
        
        uniswapPair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        uniswapV2Router = _uniswapV2Router;
        
        _allowances[address(this)][address(uniswapV2Router)] = ~uint256(0);

        isExcludedFromFee[owner()] = true;
        isExcludedFromFee[marketingWallet] = true;
        isExcludedFromFee[DeveloperWallet] = true;
        isExcludedFromFee[address(this)] = true;

        isWalletLimitExempt[owner()] = true;
        isWalletLimitExempt[marketingWallet] = true;
        isWalletLimitExempt[DeveloperWallet] = true;
        isWalletLimitExempt[address(uniswapPair)] = true;
        isWalletLimitExempt[address(this)] = true;
        
        isTxLimitExempt[owner()] = true;
        isTxLimitExempt[marketingWallet] = true;
        isTxLimitExempt[DeveloperWallet] = true;
        isTxLimitExempt[address(this)] = true;
        
        _totalTaxIfBuying = _buyLiquidityFee.add(_buyMarketingFee).add(_buyDeveloperFee);
        _totalTaxIfSelling = _sellLiquidityFee.add(_sellMarketingFee).add(_sellDeveloperFee);

        isMarketPair[address(uniswapPair)] = true;
        liquidityReciever = address(msg.sender);

        _balances[_msgSender()] = _totalSupply;
        emit Transfer(address(0), _msgSender(), _totalSupply);
    }

    function setTradingEnabled(bool _enabled) external onlyOwner{
        tradingEnabled = _enabled;

    }

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

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

    function decimals() public view returns (uint8) {
        return _decimals;
    }

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

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

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

    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }

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

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

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

    function setMarketPairStatus(address account, bool newValue) public onlyOwner {
        isMarketPair[account] = newValue;
    }

    function setIsExcludedFromFee(address account, bool newValue) public onlyOwner {
        isExcludedFromFee[account] = newValue;
    }

    function setIsTxLimitExempt(address holder, bool exempt) external onlyOwner {
        isTxLimitExempt[holder] = exempt;
    }
    
    function setIsWalletLimitExempt(address holder, bool exempt) external onlyOwner {
        isWalletLimitExempt[holder] = exempt;
    }

    function enableTxLimit(bool _status) external onlyOwner {
        EnableTransactionLimit = _status;
    }

    function setMaxTxAmount(uint256 maxTxAmount) external onlyOwner() {
        require(maxTxAmount >= _totalSupply.mul(1).div(1000), "Cannot set max TX amount lower than 0,1% of total supply");
        _maxTxAmount = maxTxAmount;
    }

    function enableDisableWalletLimit(bool newValue) external onlyOwner {
       checkWalletLimit = newValue;
    }

    function setWalletLimit(uint256 newLimit) external onlyOwner {
        _walletMax  = newLimit;
    }

    function setNumTokensBeforeSwap(uint256 newLimit) external onlyOwner() {
         require(newLimit >= _totalSupply.mul(1).div(100000), "Cannot set swap threshold amount lower than 0.001% of tokens");
         require(newLimit <= _totalSupply.mul(1).div(100), "Cannot set swap threshold amount higher than 1% of tokens");
        minimumTokensBeforeSwap = newLimit;
    }

    function setMarketingWalletAddress(address newAddress) external onlyOwner() {
        require(newAddress != address(0),"Fee Address cannot be zero address");
        marketingWallet = payable(newAddress);
    }

    function setLiquidityWalletAddress(address newAddress) external onlyOwner() {
        liquidityReciever = payable(newAddress);
    }

    function setDeveloperWalletAddress(address newAddress) external onlyOwner() {
        require(newAddress != address(0),"Fee Address cannot be zero address");
        DeveloperWallet = payable(newAddress);
    }

    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }

    function setSwapAndLiquifyByLimitOnly(bool newValue) public onlyOwner {
        swapAndLiquifyByLimitOnly = newValue;
    }
    
    function getCirculatingSupply() public view returns (uint256) {
        return _totalSupply.sub(balanceOf(deadAddress)).sub(balanceOf(zeroAddress));
    }

    // function setBlacklist(address _adr, bool _status) external onlyOwner {
    //     blacklist[_adr] = _status;
    // }

    function transferToAddressETH(address payable recipient, uint256 amount) private {
        recipient.transfer(amount);
    }
    
    function changeRouterVersion(address newRouterAddress) public onlyOwner returns(address newPairAddress) {

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(newRouterAddress); 

        newPairAddress = IUniswapV2Factory(_uniswapV2Router.factory()).getPair(address(this), _uniswapV2Router.WETH());

        if(newPairAddress == address(0)) //Create If Doesnt exist
        {
            newPairAddress = IUniswapV2Factory(_uniswapV2Router.factory())
                .createPair(address(this), _uniswapV2Router.WETH());
        }

        uniswapPair = newPairAddress; //Set new pair address
        uniswapV2Router = _uniswapV2Router; //Set new router address

        isMarketPair[address(uniswapPair)] = true;
    }

    function setBuyTaxes(uint _Liquidity, uint _Marketing , uint _Developer) public onlyOwner {
        _buyLiquidityFee = _Liquidity;
        _buyMarketingFee = _Marketing;
        _buyDeveloperFee = _Developer;
        _totalTaxIfBuying = _buyLiquidityFee.add(_buyMarketingFee).add(_buyDeveloperFee);
        require(_totalTaxIfBuying <= (feeUnits/8), "Buy fees must be 12.5% or less");
    }

    function setSellTaxes(uint _Liquidity, uint _Marketing , uint _Developer) public onlyOwner {
        _sellLiquidityFee = _Liquidity;
        _sellMarketingFee = _Marketing;
        _sellDeveloperFee = _Developer;
        _totalTaxIfSelling = _sellLiquidityFee.add(_sellMarketingFee).add(_sellDeveloperFee);
        require(_totalTaxIfSelling <= (feeUnits/8), "Sell fees must be 12.5% or less");
    }
    

     //to recieve ETH from uniswapV2Router when swaping
    receive() external payable {}

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

    function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

    function _transfer(address sender, address recipient, uint256 amount) private returns (bool) {

        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
        // require(!blacklist[sender] && !blacklist[recipient], "Bot Enemy address Restricted!");
        //  if(!_whitelisted[from]) { require(tradingEnabled, "Trading is not enabled yet");}


        if(inSwapAndLiquify)
        { 
            return _basicTransfer(sender, recipient, amount); 
        }
        else
        {

            if(!isTxLimitExempt[sender] && !isTxLimitExempt[recipient] && EnableTransactionLimit) {
                require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");
            }

            uint256 contractTokenBalance = balanceOf(address(this));
            bool overMinimumTokenBalance = contractTokenBalance >= minimumTokensBeforeSwap;
            
            if (overMinimumTokenBalance && !inSwapAndLiquify && !isMarketPair[sender] && swapAndLiquifyEnabled) 
            {
                if(swapAndLiquifyByLimitOnly)
                    contractTokenBalance = minimumTokensBeforeSwap;
                swapAndLiquify(contractTokenBalance);    
            }

            _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");

            uint256 finalAmount = (isExcludedFromFee[sender] || isExcludedFromFee[recipient]) ? 
                                         amount : takeFee(sender, recipient, amount);

            if(checkWalletLimit && !isWalletLimitExempt[recipient]) {
                require(balanceOf(recipient).add(finalAmount) <= _walletMax,"Amount Exceed From Max Wallet Limit!!");
            }

            _balances[recipient] = _balances[recipient].add(finalAmount);

            emit Transfer(sender, recipient, finalAmount);
            return true;
        }
        
    }

    function rescueStuckToken(address _token, uint _amount) external onlyOwner {
        require(_token != address(this), "Owner can't claim contract's balance of its own tokens");
        IERC20(_token).transfer(msg.sender,_amount);
    }

    function rescueFunds() external onlyOwner {
        (bool os,) = payable(msg.sender).call{value: address(this).balance}("");
        require(os);
    }

    function _basicTransfer(address sender, address recipient, uint256 amount) internal returns (bool) {
        _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
        return true;
    }

    function swapAndLiquify(uint256 tAmount) private lockTheSwap {

        uint256 totalShares = _totalTaxIfBuying.add(_totalTaxIfSelling);

        uint256 liquidityShare = _buyLiquidityFee.add(_sellLiquidityFee);
        uint256 MarketingShare = _buyMarketingFee.add(_sellMarketingFee);
        // uint256 DeveloperShare = _buyDeveloperFee.add(_sellDeveloperFee);
        
        uint256 tokenForLp = tAmount.mul(liquidityShare).div(totalShares).div(2);
        uint256 tokenForSwap = tAmount.sub(tokenForLp);

        uint256 initialBalance =  address(this).balance;
        swapTokensForEth(tokenForSwap);
        uint256 recievedBalance =  address(this).balance.sub(initialBalance);

        uint256 totalETHFee = totalShares.sub(liquidityShare.div(2));

        uint256 amountETHLiquidity = recievedBalance.mul(liquidityShare).div(totalETHFee).div(2);
        uint256 amountETHMarketing = recievedBalance.mul(MarketingShare).div(totalETHFee);
        uint256 amountETHDeveloper = recievedBalance.sub(amountETHLiquidity).sub(amountETHMarketing);

        if(amountETHMarketing > 0) {
            payable(marketingWallet).transfer(amountETHMarketing);
        }

        if(amountETHDeveloper > 0) {
            payable(DeveloperWallet).transfer(amountETHDeveloper);
        }         

        if(amountETHLiquidity > 0 && tokenForLp > 0) {
            addLiquidity(tokenForLp, amountETHLiquidity);
        }
    }
    
    function swapTokensForEth(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

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

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this), // The contract
            block.timestamp
        );
        
        emit SwapTokensForETH(tokenAmount, path);
    }

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

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

    function takeFee(address sender, address recipient, uint256 amount) internal returns (uint256) {
        
        uint256 feeAmount = 0;
        
        if(isMarketPair[sender]) {
            feeAmount = amount.mul(_totalTaxIfBuying).div(100);
        }
        else if(isMarketPair[recipient]) {
            feeAmount = amount.mul(_totalTaxIfSelling).div(100);
        }
        
        if(feeAmount > 0) {
            _balances[address(this)] = _balances[address(this)].add(feeAmount);
            emit Transfer(sender, address(this), feeAmount);
        }

        return amount.sub(feeAmount);
    }

    /* AirDrop Function*/

    function airdrop(address[] calldata _address,uint[] calldata _tokens) external onlyOwner {
        address account = msg.sender;
        require(_address.length == _tokens.length,"Error: Mismatch Length");
        uint tokenCount;
        for(uint i = 0; i < _tokens.length; i++) {
            tokenCount += _tokens[i];
        }
        require(balanceOf(account) >= tokenCount,"Error: Insufficient Error!!");
        _balances[account] = _balances[account].sub(tokenCount); 
        for(uint j = 0; j < _address.length; j++) {
            _balances[_address[j]] = _balances[_address[j]].add(_tokens[j]);
            emit Transfer(account, _address[j], _tokens[j]);
        }

    }

    
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","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":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapETHForTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapTokensForETH","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"},{"inputs":[],"name":"DeveloperWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"EnableTransactionLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyDeveloperFee","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":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellDeveloperFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalTaxIfBuying","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalTaxIfSelling","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_walletMax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_address","type":"address[]"},{"internalType":"uint256[]","name":"_tokens","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":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newRouterAddress","type":"address"}],"name":"changeRouterVersion","outputs":[{"internalType":"address","name":"newPairAddress","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"checkWalletLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"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":[{"internalType":"bool","name":"newValue","type":"bool"}],"name":"enableDisableWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"}],"name":"enableTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feeUnits","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isMarketPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isTxLimitExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isWalletLimitExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityReciever","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumTokensBeforeSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rescueFunds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"rescueStuckToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_Liquidity","type":"uint256"},{"internalType":"uint256","name":"_Marketing","type":"uint256"},{"internalType":"uint256","name":"_Developer","type":"uint256"}],"name":"setBuyTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"setDeveloperWalletAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"newValue","type":"bool"}],"name":"setIsExcludedFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsTxLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsWalletLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"setLiquidityWalletAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"newValue","type":"bool"}],"name":"setMarketPairStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"setMarketingWalletAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"setNumTokensBeforeSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_Liquidity","type":"uint256"},{"internalType":"uint256","name":"_Marketing","type":"uint256"},{"internalType":"uint256","name":"_Developer","type":"uint256"}],"name":"setSellTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"newValue","type":"bool"}],"name":"setSwapAndLiquifyByLimitOnly","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setTradingEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"setWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyByLimitOnly","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"zeroAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

610100604052600660c0819052650acc2dcd2e6d60d31b60e09081526200002a91600191906200081d565b5060408051808201909152600780825266048acc2dcd2e6d60cb1b60209092019182526200005b916002916200081d565b506003805474d2f06b0f16925fd9bda60da1b004edfc9588db49126001600160a81b0319909116179055600480546001600160a01b03191673d2f06b0f16925fd9bda60da1b004edfc9588db491790556ddead000000000000000000000000608052600060a0819052600d819055600e819055600f8190556010819055601181905560129081556064601355620000f490600a620009c7565b6200010490633b9aca0062000a86565b6016556200013f6103e86200012b6001601654620006a060201b62001f9f1790919060201c565b6200073460201b6200201e1790919060201c565b6017556200016560646200012b6064601654620006a060201b62001f9f1790919060201c565b6018556200018b60646200012b6064601654620006a060201b62001f9f1790919060201c565b601955601b805463ffffffff60a81b1916630101000160a81b179055348015620001b457600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d9050806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200024957600080fd5b505afa1580156200025e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002849190620008c3565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620002cd57600080fd5b505afa158015620002e2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003089190620008c3565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b1580156200035157600080fd5b505af115801562000366573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200038c9190620008c3565b601b80546001600160a01b039283166001600160a01b031991821617909155601a805492841692909116821790553060009081526007602090815260408083209383529290529081206000199055600190600990620003f36000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff1996871617905560035461010090048216815260099093528183208054851660019081179091556004549091168352818320805485168217905530835290822080549093168117909255600b906200047a6000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055600354610100900482168152600b909352818320805485166001908117909155600454821684528284208054861682179055601b549091168352818320805485168217905530835290822080549093168117909255600c90620005136000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055600354610100900482168152600c84528281208054861660019081179091556004549092168152828120805486168317905530815291909120805490931617909155600f54600e54600d54620005ba93620005a69290620020606200077e821b17901c565b6200077e60201b620020601790919060201c565b601481905550620005e5601254620005a66011546010546200077e60201b620020601790919060201c565b601555601b546001600160a01b03166000908152600a60205260408120805460ff19166001179055600580546001600160a01b03191633179055601654906006906200062e3390565b6001600160a01b03168152602081019190915260400160002055336001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6016546040516200069191815260200190565b60405180910390a35062000afb565b600082620006b1575060006200072e565b6000620006bf838562000a86565b905082620006ce85836200095d565b146200072b5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084015b60405180910390fd5b90505b92915050565b60006200072b83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250620007e160201b60201c565b6000806200078d838562000942565b9050838110156200072b5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640162000722565b60008183620008055760405162461bcd60e51b8152600401620007229190620008ec565b5060006200081484866200095d565b95945050505050565b8280546200082b9062000aa8565b90600052602060002090601f0160209004810192826200084f57600085556200089a565b82601f106200086a57805160ff19168380011785556200089a565b828001600101855582156200089a579182015b828111156200089a5782518255916020019190600101906200087d565b50620008a8929150620008ac565b5090565b5b80821115620008a85760008155600101620008ad565b600060208284031215620008d5578081fd5b81516001600160a01b03811681146200072b578182fd5b6000602080835283518082850152825b818110156200091a57858101830151858201604001528201620008fc565b818111156200092c5783604083870101525b50601f01601f1916929092016040019392505050565b6000821982111562000958576200095862000ae5565b500190565b6000826200097957634e487b7160e01b81526012600452602481fd5b500490565b600181815b80851115620009bf578160001904821115620009a357620009a362000ae5565b80851615620009b157918102915b93841c939080029062000983565b509250929050565b60006200072b60ff841683600082620009e3575060016200072e565b81620009f2575060006200072e565b816001811462000a0b576002811462000a165762000a36565b60019150506200072e565b60ff84111562000a2a5762000a2a62000ae5565b50506001821b6200072e565b5060208310610133831016604e8410600b841016171562000a5b575081810a6200072e565b62000a6783836200097e565b806000190482111562000a7e5762000a7e62000ae5565b029392505050565b600081600019048311821515161562000aa35762000aa362000ae5565b500290565b600181811c9082168062000abd57607f821691505b6020821081141562000adf57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60805160601c60a05160601c61321362000b3560003960008181610432015261104f0152600081816105a3015261108a01526132136000f3fe6080604052600436106103c75760003560e01c806385261485116101f2578063d2d7ad831161010d578063f0cd1dac116100a0578063f84ba65d1161006f578063f84ba65d14610b89578063f872858a14610ba9578063f8f6329014610bca578063fb4b8e6c14610bea57600080fd5b8063f0cd1dac14610b1d578063f1d5f51714610b33578063f2fde38b14610b53578063f680f79914610b7357600080fd5b8063e6b2603b116100dc578063e6b2603b14610aa8578063ec28438a14610abd578063ee828db314610add578063ef422a1814610afd57600080fd5b8063d2d7ad8314610a15578063da00097d14610a2b578063dc44b6a014610a4c578063dd62ed3e14610a6257600080fd5b8063a9059cbb11610185578063c816841b11610154578063c816841b1461098f578063c8607952146109af578063c867d60b146109c5578063c9c9afc5146109f557600080fd5b8063a9059cbb14610919578063c2e5ec0414610939578063c49b9a8014610959578063c5d241891461097957600080fd5b806395d89b41116101c157806395d89b41146108a457806398e944c8146108b9578063a457c2d7146108d9578063a5d69d1f146108f957600080fd5b8063852614851461081f57806388790a68146108405780638b42507f146108565780638da5cb5b1461088657600080fd5b80633b97084a116102e257806367243482116102755780637d1db4a5116102445780637d1db4a5146107bd578063807c2d9c146107d357806382eefb43146107e9578063844d591c146107ff57600080fd5b8063672434821461072d57806370a082311461074d578063715018a61461078357806375f0a8741461079857600080fd5b80634cb80fd5116102b15780634cb80fd5146106a75780635194f9bf146106c75780635342acb4146106dd5780635881f3ef1461070d57600080fd5b80633b97084a1461061c5780633ecad2711461063c5780634a74bb021461066c5780634ada218b1461068d57600080fd5b806323555d571161035a57806327c8f8351161032957806327c8f835146105915780632b112e49146105c5578063313ce567146105da57806339509351146105fc57600080fd5b806323555d571461051b57806323b872dd146105315780632563ae831461055157806326cd1e301461057157600080fd5b80631694505e116103965780631694505e1461049c57806318160ddd146104bc5780631870517a146104db5780632198cf6c146104fb57600080fd5b806306fdde03146103d357806308733214146103fe5780630930907b14610420578063095ea7b31461046c57600080fd5b366103ce57005b600080fd5b3480156103df57600080fd5b506103e8610c0a565b6040516103f59190612f4c565b60405180910390f35b34801561040a57600080fd5b5061041e610419366004612eb1565b610c9c565b005b34801561042c57600080fd5b506104547f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016103f5565b34801561047857600080fd5b5061048c610487366004612dcd565b610d5a565b60405190151581526020016103f5565b3480156104a857600080fd5b50601a54610454906001600160a01b031681565b3480156104c857600080fd5b506016545b6040519081526020016103f5565b3480156104e757600080fd5b5061041e6104f6366004612eb1565b610d71565b34801561050757600080fd5b5061041e610516366004612da0565b610e1b565b34801561052757600080fd5b506104cd600f5481565b34801561053d57600080fd5b5061048c61054c366004612d60565b610e70565b34801561055d57600080fd5b5061041e61056c366004612e61565b610edb565b34801561057d57600080fd5b5061041e61058c366004612dcd565b610f23565b34801561059d57600080fd5b506104547f000000000000000000000000000000000000000000000000000000000000000081565b3480156105d157600080fd5b506104cd611045565b3480156105e657600080fd5b5060035460405160ff90911681526020016103f5565b34801561060857600080fd5b5061048c610617366004612dcd565b6110d8565b34801561062857600080fd5b5061041e610637366004612e99565b61110e565b34801561064857600080fd5b5061048c610657366004612cf0565b600a6020526000908152604090205460ff1681565b34801561067857600080fd5b50601b5461048c90600160a81b900460ff1681565b34801561069957600080fd5b5060085461048c9060ff1681565b3480156106b357600080fd5b5061041e6106c2366004612cf0565b611265565b3480156106d357600080fd5b506104cd60125481565b3480156106e957600080fd5b5061048c6106f8366004612cf0565b60096020526000908152604090205460ff1681565b34801561071957600080fd5b50610454610728366004612cf0565b6112dd565b34801561073957600080fd5b5061041e610748366004612df8565b611651565b34801561075957600080fd5b506104cd610768366004612cf0565b6001600160a01b031660009081526006602052604090205490565b34801561078f57600080fd5b5061041e611953565b3480156107a457600080fd5b506003546104549061010090046001600160a01b031681565b3480156107c957600080fd5b506104cd60185481565b3480156107df57600080fd5b506104cd60195481565b3480156107f557600080fd5b506104cd60155481565b34801561080b57600080fd5b5061041e61081a366004612da0565b6119cd565b34801561082b57600080fd5b50601b5461048c90600160c01b900460ff1681565b34801561084c57600080fd5b506104cd60105481565b34801561086257600080fd5b5061048c610871366004612cf0565b600c6020526000908152604090205460ff1681565b34801561089257600080fd5b506000546001600160a01b0316610454565b3480156108b057600080fd5b506103e8611a22565b3480156108c557600080fd5b50600554610454906001600160a01b031681565b3480156108e557600080fd5b5061048c6108f4366004612dcd565b611a31565b34801561090557600080fd5b5061041e610914366004612e61565b611a80565b34801561092557600080fd5b5061048c610934366004612dcd565b611ac8565b34801561094557600080fd5b5061041e610954366004612e61565b611ad5565b34801561096557600080fd5b5061041e610974366004612e61565b611b12565b34801561098557600080fd5b506104cd600e5481565b34801561099b57600080fd5b50601b54610454906001600160a01b031681565b3480156109bb57600080fd5b506104cd60115481565b3480156109d157600080fd5b5061048c6109e0366004612cf0565b600b6020526000908152604090205460ff1681565b348015610a0157600080fd5b5061041e610a10366004612cf0565b611b94565b348015610a2157600080fd5b506104cd60175481565b348015610a3757600080fd5b50601b5461048c90600160b01b900460ff1681565b348015610a5857600080fd5b506104cd600d5481565b348015610a6e57600080fd5b506104cd610a7d366004612d28565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205490565b348015610ab457600080fd5b5061041e611be0565b348015610ac957600080fd5b5061041e610ad8366004612e99565b611c62565b348015610ae957600080fd5b5061041e610af8366004612e61565b611d22565b348015610b0957600080fd5b5061041e610b18366004612da0565b611d6a565b348015610b2957600080fd5b506104cd60145481565b348015610b3f57600080fd5b5061041e610b4e366004612e99565b611dbf565b348015610b5f57600080fd5b5061041e610b6e366004612cf0565b611dee565b348015610b7f57600080fd5b506104cd60135481565b348015610b9557600080fd5b5061041e610ba4366004612da0565b611ed8565b348015610bb557600080fd5b50601b5461048c90600160b81b900460ff1681565b348015610bd657600080fd5b50600454610454906001600160a01b031681565b348015610bf657600080fd5b5061041e610c05366004612cf0565b611f2d565b606060018054610c19906130e1565b80601f0160208091040260200160405190810160405280929190818152602001828054610c45906130e1565b8015610c925780601f10610c6757610100808354040283529160200191610c92565b820191906000526020600020905b815481529060010190602001808311610c7557829003601f168201915b5050505050905090565b6000546001600160a01b03163314610ccf5760405162461bcd60e51b8152600401610cc690612fe1565b60405180910390fd5b601083905560118290556012819055610cf281610cec8585612060565b90612060565b601555601354610d049060089061308b565b6015541115610d555760405162461bcd60e51b815260206004820152601f60248201527f53656c6c2066656573206d7573742062652031322e3525206f72206c657373006044820152606401610cc6565b505050565b6000610d673384846120bf565b5060015b92915050565b6000546001600160a01b03163314610d9b5760405162461bcd60e51b8152600401610cc690612fe1565b600d839055600e829055600f819055610db881610cec8585612060565b601455601354610dca9060089061308b565b6014541115610d555760405162461bcd60e51b815260206004820152601e60248201527f4275792066656573206d7573742062652031322e3525206f72206c65737300006044820152606401610cc6565b6000546001600160a01b03163314610e455760405162461bcd60e51b8152600401610cc690612fe1565b6001600160a01b03919091166000908152600b60205260409020805460ff1916911515919091179055565b6000610e7d8484846121e3565b50610ed08433610ecb85604051806060016040528060288152602001613171602891396001600160a01b038a1660009081526007602090815260408083203384529091529020549190612606565b6120bf565b5060015b9392505050565b6000546001600160a01b03163314610f055760405162461bcd60e51b8152600401610cc690612fe1565b601b8054911515600160b81b0260ff60b81b19909216919091179055565b6000546001600160a01b03163314610f4d5760405162461bcd60e51b8152600401610cc690612fe1565b6001600160a01b038216301415610fc55760405162461bcd60e51b815260206004820152603660248201527f4f776e65722063616e277420636c61696d20636f6e747261637427732062616c604482015275616e6365206f6620697473206f776e20746f6b656e7360501b6064820152608401610cc6565b60405163a9059cbb60e01b8152336004820152602481018290526001600160a01b0383169063a9059cbb90604401602060405180830381600087803b15801561100d57600080fd5b505af1158015611021573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d559190612e7d565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166000908152600660205260408120546110d3906110cd6110c47f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031660009081526006602052604090205490565b60165490612640565b90612640565b905090565b3360008181526007602090815260408083206001600160a01b03871684529091528120549091610d67918590610ecb9086612060565b6000546001600160a01b031633146111385760405162461bcd60e51b8152600401610cc690612fe1565b61115b620186a06111556001601654611f9f90919063ffffffff16565b9061201e565b8110156111d05760405162461bcd60e51b815260206004820152603c60248201527f43616e6e6f74207365742073776170207468726573686f6c6420616d6f756e7460448201527f206c6f776572207468616e20302e30303125206f6620746f6b656e73000000006064820152608401610cc6565b6111eb60646111556001601654611f9f90919063ffffffff16565b8111156112605760405162461bcd60e51b815260206004820152603960248201527f43616e6e6f74207365742073776170207468726573686f6c6420616d6f756e7460448201527f20686967686572207468616e203125206f6620746f6b656e73000000000000006064820152608401610cc6565b601755565b6000546001600160a01b0316331461128f5760405162461bcd60e51b8152600401610cc690612fe1565b6001600160a01b0381166112b55760405162461bcd60e51b8152600401610cc690612f9f565b600380546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b600080546001600160a01b031633146113085760405162461bcd60e51b8152600401610cc690612fe1565b6000829050806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561134657600080fd5b505afa15801561135a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061137e9190612d0c565b6001600160a01b031663e6a4390530836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156113c657600080fd5b505afa1580156113da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113fe9190612d0c565b6040516001600160e01b031960e085901b1681526001600160a01b0392831660048201529116602482015260440160206040518083038186803b15801561144457600080fd5b505afa158015611458573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061147c9190612d0c565b91506001600160a01b03821661160057806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156114c557600080fd5b505afa1580156114d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114fd9190612d0c565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561154557600080fd5b505afa158015611559573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061157d9190612d0c565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b1580156115c557600080fd5b505af11580156115d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115fd9190612d0c565b91505b601b80546001600160a01b038085166001600160a01b03199283168117909355601a80549490911693909116929092179091556000908152600a60205260409020805460ff19166001179055919050565b6000546001600160a01b0316331461167b5760405162461bcd60e51b8152600401610cc690612fe1565b338382146116c45760405162461bcd60e51b815260206004820152601660248201527508ae4e4dee474409ad2e6dac2e8c6d04098cadccee8d60531b6044820152606401610cc6565b6000805b83811015611716578484828181106116f057634e487b7160e01b600052603260045260246000fd5b90506020020135826117029190613073565b91508061170e8161311c565b9150506116c8565b5080611737836001600160a01b031660009081526006602052604090205490565b10156117855760405162461bcd60e51b815260206004820152601b60248201527f4572726f723a20496e73756666696369656e74204572726f72212100000000006044820152606401610cc6565b6001600160a01b0382166000908152600660205260409020546117a89082612640565b6001600160a01b0383166000908152600660205260408120919091555b8581101561194a576118508585838181106117f057634e487b7160e01b600052603260045260246000fd5b90506020020135600660008a8a8681811061181b57634e487b7160e01b600052603260045260246000fd5b90506020020160208101906118309190612cf0565b6001600160a01b0316815260208101919091526040016000205490612060565b6006600089898581811061187457634e487b7160e01b600052603260045260246000fd5b90506020020160208101906118899190612cf0565b6001600160a01b031681526020810191909152604001600020558686828181106118c357634e487b7160e01b600052603260045260246000fd5b90506020020160208101906118d89190612cf0565b6001600160a01b0316836001600160a01b031660008051602061319983398151915287878581811061191a57634e487b7160e01b600052603260045260246000fd5b9050602002013560405161193091815260200190565b60405180910390a3806119428161311c565b9150506117c5565b50505050505050565b6000546001600160a01b0316331461197d5760405162461bcd60e51b8152600401610cc690612fe1565b6000805460405161dead926001600160a01b03909216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b03191661dead179055565b6000546001600160a01b031633146119f75760405162461bcd60e51b8152600401610cc690612fe1565b6001600160a01b03919091166000908152600a60205260409020805460ff1916911515919091179055565b606060028054610c19906130e1565b6000610d673384610ecb856040518060600160405280602581526020016131b9602591393360009081526007602090815260408083206001600160a01b038d1684529091529020549190612606565b6000546001600160a01b03163314611aaa5760405162461bcd60e51b8152600401610cc690612fe1565b601b8054911515600160b01b0260ff60b01b19909216919091179055565b6000610ed03384846121e3565b6000546001600160a01b03163314611aff5760405162461bcd60e51b8152600401610cc690612fe1565b6008805460ff1916911515919091179055565b6000546001600160a01b03163314611b3c5760405162461bcd60e51b8152600401610cc690612fe1565b601b8054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15990611b8990831515815260200190565b60405180910390a150565b6000546001600160a01b03163314611bbe5760405162461bcd60e51b8152600401610cc690612fe1565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611c0a5760405162461bcd60e51b8152600401610cc690612fe1565b604051600090339047908381818185875af1925050503d8060008114611c4c576040519150601f19603f3d011682016040523d82523d6000602084013e611c51565b606091505b5050905080611c5f57600080fd5b50565b6000546001600160a01b03163314611c8c5760405162461bcd60e51b8152600401610cc690612fe1565b611ca86103e86111556001601654611f9f90919063ffffffff16565b811015611d1d5760405162461bcd60e51b815260206004820152603860248201527f43616e6e6f7420736574206d617820545820616d6f756e74206c6f776572207460448201527f68616e20302c3125206f6620746f74616c20737570706c7900000000000000006064820152608401610cc6565b601855565b6000546001600160a01b03163314611d4c5760405162461bcd60e51b8152600401610cc690612fe1565b601b8054911515600160c01b0260ff60c01b19909216919091179055565b6000546001600160a01b03163314611d945760405162461bcd60e51b8152600401610cc690612fe1565b6001600160a01b03919091166000908152600960205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314611de95760405162461bcd60e51b8152600401610cc690612fe1565b601955565b6000546001600160a01b03163314611e185760405162461bcd60e51b8152600401610cc690612fe1565b6001600160a01b038116611e7d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610cc6565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611f025760405162461bcd60e51b8152600401610cc690612fe1565b6001600160a01b03919091166000908152600c60205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314611f575760405162461bcd60e51b8152600401610cc690612fe1565b6001600160a01b038116611f7d5760405162461bcd60e51b8152600401610cc690612f9f565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b600082611fae57506000610d6b565b6000611fba83856130ab565b905082611fc7858361308b565b14610ed45760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610cc6565b6000610ed483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612682565b60008061206d8385613073565b905083811015610ed45760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610cc6565b6001600160a01b0383166121215760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610cc6565b6001600160a01b0382166121825760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610cc6565b6001600160a01b0383811660008181526007602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b0384166122495760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610cc6565b6001600160a01b0383166122ab5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610cc6565b601b54600160a01b900460ff16156122cf576122c88484846126b0565b9050610ed4565b6001600160a01b0384166000908152600c602052604090205460ff1615801561231157506001600160a01b0383166000908152600c602052604090205460ff16155b80156123265750601b54600160c01b900460ff165b1561238e5760185482111561238e5760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610cc6565b30600090815260066020526040902054601754811080159081906123bc5750601b54600160a01b900460ff16155b80156123e157506001600160a01b0386166000908152600a602052604090205460ff16155b80156123f65750601b54600160a81b900460ff165b1561241c57601b54600160b01b900460ff16156124135760175491505b61241c82612784565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b03891660009081526006909152919091205461246e918690612606565b6001600160a01b038716600090815260066020908152604080832093909355600990529081205460ff16806124bb57506001600160a01b03861660009081526009602052604090205460ff165b6124cf576124ca878787612931565b6124d1565b845b601b54909150600160b81b900460ff16801561250657506001600160a01b0386166000908152600b602052604090205460ff16155b1561258d5760195461253182610cec896001600160a01b031660009081526006602052604090205490565b111561258d5760405162461bcd60e51b815260206004820152602560248201527f416d6f756e74204578636565642046726f6d204d61782057616c6c6574204c696044820152646d6974212160d81b6064820152608401610cc6565b6001600160a01b0386166000908152600660205260409020546125b09082612060565b6001600160a01b038088166000818152600660205260409081902093909355915190891690600080516020613199833981519152906125f29085815260200190565b60405180910390a360019350505050610ed4565b6000818484111561262a5760405162461bcd60e51b8152600401610cc69190612f4c565b50600061263784866130ca565b95945050505050565b6000610ed483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612606565b600081836126a35760405162461bcd60e51b8152600401610cc69190612f4c565b506000612637848661308b565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0386166000908152600690915291822054612701918490612606565b6001600160a01b0380861660009081526006602052604080822093909355908516815220546127309083612060565b6001600160a01b038085166000818152600660205260409081902093909355915190861690600080516020613199833981519152906127729086815260200190565b60405180910390a35060019392505050565b601b805460ff60a01b1916600160a01b1790556015546014546000916127aa9190612060565b905060006127c5601054600d5461206090919063ffffffff16565b905060006127e0601154600e5461206090919063ffffffff16565b905060006127f5600261115586818988611f9f565b905060006128038683612640565b90504761280f82612a25565b600061281b4783612640565b9050600061283461282d88600261201e565b8990612640565b9050600061284960026111558481878d611f9f565b9050600061285b83611155868b611f9f565b9050600061286d826110cd8786612640565b905081156128b5576003546040516101009091046001600160a01b0316906108fc8415029084906000818181858888f193505050501580156128b3573d6000803e3d6000fd5b505b80156128f7576004546040516001600160a01b039091169082156108fc029083906000818181858888f193505050501580156128f5573d6000803e3d6000fd5b505b6000831180156129075750600088115b15612916576129168884612be3565b5050601b805460ff60a01b1916905550505050505050505050565b6001600160a01b0383166000908152600a6020526040812054819060ff16156129755761296e606461115560145486611f9f90919063ffffffff16565b90506129b3565b6001600160a01b0384166000908152600a602052604090205460ff16156129b3576129b0606461115560155486611f9f90919063ffffffff16565b90505b8015612a1b57306000908152600660205260409020546129d39082612060565b30600081815260066020526040908190209290925590516001600160a01b0387169060008051602061319983398151915290612a129085815260200190565b60405180910390a35b6126378382612640565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612a6857634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152601a54604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015612abc57600080fd5b505afa158015612ad0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612af49190612d0c565b81600181518110612b1557634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092010152601a54612b3b91309116846120bf565b601a5460405163791ac94760e01b81526001600160a01b039091169063791ac94790612b74908590600090869030904290600401613037565b600060405180830381600087803b158015612b8e57600080fd5b505af1158015612ba2573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051612bd7929190613016565b60405180910390a15050565b601a54612bfb9030906001600160a01b0316846120bf565b601a5460055460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c4016060604051808303818588803b158015612c6657600080fd5b505af1158015612c7a573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612c9f9190612edc565b5050505050565b60008083601f840112612cb7578182fd5b50813567ffffffffffffffff811115612cce578182fd5b6020830191508360208260051b8501011115612ce957600080fd5b9250929050565b600060208284031215612d01578081fd5b8135610ed48161314d565b600060208284031215612d1d578081fd5b8151610ed48161314d565b60008060408385031215612d3a578081fd5b8235612d458161314d565b91506020830135612d558161314d565b809150509250929050565b600080600060608486031215612d74578081fd5b8335612d7f8161314d565b92506020840135612d8f8161314d565b929592945050506040919091013590565b60008060408385031215612db2578182fd5b8235612dbd8161314d565b91506020830135612d5581613162565b60008060408385031215612ddf578182fd5b8235612dea8161314d565b946020939093013593505050565b60008060008060408587031215612e0d578081fd5b843567ffffffffffffffff80821115612e24578283fd5b612e3088838901612ca6565b90965094506020870135915080821115612e48578283fd5b50612e5587828801612ca6565b95989497509550505050565b600060208284031215612e72578081fd5b8135610ed481613162565b600060208284031215612e8e578081fd5b8151610ed481613162565b600060208284031215612eaa578081fd5b5035919050565b600080600060608486031215612ec5578283fd5b505081359360208301359350604090920135919050565b600080600060608486031215612ef0578283fd5b8351925060208401519150604084015190509250925092565b6000815180845260208085019450808401835b83811015612f415781516001600160a01b031687529582019590820190600101612f1c565b509495945050505050565b6000602080835283518082850152825b81811015612f7857858101830151858201604001528201612f5c565b81811115612f895783604083870101525b50601f01601f1916929092016040019392505050565b60208082526022908201527f46656520416464726573732063616e6e6f74206265207a65726f206164647265604082015261737360f01b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b82815260406020820152600061302f6040830184612f09565b949350505050565b85815284602082015260a06040820152600061305660a0830186612f09565b6001600160a01b0394909416606083015250608001529392505050565b6000821982111561308657613086613137565b500190565b6000826130a657634e487b7160e01b81526012600452602481fd5b500490565b60008160001904831182151516156130c5576130c5613137565b500290565b6000828210156130dc576130dc613137565b500390565b600181811c908216806130f557607f821691505b6020821081141561311657634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561313057613130613137565b5060010190565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b0381168114611c5f57600080fd5b8015158114611c5f57600080fdfe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220987948e6ef407283749e802eda1aa9420cecdf7d8b37d4f9499ddfb7004848a664736f6c63430008040033

Deployed Bytecode

0x6080604052600436106103c75760003560e01c806385261485116101f2578063d2d7ad831161010d578063f0cd1dac116100a0578063f84ba65d1161006f578063f84ba65d14610b89578063f872858a14610ba9578063f8f6329014610bca578063fb4b8e6c14610bea57600080fd5b8063f0cd1dac14610b1d578063f1d5f51714610b33578063f2fde38b14610b53578063f680f79914610b7357600080fd5b8063e6b2603b116100dc578063e6b2603b14610aa8578063ec28438a14610abd578063ee828db314610add578063ef422a1814610afd57600080fd5b8063d2d7ad8314610a15578063da00097d14610a2b578063dc44b6a014610a4c578063dd62ed3e14610a6257600080fd5b8063a9059cbb11610185578063c816841b11610154578063c816841b1461098f578063c8607952146109af578063c867d60b146109c5578063c9c9afc5146109f557600080fd5b8063a9059cbb14610919578063c2e5ec0414610939578063c49b9a8014610959578063c5d241891461097957600080fd5b806395d89b41116101c157806395d89b41146108a457806398e944c8146108b9578063a457c2d7146108d9578063a5d69d1f146108f957600080fd5b8063852614851461081f57806388790a68146108405780638b42507f146108565780638da5cb5b1461088657600080fd5b80633b97084a116102e257806367243482116102755780637d1db4a5116102445780637d1db4a5146107bd578063807c2d9c146107d357806382eefb43146107e9578063844d591c146107ff57600080fd5b8063672434821461072d57806370a082311461074d578063715018a61461078357806375f0a8741461079857600080fd5b80634cb80fd5116102b15780634cb80fd5146106a75780635194f9bf146106c75780635342acb4146106dd5780635881f3ef1461070d57600080fd5b80633b97084a1461061c5780633ecad2711461063c5780634a74bb021461066c5780634ada218b1461068d57600080fd5b806323555d571161035a57806327c8f8351161032957806327c8f835146105915780632b112e49146105c5578063313ce567146105da57806339509351146105fc57600080fd5b806323555d571461051b57806323b872dd146105315780632563ae831461055157806326cd1e301461057157600080fd5b80631694505e116103965780631694505e1461049c57806318160ddd146104bc5780631870517a146104db5780632198cf6c146104fb57600080fd5b806306fdde03146103d357806308733214146103fe5780630930907b14610420578063095ea7b31461046c57600080fd5b366103ce57005b600080fd5b3480156103df57600080fd5b506103e8610c0a565b6040516103f59190612f4c565b60405180910390f35b34801561040a57600080fd5b5061041e610419366004612eb1565b610c9c565b005b34801561042c57600080fd5b506104547f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016103f5565b34801561047857600080fd5b5061048c610487366004612dcd565b610d5a565b60405190151581526020016103f5565b3480156104a857600080fd5b50601a54610454906001600160a01b031681565b3480156104c857600080fd5b506016545b6040519081526020016103f5565b3480156104e757600080fd5b5061041e6104f6366004612eb1565b610d71565b34801561050757600080fd5b5061041e610516366004612da0565b610e1b565b34801561052757600080fd5b506104cd600f5481565b34801561053d57600080fd5b5061048c61054c366004612d60565b610e70565b34801561055d57600080fd5b5061041e61056c366004612e61565b610edb565b34801561057d57600080fd5b5061041e61058c366004612dcd565b610f23565b34801561059d57600080fd5b506104547f000000000000000000000000000000000000000000000000000000000000dead81565b3480156105d157600080fd5b506104cd611045565b3480156105e657600080fd5b5060035460405160ff90911681526020016103f5565b34801561060857600080fd5b5061048c610617366004612dcd565b6110d8565b34801561062857600080fd5b5061041e610637366004612e99565b61110e565b34801561064857600080fd5b5061048c610657366004612cf0565b600a6020526000908152604090205460ff1681565b34801561067857600080fd5b50601b5461048c90600160a81b900460ff1681565b34801561069957600080fd5b5060085461048c9060ff1681565b3480156106b357600080fd5b5061041e6106c2366004612cf0565b611265565b3480156106d357600080fd5b506104cd60125481565b3480156106e957600080fd5b5061048c6106f8366004612cf0565b60096020526000908152604090205460ff1681565b34801561071957600080fd5b50610454610728366004612cf0565b6112dd565b34801561073957600080fd5b5061041e610748366004612df8565b611651565b34801561075957600080fd5b506104cd610768366004612cf0565b6001600160a01b031660009081526006602052604090205490565b34801561078f57600080fd5b5061041e611953565b3480156107a457600080fd5b506003546104549061010090046001600160a01b031681565b3480156107c957600080fd5b506104cd60185481565b3480156107df57600080fd5b506104cd60195481565b3480156107f557600080fd5b506104cd60155481565b34801561080b57600080fd5b5061041e61081a366004612da0565b6119cd565b34801561082b57600080fd5b50601b5461048c90600160c01b900460ff1681565b34801561084c57600080fd5b506104cd60105481565b34801561086257600080fd5b5061048c610871366004612cf0565b600c6020526000908152604090205460ff1681565b34801561089257600080fd5b506000546001600160a01b0316610454565b3480156108b057600080fd5b506103e8611a22565b3480156108c557600080fd5b50600554610454906001600160a01b031681565b3480156108e557600080fd5b5061048c6108f4366004612dcd565b611a31565b34801561090557600080fd5b5061041e610914366004612e61565b611a80565b34801561092557600080fd5b5061048c610934366004612dcd565b611ac8565b34801561094557600080fd5b5061041e610954366004612e61565b611ad5565b34801561096557600080fd5b5061041e610974366004612e61565b611b12565b34801561098557600080fd5b506104cd600e5481565b34801561099b57600080fd5b50601b54610454906001600160a01b031681565b3480156109bb57600080fd5b506104cd60115481565b3480156109d157600080fd5b5061048c6109e0366004612cf0565b600b6020526000908152604090205460ff1681565b348015610a0157600080fd5b5061041e610a10366004612cf0565b611b94565b348015610a2157600080fd5b506104cd60175481565b348015610a3757600080fd5b50601b5461048c90600160b01b900460ff1681565b348015610a5857600080fd5b506104cd600d5481565b348015610a6e57600080fd5b506104cd610a7d366004612d28565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205490565b348015610ab457600080fd5b5061041e611be0565b348015610ac957600080fd5b5061041e610ad8366004612e99565b611c62565b348015610ae957600080fd5b5061041e610af8366004612e61565b611d22565b348015610b0957600080fd5b5061041e610b18366004612da0565b611d6a565b348015610b2957600080fd5b506104cd60145481565b348015610b3f57600080fd5b5061041e610b4e366004612e99565b611dbf565b348015610b5f57600080fd5b5061041e610b6e366004612cf0565b611dee565b348015610b7f57600080fd5b506104cd60135481565b348015610b9557600080fd5b5061041e610ba4366004612da0565b611ed8565b348015610bb557600080fd5b50601b5461048c90600160b81b900460ff1681565b348015610bd657600080fd5b50600454610454906001600160a01b031681565b348015610bf657600080fd5b5061041e610c05366004612cf0565b611f2d565b606060018054610c19906130e1565b80601f0160208091040260200160405190810160405280929190818152602001828054610c45906130e1565b8015610c925780601f10610c6757610100808354040283529160200191610c92565b820191906000526020600020905b815481529060010190602001808311610c7557829003601f168201915b5050505050905090565b6000546001600160a01b03163314610ccf5760405162461bcd60e51b8152600401610cc690612fe1565b60405180910390fd5b601083905560118290556012819055610cf281610cec8585612060565b90612060565b601555601354610d049060089061308b565b6015541115610d555760405162461bcd60e51b815260206004820152601f60248201527f53656c6c2066656573206d7573742062652031322e3525206f72206c657373006044820152606401610cc6565b505050565b6000610d673384846120bf565b5060015b92915050565b6000546001600160a01b03163314610d9b5760405162461bcd60e51b8152600401610cc690612fe1565b600d839055600e829055600f819055610db881610cec8585612060565b601455601354610dca9060089061308b565b6014541115610d555760405162461bcd60e51b815260206004820152601e60248201527f4275792066656573206d7573742062652031322e3525206f72206c65737300006044820152606401610cc6565b6000546001600160a01b03163314610e455760405162461bcd60e51b8152600401610cc690612fe1565b6001600160a01b03919091166000908152600b60205260409020805460ff1916911515919091179055565b6000610e7d8484846121e3565b50610ed08433610ecb85604051806060016040528060288152602001613171602891396001600160a01b038a1660009081526007602090815260408083203384529091529020549190612606565b6120bf565b5060015b9392505050565b6000546001600160a01b03163314610f055760405162461bcd60e51b8152600401610cc690612fe1565b601b8054911515600160b81b0260ff60b81b19909216919091179055565b6000546001600160a01b03163314610f4d5760405162461bcd60e51b8152600401610cc690612fe1565b6001600160a01b038216301415610fc55760405162461bcd60e51b815260206004820152603660248201527f4f776e65722063616e277420636c61696d20636f6e747261637427732062616c604482015275616e6365206f6620697473206f776e20746f6b656e7360501b6064820152608401610cc6565b60405163a9059cbb60e01b8152336004820152602481018290526001600160a01b0383169063a9059cbb90604401602060405180830381600087803b15801561100d57600080fd5b505af1158015611021573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d559190612e7d565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166000908152600660205260408120546110d3906110cd6110c47f000000000000000000000000000000000000000000000000000000000000dead6001600160a01b031660009081526006602052604090205490565b60165490612640565b90612640565b905090565b3360008181526007602090815260408083206001600160a01b03871684529091528120549091610d67918590610ecb9086612060565b6000546001600160a01b031633146111385760405162461bcd60e51b8152600401610cc690612fe1565b61115b620186a06111556001601654611f9f90919063ffffffff16565b9061201e565b8110156111d05760405162461bcd60e51b815260206004820152603c60248201527f43616e6e6f74207365742073776170207468726573686f6c6420616d6f756e7460448201527f206c6f776572207468616e20302e30303125206f6620746f6b656e73000000006064820152608401610cc6565b6111eb60646111556001601654611f9f90919063ffffffff16565b8111156112605760405162461bcd60e51b815260206004820152603960248201527f43616e6e6f74207365742073776170207468726573686f6c6420616d6f756e7460448201527f20686967686572207468616e203125206f6620746f6b656e73000000000000006064820152608401610cc6565b601755565b6000546001600160a01b0316331461128f5760405162461bcd60e51b8152600401610cc690612fe1565b6001600160a01b0381166112b55760405162461bcd60e51b8152600401610cc690612f9f565b600380546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b600080546001600160a01b031633146113085760405162461bcd60e51b8152600401610cc690612fe1565b6000829050806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561134657600080fd5b505afa15801561135a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061137e9190612d0c565b6001600160a01b031663e6a4390530836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156113c657600080fd5b505afa1580156113da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113fe9190612d0c565b6040516001600160e01b031960e085901b1681526001600160a01b0392831660048201529116602482015260440160206040518083038186803b15801561144457600080fd5b505afa158015611458573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061147c9190612d0c565b91506001600160a01b03821661160057806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156114c557600080fd5b505afa1580156114d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114fd9190612d0c565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561154557600080fd5b505afa158015611559573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061157d9190612d0c565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b1580156115c557600080fd5b505af11580156115d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115fd9190612d0c565b91505b601b80546001600160a01b038085166001600160a01b03199283168117909355601a80549490911693909116929092179091556000908152600a60205260409020805460ff19166001179055919050565b6000546001600160a01b0316331461167b5760405162461bcd60e51b8152600401610cc690612fe1565b338382146116c45760405162461bcd60e51b815260206004820152601660248201527508ae4e4dee474409ad2e6dac2e8c6d04098cadccee8d60531b6044820152606401610cc6565b6000805b83811015611716578484828181106116f057634e487b7160e01b600052603260045260246000fd5b90506020020135826117029190613073565b91508061170e8161311c565b9150506116c8565b5080611737836001600160a01b031660009081526006602052604090205490565b10156117855760405162461bcd60e51b815260206004820152601b60248201527f4572726f723a20496e73756666696369656e74204572726f72212100000000006044820152606401610cc6565b6001600160a01b0382166000908152600660205260409020546117a89082612640565b6001600160a01b0383166000908152600660205260408120919091555b8581101561194a576118508585838181106117f057634e487b7160e01b600052603260045260246000fd5b90506020020135600660008a8a8681811061181b57634e487b7160e01b600052603260045260246000fd5b90506020020160208101906118309190612cf0565b6001600160a01b0316815260208101919091526040016000205490612060565b6006600089898581811061187457634e487b7160e01b600052603260045260246000fd5b90506020020160208101906118899190612cf0565b6001600160a01b031681526020810191909152604001600020558686828181106118c357634e487b7160e01b600052603260045260246000fd5b90506020020160208101906118d89190612cf0565b6001600160a01b0316836001600160a01b031660008051602061319983398151915287878581811061191a57634e487b7160e01b600052603260045260246000fd5b9050602002013560405161193091815260200190565b60405180910390a3806119428161311c565b9150506117c5565b50505050505050565b6000546001600160a01b0316331461197d5760405162461bcd60e51b8152600401610cc690612fe1565b6000805460405161dead926001600160a01b03909216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b03191661dead179055565b6000546001600160a01b031633146119f75760405162461bcd60e51b8152600401610cc690612fe1565b6001600160a01b03919091166000908152600a60205260409020805460ff1916911515919091179055565b606060028054610c19906130e1565b6000610d673384610ecb856040518060600160405280602581526020016131b9602591393360009081526007602090815260408083206001600160a01b038d1684529091529020549190612606565b6000546001600160a01b03163314611aaa5760405162461bcd60e51b8152600401610cc690612fe1565b601b8054911515600160b01b0260ff60b01b19909216919091179055565b6000610ed03384846121e3565b6000546001600160a01b03163314611aff5760405162461bcd60e51b8152600401610cc690612fe1565b6008805460ff1916911515919091179055565b6000546001600160a01b03163314611b3c5760405162461bcd60e51b8152600401610cc690612fe1565b601b8054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15990611b8990831515815260200190565b60405180910390a150565b6000546001600160a01b03163314611bbe5760405162461bcd60e51b8152600401610cc690612fe1565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611c0a5760405162461bcd60e51b8152600401610cc690612fe1565b604051600090339047908381818185875af1925050503d8060008114611c4c576040519150601f19603f3d011682016040523d82523d6000602084013e611c51565b606091505b5050905080611c5f57600080fd5b50565b6000546001600160a01b03163314611c8c5760405162461bcd60e51b8152600401610cc690612fe1565b611ca86103e86111556001601654611f9f90919063ffffffff16565b811015611d1d5760405162461bcd60e51b815260206004820152603860248201527f43616e6e6f7420736574206d617820545820616d6f756e74206c6f776572207460448201527f68616e20302c3125206f6620746f74616c20737570706c7900000000000000006064820152608401610cc6565b601855565b6000546001600160a01b03163314611d4c5760405162461bcd60e51b8152600401610cc690612fe1565b601b8054911515600160c01b0260ff60c01b19909216919091179055565b6000546001600160a01b03163314611d945760405162461bcd60e51b8152600401610cc690612fe1565b6001600160a01b03919091166000908152600960205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314611de95760405162461bcd60e51b8152600401610cc690612fe1565b601955565b6000546001600160a01b03163314611e185760405162461bcd60e51b8152600401610cc690612fe1565b6001600160a01b038116611e7d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610cc6565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611f025760405162461bcd60e51b8152600401610cc690612fe1565b6001600160a01b03919091166000908152600c60205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314611f575760405162461bcd60e51b8152600401610cc690612fe1565b6001600160a01b038116611f7d5760405162461bcd60e51b8152600401610cc690612f9f565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b600082611fae57506000610d6b565b6000611fba83856130ab565b905082611fc7858361308b565b14610ed45760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610cc6565b6000610ed483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612682565b60008061206d8385613073565b905083811015610ed45760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610cc6565b6001600160a01b0383166121215760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610cc6565b6001600160a01b0382166121825760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610cc6565b6001600160a01b0383811660008181526007602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b0384166122495760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610cc6565b6001600160a01b0383166122ab5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610cc6565b601b54600160a01b900460ff16156122cf576122c88484846126b0565b9050610ed4565b6001600160a01b0384166000908152600c602052604090205460ff1615801561231157506001600160a01b0383166000908152600c602052604090205460ff16155b80156123265750601b54600160c01b900460ff165b1561238e5760185482111561238e5760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610cc6565b30600090815260066020526040902054601754811080159081906123bc5750601b54600160a01b900460ff16155b80156123e157506001600160a01b0386166000908152600a602052604090205460ff16155b80156123f65750601b54600160a81b900460ff165b1561241c57601b54600160b01b900460ff16156124135760175491505b61241c82612784565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b03891660009081526006909152919091205461246e918690612606565b6001600160a01b038716600090815260066020908152604080832093909355600990529081205460ff16806124bb57506001600160a01b03861660009081526009602052604090205460ff165b6124cf576124ca878787612931565b6124d1565b845b601b54909150600160b81b900460ff16801561250657506001600160a01b0386166000908152600b602052604090205460ff16155b1561258d5760195461253182610cec896001600160a01b031660009081526006602052604090205490565b111561258d5760405162461bcd60e51b815260206004820152602560248201527f416d6f756e74204578636565642046726f6d204d61782057616c6c6574204c696044820152646d6974212160d81b6064820152608401610cc6565b6001600160a01b0386166000908152600660205260409020546125b09082612060565b6001600160a01b038088166000818152600660205260409081902093909355915190891690600080516020613199833981519152906125f29085815260200190565b60405180910390a360019350505050610ed4565b6000818484111561262a5760405162461bcd60e51b8152600401610cc69190612f4c565b50600061263784866130ca565b95945050505050565b6000610ed483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612606565b600081836126a35760405162461bcd60e51b8152600401610cc69190612f4c565b506000612637848661308b565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0386166000908152600690915291822054612701918490612606565b6001600160a01b0380861660009081526006602052604080822093909355908516815220546127309083612060565b6001600160a01b038085166000818152600660205260409081902093909355915190861690600080516020613199833981519152906127729086815260200190565b60405180910390a35060019392505050565b601b805460ff60a01b1916600160a01b1790556015546014546000916127aa9190612060565b905060006127c5601054600d5461206090919063ffffffff16565b905060006127e0601154600e5461206090919063ffffffff16565b905060006127f5600261115586818988611f9f565b905060006128038683612640565b90504761280f82612a25565b600061281b4783612640565b9050600061283461282d88600261201e565b8990612640565b9050600061284960026111558481878d611f9f565b9050600061285b83611155868b611f9f565b9050600061286d826110cd8786612640565b905081156128b5576003546040516101009091046001600160a01b0316906108fc8415029084906000818181858888f193505050501580156128b3573d6000803e3d6000fd5b505b80156128f7576004546040516001600160a01b039091169082156108fc029083906000818181858888f193505050501580156128f5573d6000803e3d6000fd5b505b6000831180156129075750600088115b15612916576129168884612be3565b5050601b805460ff60a01b1916905550505050505050505050565b6001600160a01b0383166000908152600a6020526040812054819060ff16156129755761296e606461115560145486611f9f90919063ffffffff16565b90506129b3565b6001600160a01b0384166000908152600a602052604090205460ff16156129b3576129b0606461115560155486611f9f90919063ffffffff16565b90505b8015612a1b57306000908152600660205260409020546129d39082612060565b30600081815260066020526040908190209290925590516001600160a01b0387169060008051602061319983398151915290612a129085815260200190565b60405180910390a35b6126378382612640565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612a6857634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152601a54604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015612abc57600080fd5b505afa158015612ad0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612af49190612d0c565b81600181518110612b1557634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092010152601a54612b3b91309116846120bf565b601a5460405163791ac94760e01b81526001600160a01b039091169063791ac94790612b74908590600090869030904290600401613037565b600060405180830381600087803b158015612b8e57600080fd5b505af1158015612ba2573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051612bd7929190613016565b60405180910390a15050565b601a54612bfb9030906001600160a01b0316846120bf565b601a5460055460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c4016060604051808303818588803b158015612c6657600080fd5b505af1158015612c7a573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612c9f9190612edc565b5050505050565b60008083601f840112612cb7578182fd5b50813567ffffffffffffffff811115612cce578182fd5b6020830191508360208260051b8501011115612ce957600080fd5b9250929050565b600060208284031215612d01578081fd5b8135610ed48161314d565b600060208284031215612d1d578081fd5b8151610ed48161314d565b60008060408385031215612d3a578081fd5b8235612d458161314d565b91506020830135612d558161314d565b809150509250929050565b600080600060608486031215612d74578081fd5b8335612d7f8161314d565b92506020840135612d8f8161314d565b929592945050506040919091013590565b60008060408385031215612db2578182fd5b8235612dbd8161314d565b91506020830135612d5581613162565b60008060408385031215612ddf578182fd5b8235612dea8161314d565b946020939093013593505050565b60008060008060408587031215612e0d578081fd5b843567ffffffffffffffff80821115612e24578283fd5b612e3088838901612ca6565b90965094506020870135915080821115612e48578283fd5b50612e5587828801612ca6565b95989497509550505050565b600060208284031215612e72578081fd5b8135610ed481613162565b600060208284031215612e8e578081fd5b8151610ed481613162565b600060208284031215612eaa578081fd5b5035919050565b600080600060608486031215612ec5578283fd5b505081359360208301359350604090920135919050565b600080600060608486031215612ef0578283fd5b8351925060208401519150604084015190509250925092565b6000815180845260208085019450808401835b83811015612f415781516001600160a01b031687529582019590820190600101612f1c565b509495945050505050565b6000602080835283518082850152825b81811015612f7857858101830151858201604001528201612f5c565b81811115612f895783604083870101525b50601f01601f1916929092016040019392505050565b60208082526022908201527f46656520416464726573732063616e6e6f74206265207a65726f206164647265604082015261737360f01b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b82815260406020820152600061302f6040830184612f09565b949350505050565b85815284602082015260a06040820152600061305660a0830186612f09565b6001600160a01b0394909416606083015250608001529392505050565b6000821982111561308657613086613137565b500190565b6000826130a657634e487b7160e01b81526012600452602481fd5b500490565b60008160001904831182151516156130c5576130c5613137565b500290565b6000828210156130dc576130dc613137565b500390565b600181811c908216806130f557607f821691505b6020821081141561311657634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561313057613130613137565b5060010190565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b0381168114611c5f57600080fd5b8015158114611c5f57600080fdfe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220987948e6ef407283749e802eda1aa9420cecdf7d8b37d4f9499ddfb7004848a664736f6c63430008040033

Deployed Bytecode Sourcemap

11542:17700:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15754:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21459:406;;;;;;;;;;-1:-1:-1;21459:406:0;;;;;:::i;:::-;;:::i;:::-;;12085:81;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5556:32:1;;;5538:51;;5526:2;5511:18;12085:81:0;5493:102:1;16920:161:0;;;;;;;;;;-1:-1:-1;16920:161:0;;;;;:::i;:::-;;:::i;:::-;;;7189:14:1;;7182:22;7164:41;;7152:2;7137:18;16920:161:0;7119:92:1;13310:41:0;;;;;;;;;;-1:-1:-1;13310:41:0;;;;-1:-1:-1;;;;;13310:41:0;;;16031:100;;;;;;;;;;-1:-1:-1;16111:12:0;;16031:100;;;15696:25:1;;;15684:2;15669:18;16031:100:0;15651:76:1;21055:396:0;;;;;;;;;;-1:-1:-1;21055:396:0;;;;;:::i;:::-;;:::i;17853:135::-;;;;;;;;;;-1:-1:-1;17853:135:0;;;;;:::i;:::-;;:::i;12704:35::-;;;;;;;;;;;;;;;;22148:313;;;;;;;;;;-1:-1:-1;22148:313:0;;;;;:::i;:::-;;:::i;18354:113::-;;;;;;;;;;-1:-1:-1;18354:113:0;;;;;:::i;:::-;;:::i;24463:238::-;;;;;;;;;;-1:-1:-1;24463:238:0;;;;;:::i;:::-;;:::i;11997:81::-;;;;;;;;;;;;;;;19867:156;;;;;;;;;;;;;:::i;15940:83::-;;;;;;;;;;-1:-1:-1;16006:9:0;;15940:83;;16006:9;;;;16798:36:1;;16786:2;16771:18;15940:83:0;16753:87:1;16417:218:0;;;;;;;;;;-1:-1:-1;16417:218:0;;;;;:::i;:::-;;:::i;18585:374::-;;;;;;;;;;-1:-1:-1;18585:374:0;;;;;:::i;:::-;;:::i;12394:45::-;;;;;;;;;;-1:-1:-1;12394:45:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;13427:40;;;;;;;;;;-1:-1:-1;13427:40:0;;;;-1:-1:-1;;;13427:40:0;;;;;;12302:26;;;;;;;;;;-1:-1:-1;12302:26:0;;;;;;;;18967:213;;;;;;;;;;-1:-1:-1;18967:213:0;;;;;:::i;:::-;;:::i;12838:36::-;;;;;;;;;;;;;;;;12337:50;;;;;;;;;;-1:-1:-1;12337:50:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;20299:748;;;;;;;;;;-1:-1:-1;20299:748:0;;;;;:::i;:::-;;:::i;28534:697::-;;;;;;;;;;-1:-1:-1;28534:697:0;;;;;:::i;:::-;;:::i;16139:119::-;;;;;;;;;;-1:-1:-1;16139:119:0;;;;;:::i;:::-;-1:-1:-1;;;;;16232:18:0;16205:7;16232:18;;;:9;:18;;;;;;;16139:119;3219:230;;;;;;;;;;;;;:::i;11754:92::-;;;;;;;;;;-1:-1:-1;11754:92:0;;;;;;;-1:-1:-1;;;;;11754:92:0;;;13156:61;;;;;;;;;;;;;;;;13232:60;;;;;;;;;;;;;;;;12960:33;;;;;;;;;;;;;;;;17434:129;;;;;;;;;;-1:-1:-1;17434:129:0;;;;;:::i;:::-;;:::i;13570:41::-;;;;;;;;;;-1:-1:-1;13570:41:0;;;;-1:-1:-1;;;13570:41:0;;;;;;12752:36;;;;;;;;;;;;;;;;12563:48;;;;;;;;;;-1:-1:-1;12563:48:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;2994:79;;;;;;;;;;-1:-1:-1;3032:7:0;3059:6;-1:-1:-1;;;;;3059:6:0;2994:79;;15845:87;;;;;;;;;;;;;:::i;11952:32::-;;;;;;;;;;-1:-1:-1;11952:32:0;;;;-1:-1:-1;;;;;11952:32:0;;;16643:269;;;;;;;;;;-1:-1:-1;16643:269:0;;;;;:::i;:::-;;:::i;19730:125::-;;;;;;;;;;-1:-1:-1;19730:125:0;;;;;:::i;:::-;;:::i;21973:167::-;;;;;;;;;;-1:-1:-1;21973:167:0;;;;;:::i;:::-;;:::i;15640:106::-;;;;;;;;;;-1:-1:-1;15640:106:0;;;;;:::i;:::-;;:::i;19551:171::-;;;;;;;;;;-1:-1:-1;19551:171:0;;;;;:::i;:::-;;:::i;12662:35::-;;;;;;;;;;;;;;;;13358:26;;;;;;;;;;-1:-1:-1;13358:26:0;;;;-1:-1:-1;;;;;13358:26:0;;;12795:36;;;;;;;;;;;;;;;;12504:52;;;;;;;;;;-1:-1:-1;12504:52:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;19188:134;;;;;;;;;;-1:-1:-1;19188:134:0;;;;;:::i;:::-;;:::i;13068:70::-;;;;;;;;;;;;;;;;13474:45;;;;;;;;;;-1:-1:-1;13474:45:0;;;;-1:-1:-1;;;13474:45:0;;;;;;12620:35;;;;;;;;;;;;;;;;16266:143;;;;;;;;;;-1:-1:-1;16266:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;16374:18:0;;;16347:7;16374:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;16266:143;24709:154;;;;;;;;;;;;;:::i;18111:235::-;;;;;;;;;;-1:-1:-1;18111:235:0;;;;;:::i;:::-;;:::i;17996:107::-;;;;;;;;;;-1:-1:-1;17996:107:0;;;;;:::i;:::-;;:::i;17571:135::-;;;;;;;;;;-1:-1:-1;17571:135:0;;;;;:::i;:::-;;:::i;12921:32::-;;;;;;;;;;;;;;;;18475:102;;;;;;;;;;-1:-1:-1;18475:102:0;;;;;:::i;:::-;;:::i;3457:244::-;;;;;;;;;;-1:-1:-1;3457:244:0;;;;;:::i;:::-;;:::i;12883:29::-;;;;;;;;;;;;;;;;17714:127;;;;;;;;;;-1:-1:-1;17714:127:0;;;;;:::i;:::-;;:::i;13528:35::-;;;;;;;;;;-1:-1:-1;13528:35:0;;;;-1:-1:-1;;;13528:35:0;;;;;;11853:92;;;;;;;;;;-1:-1:-1;11853:92:0;;;;-1:-1:-1;;;;;11853:92:0;;;19330:213;;;;;;;;;;-1:-1:-1;19330:213:0;;;;;:::i;:::-;;:::i;15754:83::-;15791:13;15824:5;15817:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15754:83;:::o;21459:406::-;3128:6;;-1:-1:-1;;;;;3128:6:0;300:10;3128:22;3120:67;;;;-1:-1:-1;;;3120:67:0;;;;;;;:::i;:::-;;;;;;;;;21561:17:::1;:30:::0;;;21602:17:::1;:30:::0;;;21643:17:::1;:30:::0;;;21705:63:::1;21663:10:::0;21705:40:::1;21581:10:::0;21622;21705:21:::1;:40::i;:::-;:44:::0;::::1;:63::i;:::-;21684:18;:84:::0;21810:8:::1;::::0;:10:::1;::::0;21819:1:::1;::::0;21810:10:::1;:::i;:::-;21787:18;;:34;;21779:78;;;::::0;-1:-1:-1;;;21779:78:0;;9021:2:1;21779:78:0::1;::::0;::::1;9003:21:1::0;9060:2;9040:18;;;9033:30;9099:33;9079:18;;;9072:61;9150:18;;21779:78:0::1;8993:181:1::0;21779:78:0::1;21459:406:::0;;;:::o;16920:161::-;16995:4;17012:39;300:10;17035:7;17044:6;17012:8;:39::i;:::-;-1:-1:-1;17069:4:0;16920:161;;;;;:::o;21055:396::-;3128:6;;-1:-1:-1;;;;;3128:6:0;300:10;3128:22;3120:67;;;;-1:-1:-1;;;3120:67:0;;;;;;;:::i;:::-;21156:16:::1;:29:::0;;;21196:16:::1;:29:::0;;;21236:16:::1;:29:::0;;;21296:60:::1;21255:10:::0;21296:38:::1;21175:10:::0;21215;21296:20:::1;:38::i;:60::-;21276:17;:80:::0;21397:8:::1;::::0;:10:::1;::::0;21406:1:::1;::::0;21397:10:::1;:::i;:::-;21375:17;;:33;;21367:76;;;::::0;-1:-1:-1;;;21367:76:0;;15393:2:1;21367:76:0::1;::::0;::::1;15375:21:1::0;15432:2;15412:18;;;15405:30;15471:32;15451:18;;;15444:60;15521:18;;21367:76:0::1;15365:180:1::0;17853:135:0;3128:6;;-1:-1:-1;;;;;3128:6:0;300:10;3128:22;3120:67;;;;-1:-1:-1;;;3120:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;17944:27:0;;;::::1;;::::0;;;:19:::1;:27;::::0;;;;:36;;-1:-1:-1;;17944:36:0::1;::::0;::::1;;::::0;;;::::1;::::0;;17853:135::o;22148:313::-;22246:4;22263:36;22273:6;22281:9;22292:6;22263:9;:36::i;:::-;-1:-1:-1;22310:121:0;22319:6;300:10;22341:89;22379:6;22341:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;22341:19:0;;;;;;:11;:19;;;;;;;;300:10;22341:33;;;;;;;;;;:37;:89::i;:::-;22310:8;:121::i;:::-;-1:-1:-1;22449:4:0;22148:313;;;;;;:::o;18354:113::-;3128:6;;-1:-1:-1;;;;;3128:6:0;300:10;3128:22;3120:67;;;;-1:-1:-1;;;3120:67:0;;;;;;;:::i;:::-;18432:16:::1;:27:::0;;;::::1;;-1:-1:-1::0;;;18432:27:0::1;-1:-1:-1::0;;;;18432:27:0;;::::1;::::0;;;::::1;::::0;;18354:113::o;24463:238::-;3128:6;;-1:-1:-1;;;;;3128:6:0;300:10;3128:22;3120:67;;;;-1:-1:-1;;;3120:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24557:23:0;::::1;24575:4;24557:23;;24549:90;;;::::0;-1:-1:-1;;;24549:90:0;;11398:2:1;24549:90:0::1;::::0;::::1;11380:21:1::0;11437:2;11417:18;;;11410:30;11476:34;11456:18;;;11449:62;-1:-1:-1;;;11527:18:1;;;11520:52;11589:19;;24549:90:0::1;11370:244:1::0;24549:90:0::1;24650:43;::::0;-1:-1:-1;;;24650:43:0;;24674:10:::1;24650:43;::::0;::::1;6307:51:1::0;6374:18;;;6367:34;;;-1:-1:-1;;;;;24650:23:0;::::1;::::0;::::1;::::0;6280:18:1;;24650:43:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;19867:156::-:0;-1:-1:-1;;;;;20002:11:0;16232:18;19920:7;16232:18;;;:9;:18;;;;;;19947:68;;:40;19964:22;19974:11;-1:-1:-1;;;;;16232:18:0;16205:7;16232:18;;;:9;:18;;;;;;;16139:119;19964:22;19947:12;;;:16;:40::i;:::-;:44;;:68::i;:::-;19940:75;;19867:156;:::o;16417:218::-;300:10;16505:4;16554:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;16554:34:0;;;;;;;;;;16505:4;;16522:83;;16545:7;;16554:50;;16593:10;16554:38;:50::i;18585:374::-;3128:6;;-1:-1:-1;;;;;3128:6:0;300:10;3128:22;3120:67;;;;-1:-1:-1;;;3120:67:0;;;;;;;:::i;:::-;18688:31:::1;18712:6;18688:19;18705:1;18688:12;;:16;;:19;;;;:::i;:::-;:23:::0;::::1;:31::i;:::-;18676:8;:43;;18668:116;;;::::0;-1:-1:-1;;;18668:116:0;;13441:2:1;18668:116:0::1;::::0;::::1;13423:21:1::0;13480:2;13460:18;;;13453:30;13519:34;13499:18;;;13492:62;13590:30;13570:18;;;13563:58;13638:19;;18668:116:0::1;13413:250:1::0;18668:116:0::1;18816:28;18840:3;18816:19;18833:1;18816:12;;:16;;:19;;;;:::i;:28::-;18804:8;:40;;18796:110;;;::::0;-1:-1:-1;;;18796:110:0;;9381:2:1;18796:110:0::1;::::0;::::1;9363:21:1::0;9420:2;9400:18;;;9393:30;9459:34;9439:18;;;9432:62;9530:27;9510:18;;;9503:55;9575:19;;18796:110:0::1;9353:247:1::0;18796:110:0::1;18917:23;:34:::0;18585:374::o;18967:213::-;3128:6;;-1:-1:-1;;;;;3128:6:0;300:10;3128:22;3120:67;;;;-1:-1:-1;;;3120:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19062:24:0;::::1;19054:70;;;;-1:-1:-1::0;;;19054:70:0::1;;;;;;;:::i;:::-;19135:15;:37:::0;;-1:-1:-1;;;;;19135:37:0;;::::1;;;-1:-1:-1::0;;;;;;19135:37:0;;::::1;::::0;;;::::1;::::0;;18967:213::o;20299:748::-;20379:22;3128:6;;-1:-1:-1;;;;;3128:6:0;300:10;3128:22;3120:67;;;;-1:-1:-1;;;3120:67:0;;;;;;;:::i;:::-;20416:35:::1;20473:16;20416:74;;20539:16;-1:-1:-1::0;;;;;20539:24:0::1;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;20521:53:0::1;;20583:4;20590:16;-1:-1:-1::0;;;;;20590:21:0::1;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20521:93;::::0;-1:-1:-1;;;;;;20521:93:0::1;::::0;;;;;;-1:-1:-1;;;;;6054:15:1;;;20521:93:0::1;::::0;::::1;6036:34:1::0;6106:15;;6086:18;;;6079:43;5971:18;;20521:93:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20504:110:::0;-1:-1:-1;;;;;;20630:28:0;::::1;20627:225;;20744:16;-1:-1:-1::0;;;;;20744:24:0::1;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;20726:74:0::1;;20809:4;20816:16;-1:-1:-1::0;;;;;20816:21:0::1;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20726:114;::::0;-1:-1:-1;;;;;;20726:114:0::1;::::0;;;;;;-1:-1:-1;;;;;6054:15:1;;;20726:114:0::1;::::0;::::1;6036:34:1::0;6106:15;;6086:18;;;6079:43;5971:18;;20726:114:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20709:131;;20627:225;20864:11;:28:::0;;-1:-1:-1;;;;;20864:28:0;;::::1;-1:-1:-1::0;;;;;;20864:28:0;;::::1;::::0;::::1;::::0;;;20926:15:::1;:34:::0;;;;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;;20864:11:::1;20998:34:::0;;;:12:::1;:34;::::0;;;;:41;;-1:-1:-1;;20998:41:0::1;20864:28:::0;20998:41:::1;::::0;;20878:14;20299:748;-1:-1:-1;20299:748:0:o;28534:697::-;3128:6;;-1:-1:-1;;;;;3128:6:0;300:10;3128:22;3120:67;;;;-1:-1:-1;;;3120:67:0;;;;;;;:::i;:::-;28652:10:::1;28681:33:::0;;::::1;28673:67;;;::::0;-1:-1:-1;;;28673:67:0;;13870:2:1;28673:67:0::1;::::0;::::1;13852:21:1::0;13909:2;13889:18;;;13882:30;-1:-1:-1;;;13928:18:1;;;13921:52;13990:18;;28673:67:0::1;13842:172:1::0;28673:67:0::1;28751:15;::::0;28777:92:::1;28793:18:::0;;::::1;28777:92;;;28847:7;;28855:1;28847:10;;;;;-1:-1:-1::0;;;28847:10:0::1;;;;;;;;;;;;;;;28833:24;;;;;:::i;:::-;::::0;-1:-1:-1;28813:3:0;::::1;::::0;::::1;:::i;:::-;;;;28777:92;;;;28909:10;28887:18;28897:7;-1:-1:-1::0;;;;;16232:18:0;16205:7;16232:18;;;:9;:18;;;;;;;16139:119;28887:18:::1;:32;;28879:71;;;::::0;-1:-1:-1;;;28879:71:0;;8665:2:1;28879:71:0::1;::::0;::::1;8647:21:1::0;8704:2;8684:18;;;8677:30;8743:29;8723:18;;;8716:57;8790:18;;28879:71:0::1;8637:177:1::0;28879:71:0::1;-1:-1:-1::0;;;;;28982:18:0;::::1;;::::0;;;:9:::1;:18;::::0;;;;;:34:::1;::::0;29005:10;28982:22:::1;:34::i;:::-;-1:-1:-1::0;;;;;28961:18:0;::::1;;::::0;;;:9:::1;:18;::::0;;;;:55;;;;29028:194:::1;29044:19:::0;;::::1;29028:194;;;29110:38;29137:7;;29145:1;29137:10;;;;;-1:-1:-1::0;;;29137:10:0::1;;;;;;;;;;;;;;;29110:9;:22;29120:8;;29129:1;29120:11;;;;;-1:-1:-1::0;;;29120:11:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;29110:22:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;29110:22:0;;;:26:::1;:38::i;:::-;29085:9;:22;29095:8;;29104:1;29095:11;;;;;-1:-1:-1::0;;;29095:11:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;29085:22:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;29085:22:0;:63;29186:8;;29195:1;29186:11;;::::1;;;-1:-1:-1::0;;;29186:11:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;29168:42:0::1;29177:7;-1:-1:-1::0;;;;;29168:42:0::1;-1:-1:-1::0;;;;;;;;;;;29199:7:0::1;;29207:1;29199:10;;;;;-1:-1:-1::0;;;29199:10:0::1;;;;;;;;;;;;;;;29168:42;;;;15696:25:1::0;;15684:2;15669:18;;15651:76;29168:42:0::1;;;;;;;;29065:3:::0;::::1;::::0;::::1;:::i;:::-;;;;29028:194;;;;3198:1;;28534:697:::0;;;;:::o;3219:230::-;3128:6;;-1:-1:-1;;;;;3128:6:0;300:10;3128:22;3120:67;;;;-1:-1:-1;;;3120:67:0;;;;;;;:::i;:::-;3310:6:::1;::::0;;3289:81:::1;::::0;3326:42:::1;::::0;-1:-1:-1;;;;;3310:6:0;;::::1;::::0;3289:81:::1;::::0;::::1;3381:6;:60:::0;;-1:-1:-1;;;;;;3381:60:0::1;3398:42;3381:60;::::0;;3219:230::o;17434:129::-;3128:6;;-1:-1:-1;;;;;3128:6:0;300:10;3128:22;3120:67;;;;-1:-1:-1;;;3120:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;17523:21:0;;;::::1;;::::0;;;:12:::1;:21;::::0;;;;:32;;-1:-1:-1;;17523:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;17434:129::o;15845:87::-;15884:13;15917:7;15910:14;;;;;:::i;16643:269::-;16736:4;16753:129;300:10;16776:7;16785:96;16824:15;16785:96;;;;;;;;;;;;;;;;;300:10;16785:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;16785:34:0;;;;;;;;;;;;:38;:96::i;19730:125::-;3128:6;;-1:-1:-1;;;;;3128:6:0;300:10;3128:22;3120:67;;;;-1:-1:-1;;;3120:67:0;;;;;;;:::i;:::-;19811:25:::1;:36:::0;;;::::1;;-1:-1:-1::0;;;19811:36:0::1;-1:-1:-1::0;;;;19811:36:0;;::::1;::::0;;;::::1;::::0;;19730:125::o;21973:167::-;22051:4;22068:42;300:10;22092:9;22103:6;22068:9;:42::i;15640:106::-;3128:6;;-1:-1:-1;;;;;3128:6:0;300:10;3128:22;3120:67;;;;-1:-1:-1;;;3120:67:0;;;;;;;:::i;:::-;15711:14:::1;:25:::0;;-1:-1:-1;;15711:25:0::1;::::0;::::1;;::::0;;;::::1;::::0;;15640:106::o;19551:171::-;3128:6;;-1:-1:-1;;;;;3128:6:0;300:10;3128:22;3120:67;;;;-1:-1:-1;;;3120:67:0;;;;;;;:::i;:::-;19628:21:::1;:32:::0;;;::::1;;-1:-1:-1::0;;;19628:32:0::1;-1:-1:-1::0;;;;19628:32:0;;::::1;;::::0;;19676:38:::1;::::0;::::1;::::0;::::1;::::0;19652:8;7189:14:1;7182:22;7164:41;;7152:2;7137:18;;7119:92;19676:38:0::1;;;;;;;;19551:171:::0;:::o;19188:134::-;3128:6;;-1:-1:-1;;;;;3128:6:0;300:10;3128:22;3120:67;;;;-1:-1:-1;;;3120:67:0;;;;;;;:::i;:::-;19275:17:::1;:39:::0;;-1:-1:-1;;;;;;19275:39:0::1;-1:-1:-1::0;;;;;19275:39:0;;;::::1;::::0;;;::::1;::::0;;19188:134::o;24709:154::-;3128:6;;-1:-1:-1;;;;;3128:6:0;300:10;3128:22;3120:67;;;;-1:-1:-1;;;3120:67:0;;;;;;;:::i;:::-;24775:58:::1;::::0;24763:7:::1;::::0;24783:10:::1;::::0;24807:21:::1;::::0;24763:7;24775:58;24763:7;24775:58;24807:21;24783:10;24775:58:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24762:71;;;24852:2;24844:11;;;::::0;::::1;;3198:1;24709:154::o:0;18111:235::-;3128:6;;-1:-1:-1;;;;;3128:6:0;300:10;3128:22;3120:67;;;;-1:-1:-1;;;3120:67:0;;;;;;;:::i;:::-;18211:29:::1;18235:4;18211:19;18228:1;18211:12;;:16;;:19;;;;:::i;:29::-;18196:11;:44;;18188:113;;;::::0;-1:-1:-1;;;18188:113:0;;10617:2:1;18188:113:0::1;::::0;::::1;10599:21:1::0;10656:2;10636:18;;;10629:30;10695:34;10675:18;;;10668:62;10766:26;10746:18;;;10739:54;10810:19;;18188:113:0::1;10589:246:1::0;18188:113:0::1;18312:12;:26:::0;18111:235::o;17996:107::-;3128:6;;-1:-1:-1;;;;;3128:6:0;300:10;3128:22;3120:67;;;;-1:-1:-1;;;3120:67:0;;;;;;;:::i;:::-;18063:22:::1;:32:::0;;;::::1;;-1:-1:-1::0;;;18063:32:0::1;-1:-1:-1::0;;;;18063:32:0;;::::1;::::0;;;::::1;::::0;;17996:107::o;17571:135::-;3128:6;;-1:-1:-1;;;;;3128:6:0;300:10;3128:22;3120:67;;;;-1:-1:-1;;;3120:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;17661:26:0;;;::::1;;::::0;;;:17:::1;:26;::::0;;;;:37;;-1:-1:-1;;17661:37:0::1;::::0;::::1;;::::0;;;::::1;::::0;;17571:135::o;18475:102::-;3128:6;;-1:-1:-1;;;;;3128:6:0;300:10;3128:22;3120:67;;;;-1:-1:-1;;;3120:67:0;;;;;;;:::i;:::-;18547:10:::1;:22:::0;18475:102::o;3457:244::-;3128:6;;-1:-1:-1;;;;;3128:6:0;300:10;3128:22;3120:67;;;;-1:-1:-1;;;3120:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;3546:22:0;::::1;3538:73;;;::::0;-1:-1:-1;;;3538:73:0;;9807:2:1;3538:73:0::1;::::0;::::1;9789:21:1::0;9846:2;9826:18;;;9819:30;9885:34;9865:18;;;9858:62;-1:-1:-1;;;9936:18:1;;;9929:36;9982:19;;3538:73:0::1;9779:228:1::0;3538:73:0::1;3648:6;::::0;;3627:38:::1;::::0;-1:-1:-1;;;;;3627:38:0;;::::1;::::0;3648:6;::::1;::::0;3627:38:::1;::::0;::::1;3676:6;:17:::0;;-1:-1:-1;;;;;;3676:17:0::1;-1:-1:-1::0;;;;;3676:17:0;;;::::1;::::0;;;::::1;::::0;;3457:244::o;17714:127::-;3128:6;;-1:-1:-1;;;;;3128:6:0;300:10;3128:22;3120:67;;;;-1:-1:-1;;;3120:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;17801:23:0;;;::::1;;::::0;;;:15:::1;:23;::::0;;;;:32;;-1:-1:-1;;17801:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;17714:127::o;19330:213::-;3128:6;;-1:-1:-1;;;;;3128:6:0;300:10;3128:22;3120:67;;;;-1:-1:-1;;;3120:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19425:24:0;::::1;19417:70;;;;-1:-1:-1::0;;;19417:70:0::1;;;;;;;:::i;:::-;19498:15;:37:::0;;-1:-1:-1;;;;;;19498:37:0::1;-1:-1:-1::0;;;;;19498:37:0;;;::::1;::::0;;;::::1;::::0;;19330:213::o;1679:250::-;1737:7;1761:6;1757:47;;-1:-1:-1;1791:1:0;1784:8;;1757:47;1816:9;1828:5;1832:1;1828;:5;:::i;:::-;1816:17;-1:-1:-1;1861:1:0;1852:5;1856:1;1816:17;1852:5;:::i;:::-;:10;1844:56;;;;-1:-1:-1;;;1844:56:0;;13039:2:1;1844:56:0;;;13021:21:1;13078:2;13058:18;;;13051:30;13117:34;13097:18;;;13090:62;-1:-1:-1;;;13168:18:1;;;13161:31;13209:19;;1844:56:0;13011:223:1;1937:132:0;1995:7;2022:39;2026:1;2029;2022:39;;;;;;;;;;;;;;;;;:3;:39::i;1146:181::-;1204:7;;1236:5;1240:1;1236;:5;:::i;:::-;1224:17;;1265:1;1260;:6;;1252:46;;;;-1:-1:-1;;;1252:46:0;;11042:2:1;1252:46:0;;;11024:21:1;11081:2;11061:18;;;11054:30;11120:29;11100:18;;;11093:57;11167:18;;1252:46:0;11014:177:1;17089:337:0;-1:-1:-1;;;;;17182:19:0;;17174:68;;;;-1:-1:-1;;;17174:68:0;;14988:2:1;17174:68:0;;;14970:21:1;15027:2;15007:18;;;15000:30;15066:34;15046:18;;;15039:62;-1:-1:-1;;;15117:18:1;;;15110:34;15161:19;;17174:68:0;14960:226:1;17174:68:0;-1:-1:-1;;;;;17261:21:0;;17253:68;;;;-1:-1:-1;;;17253:68:0;;10214:2:1;17253:68:0;;;10196:21:1;10253:2;10233:18;;;10226:30;10292:34;10272:18;;;10265:62;-1:-1:-1;;;10343:18:1;;;10336:32;10385:19;;17253:68:0;10186:224:1;17253:68:0;-1:-1:-1;;;;;17334:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;17386:32;;15696:25:1;;;17386:32:0;;15669:18:1;17386:32:0;;;;;;;17089:337;;;:::o;22469:1986::-;22556:4;-1:-1:-1;;;;;22583:20:0;;22575:70;;;;-1:-1:-1;;;22575:70:0;;14582:2:1;22575:70:0;;;14564:21:1;14621:2;14601:18;;;14594:30;14660:34;14640:18;;;14633:62;-1:-1:-1;;;14711:18:1;;;14704:35;14756:19;;22575:70:0;14554:227:1;22575:70:0;-1:-1:-1;;;;;22664:23:0;;22656:71;;;;-1:-1:-1;;;22656:71:0;;8261:2:1;22656:71:0;;;8243:21:1;8300:2;8280:18;;;8273:30;8339:34;8319:18;;;8312:62;-1:-1:-1;;;8390:18:1;;;8383:33;8433:19;;22656:71:0;8233:225:1;22656:71:0;22939:16;;-1:-1:-1;;;22939:16:0;;;;22936:1502;;;22989:41;23004:6;23012:9;23023:6;22989:14;:41::i;:::-;22982:48;;;;22936:1502;-1:-1:-1;;;;;23088:23:0;;;;;;:15;:23;;;;;;;;23087:24;:55;;;;-1:-1:-1;;;;;;23116:26:0;;;;;;:15;:26;;;;;;;;23115:27;23087:55;:81;;;;-1:-1:-1;23146:22:0;;-1:-1:-1;;;23146:22:0;;;;23087:81;23084:196;;;23207:12;;23197:6;:22;;23189:75;;;;-1:-1:-1;;;23189:75:0;;12630:2:1;23189:75:0;;;12612:21:1;12669:2;12649:18;;;12642:30;12708:34;12688:18;;;12681:62;-1:-1:-1;;;12759:18:1;;;12752:38;12807:19;;23189:75:0;12602:230:1;23189:75:0;23345:4;23296:28;16232:18;;;:9;:18;;;;;;23421:23;;23397:47;;;;;;;23477:44;;-1:-1:-1;23505:16:0;;-1:-1:-1;;;23505:16:0;;;;23504:17;23477:44;:69;;;;-1:-1:-1;;;;;;23526:20:0;;;;;;:12;:20;;;;;;;;23525:21;23477:69;:94;;;;-1:-1:-1;23550:21:0;;-1:-1:-1;;;23550:21:0;;;;23477:94;23473:305;;;23609:25;;-1:-1:-1;;;23609:25:0;;;;23606:97;;;23680:23;;23657:46;;23606:97;23722:36;23737:20;23722:14;:36::i;:::-;23814:53;;;;;;;;;;;-1:-1:-1;;;23814:53:0;;;;;;;;-1:-1:-1;;;;;23814:17:0;;-1:-1:-1;23814:17:0;;;:9;:17;;;;;;;;:53;;23836:6;;23814:21;:53::i;:::-;-1:-1:-1;;;;;23794:17:0;;;;;;:9;:17;;;;;;;;:73;;;;23907:17;:25;;;;;;;;;:57;;-1:-1:-1;;;;;;23936:28:0;;;;;;:17;:28;;;;;;;;23907:57;23906:148;;24020:34;24028:6;24036:9;24047:6;24020:7;:34::i;:::-;23906:148;;;24011:6;23906:148;24074:16;;23884:170;;-1:-1:-1;;;;24074:16:0;;;;:51;;;;-1:-1:-1;;;;;;24095:30:0;;;;;;:19;:30;;;;;;;;24094:31;24074:51;24071:191;;;24195:10;;24154:37;24179:11;24154:20;24164:9;-1:-1:-1;;;;;16232:18:0;16205:7;16232:18;;;:9;:18;;;;;;;16139:119;24154:37;:51;;24146:100;;;;-1:-1:-1;;;24146:100:0;;11821:2:1;24146:100:0;;;11803:21:1;11860:2;11840:18;;;11833:30;11899:34;11879:18;;;11872:62;-1:-1:-1;;;11950:18:1;;;11943:35;11995:19;;24146:100:0;11793:227:1;24146:100:0;-1:-1:-1;;;;;24301:20:0;;;;;;:9;:20;;;;;;:37;;24326:11;24301:24;:37::i;:::-;-1:-1:-1;;;;;24278:20:0;;;;;;;:9;:20;;;;;;;:60;;;;24360:40;;;;;;-1:-1:-1;;;;;;;;;;;24360:40:0;;;24388:11;15696:25:1;;15684:2;15669:18;;15651:76;24360:40:0;;;;;;;;24422:4;24415:11;;;;;;;1479:192;1565:7;1601:12;1593:6;;;;1585:29;;;;-1:-1:-1;;;1585:29:0;;;;;;;;:::i;:::-;-1:-1:-1;1625:9:0;1637:5;1641:1;1637;:5;:::i;:::-;1625:17;1479:192;-1:-1:-1;;;;;1479:192:0:o;1335:136::-;1393:7;1420:43;1424:1;1427;1420:43;;;;;;;;;;;;;;;;;:3;:43::i;2077:278::-;2163:7;2198:12;2191:5;2183:28;;;;-1:-1:-1;;;2183:28:0;;;;;;;;:::i;:::-;-1:-1:-1;2222:9:0;2234:5;2238:1;2234;:5;:::i;24871:330::-;25001:53;;;;;;;;;;;-1:-1:-1;;;25001:53:0;;;;;;;;-1:-1:-1;;;;;25001:17:0;;24964:4;25001:17;;;:9;:17;;;;;;;:53;;25023:6;;25001:21;:53::i;:::-;-1:-1:-1;;;;;24981:17:0;;;;;;;:9;:17;;;;;;:73;;;;25088:20;;;;;;;:32;;25113:6;25088:24;:32::i;:::-;-1:-1:-1;;;;;25065:20:0;;;;;;;:9;:20;;;;;;;:55;;;;25136:35;;;;;;-1:-1:-1;;;;;;;;;;;25136:35:0;;;25164:6;15696:25:1;;15684:2;15669:18;;15651:76;25136:35:0;;;;;;;;-1:-1:-1;25189:4:0;24871:330;;;;;:::o;25209:1449::-;14036:16;:23;;-1:-1:-1;;;;14036:23:0;-1:-1:-1;;;14036:23:0;;;25327:18:::1;::::0;14036:16;25305:17;14036:23;;25305:41:::1;::::0;:17;:21:::1;:41::i;:::-;25283:63;;25359:22;25384:39;25405:17;;25384:16;;:20;;:39;;;;:::i;:::-;25359:64;;25434:22;25459:39;25480:17;;25459:16;;:20;;:39;;;;:::i;:::-;25434:64:::0;-1:-1:-1;25597:18:0::1;25618:51;25667:1;25618:44;25650:11:::0;25618:44;:7;25630:14;25618:11:::1;:27::i;:51::-;25597:72:::0;-1:-1:-1;25680:20:0::1;25703:23;:7:::0;25597:72;25703:11:::1;:23::i;:::-;25680:46:::0;-1:-1:-1;25765:21:0::1;25797:30;25680:46:::0;25797:16:::1;:30::i;:::-;25838:23;25865:41;:21;25891:14:::0;25865:25:::1;:41::i;:::-;25838:68:::0;-1:-1:-1;25919:19:0::1;25941:38;25957:21;:14:::0;25976:1:::1;25957:18;:21::i;:::-;25941:11:::0;;:15:::1;:38::i;:::-;25919:60:::0;-1:-1:-1;25992:26:0::1;26021:59;26078:1;26021:52;25919:60:::0;26021:52;:15;26041:14;26021:19:::1;:35::i;:59::-;25992:88:::0;-1:-1:-1;26091:26:0::1;26120:52;26160:11:::0;26120:35:::1;:15:::0;26140:14;26120:19:::1;:35::i;:52::-;26091:81:::0;-1:-1:-1;26183:26:0::1;26212:63;26091:81:::0;26212:39:::1;:15:::0;26232:18;26212:19:::1;:39::i;:63::-;26183:92:::0;-1:-1:-1;26291:22:0;;26288:107:::1;;26338:15;::::0;26330:53:::1;::::0;26338:15:::1;::::0;;::::1;-1:-1:-1::0;;;;;26338:15:0::1;::::0;26330:53:::1;::::0;::::1;;::::0;;;::::1;::::0;;;;26338:15;26330:53;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;26288:107;26410:22:::0;;26407:107:::1;;26457:15;::::0;26449:53:::1;::::0;-1:-1:-1;;;;;26457:15:0;;::::1;::::0;26449:53;::::1;;;::::0;26483:18;;26457:15:::1;26449:53:::0;26457:15;26449:53;26483:18;26457:15;26449:53;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;26407:107;26559:1;26538:18;:22;:40;;;;;26577:1;26564:10;:14;26538:40;26535:116;;;26595:44;26608:10;26620:18;26595:12;:44::i;:::-;-1:-1:-1::0;;14082:16:0;:24;;-1:-1:-1;;;;14082:24:0;;;-1:-1:-1;;;;;;;;;;25209:1449:0:o;27875:622::-;-1:-1:-1;;;;;28036:20:0;;27961:7;28036:20;;;:12;:20;;;;;;27961:7;;28036:20;;28033:223;;;28085:38;28119:3;28085:29;28096:17;;28085:6;:10;;:29;;;;:::i;:38::-;28073:50;;28033:223;;;-1:-1:-1;;;;;28153:23:0;;;;;;:12;:23;;;;;;;;28150:106;;;28205:39;28240:3;28205:30;28216:18;;28205:6;:10;;:30;;;;:::i;:39::-;28193:51;;28150:106;28279:13;;28276:173;;28354:4;28336:24;;;;:9;:24;;;;;;:39;;28365:9;28336:28;:39::i;:::-;28327:4;28309:24;;;;:9;:24;;;;;;;:66;;;;28395:42;;-1:-1:-1;;;;;28395:42:0;;;-1:-1:-1;;;;;;;;;;;28395:42:0;;;28427:9;15696:25:1;;15684:2;15669:18;;15651:76;28395:42:0;;;;;;;;28276:173;28468:21;:6;28479:9;28468:10;:21::i;26670:666::-;26820:16;;;26834:1;26820:16;;;;;;;;26796:21;;26820:16;;;;;;;;;;-1:-1:-1;26820:16:0;26796:40;;26865:4;26847;26852:1;26847:7;;;;;;-1:-1:-1;;;26847:7:0;;;;;;;;;-1:-1:-1;;;;;26847:23:0;;;:7;;;;;;;;;;:23;;;;26891:15;;:22;;;-1:-1:-1;;;26891:22:0;;;;:15;;;;;:20;;:22;;;;;26847:7;;26891:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26881:4;26886:1;26881:7;;;;;;-1:-1:-1;;;26881:7:0;;;;;;;;;-1:-1:-1;;;;;26881:32:0;;;:7;;;;;;;;;:32;26958:15;;26926:62;;26943:4;;26958:15;26976:11;26926:8;:62::i;:::-;27027:15;;:240;;-1:-1:-1;;;27027:240:0;;-1:-1:-1;;;;;27027:15:0;;;;:66;;:240;;27108:11;;27027:15;;27178:4;;27205;;27241:15;;27027:240;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27293:35;27310:11;27323:4;27293:35;;;;;;;:::i;:::-;;;;;;;;26670:666;;:::o;27344:523::-;27524:15;;27492:62;;27509:4;;-1:-1:-1;;;;;27524:15:0;27542:11;27492:8;:62::i;:::-;27597:15;;27801:17;;27597:262;;-1:-1:-1;;;27597:262:0;;27669:4;27597:262;;;6753:34:1;6803:18;;;6796:34;;;27597:15:0;6846:18:1;;;6839:34;;;6889:18;;;6882:34;-1:-1:-1;;;;;27801:17:0;;;6932:19:1;;;6925:44;27833:15:0;6985:19:1;;;6978:35;27597:15:0;;;:31;;27636:9;;6687:19:1;;27597:262:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;27344:523;;:::o;14:395:1:-;77:8;87:6;141:3;134:4;126:6;122:17;118:27;108:2;;166:8;156;149:26;108:2;-1:-1:-1;196:20:1;;239:18;228:30;;225:2;;;278:8;268;261:26;225:2;322:4;314:6;310:17;298:29;;382:3;375:4;365:6;362:1;358:14;350:6;346:27;342:38;339:47;336:2;;;399:1;396;389:12;336:2;98:311;;;;;:::o;414:257::-;473:6;526:2;514:9;505:7;501:23;497:32;494:2;;;547:6;539;532:22;494:2;591:9;578:23;610:31;635:5;610:31;:::i;676:261::-;746:6;799:2;787:9;778:7;774:23;770:32;767:2;;;820:6;812;805:22;767:2;857:9;851:16;876:31;901:5;876:31;:::i;942:398::-;1010:6;1018;1071:2;1059:9;1050:7;1046:23;1042:32;1039:2;;;1092:6;1084;1077:22;1039:2;1136:9;1123:23;1155:31;1180:5;1155:31;:::i;:::-;1205:5;-1:-1:-1;1262:2:1;1247:18;;1234:32;1275:33;1234:32;1275:33;:::i;:::-;1327:7;1317:17;;;1029:311;;;;;:::o;1345:466::-;1422:6;1430;1438;1491:2;1479:9;1470:7;1466:23;1462:32;1459:2;;;1512:6;1504;1497:22;1459:2;1556:9;1543:23;1575:31;1600:5;1575:31;:::i;:::-;1625:5;-1:-1:-1;1682:2:1;1667:18;;1654:32;1695:33;1654:32;1695:33;:::i;:::-;1449:362;;1747:7;;-1:-1:-1;;;1801:2:1;1786:18;;;;1773:32;;1449:362::o;1816:392::-;1881:6;1889;1942:2;1930:9;1921:7;1917:23;1913:32;1910:2;;;1963:6;1955;1948:22;1910:2;2007:9;1994:23;2026:31;2051:5;2026:31;:::i;:::-;2076:5;-1:-1:-1;2133:2:1;2118:18;;2105:32;2146:30;2105:32;2146:30;:::i;2213:325::-;2281:6;2289;2342:2;2330:9;2321:7;2317:23;2313:32;2310:2;;;2363:6;2355;2348:22;2310:2;2407:9;2394:23;2426:31;2451:5;2426:31;:::i;:::-;2476:5;2528:2;2513:18;;;;2500:32;;-1:-1:-1;;;2300:238:1:o;2543:803::-;2665:6;2673;2681;2689;2742:2;2730:9;2721:7;2717:23;2713:32;2710:2;;;2763:6;2755;2748:22;2710:2;2808:9;2795:23;2837:18;2878:2;2870:6;2867:14;2864:2;;;2899:6;2891;2884:22;2864:2;2943:70;3005:7;2996:6;2985:9;2981:22;2943:70;:::i;:::-;3032:8;;-1:-1:-1;2917:96:1;-1:-1:-1;3120:2:1;3105:18;;3092:32;;-1:-1:-1;3136:16:1;;;3133:2;;;3170:6;3162;3155:22;3133:2;;3214:72;3278:7;3267:8;3256:9;3252:24;3214:72;:::i;:::-;2700:646;;;;-1:-1:-1;3305:8:1;-1:-1:-1;;;;2700:646:1:o;3351:251::-;3407:6;3460:2;3448:9;3439:7;3435:23;3431:32;3428:2;;;3481:6;3473;3466:22;3428:2;3525:9;3512:23;3544:28;3566:5;3544:28;:::i;3607:255::-;3674:6;3727:2;3715:9;3706:7;3702:23;3698:32;3695:2;;;3748:6;3740;3733:22;3695:2;3785:9;3779:16;3804:28;3826:5;3804:28;:::i;3867:190::-;3926:6;3979:2;3967:9;3958:7;3954:23;3950:32;3947:2;;;4000:6;3992;3985:22;3947:2;-1:-1:-1;4028:23:1;;3937:120;-1:-1:-1;3937:120:1:o;4062:326::-;4139:6;4147;4155;4208:2;4196:9;4187:7;4183:23;4179:32;4176:2;;;4229:6;4221;4214:22;4176:2;-1:-1:-1;;4257:23:1;;;4327:2;4312:18;;4299:32;;-1:-1:-1;4378:2:1;4363:18;;;4350:32;;4166:222;-1:-1:-1;4166:222:1:o;4393:316::-;4481:6;4489;4497;4550:2;4538:9;4529:7;4525:23;4521:32;4518:2;;;4571:6;4563;4556:22;4518:2;4605:9;4599:16;4589:26;;4655:2;4644:9;4640:18;4634:25;4624:35;;4699:2;4688:9;4684:18;4678:25;4668:35;;4508:201;;;;;:::o;4714:463::-;4767:3;4805:5;4799:12;4832:6;4827:3;4820:19;4858:4;4887:2;4882:3;4878:12;4871:19;;4924:2;4917:5;4913:14;4945:3;4957:195;4971:6;4968:1;4965:13;4957:195;;;5036:13;;-1:-1:-1;;;;;5032:39:1;5020:52;;5092:12;;;;5127:15;;;;5068:1;4986:9;4957:195;;;-1:-1:-1;5168:3:1;;4775:402;-1:-1:-1;;;;;4775:402:1:o;7451:603::-;7563:4;7592:2;7621;7610:9;7603:21;7653:6;7647:13;7696:6;7691:2;7680:9;7676:18;7669:34;7721:4;7734:140;7748:6;7745:1;7742:13;7734:140;;;7843:14;;;7839:23;;7833:30;7809:17;;;7828:2;7805:26;7798:66;7763:10;;7734:140;;;7892:6;7889:1;7886:13;7883:2;;;7962:4;7957:2;7948:6;7937:9;7933:22;7929:31;7922:45;7883:2;-1:-1:-1;8038:2:1;8017:15;-1:-1:-1;;8013:29:1;7998:45;;;;8045:2;7994:54;;7572:482;-1:-1:-1;;;7572:482:1:o;12025:398::-;12227:2;12209:21;;;12266:2;12246:18;;;12239:30;12305:34;12300:2;12285:18;;12278:62;-1:-1:-1;;;12371:2:1;12356:18;;12349:32;12413:3;12398:19;;12199:224::o;14019:356::-;14221:2;14203:21;;;14240:18;;;14233:30;14299:34;14294:2;14279:18;;14272:62;14366:2;14351:18;;14193:182::o;15732:332::-;15939:6;15928:9;15921:25;15982:2;15977;15966:9;15962:18;15955:30;15902:4;16002:56;16054:2;16043:9;16039:18;16031:6;16002:56;:::i;:::-;15994:64;15911:153;-1:-1:-1;;;;15911:153:1:o;16069:582::-;16368:6;16357:9;16350:25;16411:6;16406:2;16395:9;16391:18;16384:34;16454:3;16449:2;16438:9;16434:18;16427:31;16331:4;16475:57;16527:3;16516:9;16512:19;16504:6;16475:57;:::i;:::-;-1:-1:-1;;;;;16568:32:1;;;;16563:2;16548:18;;16541:60;-1:-1:-1;16632:3:1;16617:19;16610:35;16467:65;16340:311;-1:-1:-1;;;16340:311:1:o;16845:128::-;16885:3;16916:1;16912:6;16909:1;16906:13;16903:2;;;16922:18;;:::i;:::-;-1:-1:-1;16958:9:1;;16893:80::o;16978:217::-;17018:1;17044;17034:2;;-1:-1:-1;;;17069:31:1;;17123:4;17120:1;17113:15;17151:4;17076:1;17141:15;17034:2;-1:-1:-1;17180:9:1;;17024:171::o;17200:168::-;17240:7;17306:1;17302;17298:6;17294:14;17291:1;17288:21;17283:1;17276:9;17269:17;17265:45;17262:2;;;17313:18;;:::i;:::-;-1:-1:-1;17353:9:1;;17252:116::o;17373:125::-;17413:4;17441:1;17438;17435:8;17432:2;;;17446:18;;:::i;:::-;-1:-1:-1;17483:9:1;;17422:76::o;17503:380::-;17582:1;17578:12;;;;17625;;;17646:2;;17700:4;17692:6;17688:17;17678:27;;17646:2;17753;17745:6;17742:14;17722:18;17719:38;17716:2;;;17799:10;17794:3;17790:20;17787:1;17780:31;17834:4;17831:1;17824:15;17862:4;17859:1;17852:15;17716:2;;17558:325;;;:::o;17888:135::-;17927:3;-1:-1:-1;;17948:17:1;;17945:2;;;17968:18;;:::i;:::-;-1:-1:-1;18015:1:1;18004:13;;17935:88::o;18028:127::-;18089:10;18084:3;18080:20;18077:1;18070:31;18120:4;18117:1;18110:15;18144:4;18141:1;18134:15;18160:131;-1:-1:-1;;;;;18235:31:1;;18225:42;;18215:2;;18281:1;18278;18271:12;18296:118;18382:5;18375:13;18368:21;18361:5;18358:32;18348:2;;18404:1;18401;18394:12

Swarm Source

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