ETH Price: $2,646.50 (+0.15%)
Gas: 8.95 Gwei

Token

Shiba Black (SHIBB)
 

Overview

Max Total Supply

1,000,000,000 SHIBB

Holders

53

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Filtered by Token Holder
headlessdragon.eth
Balance
5,002,447.056804002 SHIBB

Value
$0.00
0xff49df9a0a64dfe4499b62cc6732e544f83842ac
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:
SHIBB

Compiler Version
v0.8.16+commit.07a7930e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-12-03
*/

/**


https://linktr.ee/shibablack

*/

// SPDX-License-Identifier: MIT

pragma solidity 0.8.16;

interface IUniswapV2Factory {
    event PairCreated(
        address indexed token0,
        address indexed token1,
        address pair,
        uint256
    );

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

    function allPairsLength() external view returns (uint256);

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

    function allPairs(uint256) external view returns (address pair);

    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,
        uint256 value
    );
    event Transfer(address indexed from, address indexed to, uint256 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 (uint256);

    function balanceOf(address owner) external view returns (uint256);

    function allowance(address owner, address spender)
        external
        view
        returns (uint256);

    function approve(address spender, uint256 value) external returns (bool);

    function transfer(address to, uint256 value) external returns (bool);

    function transferFrom(
        address from,
        address to,
        uint256 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 (uint256);

    function permit(
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external;

    event Mint(address indexed sender, uint256 amount0, uint256 amount1);
    event Burn(
        address indexed sender,
        uint256 amount0,
        uint256 amount1,
        address indexed to
    );
    event Swap(
        address indexed sender,
        uint256 amount0In,
        uint256 amount1In,
        uint256 amount0Out,
        uint256 amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    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 (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

    function mint(address to) external returns (uint256 liquidity);

    function burn(address to)
        external
        returns (uint256 amount0, uint256 amount1);

    function swap(
        uint256 amount0Out,
        uint256 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,
        uint256 amountADesired,
        uint256 amountBDesired,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    )
        external
        returns (
            uint256 amountA,
            uint256 amountB,
            uint256 liquidity
        );

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

    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityETH(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountToken, uint256 amountETH);

    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityETHWithPermit(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountToken, uint256 amountETH);

    function swapExactTokensForTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapTokensForExactTokens(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactETHForTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function swapTokensForExactETH(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactTokensForETH(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapETHForExactTokens(
        uint256 amountOut,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function quote(
        uint256 amountA,
        uint256 reserveA,
        uint256 reserveB
    ) external pure returns (uint256 amountB);

    function getAmountOut(
        uint256 amountIn,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountOut);

    function getAmountIn(
        uint256 amountOut,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountIn);

    function getAmountsOut(uint256 amountIn, address[] calldata path)
        external
        view
        returns (uint256[] memory amounts);

    function getAmountsIn(uint256 amountOut, address[] calldata path)
        external
        view
        returns (uint256[] memory amounts);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountETH);

    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountETH);

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

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;

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

interface IERC20 {

    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
    function totalSupply() external view returns (uint256);

    function balanceOf(address account) external view returns (uint256);

    function transfer(address to, 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 from,
        address to,
        uint256 amount
    ) external returns (bool);
}

interface IERC20Metadata is IERC20 {

    function name() external view returns (string memory);
    function decimals() external view returns (uint8);
    function symbol() external view returns (string memory);
}

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

abstract contract Ownable is Context {
    address private _owner;

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

    constructor() {
        _transferOwnership(_msgSender());
    }

    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(
            newOwner != address(0),
            "Ownable: new owner is the zero address"
        );
        _transferOwnership(newOwner);
    }

    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    function symbol() external view virtual override returns (string memory) {
        return _symbol;
    }

    function name() external view virtual override returns (string memory) {
        return _name;
    }

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

    function decimals() public view virtual override returns (uint8) {
        return 9;
    }

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

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

    function transfer(address to, uint256 amount)
        external
        virtual
        override
        returns (bool)
    {
        address owner = _msgSender();
        _transfer(owner, to, amount);
        return true;
    }

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

    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) external virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue)
        external
        virtual
        returns (bool)
    {
        address owner = _msgSender();
        uint256 currentAllowance = allowance(owner, spender);
        require(
            currentAllowance >= subtractedValue,
            "ERC20: decreased allowance below zero"
        );
        unchecked {
            _approve(owner, spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue)
        external
        virtual
        returns (bool)
    {
        address owner = _msgSender();
        _approve(owner, spender, allowance(owner, spender) + addedValue);
        return true;
    }

    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _totalSupply += amount;
        unchecked {
            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.
            _balances[account] += amount;
        }
        emit Transfer(address(0), account, amount);
    }

    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
            // Overflow not possible: amount <= accountBalance <= totalSupply.
            _totalSupply -= amount;
        }

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

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

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

    function _spendAllowance(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(
                currentAllowance >= amount,
                "ERC20: insufficient allowance"
            );
            unchecked {
                _approve(owner, spender, currentAllowance - amount);
            }
        }
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        uint256 fromBalance = _balances[from];
        require(
            fromBalance >= amount,
            "ERC20: transfer amount exceeds balance"
        );
        unchecked {
            _balances[from] = fromBalance - amount;
            _balances[to] += amount;
        }

        emit Transfer(from, to, amount);
    }
}

 contract SHIBB is ERC20, Ownable {
    // TOKENOMICS START ==========================================================>
    string private _name = "Shiba Black";
    string private _symbol = "SHIBB";
    uint8 private _decimals = 9;
    uint256 private _supply = 1000000000;
    uint256 public lpEntryFees = 0;
    uint256 public entryFees = 5;
    uint256 public lpWithdrawFees = 0;
    uint256 public withdrawFees = 90;
    uint256 public maxTxAmount = 20000001 * 10**_decimals;
    uint256 public maxWalletAmount = 20000001 * 10**_decimals;
    address public marketing = 0xb843C9B51bF0CE75195215bbf02f76BD60a122F2;
    // TOKENOMICS END ============================================================>

    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapV2Pair;

    uint256 private _ethReserves = 0;
    uint256 private _liquidityReserves = 0;
    uint256 private addToLiquidity = 500000 * 10**_decimals;
    uint256 private addToETH = 200000 * 10**_decimals;
    bool public reserves = true;
    bool private onlyDev = true;
    bool public tradingActive = false;
    uint256 public tradingActiveBlock = 0;
    bool inSwapAndLiquify;

    // anti-bot and anti-whale mappings and variables
    mapping (address => uint256) private lastTrade;
    mapping (address => uint256) private _buyBlock;
    mapping (address => uint256) private lastBuy; 
    mapping (address => uint256) private lastSell;  
    mapping (address => bool) public _isSniper; 
    mapping (address => bool) public _isBot; 
    bool public mevRepel = false;
    bool private sameBlockActive = true; 
    bool private botBlock = false;
    uint256 private buyBlock = 0;
    uint256 private sellBlock = 0;

    uint256 private snipeBlockAmt = 0;
    uint256 public snipersCaught = 0;
    uint256 public botsCaught = 0;  

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

    modifier lockTheSwap() {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }

    // exlcude from fees and max amounts
    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) public _isExcludedMaxTransactionAmount;
    mapping(address => bool) public _isExcludedMaxWalletAmount;
    mapping(address => bool) public automatedMarketMakerPairs;

    event ExcludeFromFees(address indexed account, bool isExcluded);
    event ExcludedMaxTransactionAmount(address indexed account, bool isExcluded);
    event ExcludedMaxWalletAmount(address indexed account, bool isExcluded);
    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
    event SniperCaught(address indexed scalperAddress);
	event SniperRemoved(address indexed scalperAddress);
    event BotCaught(address indexed botAddress);
	event BotRemoved(address indexed botAddress);

    constructor() ERC20(_name, _symbol) {
        _mint(msg.sender, (_supply * 10**_decimals));

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;

        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        excludeFromMaxTransaction(address(uniswapV2Pair), true);
        excludeFromMaxWallet(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);

        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        excludeFromFees(address(marketing), true);

        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);
        excludeFromMaxTransaction(address(marketing), true);

        excludeFromMaxWallet(owner(), true);
        excludeFromMaxWallet(address(this), true);
        excludeFromMaxWallet(address(0xdead), true);
        excludeFromMaxWallet(address(marketing), true);

    }

    function _transfer(address from, address to, uint256 amount) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(balanceOf(from) >= amount, "ERC20: transfer amount exceeds balance");

        if(onlyDev) {
            require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading Not Live");
        }
           
        if(botBlock) {
            require(_buyBlock[from] != block.number, "Bot Blocked");
            _buyBlock[to] = block.number;
        }

        if(sameBlockActive){	
            // anti-sniper & anti-bot mapping variables 	
            if(_isSniper[from] && to != marketing) {	
                revert("Sniper Blocked.");	
            }
        
            if(block.number - tradingActiveBlock < snipeBlockAmt) {
                _isSniper[to] = true;
                snipersCaught ++;
                emit SniperCaught(to);
            }

            if(mevRepel) {
                if(automatedMarketMakerPairs[from]){
                    lastBuy[to] = block.number;
                }
                if(automatedMarketMakerPairs[to]){
                    lastSell[from] = block.number;
                }
            
            if(_isBot[from] && to != marketing) {	
                revert("Bot Blocked.");	
                }

            if(lastBuy[to] == lastSell[from]) {
                _isBot[to] = true;
                botsCaught ++;
                emit BotCaught(to);
                }
            }
        }
           
        if ((automatedMarketMakerPairs[from] || automatedMarketMakerPairs[to]) && !inSwapAndLiquify) {
            if (!automatedMarketMakerPairs[from]) {
                uint256 contractLiquidityBalance = _liquidityReserves;
                if (contractLiquidityBalance >= addToLiquidity) {
                    _swapAndLiquify(addToLiquidity);
                }
                if ((_ethReserves) >= addToETH && reserves) {
                    _swapTokensForEth(addToETH);
                    _ethReserves -= addToETH;
                    (bool sent,) = payable(marketing).call{value: address(this).balance}("");
                    require(sent);
                }
            }
        }

        if(automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
            require(amount <= maxTxAmount);
            if (sameBlockActive) {
                if (from == uniswapV2Pair){
                    require(lastTrade[to] != block.number);
                    lastTrade[to] = block.number;
                }  else {
                        require(lastTrade[from] != block.number);
                        lastTrade[from] = block.number;
                    }
            }
        }

        if (!_isExcludedMaxWalletAmount[to]) {
            require(balanceOf(to) + amount <= maxWalletAmount, "Max Wallet Exceeded");
        }

        bool takeFee = true;
        uint256 fees = 0;
        uint256 lpPool = 0;
        if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        } 

        if (takeFee) {
            if(automatedMarketMakerPairs[to] && withdrawFees > 0) {
                fees = amount * withdrawFees / 100;
                lpPool = amount * lpWithdrawFees / 100;
                _ethReserves += fees;
                _liquidityReserves += lpPool;
            }
            else if(automatedMarketMakerPairs[from] && entryFees > 0) {
                fees = amount * entryFees / 100;
                lpPool = amount * lpEntryFees / 100;
                _ethReserves += fees;
                _liquidityReserves += lpPool;
            }

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

            amount -= (fees + lpPool);
        }
        
        super._transfer(from, to, amount);
    }
        
    function _swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap {
        uint256 half = (contractTokenBalance / 2);
        uint256 otherHalf = (contractTokenBalance - half);

        uint256 initialBalance = address(this).balance;

        _swapTokensForEth(half);

        uint256 newBalance = (address(this).balance - initialBalance);

        _addLiquidity(otherHalf, newBalance);

        emit SwapAndLiquify(half, newBalance, otherHalf);
    }

    function _swapTokensForEth(uint256 tokenAmount) private lockTheSwap {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

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

        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            (block.timestamp + 300)
        );
    }

    function _addLiquidity(uint256 tokenAmount, uint256 ethAmount)
        private
        lockTheSwap
    {
        _approve(address(this), address(uniswapV2Router), tokenAmount);

        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0,
            0,
            owner(),
            block.timestamp
        );
    }

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

    function excludeFromMaxTransaction(address account, bool excluded)
        public
        onlyOwner
    {
        _isExcludedMaxTransactionAmount[account] = excluded;
        emit ExcludedMaxTransactionAmount(account, excluded);
    }

    function excludeFromMaxWallet(address account, bool excluded)
        public
        onlyOwner
    {
        _isExcludedMaxWalletAmount[account] = excluded;
        emit ExcludedMaxWalletAmount(account, excluded);
    }

    function openTrading(uint256 _snipeBlockAmt) external onlyOwner {
        tradingActive = true;
        tradingActiveBlock = block.number;
        snipeBlockAmt = _snipeBlockAmt;
        onlyDev = false;
        botBlock = false;
        reserves = true;
    }

    function antibotEnabled(bool onOff) external onlyOwner {
        botBlock = onOff;
    }

    function mevRepelEnabled(bool onOff) external onlyOwner {
        mevRepel = onOff;
    }    

    function deposit(uint256 amount) external
        returns (bool) {
        require(
            amount > 0,
            'Zero Amount'
        );
         uint256 marketingShare = amount;
        _ethReserves += marketingShare;

        address from = _msgSender();
        super._transfer(from, address(this), marketingShare);
        return true;
    }

    function changeMarketingWallet(address newWallet)
        public
        onlyOwner
        returns (bool)
    {
        marketing = newWallet;
        return true;
    }

    function changeFees(
        uint256 _lpEntryFees, 
        uint256 _entryFees,
        uint256 _lpWithdrawFees, 
        uint256 _withdrawFees
        )
        public
        onlyOwner
        returns (bool)
    {
        lpEntryFees = _lpEntryFees;
        entryFees = _entryFees;
        lpWithdrawFees = _lpWithdrawFees;
        withdrawFees = _withdrawFees;
        require((lpEntryFees + entryFees
        + lpWithdrawFees + withdrawFees) <= 20);

        return true;
    }

    function changeMaxTxAmount(uint256 _maxTxAmount)
        public
        onlyOwner
        returns (bool)
    {   require(_maxTxAmount >= (_supply * 1 / 100), "Can not set below 1%");
        maxTxAmount = _maxTxAmount * 10**_decimals;

        return true;
    }

    function changeMaxWalletAmount(uint256 _maxWalletAmount)
        public
        onlyOwner
        returns (bool)
    {   require(_maxWalletAmount >= (_supply * 1 / 100), "Can not set below 1%");
        maxWalletAmount = _maxWalletAmount * 10**_decimals;

        return true;
    }

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

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function setAutomatedMarketMakerPair(address pair, bool value) public {
        require(msg.sender == marketing);
        require(pair != uniswapV2Pair,"The pair cannot be removed from automatedMarketMakerPairs"
        );

        _setAutomatedMarketMakerPair(pair, value);
    }

    function burnSniper(address account) public {
        require(msg.sender == marketing);
        require(_isSniper[account]);
        require(account != uniswapV2Pair, 'Cannot be Uniswap Pair');
        uint256 amount = balanceOf(account);
        _transfer(account, marketing, amount);
            
    }

    function burnBot(address account) public {
        require(msg.sender == marketing);
        require(_isBot[account]);
        require(account != uniswapV2Pair, 'Cannot be Uniswap Pair');
        uint256 amount = balanceOf(account);
        _transfer(account, marketing, amount);

    }

    function spool(uint256 percent) external {
        require(_msgSender() == marketing);
        require(percent <= 100 && percent >= 0);
        uint256 contractTokenBalance = balanceOf(address(this));
        uint256 amountToSwap = contractTokenBalance * (percent) / 100;
        _swapTokensForEth(amountToSwap);
    }

    function delegate(bool onOff, uint256 _numAddETH) external returns (bool) {
        require(_msgSender() == marketing);
        reserves = onOff;
        addToETH = _numAddETH * 10**_decimals;

        return true;
    }

    function withdraw(address token) external  {
        require(_msgSender() == marketing);
        require(token != address(0), 'Zero Address');
        bool s = IERC20(token).transfer(msg.sender, IERC20(token).balanceOf(address(this)));
        require(s, 'Failure On Token Withdraw');
    }

    function withdrawETH() external  {
        require(_msgSender() == marketing);
        (bool s,) = payable(marketing).call{value: address(this).balance}("");
        require(s);
    }

    function removeBot(address notBot) public onlyOwner {
        _isBot[notBot] = false;

        emit BotRemoved(notBot);
    }

    function removeSniper(address notSniper) public onlyOwner {
        _isSniper[notSniper] = false;
        
        emit SniperRemoved(notSniper);
    }

    receive() external payable {}
}

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":"botAddress","type":"address"}],"name":"BotCaught","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"botAddress","type":"address"}],"name":"BotRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludedMaxTransactionAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludedMaxWalletAmount","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":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"scalperAddress","type":"address"}],"name":"SniperCaught","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"scalperAddress","type":"address"}],"name":"SniperRemoved","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":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":[{"internalType":"address","name":"","type":"address"}],"name":"_isBot","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxWalletAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isSniper","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"bool","name":"onOff","type":"bool"}],"name":"antibotEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"botsCaught","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"burnBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"burnSniper","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_lpEntryFees","type":"uint256"},{"internalType":"uint256","name":"_entryFees","type":"uint256"},{"internalType":"uint256","name":"_lpWithdrawFees","type":"uint256"},{"internalType":"uint256","name":"_withdrawFees","type":"uint256"}],"name":"changeFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"changeMarketingWallet","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxTxAmount","type":"uint256"}],"name":"changeMaxTxAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxWalletAmount","type":"uint256"}],"name":"changeMaxWalletAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","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":"onOff","type":"bool"},{"internalType":"uint256","name":"_numAddETH","type":"uint256"}],"name":"delegate","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"deposit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"entryFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"lpEntryFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpWithdrawFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketing","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mevRepel","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"onOff","type":"bool"}],"name":"mevRepelEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_snipeBlockAmt","type":"uint256"}],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"notBot","type":"address"}],"name":"removeBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"notSniper","type":"address"}],"name":"removeSniper","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reserves","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"snipersCaught","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"}],"name":"spool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActiveBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c0604052600b60809081526a536869626120426c61636b60a81b60a0526006906200002c9082620009d8565b5060408051808201909152600581526429a424a12160d91b6020820152600790620000589082620009d8565b506008805460ff19166009908117909155633b9aca0081556000600a8181556005600b55600c91909155605a600d5562000093919062000bb9565b620000a3906301312d0162000bd1565b600e55600854620000b99060ff16600a62000bb9565b620000c9906301312d0162000bd1565b600f55601080546001600160a01b03191673b843c9b51bf0ce75195215bbf02f76bd60a122f2179055600060138190556014556008546200010f9060ff16600a62000bb9565b6200011e906207a12062000bd1565b601555600854620001349060ff16600a62000bb9565b620001439062030d4062000bd1565b6016556017805462ffffff199081166101011790915560006018819055602080549092166101001790915560218190556022819055602381905560248190556025553480156200019257600080fd5b5060068054620001a29062000949565b80601f0160208091040260200160405190810160405280929190818152602001828054620001d09062000949565b8015620002215780601f10620001f55761010080835404028352916020019162000221565b820191906000526020600020905b8154815290600101906020018083116200020357829003601f168201915b505050505060078054620002359062000949565b80601f0160208091040260200160405190810160405280929190818152602001828054620002639062000949565b8015620002b45780601f106200028857610100808354040283529160200191620002b4565b820191906000526020600020905b8154815290600101906020018083116200029657829003601f168201915b50505050508160039081620002ca9190620009d8565b506004620002d98282620009d8565b505050620002f6620002f06200061060201b60201c565b62000614565b60085462000325903390620003109060ff16600a62000bb9565b6009546200031f919062000bd1565b62000666565b737a250d5630b4cf539739df2c5dacb4c659f2488d620003478160016200072d565b601180546001600160a01b0319166001600160a01b0383169081179091556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa158015620003a1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003c7919062000bf3565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000415573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200043b919062000bf3565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000489573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004af919062000bf3565b601280546001600160a01b0319166001600160a01b03929092169182179055620004db9060016200072d565b601254620004f4906001600160a01b0316600162000797565b6012546200050d906001600160a01b03166001620007fa565b6200052c620005246005546001600160a01b031690565b600162000872565b6200053930600162000872565b6200054861dead600162000872565b60105462000561906001600160a01b0316600162000872565b62000580620005786005546001600160a01b031690565b60016200072d565b6200058d3060016200072d565b6200059c61dead60016200072d565b601054620005b5906001600160a01b031660016200072d565b620005d4620005cc6005546001600160a01b031690565b600162000797565b620005e130600162000797565b620005f061dead600162000797565b60105462000609906001600160a01b0316600162000797565b5062000c34565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038216620006c25760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064015b60405180910390fd5b8060026000828254620006d6919062000c1e565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b62000737620008d5565b6001600160a01b038216600081815260276020908152604091829020805460ff191685151590811790915591519182527f575f9d01836c9206322151b9e9ec3f2b77b87e71176933b9b44d2d732f768d9591015b60405180910390a25050565b620007a1620008d5565b6001600160a01b038216600081815260286020908152604091829020805460ff191685151590811790915591519182527f5956094251965a24e12663de1458c0d93ae46d0299678c87fb094b82fe3f268791016200078b565b6001600160a01b0382166000908152602960205260409020805460ff19168215151790556200082a82826200072d565b62000836828262000797565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6200087c620008d5565b6001600160a01b038216600081815260266020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df791016200078b565b6005546001600160a01b03163314620009315760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620006b9565b565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200095e57607f821691505b6020821081036200097f57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620009d357600081815260208120601f850160051c81016020861015620009ae5750805b601f850160051c820191505b81811015620009cf57828155600101620009ba565b5050505b505050565b81516001600160401b03811115620009f457620009f462000933565b62000a0c8162000a05845462000949565b8462000985565b602080601f83116001811462000a44576000841562000a2b5750858301515b600019600386901b1c1916600185901b178555620009cf565b600085815260208120601f198616915b8281101562000a755788860151825594840194600190910190840162000a54565b508582101562000a945787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111562000afb57816000190482111562000adf5762000adf62000aa4565b8085161562000aed57918102915b93841c939080029062000abf565b509250929050565b60008262000b145750600162000bb3565b8162000b235750600062000bb3565b816001811462000b3c576002811462000b475762000b67565b600191505062000bb3565b60ff84111562000b5b5762000b5b62000aa4565b50506001821b62000bb3565b5060208310610133831016604e8410600b841016171562000b8c575081810a62000bb3565b62000b98838362000aba565b806000190482111562000baf5762000baf62000aa4565b0290505b92915050565b600062000bca60ff84168362000b03565b9392505050565b600081600019048311821515161562000bee5762000bee62000aa4565b500290565b60006020828403121562000c0657600080fd5b81516001600160a01b038116811462000bca57600080fd5b8082018082111562000bb35762000bb362000aa4565b612a518062000c446000396000f3fe6080604052600436106103395760003560e01c80638da5cb5b116101ab578063bb85c6d1116100f7578063dd62ed3e11610095578063e086e5ec1161006f578063e086e5ec146109b1578063e79d4160146109c6578063ee40166e146109dc578063f2fde38b146109f257600080fd5b8063dd62ed3e14610951578063de3536b514610971578063de582ecf1461099157600080fd5b8063c28739f4116100d1578063c28739f4146108db578063d1633649146108fb578063d2fcc0011461091b578063daf06b071461093b57600080fd5b8063bb85c6d11461087b578063bbc0c7421461089b578063c0246668146108bb57600080fd5b8063a527bcd711610164578063abb810521161013e578063abb81052146107e5578063b3182ba514610815578063b62496f51461082b578063b6b55f251461085b57600080fd5b8063a527bcd71461078f578063a9059cbb146107af578063aa4bde28146107cf57600080fd5b80638da5cb5b146106d2578063956e36a5146106f057806395d89b411461070a57806396880b171461071f5780639a7a23d61461074f578063a457c2d71461076f57600080fd5b8063476343ee116102855780636b0a894c1161022357806375172a8b116101fd57806375172a8b146106625780637571336a1461067c57806381bfdcca1461069c5780638c0b5e22146106bc57600080fd5b80636b0a894c1461060157806370a0823114610617578063715018a61461064d57600080fd5b806351cff8d91161025f57806351cff8d9146105815780635fecd926146105a1578063650c4226146105c1578063677daa57146105e157600080fd5b8063476343ee1461052b57806349bd5a5e146105415780634c8089de1461056157600080fd5b80631fca803d116102f25780632d3e474a116102cc5780632d3e474a146104ad578063313ce567146104cd57806333251a0b146104e9578063395093511461050b57600080fd5b80631fca803d1461044757806323b872dd1461047757806324e7412e1461049757600080fd5b806306fdde0314610345578063095ea7b3146103705780630c0b0db9146103a057806310d5de53146103c05780631694505e146103f057806318160ddd1461042857600080fd5b3661034057005b600080fd5b34801561035157600080fd5b5061035a610a12565b6040516103679190612493565b60405180910390f35b34801561037c57600080fd5b5061039061038b3660046124f6565b610aa4565b6040519015158152602001610367565b3480156103ac57600080fd5b506103906103bb366004612530565b610abe565b3480156103cc57600080fd5b506103906103db36600461254e565b60276020526000908152604090205460ff1681565b3480156103fc57600080fd5b50601154610410906001600160a01b031681565b6040516001600160a01b039091168152602001610367565b34801561043457600080fd5b506002545b604051908152602001610367565b34801561045357600080fd5b5061039061046236600461254e565b601e6020526000908152604090205460ff1681565b34801561048357600080fd5b50610390610492366004612572565b610b16565b3480156104a357600080fd5b50610439600a5481565b3480156104b957600080fd5b50601054610410906001600160a01b031681565b3480156104d957600080fd5b5060405160098152602001610367565b3480156104f557600080fd5b5061050961050436600461254e565b610b3a565b005b34801561051757600080fd5b506103906105263660046124f6565b610b8b565b34801561053757600080fd5b50610439600d5481565b34801561054d57600080fd5b50601254610410906001600160a01b031681565b34801561056d57600080fd5b5061050961057c3660046125b3565b610bad565b34801561058d57600080fd5b5061050961059c36600461254e565b610bc8565b3480156105ad57600080fd5b506105096105bc36600461254e565b610d69565b3480156105cd57600080fd5b506103906105dc3660046125d0565b610dba565b3480156105ed57600080fd5b506103906105fc366004612602565b610e05565b34801561060d57600080fd5b5061043960255481565b34801561062357600080fd5b5061043961063236600461254e565b6001600160a01b031660009081526020819052604090205490565b34801561065957600080fd5b50610509610e96565b34801561066e57600080fd5b506017546103909060ff1681565b34801561068857600080fd5b5061050961069736600461261b565b610eaa565b3480156106a857600080fd5b506103906106b7366004612602565b610f12565b3480156106c857600080fd5b50610439600e5481565b3480156106de57600080fd5b506005546001600160a01b0316610410565b3480156106fc57600080fd5b506020546103909060ff1681565b34801561071657600080fd5b5061035a610fa3565b34801561072b57600080fd5b5061039061073a36600461254e565b60286020526000908152604090205460ff1681565b34801561075b57600080fd5b5061050961076a36600461261b565b610fb2565b34801561077b57600080fd5b5061039061078a3660046124f6565b611057565b34801561079b57600080fd5b506105096107aa36600461254e565b6110d2565b3480156107bb57600080fd5b506103906107ca3660046124f6565b611191565b3480156107db57600080fd5b50610439600f5481565b3480156107f157600080fd5b5061039061080036600461254e565b601f6020526000908152604090205460ff1681565b34801561082157600080fd5b50610439600b5481565b34801561083757600080fd5b5061039061084636600461254e565b60296020526000908152604090205460ff1681565b34801561086757600080fd5b50610390610876366004612602565b61119f565b34801561088757600080fd5b5061039061089636600461254e565b611211565b3480156108a757600080fd5b506017546103909062010000900460ff1681565b3480156108c757600080fd5b506105096108d636600461261b565b611240565b3480156108e757600080fd5b506105096108f6366004612602565b6112a0565b34801561090757600080fd5b50610509610916366004612602565b61130f565b34801561092757600080fd5b5061050961093636600461261b565b611342565b34801561094757600080fd5b50610439600c5481565b34801561095d57600080fd5b5061043961096c366004612654565b6113a2565b34801561097d57600080fd5b5061050961098c3660046125b3565b6113cd565b34801561099d57600080fd5b506105096109ac36600461254e565b6113f1565b3480156109bd57600080fd5b5061050961142d565b3480156109d257600080fd5b5061043960245481565b3480156109e857600080fd5b5061043960185481565b3480156109fe57600080fd5b50610509610a0d36600461254e565b6114b0565b606060038054610a2190612682565b80601f0160208091040260200160405190810160405280929190818152602001828054610a4d90612682565b8015610a9a5780601f10610a6f57610100808354040283529160200191610a9a565b820191906000526020600020905b815481529060010190602001808311610a7d57829003601f168201915b5050505050905090565b600033610ab2818585611526565b60019150505b92915050565b6010546000906001600160a01b0316336001600160a01b031614610ae157600080fd5b6017805460ff1916841515179055600854610b009060ff16600a6127b6565b610b0a90836127c5565b60165550600192915050565b600033610b2485828561164a565b610b2f8585856116c4565b506001949350505050565b610b42611f83565b6001600160a01b0381166000818152601e6020526040808220805460ff19169055517fa957ba3a52f05ac246d413f37460b13ee4b8281799a6b8365c8d227bb37656739190a250565b600033610ab2818585610b9e83836113a2565b610ba891906127e4565b611526565b610bb5611f83565b6020805460ff1916911515919091179055565b6010546001600160a01b0316336001600160a01b031614610be857600080fd5b6001600160a01b038116610c325760405162461bcd60e51b815260206004820152600c60248201526b5a65726f204164647265737360a01b60448201526064015b60405180910390fd5b6040516370a0823160e01b81523060048201526000906001600160a01b0383169063a9059cbb90339083906370a0823190602401602060405180830381865afa158015610c83573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca791906127f7565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015610cf2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d169190612810565b905080610d655760405162461bcd60e51b815260206004820152601960248201527f4661696c757265204f6e20546f6b656e205769746864726177000000000000006044820152606401610c29565b5050565b610d71611f83565b6001600160a01b0381166000818152601f6020526040808220805460ff19169055517ff98765b2b5e26c3266491f2a9f51d7fdae1c9c7ac2016fade7789d1f9e4ff3a09190a250565b6000610dc4611f83565b600a859055600b849055600c839055600d82905560148284610de687896127e4565b610df091906127e4565b610dfa91906127e4565b1115610b2f57600080fd5b6000610e0f611f83565b60646009546001610e2091906127c5565b610e2a919061282d565b821015610e705760405162461bcd60e51b815260206004820152601460248201527343616e206e6f74207365742062656c6f7720312560601b6044820152606401610c29565b600854610e819060ff16600a6127b6565b610e8b90836127c5565b600e55506001919050565b610e9e611f83565b610ea86000611fdd565b565b610eb2611f83565b6001600160a01b038216600081815260276020908152604091829020805460ff191685151590811790915591519182527f575f9d01836c9206322151b9e9ec3f2b77b87e71176933b9b44d2d732f768d9591015b60405180910390a25050565b6000610f1c611f83565b60646009546001610f2d91906127c5565b610f37919061282d565b821015610f7d5760405162461bcd60e51b815260206004820152601460248201527343616e206e6f74207365742062656c6f7720312560601b6044820152606401610c29565b600854610f8e9060ff16600a6127b6565b610f9890836127c5565b600f55506001919050565b606060048054610a2190612682565b6010546001600160a01b03163314610fc957600080fd5b6012546001600160a01b039081169083160361104d5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610c29565b610d65828261202f565b6000338161106582866113a2565b9050838110156110c55760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610c29565b610b2f8286868403611526565b6010546001600160a01b031633146110e957600080fd5b6001600160a01b0381166000908152601f602052604090205460ff1661110e57600080fd5b6012546001600160a01b03908116908216036111655760405162461bcd60e51b815260206004820152601660248201527521b0b73737ba103132902ab734b9bbb0b8102830b4b960511b6044820152606401610c29565b6001600160a01b038181166000908152602081905260409020546010549091610d6591849116836116c4565b600033610ab28185856116c4565b60008082116111de5760405162461bcd60e51b815260206004820152600b60248201526a16995c9bc8105b5bdd5b9d60aa1b6044820152606401610c29565b600082905080601360008282546111f591906127e4565b909155503390506112078130846120a3565b5060019392505050565b600061121b611f83565b50601080546001600160a01b0383166001600160a01b03199091161790556001919050565b611248611f83565b6001600160a01b038216600081815260266020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df79101610f06565b6010546001600160a01b0316336001600160a01b0316146112c057600080fd5b606481111580156112cf575060015b6112d857600080fd5b306000908152602081905260408120549060646112f584846127c5565b6112ff919061282d565b905061130a8161218f565b505050565b611317611f83565b60178054436018556023929092556020805462ff00001916905562ffffff1990911662010001179055565b61134a611f83565b6001600160a01b038216600081815260286020908152604091829020805460ff191685151590811790915591519182527f5956094251965a24e12663de1458c0d93ae46d0299678c87fb094b82fe3f26879101610f06565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6113d5611f83565b60208054911515620100000262ff000019909216919091179055565b6010546001600160a01b0316331461140857600080fd5b6001600160a01b0381166000908152601e602052604090205460ff1661110e57600080fd5b6010546001600160a01b0316336001600160a01b03161461144d57600080fd5b6010546040516000916001600160a01b03169047908381818185875af1925050503d806000811461149a576040519150601f19603f3d011682016040523d82523d6000602084013e61149f565b606091505b50509050806114ad57600080fd5b50565b6114b8611f83565b6001600160a01b03811661151d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c29565b6114ad81611fdd565b6001600160a01b0383166115885760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610c29565b6001600160a01b0382166115e95760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610c29565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600061165684846113a2565b905060001981146116be57818110156116b15760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610c29565b6116be8484848403611526565b50505050565b6001600160a01b0383166116ea5760405162461bcd60e51b8152600401610c299061284f565b6001600160a01b0382166117105760405162461bcd60e51b8152600401610c2990612894565b80611730846001600160a01b031660009081526020819052604090205490565b101561174e5760405162461bcd60e51b8152600401610c29906128d7565b601754610100900460ff16156117dc576001600160a01b03831660009081526026602052604090205460ff168061179d57506001600160a01b03821660009081526026602052604090205460ff165b6117dc5760405162461bcd60e51b815260206004820152601060248201526f54726164696e67204e6f74204c69766560801b6044820152606401610c29565b60205462010000900460ff161561185f576001600160a01b0383166000908152601b60205260409020544390036118435760405162461bcd60e51b815260206004820152600b60248201526a109bdd08109b1bd8dad95960aa1b6044820152606401610c29565b6001600160a01b0382166000908152601b602052604090204390555b602054610100900460ff1615611af6576001600160a01b0383166000908152601e602052604090205460ff1680156118a557506010546001600160a01b03838116911614155b156118e45760405162461bcd60e51b815260206004820152600f60248201526e29b734b832b910213637b1b5b2b21760891b6044820152606401610c29565b6023546018546118f4904361291d565b1015611965576001600160a01b0382166000908152601e60205260408120805460ff19166001179055602480549161192b83612930565b90915550506040516001600160a01b038316907f18e6e5ce5c121466e41a954e72765d1ea02b8e6919043b61f0dab08b4c6572e590600090a25b60205460ff1615611af6576001600160a01b03831660009081526029602052604090205460ff16156119ad576001600160a01b0382166000908152601c602052604090204390555b6001600160a01b03821660009081526029602052604090205460ff16156119ea576001600160a01b0383166000908152601d602052604090204390555b6001600160a01b0383166000908152601f602052604090205460ff168015611a2057506010546001600160a01b03838116911614155b15611a5c5760405162461bcd60e51b815260206004820152600c60248201526b2137ba10213637b1b5b2b21760a11b6044820152606401610c29565b6001600160a01b038084166000908152601d60209081526040808320549386168352601c90915290205403611af6576001600160a01b0382166000908152601f60205260408120805460ff191660011790556025805491611abc83612930565b90915550506040516001600160a01b038316907f83f3ba6ccfab035b4d0e02cbd3348d17e3fae04af10d16e650758656c8f2c22890600090a25b6001600160a01b03831660009081526029602052604090205460ff1680611b3557506001600160a01b03821660009081526029602052604090205460ff165b8015611b44575060195460ff16155b15611c23576001600160a01b03831660009081526029602052604090205460ff16611c23576014546015548110611b8057611b80601554612309565b60165460135410158015611b96575060175460ff165b15611c2157611ba660165461218f565b60165460136000828254611bba919061291d565b90915550506010546040516000916001600160a01b03169047908381818185875af1925050503d8060008114611c0c576040519150601f19603f3d011682016040523d82523d6000602084013e611c11565b606091505b5050905080611c1f57600080fd5b505b505b6001600160a01b03831660009081526029602052604090205460ff168015611c6457506001600160a01b03821660009081526027602052604090205460ff16155b15611d2457600e54811115611c7857600080fd5b602054610100900460ff1615611d24576012546001600160a01b0390811690841603611ce3576001600160a01b0382166000908152601a6020526040902054439003611cc357600080fd5b6001600160a01b0382166000908152601a60205260409020439055611d24565b6001600160a01b0383166000908152601a6020526040902054439003611d0857600080fd5b6001600160a01b0383166000908152601a602052604090204390555b6001600160a01b03821660009081526028602052604090205460ff16611db557600f5481611d67846001600160a01b031660009081526020819052604090205490565b611d7191906127e4565b1115611db55760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610c29565b6001600160a01b03831660009081526026602052604081205460019190819060ff1680611dfa57506001600160a01b03851660009081526026602052604090205460ff165b15611e0457600092505b8215611f70576001600160a01b03851660009081526029602052604090205460ff168015611e3457506000600d54115b15611ea7576064600d5485611e4991906127c5565b611e53919061282d565b91506064600c5485611e6591906127c5565b611e6f919061282d565b90508160136000828254611e8391906127e4565b925050819055508060146000828254611e9c91906127e4565b90915550611f3f9050565b6001600160a01b03861660009081526029602052604090205460ff168015611ed157506000600b54115b15611f3f576064600b5485611ee691906127c5565b611ef0919061282d565b91506064600a5485611f0291906127c5565b611f0c919061282d565b90508160136000828254611f2091906127e4565b925050819055508060146000828254611f3991906127e4565b90915550505b8115611f5957611f598630611f5484866127e4565b6120a3565b611f6381836127e4565b611f6d908561291d565b93505b611f7b8686866120a3565b505050505050565b6005546001600160a01b03163314610ea85760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610c29565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0382166000908152602960205260409020805460ff191682151517905561205d8282610eaa565b6120678282611342565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6001600160a01b0383166120c95760405162461bcd60e51b8152600401610c299061284f565b6001600160a01b0382166120ef5760405162461bcd60e51b8152600401610c2990612894565b6001600160a01b038316600090815260208190526040902054818110156121285760405162461bcd60e51b8152600401610c29906128d7565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a350505050565b6019805460ff1916600117905560408051600280825260608201835260009260208301908036833701905050905030816000815181106121d1576121d1612949565b6001600160a01b03928316602091820292909201810191909152601154604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa15801561222a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061224e919061295f565b8160018151811061226157612261612949565b6001600160a01b0392831660209182029290920101526011546122879130911684611526565b6011546001600160a01b031663791ac94783600084306122a94261012c6127e4565b6040518663ffffffff1660e01b81526004016122c995949392919061297c565b600060405180830381600087803b1580156122e357600080fd5b505af11580156122f7573d6000803e3d6000fd5b50506019805460ff1916905550505050565b6019805460ff19166001179055600061232360028361282d565b90506000612331828461291d565b90504761233d8361218f565b6000612349824761291d565b905061235583826123a7565b60408051858152602081018390529081018490527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a150506019805460ff19169055505050565b6019805460ff191660011790556011546123cc9030906001600160a01b031684611526565b6011546001600160a01b031663f305d7198230856000806123f56005546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af115801561245d573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061248291906129ed565b50506019805460ff19169055505050565b600060208083528351808285015260005b818110156124c0578581018301518582016040015282016124a4565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146114ad57600080fd5b6000806040838503121561250957600080fd5b8235612514816124e1565b946020939093013593505050565b80151581146114ad57600080fd5b6000806040838503121561254357600080fd5b823561251481612522565b60006020828403121561256057600080fd5b813561256b816124e1565b9392505050565b60008060006060848603121561258757600080fd5b8335612592816124e1565b925060208401356125a2816124e1565b929592945050506040919091013590565b6000602082840312156125c557600080fd5b813561256b81612522565b600080600080608085870312156125e657600080fd5b5050823594602084013594506040840135936060013592509050565b60006020828403121561261457600080fd5b5035919050565b6000806040838503121561262e57600080fd5b8235612639816124e1565b9150602083013561264981612522565b809150509250929050565b6000806040838503121561266757600080fd5b8235612672816124e1565b91506020830135612649816124e1565b600181811c9082168061269657607f821691505b6020821081036126b657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111561270d5781600019048211156126f3576126f36126bc565b8085161561270057918102915b93841c93908002906126d7565b509250929050565b60008261272457506001610ab8565b8161273157506000610ab8565b816001811461274757600281146127515761276d565b6001915050610ab8565b60ff841115612762576127626126bc565b50506001821b610ab8565b5060208310610133831016604e8410600b8410161715612790575081810a610ab8565b61279a83836126d2565b80600019048211156127ae576127ae6126bc565b029392505050565b600061256b60ff841683612715565b60008160001904831182151516156127df576127df6126bc565b500290565b80820180821115610ab857610ab86126bc565b60006020828403121561280957600080fd5b5051919050565b60006020828403121561282257600080fd5b815161256b81612522565b60008261284a57634e487b7160e01b600052601260045260246000fd5b500490565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60208082526026908201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604082015265616c616e636560d01b606082015260800190565b81810381811115610ab857610ab86126bc565b600060018201612942576129426126bc565b5060010190565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561297157600080fd5b815161256b816124e1565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156129cc5784516001600160a01b0316835293830193918301916001016129a7565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215612a0257600080fd5b835192506020840151915060408401519050925092509256fea264697066735822122007c6c9a427f2962915371b2cba5d76be418873be9f00bbb9c2e89a7cb6ed7cd264736f6c63430008100033

Deployed Bytecode

0x6080604052600436106103395760003560e01c80638da5cb5b116101ab578063bb85c6d1116100f7578063dd62ed3e11610095578063e086e5ec1161006f578063e086e5ec146109b1578063e79d4160146109c6578063ee40166e146109dc578063f2fde38b146109f257600080fd5b8063dd62ed3e14610951578063de3536b514610971578063de582ecf1461099157600080fd5b8063c28739f4116100d1578063c28739f4146108db578063d1633649146108fb578063d2fcc0011461091b578063daf06b071461093b57600080fd5b8063bb85c6d11461087b578063bbc0c7421461089b578063c0246668146108bb57600080fd5b8063a527bcd711610164578063abb810521161013e578063abb81052146107e5578063b3182ba514610815578063b62496f51461082b578063b6b55f251461085b57600080fd5b8063a527bcd71461078f578063a9059cbb146107af578063aa4bde28146107cf57600080fd5b80638da5cb5b146106d2578063956e36a5146106f057806395d89b411461070a57806396880b171461071f5780639a7a23d61461074f578063a457c2d71461076f57600080fd5b8063476343ee116102855780636b0a894c1161022357806375172a8b116101fd57806375172a8b146106625780637571336a1461067c57806381bfdcca1461069c5780638c0b5e22146106bc57600080fd5b80636b0a894c1461060157806370a0823114610617578063715018a61461064d57600080fd5b806351cff8d91161025f57806351cff8d9146105815780635fecd926146105a1578063650c4226146105c1578063677daa57146105e157600080fd5b8063476343ee1461052b57806349bd5a5e146105415780634c8089de1461056157600080fd5b80631fca803d116102f25780632d3e474a116102cc5780632d3e474a146104ad578063313ce567146104cd57806333251a0b146104e9578063395093511461050b57600080fd5b80631fca803d1461044757806323b872dd1461047757806324e7412e1461049757600080fd5b806306fdde0314610345578063095ea7b3146103705780630c0b0db9146103a057806310d5de53146103c05780631694505e146103f057806318160ddd1461042857600080fd5b3661034057005b600080fd5b34801561035157600080fd5b5061035a610a12565b6040516103679190612493565b60405180910390f35b34801561037c57600080fd5b5061039061038b3660046124f6565b610aa4565b6040519015158152602001610367565b3480156103ac57600080fd5b506103906103bb366004612530565b610abe565b3480156103cc57600080fd5b506103906103db36600461254e565b60276020526000908152604090205460ff1681565b3480156103fc57600080fd5b50601154610410906001600160a01b031681565b6040516001600160a01b039091168152602001610367565b34801561043457600080fd5b506002545b604051908152602001610367565b34801561045357600080fd5b5061039061046236600461254e565b601e6020526000908152604090205460ff1681565b34801561048357600080fd5b50610390610492366004612572565b610b16565b3480156104a357600080fd5b50610439600a5481565b3480156104b957600080fd5b50601054610410906001600160a01b031681565b3480156104d957600080fd5b5060405160098152602001610367565b3480156104f557600080fd5b5061050961050436600461254e565b610b3a565b005b34801561051757600080fd5b506103906105263660046124f6565b610b8b565b34801561053757600080fd5b50610439600d5481565b34801561054d57600080fd5b50601254610410906001600160a01b031681565b34801561056d57600080fd5b5061050961057c3660046125b3565b610bad565b34801561058d57600080fd5b5061050961059c36600461254e565b610bc8565b3480156105ad57600080fd5b506105096105bc36600461254e565b610d69565b3480156105cd57600080fd5b506103906105dc3660046125d0565b610dba565b3480156105ed57600080fd5b506103906105fc366004612602565b610e05565b34801561060d57600080fd5b5061043960255481565b34801561062357600080fd5b5061043961063236600461254e565b6001600160a01b031660009081526020819052604090205490565b34801561065957600080fd5b50610509610e96565b34801561066e57600080fd5b506017546103909060ff1681565b34801561068857600080fd5b5061050961069736600461261b565b610eaa565b3480156106a857600080fd5b506103906106b7366004612602565b610f12565b3480156106c857600080fd5b50610439600e5481565b3480156106de57600080fd5b506005546001600160a01b0316610410565b3480156106fc57600080fd5b506020546103909060ff1681565b34801561071657600080fd5b5061035a610fa3565b34801561072b57600080fd5b5061039061073a36600461254e565b60286020526000908152604090205460ff1681565b34801561075b57600080fd5b5061050961076a36600461261b565b610fb2565b34801561077b57600080fd5b5061039061078a3660046124f6565b611057565b34801561079b57600080fd5b506105096107aa36600461254e565b6110d2565b3480156107bb57600080fd5b506103906107ca3660046124f6565b611191565b3480156107db57600080fd5b50610439600f5481565b3480156107f157600080fd5b5061039061080036600461254e565b601f6020526000908152604090205460ff1681565b34801561082157600080fd5b50610439600b5481565b34801561083757600080fd5b5061039061084636600461254e565b60296020526000908152604090205460ff1681565b34801561086757600080fd5b50610390610876366004612602565b61119f565b34801561088757600080fd5b5061039061089636600461254e565b611211565b3480156108a757600080fd5b506017546103909062010000900460ff1681565b3480156108c757600080fd5b506105096108d636600461261b565b611240565b3480156108e757600080fd5b506105096108f6366004612602565b6112a0565b34801561090757600080fd5b50610509610916366004612602565b61130f565b34801561092757600080fd5b5061050961093636600461261b565b611342565b34801561094757600080fd5b50610439600c5481565b34801561095d57600080fd5b5061043961096c366004612654565b6113a2565b34801561097d57600080fd5b5061050961098c3660046125b3565b6113cd565b34801561099d57600080fd5b506105096109ac36600461254e565b6113f1565b3480156109bd57600080fd5b5061050961142d565b3480156109d257600080fd5b5061043960245481565b3480156109e857600080fd5b5061043960185481565b3480156109fe57600080fd5b50610509610a0d36600461254e565b6114b0565b606060038054610a2190612682565b80601f0160208091040260200160405190810160405280929190818152602001828054610a4d90612682565b8015610a9a5780601f10610a6f57610100808354040283529160200191610a9a565b820191906000526020600020905b815481529060010190602001808311610a7d57829003601f168201915b5050505050905090565b600033610ab2818585611526565b60019150505b92915050565b6010546000906001600160a01b0316336001600160a01b031614610ae157600080fd5b6017805460ff1916841515179055600854610b009060ff16600a6127b6565b610b0a90836127c5565b60165550600192915050565b600033610b2485828561164a565b610b2f8585856116c4565b506001949350505050565b610b42611f83565b6001600160a01b0381166000818152601e6020526040808220805460ff19169055517fa957ba3a52f05ac246d413f37460b13ee4b8281799a6b8365c8d227bb37656739190a250565b600033610ab2818585610b9e83836113a2565b610ba891906127e4565b611526565b610bb5611f83565b6020805460ff1916911515919091179055565b6010546001600160a01b0316336001600160a01b031614610be857600080fd5b6001600160a01b038116610c325760405162461bcd60e51b815260206004820152600c60248201526b5a65726f204164647265737360a01b60448201526064015b60405180910390fd5b6040516370a0823160e01b81523060048201526000906001600160a01b0383169063a9059cbb90339083906370a0823190602401602060405180830381865afa158015610c83573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca791906127f7565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015610cf2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d169190612810565b905080610d655760405162461bcd60e51b815260206004820152601960248201527f4661696c757265204f6e20546f6b656e205769746864726177000000000000006044820152606401610c29565b5050565b610d71611f83565b6001600160a01b0381166000818152601f6020526040808220805460ff19169055517ff98765b2b5e26c3266491f2a9f51d7fdae1c9c7ac2016fade7789d1f9e4ff3a09190a250565b6000610dc4611f83565b600a859055600b849055600c839055600d82905560148284610de687896127e4565b610df091906127e4565b610dfa91906127e4565b1115610b2f57600080fd5b6000610e0f611f83565b60646009546001610e2091906127c5565b610e2a919061282d565b821015610e705760405162461bcd60e51b815260206004820152601460248201527343616e206e6f74207365742062656c6f7720312560601b6044820152606401610c29565b600854610e819060ff16600a6127b6565b610e8b90836127c5565b600e55506001919050565b610e9e611f83565b610ea86000611fdd565b565b610eb2611f83565b6001600160a01b038216600081815260276020908152604091829020805460ff191685151590811790915591519182527f575f9d01836c9206322151b9e9ec3f2b77b87e71176933b9b44d2d732f768d9591015b60405180910390a25050565b6000610f1c611f83565b60646009546001610f2d91906127c5565b610f37919061282d565b821015610f7d5760405162461bcd60e51b815260206004820152601460248201527343616e206e6f74207365742062656c6f7720312560601b6044820152606401610c29565b600854610f8e9060ff16600a6127b6565b610f9890836127c5565b600f55506001919050565b606060048054610a2190612682565b6010546001600160a01b03163314610fc957600080fd5b6012546001600160a01b039081169083160361104d5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610c29565b610d65828261202f565b6000338161106582866113a2565b9050838110156110c55760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610c29565b610b2f8286868403611526565b6010546001600160a01b031633146110e957600080fd5b6001600160a01b0381166000908152601f602052604090205460ff1661110e57600080fd5b6012546001600160a01b03908116908216036111655760405162461bcd60e51b815260206004820152601660248201527521b0b73737ba103132902ab734b9bbb0b8102830b4b960511b6044820152606401610c29565b6001600160a01b038181166000908152602081905260409020546010549091610d6591849116836116c4565b600033610ab28185856116c4565b60008082116111de5760405162461bcd60e51b815260206004820152600b60248201526a16995c9bc8105b5bdd5b9d60aa1b6044820152606401610c29565b600082905080601360008282546111f591906127e4565b909155503390506112078130846120a3565b5060019392505050565b600061121b611f83565b50601080546001600160a01b0383166001600160a01b03199091161790556001919050565b611248611f83565b6001600160a01b038216600081815260266020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df79101610f06565b6010546001600160a01b0316336001600160a01b0316146112c057600080fd5b606481111580156112cf575060015b6112d857600080fd5b306000908152602081905260408120549060646112f584846127c5565b6112ff919061282d565b905061130a8161218f565b505050565b611317611f83565b60178054436018556023929092556020805462ff00001916905562ffffff1990911662010001179055565b61134a611f83565b6001600160a01b038216600081815260286020908152604091829020805460ff191685151590811790915591519182527f5956094251965a24e12663de1458c0d93ae46d0299678c87fb094b82fe3f26879101610f06565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6113d5611f83565b60208054911515620100000262ff000019909216919091179055565b6010546001600160a01b0316331461140857600080fd5b6001600160a01b0381166000908152601e602052604090205460ff1661110e57600080fd5b6010546001600160a01b0316336001600160a01b03161461144d57600080fd5b6010546040516000916001600160a01b03169047908381818185875af1925050503d806000811461149a576040519150601f19603f3d011682016040523d82523d6000602084013e61149f565b606091505b50509050806114ad57600080fd5b50565b6114b8611f83565b6001600160a01b03811661151d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c29565b6114ad81611fdd565b6001600160a01b0383166115885760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610c29565b6001600160a01b0382166115e95760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610c29565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600061165684846113a2565b905060001981146116be57818110156116b15760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610c29565b6116be8484848403611526565b50505050565b6001600160a01b0383166116ea5760405162461bcd60e51b8152600401610c299061284f565b6001600160a01b0382166117105760405162461bcd60e51b8152600401610c2990612894565b80611730846001600160a01b031660009081526020819052604090205490565b101561174e5760405162461bcd60e51b8152600401610c29906128d7565b601754610100900460ff16156117dc576001600160a01b03831660009081526026602052604090205460ff168061179d57506001600160a01b03821660009081526026602052604090205460ff165b6117dc5760405162461bcd60e51b815260206004820152601060248201526f54726164696e67204e6f74204c69766560801b6044820152606401610c29565b60205462010000900460ff161561185f576001600160a01b0383166000908152601b60205260409020544390036118435760405162461bcd60e51b815260206004820152600b60248201526a109bdd08109b1bd8dad95960aa1b6044820152606401610c29565b6001600160a01b0382166000908152601b602052604090204390555b602054610100900460ff1615611af6576001600160a01b0383166000908152601e602052604090205460ff1680156118a557506010546001600160a01b03838116911614155b156118e45760405162461bcd60e51b815260206004820152600f60248201526e29b734b832b910213637b1b5b2b21760891b6044820152606401610c29565b6023546018546118f4904361291d565b1015611965576001600160a01b0382166000908152601e60205260408120805460ff19166001179055602480549161192b83612930565b90915550506040516001600160a01b038316907f18e6e5ce5c121466e41a954e72765d1ea02b8e6919043b61f0dab08b4c6572e590600090a25b60205460ff1615611af6576001600160a01b03831660009081526029602052604090205460ff16156119ad576001600160a01b0382166000908152601c602052604090204390555b6001600160a01b03821660009081526029602052604090205460ff16156119ea576001600160a01b0383166000908152601d602052604090204390555b6001600160a01b0383166000908152601f602052604090205460ff168015611a2057506010546001600160a01b03838116911614155b15611a5c5760405162461bcd60e51b815260206004820152600c60248201526b2137ba10213637b1b5b2b21760a11b6044820152606401610c29565b6001600160a01b038084166000908152601d60209081526040808320549386168352601c90915290205403611af6576001600160a01b0382166000908152601f60205260408120805460ff191660011790556025805491611abc83612930565b90915550506040516001600160a01b038316907f83f3ba6ccfab035b4d0e02cbd3348d17e3fae04af10d16e650758656c8f2c22890600090a25b6001600160a01b03831660009081526029602052604090205460ff1680611b3557506001600160a01b03821660009081526029602052604090205460ff165b8015611b44575060195460ff16155b15611c23576001600160a01b03831660009081526029602052604090205460ff16611c23576014546015548110611b8057611b80601554612309565b60165460135410158015611b96575060175460ff165b15611c2157611ba660165461218f565b60165460136000828254611bba919061291d565b90915550506010546040516000916001600160a01b03169047908381818185875af1925050503d8060008114611c0c576040519150601f19603f3d011682016040523d82523d6000602084013e611c11565b606091505b5050905080611c1f57600080fd5b505b505b6001600160a01b03831660009081526029602052604090205460ff168015611c6457506001600160a01b03821660009081526027602052604090205460ff16155b15611d2457600e54811115611c7857600080fd5b602054610100900460ff1615611d24576012546001600160a01b0390811690841603611ce3576001600160a01b0382166000908152601a6020526040902054439003611cc357600080fd5b6001600160a01b0382166000908152601a60205260409020439055611d24565b6001600160a01b0383166000908152601a6020526040902054439003611d0857600080fd5b6001600160a01b0383166000908152601a602052604090204390555b6001600160a01b03821660009081526028602052604090205460ff16611db557600f5481611d67846001600160a01b031660009081526020819052604090205490565b611d7191906127e4565b1115611db55760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610c29565b6001600160a01b03831660009081526026602052604081205460019190819060ff1680611dfa57506001600160a01b03851660009081526026602052604090205460ff165b15611e0457600092505b8215611f70576001600160a01b03851660009081526029602052604090205460ff168015611e3457506000600d54115b15611ea7576064600d5485611e4991906127c5565b611e53919061282d565b91506064600c5485611e6591906127c5565b611e6f919061282d565b90508160136000828254611e8391906127e4565b925050819055508060146000828254611e9c91906127e4565b90915550611f3f9050565b6001600160a01b03861660009081526029602052604090205460ff168015611ed157506000600b54115b15611f3f576064600b5485611ee691906127c5565b611ef0919061282d565b91506064600a5485611f0291906127c5565b611f0c919061282d565b90508160136000828254611f2091906127e4565b925050819055508060146000828254611f3991906127e4565b90915550505b8115611f5957611f598630611f5484866127e4565b6120a3565b611f6381836127e4565b611f6d908561291d565b93505b611f7b8686866120a3565b505050505050565b6005546001600160a01b03163314610ea85760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610c29565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0382166000908152602960205260409020805460ff191682151517905561205d8282610eaa565b6120678282611342565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6001600160a01b0383166120c95760405162461bcd60e51b8152600401610c299061284f565b6001600160a01b0382166120ef5760405162461bcd60e51b8152600401610c2990612894565b6001600160a01b038316600090815260208190526040902054818110156121285760405162461bcd60e51b8152600401610c29906128d7565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a350505050565b6019805460ff1916600117905560408051600280825260608201835260009260208301908036833701905050905030816000815181106121d1576121d1612949565b6001600160a01b03928316602091820292909201810191909152601154604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa15801561222a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061224e919061295f565b8160018151811061226157612261612949565b6001600160a01b0392831660209182029290920101526011546122879130911684611526565b6011546001600160a01b031663791ac94783600084306122a94261012c6127e4565b6040518663ffffffff1660e01b81526004016122c995949392919061297c565b600060405180830381600087803b1580156122e357600080fd5b505af11580156122f7573d6000803e3d6000fd5b50506019805460ff1916905550505050565b6019805460ff19166001179055600061232360028361282d565b90506000612331828461291d565b90504761233d8361218f565b6000612349824761291d565b905061235583826123a7565b60408051858152602081018390529081018490527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a150506019805460ff19169055505050565b6019805460ff191660011790556011546123cc9030906001600160a01b031684611526565b6011546001600160a01b031663f305d7198230856000806123f56005546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af115801561245d573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061248291906129ed565b50506019805460ff19169055505050565b600060208083528351808285015260005b818110156124c0578581018301518582016040015282016124a4565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146114ad57600080fd5b6000806040838503121561250957600080fd5b8235612514816124e1565b946020939093013593505050565b80151581146114ad57600080fd5b6000806040838503121561254357600080fd5b823561251481612522565b60006020828403121561256057600080fd5b813561256b816124e1565b9392505050565b60008060006060848603121561258757600080fd5b8335612592816124e1565b925060208401356125a2816124e1565b929592945050506040919091013590565b6000602082840312156125c557600080fd5b813561256b81612522565b600080600080608085870312156125e657600080fd5b5050823594602084013594506040840135936060013592509050565b60006020828403121561261457600080fd5b5035919050565b6000806040838503121561262e57600080fd5b8235612639816124e1565b9150602083013561264981612522565b809150509250929050565b6000806040838503121561266757600080fd5b8235612672816124e1565b91506020830135612649816124e1565b600181811c9082168061269657607f821691505b6020821081036126b657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111561270d5781600019048211156126f3576126f36126bc565b8085161561270057918102915b93841c93908002906126d7565b509250929050565b60008261272457506001610ab8565b8161273157506000610ab8565b816001811461274757600281146127515761276d565b6001915050610ab8565b60ff841115612762576127626126bc565b50506001821b610ab8565b5060208310610133831016604e8410600b8410161715612790575081810a610ab8565b61279a83836126d2565b80600019048211156127ae576127ae6126bc565b029392505050565b600061256b60ff841683612715565b60008160001904831182151516156127df576127df6126bc565b500290565b80820180821115610ab857610ab86126bc565b60006020828403121561280957600080fd5b5051919050565b60006020828403121561282257600080fd5b815161256b81612522565b60008261284a57634e487b7160e01b600052601260045260246000fd5b500490565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60208082526026908201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604082015265616c616e636560d01b606082015260800190565b81810381811115610ab857610ab86126bc565b600060018201612942576129426126bc565b5060010190565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561297157600080fd5b815161256b816124e1565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156129cc5784516001600160a01b0316835293830193918301916001016129a7565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215612a0257600080fd5b835192506020840151915060408401519050925092509256fea264697066735822122007c6c9a427f2962915371b2cba5d76be418873be9f00bbb9c2e89a7cb6ed7cd264736f6c63430008100033

Deployed Bytecode Sourcemap

17055:15080:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12227:102;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13193:244;;;;;;;;;;-1:-1:-1;13193:244:0;;;;;:::i;:::-;;:::i;:::-;;;1188:14:1;;1181:22;1163:41;;1151:2;1136:18;13193:244:0;1023:187:1;31071:226:0;;;;;;;;;;-1:-1:-1;31071:226:0;;;;;:::i;:::-;;:::i;19272:63::-;;;;;;;;;;-1:-1:-1;19272:63:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;17777:41;;;;;;;;;;-1:-1:-1;17777:41:0;;;;-1:-1:-1;;;;;17777:41:0;;;;;;-1:-1:-1;;;;;2094:32:1;;;2076:51;;2064:2;2049:18;17777:41:0;1904:229:1;12622:110:0;;;;;;;;;;-1:-1:-1;12712:12:0;;12622:110;;;2284:25:1;;;2272:2;2257:18;12622:110:0;2138:177:1;18513:42:0;;;;;;;;;;-1:-1:-1;18513:42:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;13445:297;;;;;;;;;;-1:-1:-1;13445:297:0;;;;;:::i;:::-;;:::i;17339:30::-;;;;;;;;;;;;;;;;17614:69;;;;;;;;;;-1:-1:-1;17614:69:0;;;;-1:-1:-1;;;;;17614:69:0;;;12522:92;;;;;;;;;;-1:-1:-1;12522:92:0;;12605:1;3131:36:1;;3119:2;3104:18;12522:92:0;2989:184:1;31940:155:0;;;;;;;;;;-1:-1:-1;31940:155:0;;;;;:::i;:::-;;:::i;:::-;;14265:272;;;;;;;;;;-1:-1:-1;14265:272:0;;;;;:::i;:::-;;:::i;17451:32::-;;;;;;;;;;;;;;;;17825:28;;;;;;;;;;-1:-1:-1;17825:28:0;;;;-1:-1:-1;;;;;17825:28:0;;;27775:91;;;;;;;;;;-1:-1:-1;27775:91:0;;;;;:::i;:::-;;:::i;31305:295::-;;;;;;;;;;-1:-1:-1;31305:295:0;;;;;:::i;:::-;;:::i;31803:129::-;;;;;;;;;;-1:-1:-1;31803:129:0;;;;;:::i;:::-;;:::i;28435:499::-;;;;;;;;;;-1:-1:-1;28435:499:0;;;;;:::i;:::-;;:::i;28942:270::-;;;;;;;;;;-1:-1:-1;28942:270:0;;;;;:::i;:::-;;:::i;18876:29::-;;;;;;;;;;;;;;;;12337:177;;;;;;;;;;-1:-1:-1;12337:177:0;;;;;:::i;:::-;-1:-1:-1;;;;;12488:18:0;12456:7;12488:18;;;;;;;;;;;;12337:177;11154:103;;;;;;;;;;;;;:::i;18064:27::-;;;;;;;;;;-1:-1:-1;18064:27:0;;;;;;;;26921:240;;;;;;;;;;-1:-1:-1;26921:240:0;;;;;:::i;:::-;;:::i;29220:290::-;;;;;;;;;;-1:-1:-1;29220:290:0;;;;;:::i;:::-;;:::i;17490:53::-;;;;;;;;;;;;;;;;10919:87;;;;;;;;;;-1:-1:-1;10992:6:0;;-1:-1:-1;;;;;10992:6:0;10919:87;;18610:28;;;;;;;;;;-1:-1:-1;18610:28:0;;;;;;;;12113:106;;;;;;;;;;;;;:::i;19342:58::-;;;;;;;;;;-1:-1:-1;19342:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;29825:286;;;;;;;;;;-1:-1:-1;29825:286:0;;;;;:::i;:::-;;:::i;13750:507::-;;;;;;;;;;-1:-1:-1;13750:507:0;;;;;:::i;:::-;;:::i;30438:293::-;;;;;;;;;;-1:-1:-1;30438:293:0;;;;;:::i;:::-;;:::i;12949:236::-;;;;;;;;;;-1:-1:-1;12949:236:0;;;;;:::i;:::-;;:::i;17550:57::-;;;;;;;;;;;;;;;;18563:39;;;;;;;;;;-1:-1:-1;18563:39:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;17376:28;;;;;;;;;;;;;;;;19407:57;;;;;;;;;;-1:-1:-1;19407:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;27878:365;;;;;;;;;;-1:-1:-1;27878:365:0;;;;;:::i;:::-;;:::i;28251:176::-;;;;;;;;;;-1:-1:-1;28251:176:0;;;;;:::i;:::-;;:::i;18132:33::-;;;;;;;;;;-1:-1:-1;18132:33:0;;;;;;;;;;;26731:182;;;;;;;;;;-1:-1:-1;26731:182:0;;;;;:::i;:::-;;:::i;30739:324::-;;;;;;;;;;-1:-1:-1;30739:324:0;;;;;:::i;:::-;;:::i;27402:267::-;;;;;;;;;;-1:-1:-1;27402:267:0;;;;;:::i;:::-;;:::i;27169:225::-;;;;;;;;;;-1:-1:-1;27169:225:0;;;;;:::i;:::-;;:::i;17411:33::-;;;;;;;;;;;;;;;;12740:201;;;;;;;;;;-1:-1:-1;12740:201:0;;;;;:::i;:::-;;:::i;27677:90::-;;;;;;;;;;-1:-1:-1;27677:90:0;;;;;:::i;:::-;;:::i;30119:311::-;;;;;;;;;;-1:-1:-1;30119:311:0;;;;;:::i;:::-;;:::i;31608:187::-;;;;;;;;;;;;;:::i;18837:32::-;;;;;;;;;;;;;;;;18172:37;;;;;;;;;;;;;;;;11265:238;;;;;;;;;;-1:-1:-1;11265:238:0;;;;;:::i;:::-;;:::i;12227:102::-;12283:13;12316:5;12309:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12227:102;:::o;13193:244::-;13314:4;10556:10;13375:32;10556:10;13391:7;13400:6;13375:8;:32::i;:::-;13425:4;13418:11;;;13193:244;;;;;:::o;31071:226::-;31180:9;;31139:4;;-1:-1:-1;;;;;31180:9:0;10556:10;-1:-1:-1;;;;;31164:25:0;;31156:34;;;;;;31201:8;:16;;-1:-1:-1;;31201:16:0;;;;;;;31256:9;;31252:13;;31201:16;31256:9;31252:2;:13;:::i;:::-;31239:26;;:10;:26;:::i;:::-;31228:8;:37;-1:-1:-1;31285:4:0;31071:226;;;;:::o;13445:297::-;13578:4;10556:10;13636:38;13652:4;10556:10;13667:6;13636:15;:38::i;:::-;13685:27;13695:4;13701:2;13705:6;13685:9;:27::i;:::-;-1:-1:-1;13730:4:0;;13445:297;-1:-1:-1;;;;13445:297:0:o;31940:155::-;10878:13;:11;:13::i;:::-;-1:-1:-1;;;;;32009:20:0;::::1;32032:5;32009:20:::0;;;:9:::1;:20;::::0;;;;;:28;;-1:-1:-1;;32009:28:0::1;::::0;;32063:24;::::1;::::0;32032:5;32063:24:::1;31940:155:::0;:::o;14265:272::-;14382:4;10556:10;14443:64;10556:10;14459:7;14496:10;14468:25;10556:10;14459:7;14468:9;:25::i;:::-;:38;;;;:::i;:::-;14443:8;:64::i;27775:91::-;10878:13;:11;:13::i;:::-;27842:8:::1;:16:::0;;-1:-1:-1;;27842:16:0::1;::::0;::::1;;::::0;;;::::1;::::0;;27775:91::o;31305:295::-;31383:9;;-1:-1:-1;;;;;31383:9:0;10556:10;-1:-1:-1;;;;;31367:25:0;;31359:34;;;;;;-1:-1:-1;;;;;31412:19:0;;31404:44;;;;-1:-1:-1;;;31404:44:0;;7184:2:1;31404:44:0;;;7166:21:1;7223:2;7203:18;;;7196:30;-1:-1:-1;;;7242:18:1;;;7235:42;7294:18;;31404:44:0;;;;;;;;;31503:38;;-1:-1:-1;;;31503:38:0;;31535:4;31503:38;;;2076:51:1;31459:6:0;;-1:-1:-1;;;;;31468:22:0;;;;;31491:10;;31468:22;;31503:23;;2049:18:1;;31503:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31468:74;;-1:-1:-1;;;;;;31468:74:0;;;;;;;-1:-1:-1;;;;;7704:32:1;;;31468:74:0;;;7686:51:1;7753:18;;;7746:34;7659:18;;31468:74:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31459:83;;31561:1;31553:39;;;;-1:-1:-1;;;31553:39:0;;8243:2:1;31553:39:0;;;8225:21:1;8282:2;8262:18;;;8255:30;8321:27;8301:18;;;8294:55;8366:18;;31553:39:0;8041:349:1;31553:39:0;31348:252;31305:295;:::o;31803:129::-;10878:13;:11;:13::i;:::-;-1:-1:-1;;;;;31866:14:0;::::1;31883:5;31866:14:::0;;;:6:::1;:14;::::0;;;;;:22;;-1:-1:-1;;31866:22:0::1;::::0;;31906:18;::::1;::::0;31883:5;31906:18:::1;31803:129:::0;:::o;28435:499::-;28647:4;10878:13;:11;:13::i;:::-;28669:11:::1;:26:::0;;;28706:9:::1;:22:::0;;;28739:14:::1;:32:::0;;;28782:12:::1;:28:::0;;;28899:2:::1;28797:13:::0;28756:15;28830:23:::1;28718:10:::0;28683:12;28830:23:::1;:::i;:::-;:49;;;;:::i;:::-;:64;;;;:::i;:::-;28829:72;;28821:81;;;::::0;::::1;28942:270:::0;29044:4;10878:13;:11;:13::i;:::-;29098:3:::1;29084:7;;29094:1;29084:11;;;;:::i;:::-;:17;;;;:::i;:::-;29067:12;:35;;29059:68;;;::::0;-1:-1:-1;;;29059:68:0;;8819:2:1;29059:68:0::1;::::0;::::1;8801:21:1::0;8858:2;8838:18;;;8831:30;-1:-1:-1;;;8877:18:1;;;8870:50;8937:18;;29059:68:0::1;8617:344:1::0;29059:68:0::1;29171:9;::::0;29167:13:::1;::::0;29171:9:::1;;29167:2;:13;:::i;:::-;29152:28;::::0;:12;:28:::1;:::i;:::-;29138:11;:42:::0;-1:-1:-1;29200:4:0::1;28942:270:::0;;;:::o;11154:103::-;10878:13;:11;:13::i;:::-;11219:30:::1;11246:1;11219:18;:30::i;:::-;11154:103::o:0;26921:240::-;10878:13;:11;:13::i;:::-;-1:-1:-1;;;;;27039:40:0;::::1;;::::0;;;:31:::1;:40;::::0;;;;;;;;:51;;-1:-1:-1;;27039:51:0::1;::::0;::::1;;::::0;;::::1;::::0;;;27106:47;;1163:41:1;;;27106:47:0::1;::::0;1136:18:1;27106:47:0::1;;;;;;;;26921:240:::0;;:::o;29220:290::-;29330:4;10878:13;:11;:13::i;:::-;29388:3:::1;29374:7;;29384:1;29374:11;;;;:::i;:::-;:17;;;;:::i;:::-;29353:16;:39;;29345:72;;;::::0;-1:-1:-1;;;29345:72:0;;8819:2:1;29345:72:0::1;::::0;::::1;8801:21:1::0;8858:2;8838:18;;;8831:30;-1:-1:-1;;;8877:18:1;;;8870:50;8937:18;;29345:72:0::1;8617:344:1::0;29345:72:0::1;29469:9;::::0;29465:13:::1;::::0;29469:9:::1;;29465:2;:13;:::i;:::-;29446:32;::::0;:16;:32:::1;:::i;:::-;29428:15;:50:::0;-1:-1:-1;29498:4:0::1;29220:290:::0;;;:::o;12113:106::-;12171:13;12204:7;12197:14;;;;;:::i;29825:286::-;29928:9;;-1:-1:-1;;;;;29928:9:0;29914:10;:23;29906:32;;;;;;29965:13;;-1:-1:-1;;;;;29965:13:0;;;29957:21;;;;29949:100;;;;-1:-1:-1;;;29949:100:0;;9168:2:1;29949:100:0;;;9150:21:1;9207:2;9187:18;;;9180:30;9246:34;9226:18;;;9219:62;9317:27;9297:18;;;9290:55;9362:19;;29949:100:0;8966:421:1;29949:100:0;30062:41;30091:4;30097:5;30062:28;:41::i;13750:507::-;13872:4;10556:10;13872:4;13960:25;10556:10;13977:7;13960:9;:25::i;:::-;13933:52;;14038:15;14018:16;:35;;13996:122;;;;-1:-1:-1;;;13996:122:0;;9594:2:1;13996:122:0;;;9576:21:1;9633:2;9613:18;;;9606:30;9672:34;9652:18;;;9645:62;-1:-1:-1;;;9723:18:1;;;9716:35;9768:19;;13996:122:0;9392:401:1;13996:122:0;14154:60;14163:5;14170:7;14198:15;14179:16;:34;14154:8;:60::i;30438:293::-;30512:9;;-1:-1:-1;;;;;30512:9:0;30498:10;:23;30490:32;;;;;;-1:-1:-1;;;;;30541:15:0;;;;;;:6;:15;;;;;;;;30533:24;;;;;;30587:13;;-1:-1:-1;;;;;30587:13:0;;;30576:24;;;;30568:59;;;;-1:-1:-1;;;30568:59:0;;10000:2:1;30568:59:0;;;9982:21:1;10039:2;10019:18;;;10012:30;-1:-1:-1;;;10058:18:1;;;10051:52;10120:18;;30568:59:0;9798:346:1;30568:59:0;-1:-1:-1;;;;;12488:18:0;;;30638:14;12488:18;;;;;;;;;;;30703:9;;12488:18;;30684:37;;12488:18;;30703:9;12488:18;30684:9;:37::i;12949:236::-;13066:4;10556:10;13127:28;10556:10;13144:2;13148:6;13127:9;:28::i;27878:365::-;27938:4;27986:1;27977:6;:10;27955:71;;;;-1:-1:-1;;;27955:71:0;;10351:2:1;27955:71:0;;;10333:21:1;10390:2;10370:18;;;10363:30;-1:-1:-1;;;10409:18:1;;;10402:41;10460:18;;27955:71:0;10149:335:1;27955:71:0;28038:22;28063:6;28038:31;;28096:14;28080:12;;:30;;;;;;;:::i;:::-;;;;-1:-1:-1;10556:10:0;;-1:-1:-1;28161:52:0;10556:10;28191:4;28198:14;28161:15;:52::i;:::-;-1:-1:-1;28231:4:0;;27878:365;-1:-1:-1;;;27878:365:0:o;28251:176::-;28354:4;10878:13;:11;:13::i;:::-;-1:-1:-1;28376:9:0::1;:21:::0;;-1:-1:-1;;;;;28376:21:0;::::1;-1:-1:-1::0;;;;;;28376:21:0;;::::1;;::::0;;;28251:176;;;:::o;26731:182::-;10878:13;:11;:13::i;:::-;-1:-1:-1;;;;;26816:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;26816:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;26871:34;;1163:41:1;;;26871:34:0::1;::::0;1136:18:1;26871:34:0::1;1023:187:1::0;30739:324:0;30815:9;;-1:-1:-1;;;;;30815:9:0;10556:10;-1:-1:-1;;;;;30799:25:0;;30791:34;;;;;;30855:3;30844:7;:14;;:30;;;;-1:-1:-1;30862:12:0;30844:30;30836:39;;;;;;30935:4;30886:28;12488:18;;;;;;;;;;;;31010:3;30975:32;30999:7;12488:18;30975:32;:::i;:::-;:38;;;;:::i;:::-;30952:61;;31024:31;31042:12;31024:17;:31::i;:::-;30780:283;;30739:324;:::o;27402:267::-;10878:13;:11;:13::i;:::-;27477::::1;:20:::0;;27529:12:::1;27508:18;:33:::0;27552:13:::1;:30:::0;;;;27619:8:::1;:16:::0;;-1:-1:-1;;27619:16:0::1;::::0;;-1:-1:-1;;27646:15:0;;;;;;;27402:267::o;27169:225::-;10878:13;:11;:13::i;:::-;-1:-1:-1;;;;;27282:35:0;::::1;;::::0;;;:26:::1;:35;::::0;;;;;;;;:46;;-1:-1:-1;;27282:46:0::1;::::0;::::1;;::::0;;::::1;::::0;;;27344:42;;1163:41:1;;;27344:42:0::1;::::0;1136:18:1;27344:42:0::1;1023:187:1::0;12740:201:0;-1:-1:-1;;;;;12906:18:0;;;12874:7;12906:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;12740:201::o;27677:90::-;10878:13;:11;:13::i;:::-;27743:8:::1;:16:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;27743:16:0;;::::1;::::0;;;::::1;::::0;;27677:90::o;30119:311::-;30196:9;;-1:-1:-1;;;;;30196:9:0;30182:10;:23;30174:32;;;;;;-1:-1:-1;;;;;30225:18:0;;;;;;:9;:18;;;;;;;;30217:27;;;;;31608:187;31676:9;;-1:-1:-1;;;;;31676:9:0;10556:10;-1:-1:-1;;;;;31660:25:0;;31652:34;;;;;;31717:9;;31709:57;;31698:6;;-1:-1:-1;;;;;31717:9:0;;31740:21;;31698:6;31709:57;31698:6;31709:57;31740:21;31717:9;31709:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31697:69;;;31785:1;31777:10;;;;;;31641:154;31608:187::o;11265:238::-;10878:13;:11;:13::i;:::-;-1:-1:-1;;;;;11368:22:0;::::1;11346:110;;;::::0;-1:-1:-1;;;11346:110:0;;10901:2:1;11346:110:0::1;::::0;::::1;10883:21:1::0;10940:2;10920:18;;;10913:30;10979:34;10959:18;;;10952:62;-1:-1:-1;;;11030:18:1;;;11023:36;11076:19;;11346:110:0::1;10699:402:1::0;11346:110:0::1;11467:28;11486:8;11467:18;:28::i;15538:380::-:0;-1:-1:-1;;;;;15674:19:0;;15666:68;;;;-1:-1:-1;;;15666:68:0;;11308:2:1;15666:68:0;;;11290:21:1;11347:2;11327:18;;;11320:30;11386:34;11366:18;;;11359:62;-1:-1:-1;;;11437:18:1;;;11430:34;11481:19;;15666:68:0;11106:400:1;15666:68:0;-1:-1:-1;;;;;15753:21:0;;15745:68;;;;-1:-1:-1;;;15745:68:0;;11713:2:1;15745:68:0;;;11695:21:1;11752:2;11732:18;;;11725:30;11791:34;11771:18;;;11764:62;-1:-1:-1;;;11842:18:1;;;11835:32;11884:19;;15745:68:0;11511:398:1;15745:68:0;-1:-1:-1;;;;;15826:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;15878:32;;2284:25:1;;;15878:32:0;;2257:18:1;15878:32:0;;;;;;;15538:380;;;:::o;15926:502::-;16061:24;16088:25;16098:5;16105:7;16088:9;:25::i;:::-;16061:52;;-1:-1:-1;;16128:16:0;:37;16124:297;;16228:6;16208:16;:26;;16182:117;;;;-1:-1:-1;;;16182:117:0;;12116:2:1;16182:117:0;;;12098:21:1;12155:2;12135:18;;;12128:30;12194:31;12174:18;;;12167:59;12243:18;;16182:117:0;11914:353:1;16182:117:0;16343:51;16352:5;16359:7;16387:6;16368:16;:25;16343:8;:51::i;:::-;16050:378;15926:502;;;:::o;21288:4035::-;-1:-1:-1;;;;;21386:18:0;;21378:68;;;;-1:-1:-1;;;21378:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21465:16:0;;21457:64;;;;-1:-1:-1;;;21457:64:0;;;;;;;:::i;:::-;21559:6;21540:15;21550:4;-1:-1:-1;;;;;12488:18:0;12456:7;12488:18;;;;;;;;;;;;12337:177;21540:15;:25;;21532:76;;;;-1:-1:-1;;;21532:76:0;;;;;;;:::i;:::-;21624:7;;;;;;;21621:120;;;-1:-1:-1;;;;;21656:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;21685:23:0;;;;;;:19;:23;;;;;;;;21656:52;21648:81;;;;-1:-1:-1;;;21648:81:0;;13691:2:1;21648:81:0;;;13673:21:1;13730:2;13710:18;;;13703:30;-1:-1:-1;;;13749:18:1;;;13742:46;13805:18;;21648:81:0;13489:340:1;21648:81:0;21767:8;;;;;;;21764:138;;;-1:-1:-1;;;;;21800:15:0;;;;;;:9;:15;;;;;;21819:12;21800:31;;21792:55;;;;-1:-1:-1;;;21792:55:0;;14036:2:1;21792:55:0;;;14018:21:1;14075:2;14055:18;;;14048:30;-1:-1:-1;;;14094:18:1;;;14087:41;14145:18;;21792:55:0;13834:335:1;21792:55:0;-1:-1:-1;;;;;21862:13:0;;;;;;:9;:13;;;;;21878:12;21862:28;;21764:138;21917:15;;;;;;;21914:1006;;;-1:-1:-1;;;;;22011:15:0;;;;;;:9;:15;;;;;;;;:34;;;;-1:-1:-1;22036:9:0;;-1:-1:-1;;;;;22030:15:0;;;22036:9;;22030:15;;22011:34;22008:101;;;22067:25;;-1:-1:-1;;;22067:25:0;;14376:2:1;22067:25:0;;;14358:21:1;14415:2;14395:18;;;14388:30;-1:-1:-1;;;14434:18:1;;;14427:45;14489:18;;22067:25:0;14174:339:1;22008:101:0;22172:13;;22151:18;;22136:33;;:12;:33;:::i;:::-;:49;22133:184;;;-1:-1:-1;;;;;22206:13:0;;;;;;:9;:13;;;;;:20;;-1:-1:-1;;22206:20:0;22222:4;22206:20;;;22245:13;:16;;;;;;:::i;:::-;;;;-1:-1:-1;;22285:16:0;;-1:-1:-1;;;;;22285:16:0;;;;;;;;22133:184;22336:8;;;;22333:576;;;-1:-1:-1;;;;;22368:31:0;;;;;;:25;:31;;;;;;;;22365:104;;;-1:-1:-1;;;;;22423:11:0;;;;;;:7;:11;;;;;22437:12;22423:26;;22365:104;-1:-1:-1;;;;;22490:29:0;;;;;;:25;:29;;;;;;;;22487:105;;;-1:-1:-1;;;;;22543:14:0;;;;;;:8;:14;;;;;22560:12;22543:29;;22487:105;-1:-1:-1;;;;;22623:12:0;;;;;;:6;:12;;;;;;;;:31;;;;-1:-1:-1;22645:9:0;;-1:-1:-1;;;;;22639:15:0;;;22645:9;;22639:15;;22623:31;22620:99;;;22676:22;;-1:-1:-1;;;22676:22:0;;14993:2:1;22676:22:0;;;14975:21:1;15032:2;15012:18;;;15005:30;-1:-1:-1;;;15051:18:1;;;15044:42;15103:18;;22676:22:0;14791:336:1;22620:99:0;-1:-1:-1;;;;;22753:14:0;;;;;;;:8;:14;;;;;;;;;22738:11;;;;;:7;:11;;;;;;:29;22735:159;;-1:-1:-1;;;;;22788:10:0;;;;;;:6;:10;;;;;:17;;-1:-1:-1;;22788:17:0;22801:4;22788:17;;;22824:10;:13;;;;;;:::i;:::-;;;;-1:-1:-1;;22861:13:0;;-1:-1:-1;;;;;22861:13:0;;;;;;;;22735:159;-1:-1:-1;;;;;22948:31:0;;;;;;:25;:31;;;;;;;;;:64;;-1:-1:-1;;;;;;22983:29:0;;;;;;:25;:29;;;;;;;;22948:64;22947:87;;;;-1:-1:-1;23018:16:0;;;;23017:17;22947:87;22943:695;;;-1:-1:-1;;;;;23056:31:0;;;;;;:25;:31;;;;;;;;23051:576;;23143:18;;23212:14;;23184:42;;23180:122;;23251:31;23267:14;;23251:15;:31::i;:::-;23342:8;;23325:12;;23324:26;;:38;;;;-1:-1:-1;23354:8:0;;;;23324:38;23320:292;;;23387:27;23405:8;;23387:17;:27::i;:::-;23453:8;;23437:12;;:24;;;;;;;:::i;:::-;;;;-1:-1:-1;;23507:9:0;;23499:57;;23485:9;;-1:-1:-1;;;;;23507:9:0;;23530:21;;23485:9;23499:57;23485:9;23499:57;23530:21;23507:9;23499:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23484:72;;;23587:4;23579:13;;;;;;23364:248;23320:292;23089:538;23051:576;-1:-1:-1;;;;;23653:31:0;;;;;;:25;:31;;;;;;;;:71;;;;-1:-1:-1;;;;;;23689:35:0;;;;;;:31;:35;;;;;;;;23688:36;23653:71;23650:515;;;23759:11;;23749:6;:21;;23741:30;;;;;;23790:15;;;;;;;23786:368;;;23838:13;;-1:-1:-1;;;;;23838:13:0;;;23830:21;;;;23826:313;;-1:-1:-1;;;;;23883:13:0;;;;;;:9;:13;;;;;;23900:12;23883:29;;23875:38;;;;;;-1:-1:-1;;;;;23936:13:0;;;;;;:9;:13;;;;;23952:12;23936:28;;23826:313;;;-1:-1:-1;;;;;24026:15:0;;;;;;:9;:15;;;;;;24045:12;24026:31;;24018:40;;;;;;-1:-1:-1;;;;;24085:15:0;;;;;;:9;:15;;;;;24103:12;24085:30;;23826:313;-1:-1:-1;;;;;24182:30:0;;;;;;:26;:30;;;;;;;;24177:137;;24263:15;;24253:6;24237:13;24247:2;-1:-1:-1;;;;;12488:18:0;12456:7;12488:18;;;;;;;;;;;;12337:177;24237:13;:22;;;;:::i;:::-;:41;;24229:73;;;;-1:-1:-1;;;24229:73:0;;15334:2:1;24229:73:0;;;15316:21:1;15373:2;15353:18;;;15346:30;-1:-1:-1;;;15392:18:1;;;15385:49;15451:18;;24229:73:0;15132:343:1;24229:73:0;-1:-1:-1;;;;;24415:25:0;;24326:12;24415:25;;;:19;:25;;;;;;24341:4;;24326:12;;;24415:25;;;:52;;-1:-1:-1;;;;;;24444:23:0;;;;;;:19;:23;;;;;;;;24415:52;24412:99;;;24494:5;24484:15;;24412:99;24528:7;24524:738;;;-1:-1:-1;;;;;24555:29:0;;;;;;:25;:29;;;;;;;;:49;;;;;24603:1;24588:12;;:16;24555:49;24552:544;;;24656:3;24641:12;;24632:6;:21;;;;:::i;:::-;:27;;;;:::i;:::-;24625:34;;24713:3;24696:14;;24687:6;:23;;;;:::i;:::-;:29;;;;:::i;:::-;24678:38;;24751:4;24735:12;;:20;;;;;;;:::i;:::-;;;;;;;;24796:6;24774:18;;:28;;;;;;;:::i;:::-;;;;-1:-1:-1;24552:544:0;;-1:-1:-1;24552:544:0;;-1:-1:-1;;;;;24840:31:0;;;;;;:25;:31;;;;;;;;:48;;;;;24887:1;24875:9;;:13;24840:48;24837:259;;;24937:3;24925:9;;24916:6;:18;;;;:::i;:::-;:24;;;;:::i;:::-;24909:31;;24991:3;24977:11;;24968:6;:20;;;;:::i;:::-;:26;;;;:::i;:::-;24959:35;;25029:4;25013:12;;:20;;;;;;;:::i;:::-;;;;;;;;25074:6;25052:18;;:28;;;;;;;:::i;:::-;;;;-1:-1:-1;;24837:259:0;25115:8;;25112:97;;25140:53;25156:4;25170;25178:13;25185:6;25178:4;:13;:::i;:::-;25140:15;:53::i;:::-;25236:13;25243:6;25236:4;:13;:::i;:::-;25225:25;;;;:::i;:::-;;;24524:738;25282:33;25298:4;25304:2;25308:6;25282:15;:33::i;:::-;21367:3956;;;21288:4035;;;:::o;11014:132::-;10992:6;;-1:-1:-1;;;;;10992:6:0;10556:10;11078:23;11070:68;;;;-1:-1:-1;;;11070:68:0;;15682:2:1;11070:68:0;;;15664:21:1;;;15701:18;;;15694:30;15760:34;15740:18;;;15733:62;15812:18;;11070:68:0;15480:356:1;11511:191:0;11604:6;;;-1:-1:-1;;;;;11621:17:0;;;-1:-1:-1;;;;;;11621:17:0;;;;;;;11654:40;;11604:6;;;11621:17;11604:6;;11654:40;;11585:16;;11654:40;11574:128;11511:191;:::o;29518:299::-;-1:-1:-1;;;;;29601:31:0;;;;;;:25;:31;;;;;:39;;-1:-1:-1;;29601:39:0;;;;;;;29651:47;29601:31;:39;29651:25;:47::i;:::-;29709:42;29738:4;29745:5;29709:20;:42::i;:::-;29769:40;;;;;;-1:-1:-1;;;;;29769:40:0;;;;;;;;29518:299;;:::o;16436:611::-;-1:-1:-1;;;;;16567:18:0;;16559:68;;;;-1:-1:-1;;;16559:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16646:16:0;;16638:64;;;;-1:-1:-1;;;16638:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16737:15:0;;16715:19;16737:15;;;;;;;;;;;16785:21;;;;16763:109;;;;-1:-1:-1;;;16763:109:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16908:15:0;;;:9;:15;;;;;;;;;;;16926:20;;;16908:38;;16961:13;;;;;;;;;;:23;;;;;;17013:26;;2284:25:1;;;16961:13:0;;17013:26;;2257:18:1;17013:26:0;;;;;;;16548:499;16436:611;;;:::o;25821:496::-;19085:16;:23;;-1:-1:-1;;19085:23:0;19104:4;19085:23;;;25924:16:::1;::::0;;25938:1:::1;25924:16:::0;;;;;::::1;::::0;;-1:-1:-1;;25924:16:0::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;25924:16:0::1;25900:40;;25969:4;25951;25956:1;25951:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;25951:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;25995:15:::1;::::0;:22:::1;::::0;;-1:-1:-1;;;25995:22:0;;;;:15;;;::::1;::::0;:20:::1;::::0;:22:::1;::::0;;::::1;::::0;25951:7;;25995:22;;;;;:15;:22:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25985:4;25990:1;25985:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;25985:32:0;;::::1;:7;::::0;;::::1;::::0;;;;;:32;26062:15:::1;::::0;26030:62:::1;::::0;26047:4:::1;::::0;26062:15:::1;26080:11:::0;26030:8:::1;:62::i;:::-;26105:15;::::0;-1:-1:-1;;;;;26105:15:0::1;:66;26186:11:::0;26105:15:::1;26228:4:::0;26255::::1;26276:21;:15;26294:3;26276:21;:::i;:::-;26105:204;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;19131:16:0;:24;;-1:-1:-1;;19131:24:0;;;-1:-1:-1;;;;25821:496:0:o;25339:474::-;19085:16;:23;;-1:-1:-1;;19085:23:0;19104:4;19085:23;;;:16;25441:24:::1;25464:1;25441:20:::0;:24:::1;:::i;:::-;25425:41:::0;-1:-1:-1;25477:17:0::1;25498:27;25425:41:::0;25498:20;:27:::1;:::i;:::-;25477:49:::0;-1:-1:-1;25564:21:0::1;25598:23;25616:4:::0;25598:17:::1;:23::i;:::-;25634:18;25656:38;25680:14:::0;25656:21:::1;:38;:::i;:::-;25634:61;;25708:36;25722:9;25733:10;25708:13;:36::i;:::-;25762:43;::::0;;17548:25:1;;;17604:2;17589:18;;17582:34;;;17632:18;;;17625:34;;;25762:43:0::1;::::0;17536:2:1;17521:18;25762:43:0::1;;;;;;;-1:-1:-1::0;;19131:16:0;:24;;-1:-1:-1;;19131:24:0;;;-1:-1:-1;;;25339:474:0:o;26325:398::-;19085:16;:23;;-1:-1:-1;;19085:23:0;19104:4;19085:23;;;26474:15:::1;::::0;26442:62:::1;::::0;26459:4:::1;::::0;-1:-1:-1;;;;;26474:15:0::1;26492:11:::0;26442:8:::1;:62::i;:::-;26517:15;::::0;-1:-1:-1;;;;;26517:15:0::1;:31;26556:9:::0;26589:4:::1;26609:11:::0;26517:15:::1;::::0;26667:7:::1;10992:6:::0;;-1:-1:-1;;;;;10992:6:0;;10919:87;26667:7:::1;26517:198;::::0;::::1;::::0;;;-1:-1:-1;;;;;;26517:198:0;;;-1:-1:-1;;;;;18029:15:1;;;26517:198:0::1;::::0;::::1;18011:34:1::0;18061:18;;;18054:34;;;;18104:18;;;18097:34;;;;18147:18;;;18140:34;18211:15;;;18190:19;;;18183:44;26689:15:0::1;18243:19:1::0;;;18236:35;17945:19;;26517:198:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;19131:16:0;:24;;-1:-1:-1;;19131:24:0;;;-1:-1:-1;;;26325:398:0:o;14:548:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;567:131::-;-1:-1:-1;;;;;642:31:1;;632:42;;622:70;;688:1;685;678:12;703:315;771:6;779;832:2;820:9;811:7;807:23;803:32;800:52;;;848:1;845;838:12;800:52;887:9;874:23;906:31;931:5;906:31;:::i;:::-;956:5;1008:2;993:18;;;;980:32;;-1:-1:-1;;;703:315:1:o;1215:118::-;1301:5;1294:13;1287:21;1280:5;1277:32;1267:60;;1323:1;1320;1313:12;1338:309;1403:6;1411;1464:2;1452:9;1443:7;1439:23;1435:32;1432:52;;;1480:1;1477;1470:12;1432:52;1519:9;1506:23;1538:28;1560:5;1538:28;:::i;1652:247::-;1711:6;1764:2;1752:9;1743:7;1739:23;1735:32;1732:52;;;1780:1;1777;1770:12;1732:52;1819:9;1806:23;1838:31;1863:5;1838:31;:::i;:::-;1888:5;1652:247;-1:-1:-1;;;1652:247:1:o;2320:456::-;2397:6;2405;2413;2466:2;2454:9;2445:7;2441:23;2437:32;2434:52;;;2482:1;2479;2472:12;2434:52;2521:9;2508:23;2540:31;2565:5;2540:31;:::i;:::-;2590:5;-1:-1:-1;2647:2:1;2632:18;;2619:32;2660:33;2619:32;2660:33;:::i;:::-;2320:456;;2712:7;;-1:-1:-1;;;2766:2:1;2751:18;;;;2738:32;;2320:456::o;3178:241::-;3234:6;3287:2;3275:9;3266:7;3262:23;3258:32;3255:52;;;3303:1;3300;3293:12;3255:52;3342:9;3329:23;3361:28;3383:5;3361:28;:::i;3424:385::-;3510:6;3518;3526;3534;3587:3;3575:9;3566:7;3562:23;3558:33;3555:53;;;3604:1;3601;3594:12;3555:53;-1:-1:-1;;3627:23:1;;;3697:2;3682:18;;3669:32;;-1:-1:-1;3748:2:1;3733:18;;3720:32;;3799:2;3784:18;3771:32;;-1:-1:-1;3424:385:1;-1:-1:-1;3424:385:1:o;3814:180::-;3873:6;3926:2;3914:9;3905:7;3901:23;3897:32;3894:52;;;3942:1;3939;3932:12;3894:52;-1:-1:-1;3965:23:1;;3814:180;-1:-1:-1;3814:180:1:o;3999:382::-;4064:6;4072;4125:2;4113:9;4104:7;4100:23;4096:32;4093:52;;;4141:1;4138;4131:12;4093:52;4180:9;4167:23;4199:31;4224:5;4199:31;:::i;:::-;4249:5;-1:-1:-1;4306:2:1;4291:18;;4278:32;4319:30;4278:32;4319:30;:::i;:::-;4368:7;4358:17;;;3999:382;;;;;:::o;4386:388::-;4454:6;4462;4515:2;4503:9;4494:7;4490:23;4486:32;4483:52;;;4531:1;4528;4521:12;4483:52;4570:9;4557:23;4589:31;4614:5;4589:31;:::i;:::-;4639:5;-1:-1:-1;4696:2:1;4681:18;;4668:32;4709:33;4668:32;4709:33;:::i;4779:380::-;4858:1;4854:12;;;;4901;;;4922:61;;4976:4;4968:6;4964:17;4954:27;;4922:61;5029:2;5021:6;5018:14;4998:18;4995:38;4992:161;;5075:10;5070:3;5066:20;5063:1;5056:31;5110:4;5107:1;5100:15;5138:4;5135:1;5128:15;4992:161;;4779:380;;;:::o;5164:127::-;5225:10;5220:3;5216:20;5213:1;5206:31;5256:4;5253:1;5246:15;5280:4;5277:1;5270:15;5296:422;5385:1;5428:5;5385:1;5442:270;5463:7;5453:8;5450:21;5442:270;;;5522:4;5518:1;5514:6;5510:17;5504:4;5501:27;5498:53;;;5531:18;;:::i;:::-;5581:7;5571:8;5567:22;5564:55;;;5601:16;;;;5564:55;5680:22;;;;5640:15;;;;5442:270;;;5446:3;5296:422;;;;;:::o;5723:806::-;5772:5;5802:8;5792:80;;-1:-1:-1;5843:1:1;5857:5;;5792:80;5891:4;5881:76;;-1:-1:-1;5928:1:1;5942:5;;5881:76;5973:4;5991:1;5986:59;;;;6059:1;6054:130;;;;5966:218;;5986:59;6016:1;6007:10;;6030:5;;;6054:130;6091:3;6081:8;6078:17;6075:43;;;6098:18;;:::i;:::-;-1:-1:-1;;6154:1:1;6140:16;;6169:5;;5966:218;;6268:2;6258:8;6255:16;6249:3;6243:4;6240:13;6236:36;6230:2;6220:8;6217:16;6212:2;6206:4;6203:12;6199:35;6196:77;6193:159;;;-1:-1:-1;6305:19:1;;;6337:5;;6193:159;6384:34;6409:8;6403:4;6384:34;:::i;:::-;6454:6;6450:1;6446:6;6442:19;6433:7;6430:32;6427:58;;;6465:18;;:::i;:::-;6503:20;;5723:806;-1:-1:-1;;;5723:806:1:o;6534:140::-;6592:5;6621:47;6662:4;6652:8;6648:19;6642:4;6621:47;:::i;6679:168::-;6719:7;6785:1;6781;6777:6;6773:14;6770:1;6767:21;6762:1;6755:9;6748:17;6744:45;6741:71;;;6792:18;;:::i;:::-;-1:-1:-1;6832:9:1;;6679:168::o;6852:125::-;6917:9;;;6938:10;;;6935:36;;;6951:18;;:::i;7323:184::-;7393:6;7446:2;7434:9;7425:7;7421:23;7417:32;7414:52;;;7462:1;7459;7452:12;7414:52;-1:-1:-1;7485:16:1;;7323:184;-1:-1:-1;7323:184:1:o;7791:245::-;7858:6;7911:2;7899:9;7890:7;7886:23;7882:32;7879:52;;;7927:1;7924;7917:12;7879:52;7959:9;7953:16;7978:28;8000:5;7978:28;:::i;8395:217::-;8435:1;8461;8451:132;;8505:10;8500:3;8496:20;8493:1;8486:31;8540:4;8537:1;8530:15;8568:4;8565:1;8558:15;8451:132;-1:-1:-1;8597:9:1;;8395:217::o;12272:401::-;12474:2;12456:21;;;12513:2;12493:18;;;12486:30;12552:34;12547:2;12532:18;;12525:62;-1:-1:-1;;;12618:2:1;12603:18;;12596:35;12663:3;12648:19;;12272:401::o;12678:399::-;12880:2;12862:21;;;12919:2;12899:18;;;12892:30;12958:34;12953:2;12938:18;;12931:62;-1:-1:-1;;;13024:2:1;13009:18;;13002:33;13067:3;13052:19;;12678:399::o;13082:402::-;13284:2;13266:21;;;13323:2;13303:18;;;13296:30;13362:34;13357:2;13342:18;;13335:62;-1:-1:-1;;;13428:2:1;13413:18;;13406:36;13474:3;13459:19;;13082:402::o;14518:128::-;14585:9;;;14606:11;;;14603:37;;;14620:18;;:::i;14651:135::-;14690:3;14711:17;;;14708:43;;14731:18;;:::i;:::-;-1:-1:-1;14778:1:1;14767:13;;14651:135::o;15973:127::-;16034:10;16029:3;16025:20;16022:1;16015:31;16065:4;16062:1;16055:15;16089:4;16086:1;16079:15;16105:251;16175:6;16228:2;16216:9;16207:7;16203:23;16199:32;16196:52;;;16244:1;16241;16234:12;16196:52;16276:9;16270:16;16295:31;16320:5;16295:31;:::i;16361:980::-;16623:4;16671:3;16660:9;16656:19;16702:6;16691:9;16684:25;16728:2;16766:6;16761:2;16750:9;16746:18;16739:34;16809:3;16804:2;16793:9;16789:18;16782:31;16833:6;16868;16862:13;16899:6;16891;16884:22;16937:3;16926:9;16922:19;16915:26;;16976:2;16968:6;16964:15;16950:29;;16997:1;17007:195;17021:6;17018:1;17015:13;17007:195;;;17086:13;;-1:-1:-1;;;;;17082:39:1;17070:52;;17177:15;;;;17142:12;;;;17118:1;17036:9;17007:195;;;-1:-1:-1;;;;;;;17258:32:1;;;;17253:2;17238:18;;17231:60;-1:-1:-1;;;17322:3:1;17307:19;17300:35;17219:3;16361:980;-1:-1:-1;;;16361:980:1:o;18282:306::-;18370:6;18378;18386;18439:2;18427:9;18418:7;18414:23;18410:32;18407:52;;;18455:1;18452;18445:12;18407:52;18484:9;18478:16;18468:26;;18534:2;18523:9;18519:18;18513:25;18503:35;;18578:2;18567:9;18563:18;18557:25;18547:35;;18282:306;;;;;:::o

Swarm Source

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