ETH Price: $2,431.32 (+4.58%)

Token

BlackHat (BLKC)
 

Overview

Max Total Supply

10,000 BLKC

Holders

16

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
57.627766164235837388 BLKC

Value
$0.00
0xffabbad8da16a75ad1afa95ed52a25033bea4850
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:
BlackHat

Compiler Version
v0.8.21+commit.d9974bed

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-09-14
*/

/*

https://t.me/blackhatzk
http://blackhatzk.in/
https://twitter.com/blackhatdao

*/

// SPDX-License-Identifier: Unlicensed

pragma solidity 0.8.21;
 
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }
 
    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}
 
interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);
 
    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);
 
    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);
 
    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);
 
    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;
 
    event Mint(address indexed sender, uint amount0, uint amount1);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);
 
    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);
 
    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;
 
    function initialize(address, address) external;
}
 
interface IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);
 
    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);
 
    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);
 
    function createPair(address tokenA, address tokenB) external returns (address pair);
 
    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}
 
interface IERC20 {

    function totalSupply() external view returns (uint256);

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

    function transfer(address recipient, uint256 amount) external returns (bool);

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

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

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    event Transfer(address indexed from, address indexed to, uint256 value);

    event Approval(address indexed owner, address indexed spender, uint256 value);
}
 
interface IERC20Metadata is IERC20 {

    function name() external view returns (string memory);

    function symbol() external view returns (string memory);

    function decimals() external view returns (uint8);
}
 
 
contract ERC20 is Context, IERC20, IERC20Metadata {
    using SafeMath for uint256;
 
    mapping(address => uint256) private _balances;
 
    mapping(address => mapping(address => uint256)) private _allowances;
 
    uint256 private _totalSupply;
 
    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

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

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
 
        _beforeTokenTransfer(sender, recipient, amount);
 
        _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }

    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");
 
        _beforeTokenTransfer(address(0), account, amount);
 
        _totalSupply = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(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");
 
        _beforeTokenTransfer(account, address(0), amount);
 
        _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
        _totalSupply = _totalSupply.sub(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 _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
    
}
 
library SafeMath {

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

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

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

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {

        if (a == 0) {
            return 0;
        }
 
        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");
 
        return c;
    }

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

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

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

    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}
 
contract Ownable is Context {
    address private _owner;
 
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
       
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}
 
 
 
library SafeMathInt {
    int256 private constant MIN_INT256 = int256(1) << 255;
    int256 private constant MAX_INT256 = ~(int256(1) << 255);

    function mul(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a * b;
 
        // Detect overflow when multiplying MIN_INT256 with -1
        require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256));
        require((b == 0) || (c / b == a));
        return c;
    }

    function div(int256 a, int256 b) internal pure returns (int256) {
        // Prevent overflow when dividing MIN_INT256 by -1
        require(b != -1 || a != MIN_INT256);
 
        // Solidity already throws when dividing by 0.
        return a / b;
    }

    function sub(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a - b;
        require((b >= 0 && c <= a) || (b < 0 && c > a));
        return c;
    }

    function add(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a + b;
        require((b >= 0 && c >= a) || (b < 0 && c < a));
        return c;
    }

    function abs(int256 a) internal pure returns (int256) {
        require(a != MIN_INT256);
        return a < 0 ? -a : a;
    }
 
 
    function toUint256Safe(int256 a) internal pure returns (uint256) {
        require(a >= 0);
        return uint256(a);
    }
}
 
library SafeMathUint {
  function toInt256Safe(uint256 a) internal pure returns (int256) {
    int256 b = int256(a);
    require(b >= 0);
    return b;
  }
}
 
 
interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
 
    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
 
    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}
 
interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);
 
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}


 
contract BlackHat is ERC20, Ownable {

    string _name = unicode"BlackHat";
    string _symbol = unicode"BLKC";

    using SafeMath for uint256;
 
    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapV2Pair;
 
    bool private isSwppable;
    uint256 public balance;
    address private devWallet;
 
    uint256 public maxTransaction;
    uint256 public contractSellTreshold;
    uint256 public maxWalletHolding;
 
    bool public areLimitsOn = true;
    bool public emptyContractFull = false;

    uint256 public totalBuyTax;
    uint256 public devBuyTax;
    uint256 public liqBuyTax;
 
    uint256 public totalSellTax;
    uint256 public devSellTax;
    uint256 public liqSellTax;
 
    uint256 public tokensForLiquidity;
    uint256 public tokensForDev;
   
 
    // block number of opened trading
    uint256 launchedAt;
 
    /******************/
 
    // exclude from fees and max transaction amount
    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) public _isExcludedMaxTransactionAmount;
 
    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount
    mapping (address => bool) public automatedMarketMakerPairs;
 
    event UpdateUniswapV2Router(address indexed newAddress, address indexed oldAddress);
 
    event ExcludeFromFees(address indexed account, bool isExcluded);
 
    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
 
    event devWalletUpdated(address indexed newWallet, address indexed oldWallet);
 
 
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );


 
    event AutoNukeLP();
 
    event ManualNukeLP();
 
    constructor() ERC20(_name, _symbol) {
 
       
 
        uint256 _devBuyTax = 80;
        uint256 _liqBuyTax = 0;
 
        uint256 _devSellTax = 80;
        uint256 _liqSellTax = 0;
        
        uint256 totalSupply = 10000 * 1e18;
 
        maxTransaction = totalSupply * 10 / 1000; // 1%
        maxWalletHolding = totalSupply * 10 / 1000; // 1% 
        contractSellTreshold = totalSupply * 1 / 1000; // 0.05%
 
        devBuyTax = _devBuyTax;
        liqBuyTax = _liqBuyTax;
        totalBuyTax = devBuyTax + liqBuyTax;
 
        devSellTax = _devSellTax;
        liqSellTax = _liqSellTax;
        totalSellTax = devSellTax + liqSellTax;
        devWallet = address(msg.sender);
       
 
        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        excludeFromFees(address(devWallet), true);
 
        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);
        excludeFromMaxTransaction(address(devWallet), true);
 
        /*
            _mint is an internal function in ERC20.sol that is only called here,
            and CANNOT be called ever again
        */

       
        _mint(address(this), totalSupply * 95 / 100);
        _mint(address(this), totalSupply * 5 / 100);
        
        
    }
 
    receive() external payable {
 
    }
 

    function goLive() external onlyOwner{



        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
 
        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;
 
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        excludeFromMaxTransaction(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);
        
        uint256 ethAmount = address(this).balance;
        uint256 tokenAmount = balanceOf(address(this)) * 92 / 100;
        

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

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


    

    function removeStuckETH() external onlyOwner {
        uint256 ethBalance = address(this).balance;
        require(ethBalance > 0, "ETH balance must be greater than 0");
        (bool success,) = address(devWallet).call{value: ethBalance}("");
        require(success, "Failed to clear ETH balance");
    }

    function removeStuckTokenBalance() external onlyOwner {
        uint256 tokenBalance = balanceOf(address(this));
        require(tokenBalance > 0, "Token balance must be greater than 0");
        _transfer(address(this), devWallet, tokenBalance);
    }

    function vanishLimits() external onlyOwner {
        areLimitsOn = false;
    }
 
    function EnableEmptyContract(bool enabled) external onlyOwner{
        emptyContractFull = enabled;
    }
 
    function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }

  
    function editTax(
        uint256 _devBuy,
        uint256 _devSell,
        uint256 _liqBuy,
        uint256 _liqSell
    ) external onlyOwner {
        devBuyTax = _devBuy;
        liqBuyTax = _liqBuy;
        totalBuyTax = devBuyTax + liqBuyTax;
        devSellTax = _devSell;
        liqSellTax = _liqSell;
        totalSellTax = devSellTax + liqSellTax;
    }

    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }
 
    function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner {
        require(pair != uniswapV2Pair, "The pair cannot be removed from automatedMarketMakerPairs");
 
        _setAutomatedMarketMakerPair(pair, value);
    }
 
    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;
 
        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function isExcludedFromFees(address account) public view returns(bool) {
        return _isExcludedFromFees[account];
    }
 
    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");
         if(amount == 0) {
            super._transfer(from, to, 0);
            return;
        }
 
        if(areLimitsOn){
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !isSwppable
            ){
                
                //when buy
                if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
                        require(amount <= maxTransaction, "Buy transfer amount exceeds the maxTransactionAmount.");
                        require(amount + balanceOf(to) <= maxWalletHolding, "Max wallet exceeded");
                }
 
                //when sell
                else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
                        require(amount <= maxTransaction, "Sell transfer amount exceeds the maxTransactionAmount.");
                }
                else if(!_isExcludedMaxTransactionAmount[to]){
                    require(amount + balanceOf(to) <= maxWalletHolding, "Max wallet exceeded");
                }
            }
        }
 
        uint256 contractTokenBalance = balanceOf(address(this));
 
        bool canSwap = contractTokenBalance >= contractSellTreshold;
 
        if( 
            canSwap &&
            !isSwppable &&
            !automatedMarketMakerPairs[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            isSwppable = true;
 
            swapBack();
 
            isSwppable = false;
        }
 
        bool takeFee = !isSwppable;
 
        // if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }
 
        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if(takeFee){
            // on sell
            if (automatedMarketMakerPairs[to] && totalSellTax > 0){
                fees = amount.mul(totalSellTax).div(100);
                tokensForLiquidity += fees * liqSellTax / totalSellTax;
                tokensForDev += fees * devSellTax / totalSellTax;
            }
            // on buy
            else if(automatedMarketMakerPairs[from] && totalBuyTax > 0) {
                fees = amount.mul(totalBuyTax).div(100);
                tokensForLiquidity += fees * liqBuyTax / totalBuyTax;
                tokensForDev += fees * devBuyTax / totalBuyTax;
            }
 
            if(fees > 0){    
                super._transfer(from, address(this), fees);
            }
 
            amount -= fees;
        }
 
        super._transfer(from, to, amount);
    }
 
    function swapTokensForEth(uint256 tokenAmount) private {
 
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
 
        _approve(address(this), address(uniswapV2Router), tokenAmount);
 
        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
 
    }
 
    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);
 
        // add the liquidity
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            address(this),
            block.timestamp
        );
    }
 
    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity + tokensForDev;
        bool success;
 
        if(contractBalance == 0 || totalTokensToSwap == 0) {return;}
 
        if(emptyContractFull == false){
            if(contractBalance > contractSellTreshold * 20){
                contractBalance = contractSellTreshold * 20;
            }
        }else{
            contractBalance = balanceOf(address(this));
        }
        
 
        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = contractBalance * tokensForLiquidity / totalTokensToSwap / 2;
        uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens);
 
        uint256 initialETHBalance = address(this).balance;
 
        swapTokensForEth(amountToSwapForETH); 
 
        uint256 ethBalance = address(this).balance.sub(initialETHBalance);
 
        uint256 ethForDev = ethBalance.mul(tokensForDev).div(totalTokensToSwap);
        uint256 ethForLiquidity = ethBalance - ethForDev;
 
 
        tokensForLiquidity = 0;
        tokensForDev = 0;
 
        if(liquidityTokens > 0 && ethForLiquidity > 0){
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, tokensForLiquidity);
        }
 
        (success,) = address(devWallet).call{value: address(this).balance}("");
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[],"name":"AutoNukeLP","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":[],"name":"ManualNukeLP","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":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"devWalletUpdated","type":"event"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"EnableEmptyContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","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":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"areLimitsOn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"balance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"contractSellTreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devBuyTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devSellTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_devBuy","type":"uint256"},{"internalType":"uint256","name":"_devSell","type":"uint256"},{"internalType":"uint256","name":"_liqBuy","type":"uint256"},{"internalType":"uint256","name":"_liqSell","type":"uint256"}],"name":"editTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"emptyContractFull","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"goLive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liqBuyTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liqSellTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransaction","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletHolding","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeStuckTokenBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalBuyTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSellTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"vanishLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526008608090815267109b1858dad2185d60c21b60a052600690620000299082620006c6565b50604080518082019091526004815263424c4b4360e01b6020820152600790620000549082620006c6565b50600f805461ffff191660011790553480156200006f575f80fd5b50600680546200007f906200063b565b80601f0160208091040260200160405190810160405280929190818152602001828054620000ad906200063b565b8015620000fc5780601f10620000d257610100808354040283529160200191620000fc565b820191905f5260205f20905b815481529060010190602001808311620000de57829003601f168201915b50505050506007805462000110906200063b565b80601f01602080910402602001604051908101604052809291908181526020018280546200013e906200063b565b80156200018d5780601f1062000163576101008083540402835291602001916200018d565b820191905f5260205f20905b8154815290600101906020018083116200016f57829003601f168201915b50505050508160039081620001a39190620006c6565b506004620001b28282620006c6565b5050505f620001c6620003b160201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250905f907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35060505f818169021e19e0c9bab24000006103e86200023382600a620007a2565b6200023f9190620007bc565b600c556103e86200025282600a620007a2565b6200025e9190620007bc565b600e556103e862000271826001620007a2565b6200027d9190620007bc565b600d5560118590556012849055620002968486620007dc565b60105560148390556015829055620002af8284620007dc565b601355600b80546001600160a01b03191633179055620002e3620002db6005546001600160a01b031690565b6001620003b5565b620002f0306001620003b5565b620002ff61dead6001620003b5565b600b5462000318906001600160a01b03166001620003b5565b620003376200032f6005546001600160a01b031690565b600162000461565b6200034430600162000461565b6200035361dead600162000461565b600b546200036c906001600160a01b0316600162000461565b620003923060646200038084605f620007a2565b6200038c9190620007bc565b620004d5565b620003a630606462000380846005620007a2565b5050505050620007f2565b3390565b6005546001600160a01b03163314620004035760405162461bcd60e51b815260206004820181905260248201525f8051602062002b5083398151915260448201526064015b60405180910390fd5b6001600160a01b0382165f81815260196020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b03163314620004ab5760405162461bcd60e51b815260206004820181905260248201525f8051602062002b508339815191526044820152606401620003fa565b6001600160a01b03919091165f908152601a60205260409020805460ff1916911515919091179055565b6001600160a01b0382166200052d5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401620003fa565b6002546200053c9082620005bc565b6002556001600160a01b0382165f90815260208190526040902054620005639082620005bc565b6001600160a01b0383165f81815260208181526040808320949094559251848152919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b505050565b5f80620005ca8385620007dc565b9050838110156200061e5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401620003fa565b90505b92915050565b634e487b7160e01b5f52604160045260245ffd5b600181811c908216806200065057607f821691505b6020821081036200066f57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f821115620005b7575f81815260208120601f850160051c810160208610156200069d5750805b601f850160051c820191505b81811015620006be57828155600101620006a9565b505050505050565b81516001600160401b03811115620006e257620006e262000627565b620006fa81620006f384546200063b565b8462000675565b602080601f83116001811462000730575f8415620007185750858301515b5f19600386901b1c1916600185901b178555620006be565b5f85815260208120601f198616915b8281101562000760578886015182559484019460019091019084016200073f565b50858210156200077e57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b80820281158282048414176200062157620006216200078e565b5f82620007d757634e487b7160e01b5f52601260045260245ffd5b500490565b808201808211156200062157620006216200078e565b61235080620008005f395ff3fe60806040526004361061024c575f3560e01c8063715018a611610134578063a9059cbb116100b3578063c3f70b5211610078578063c3f70b5214610675578063dd62ed3e1461068a578063df6f93be146106ce578063e11d22cf146106e3578063f1cd531a146106f7578063f2fde38b14610716575f80fd5b8063a9059cbb146105df578063b62496f5146105fe578063b69ef8a81461062c578063be85750414610641578063c024666814610656575f80fd5b806395d89b41116100f957806395d89b41146105645780639a7a23d6146105785780639ee2e924146105975780639fccce32146105ab578063a457c2d7146105c0575f80fd5b8063715018a6146104d75780637571336a146104eb578063863cf2cc1461050a5780638da5cb5b14610529578063945674fe14610546575f80fd5b806323b872dd116101cb57806348d791551161019057806348d791551461042357806349bd5a5e146104385780634fbee193146104575780635de0f2a01461048e5780636c7e15c9146104a357806370a08231146104b8575f80fd5b806323b872dd146103a15780632c28f579146103c0578063313ce567146103d457806339509351146103ef57806346469afb1461040e575f80fd5b80631694505e116102115780631694505e1461030d57806318160ddd146103445780631a8145bb146103625780631bff78981461037757806322eb66311461038c575f80fd5b806306fdde0314610257578063095ea7b3146102815780630e947809146102b05780630f299cf1146102c957806310d5de53146102df575f80fd5b3661025357005b5f80fd5b348015610262575f80fd5b5061026b610735565b6040516102789190611e96565b60405180910390f35b34801561028c575f80fd5b506102a061029b366004611ef5565b6107c5565b6040519015158152602001610278565b3480156102bb575f80fd5b50600f546102a09060ff1681565b3480156102d4575f80fd5b506102dd6107db565b005b3480156102ea575f80fd5b506102a06102f9366004611f1f565b601a6020525f908152604090205460ff1681565b348015610318575f80fd5b5060085461032c906001600160a01b031681565b6040516001600160a01b039091168152602001610278565b34801561034f575f80fd5b506002545b604051908152602001610278565b34801561036d575f80fd5b5061035460165481565b348015610382575f80fd5b5061035460135481565b348015610397575f80fd5b5061035460145481565b3480156103ac575f80fd5b506102a06103bb366004611f3a565b61090b565b3480156103cb575f80fd5b506102dd610972565b3480156103df575f80fd5b5060405160128152602001610278565b3480156103fa575f80fd5b506102a0610409366004611ef5565b610c1a565b348015610419575f80fd5b5061035460105481565b34801561042e575f80fd5b50610354600e5481565b348015610443575f80fd5b5060095461032c906001600160a01b031681565b348015610462575f80fd5b506102a0610471366004611f1f565b6001600160a01b03165f9081526019602052604090205460ff1690565b348015610499575f80fd5b50610354600d5481565b3480156104ae575f80fd5b5061035460115481565b3480156104c3575f80fd5b506103546104d2366004611f1f565b610c4f565b3480156104e2575f80fd5b506102dd610c69565b3480156104f6575f80fd5b506102dd610505366004611f8c565b610cdc565b348015610515575f80fd5b506102dd610524366004611fbf565b610d30565b348015610534575f80fd5b506005546001600160a01b031661032c565b348015610551575f80fd5b50600f546102a090610100900460ff1681565b34801561056f575f80fd5b5061026b610d74565b348015610583575f80fd5b506102dd610592366004611f8c565b610d83565b3480156105a2575f80fd5b506102dd610e3b565b3480156105b6575f80fd5b5061035460175481565b3480156105cb575f80fd5b506102a06105da366004611ef5565b610ee7565b3480156105ea575f80fd5b506102a06105f9366004611ef5565b610f34565b348015610609575f80fd5b506102a0610618366004611f1f565b601b6020525f908152604090205460ff1681565b348015610637575f80fd5b50610354600a5481565b34801561064c575f80fd5b5061035460155481565b348015610661575f80fd5b506102dd610670366004611f8c565b610f40565b348015610680575f80fd5b50610354600c5481565b348015610695575f80fd5b506103546106a4366004611fd8565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b3480156106d9575f80fd5b5061035460125481565b3480156106ee575f80fd5b506102dd610fc8565b348015610702575f80fd5b506102dd61071136600461200f565b610ffe565b348015610721575f80fd5b506102dd610730366004611f1f565b61105c565b6060600380546107449061203e565b80601f01602080910402602001604051908101604052809291908181526020018280546107709061203e565b80156107bb5780601f10610792576101008083540402835291602001916107bb565b820191905f5260205f20905b81548152906001019060200180831161079e57829003601f168201915b5050505050905090565b5f6107d13384846110e1565b5060015b92915050565b6005546001600160a01b0316331461080e5760405162461bcd60e51b815260040161080590612076565b60405180910390fd5b47806108675760405162461bcd60e51b815260206004820152602260248201527f4554482062616c616e6365206d7573742062652067726561746572207468616e604482015261020360f41b6064820152608401610805565b600b546040515f916001600160a01b03169083908381818185875af1925050503d805f81146108b1576040519150601f19603f3d011682016040523d82523d5f602084013e6108b6565b606091505b50509050806109075760405162461bcd60e51b815260206004820152601b60248201527f4661696c656420746f20636c656172204554482062616c616e636500000000006044820152606401610805565b5050565b5f610917848484611205565b6109688433610963856040518060600160405280602881526020016122ce602891396001600160a01b038a165f90815260016020908152604080832033845290915290205491906117d5565b6110e1565b5060019392505050565b6005546001600160a01b0316331461099c5760405162461bcd60e51b815260040161080590612076565b737a250d5630b4cf539739df2c5dacb4c659f2488d6109bc816001610cdc565b600880546001600160a01b0319166001600160a01b0383169081179091556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa158015610a13573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a3791906120ab565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a82573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610aa691906120ab565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af1158015610af0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b1491906120ab565b600980546001600160a01b0319166001600160a01b03929092169182179055610b3e906001610cdc565b600954610b55906001600160a01b0316600161180d565b475f6064610b6230610c4f565b610b6d90605c6120da565b610b7791906120f1565b600854909150610b929030906001600160a01b0316836110e1565b600854600b5460405163f305d71960e01b81526001600160a01b039283169263f305d719928692610bd192309288925f92839216904290600401612110565b60606040518083038185885af1158015610bed573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190610c12919061214b565b505050505050565b335f8181526001602090815260408083206001600160a01b038716845290915281205490916107d19185906109639086611860565b6001600160a01b03165f9081526020819052604090205490565b6005546001600160a01b03163314610c935760405162461bcd60e51b815260040161080590612076565b6005546040515f916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b03163314610d065760405162461bcd60e51b815260040161080590612076565b6001600160a01b03919091165f908152601a60205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314610d5a5760405162461bcd60e51b815260040161080590612076565b600f80549115156101000261ff0019909216919091179055565b6060600480546107449061203e565b6005546001600160a01b03163314610dad5760405162461bcd60e51b815260040161080590612076565b6009546001600160a01b0390811690831603610e315760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610805565b610907828261180d565b6005546001600160a01b03163314610e655760405162461bcd60e51b815260040161080590612076565b5f610e6f30610c4f565b90505f8111610ecc5760405162461bcd60e51b8152602060048201526024808201527f546f6b656e2062616c616e6365206d75737420626520677265617465722074686044820152630616e20360e41b6064820152608401610805565b600b54610ee49030906001600160a01b031683611205565b50565b5f6107d13384610963856040518060600160405280602581526020016122f660259139335f9081526001602090815260408083206001600160a01b038d16845290915290205491906117d5565b5f6107d1338484611205565b6005546001600160a01b03163314610f6a5760405162461bcd60e51b815260040161080590612076565b6001600160a01b0382165f81815260196020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b03163314610ff25760405162461bcd60e51b815260040161080590612076565b600f805460ff19169055565b6005546001600160a01b031633146110285760405162461bcd60e51b815260040161080590612076565b6011849055601282905561103c8285612176565b601055601483905560158190556110538184612176565b60135550505050565b6005546001600160a01b031633146110865760405162461bcd60e51b815260040161080590612076565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383166111435760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610805565b6001600160a01b0382166111a45760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610805565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b03831661122b5760405162461bcd60e51b815260040161080590612189565b6001600160a01b0382166112515760405162461bcd60e51b8152600401610805906121ce565b805f036112685761126383835f6118c5565b505050565b600f5460ff1615611526576005546001600160a01b0384811691161480159061129f57506005546001600160a01b03838116911614155b80156112b357506001600160a01b03821615155b80156112ca57506001600160a01b03821661dead14155b80156112e05750600954600160a01b900460ff16155b15611526576001600160a01b0383165f908152601b602052604090205460ff16801561132457506001600160a01b0382165f908152601a602052604090205460ff16155b156113f857600c548111156113995760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b6064820152608401610805565b600e546113a583610c4f565b6113af9083612176565b11156113f35760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610805565b611526565b6001600160a01b0382165f908152601b602052604090205460ff16801561143757506001600160a01b0383165f908152601a602052604090205460ff16155b156114ad57600c548111156113f35760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b6064820152608401610805565b6001600160a01b0382165f908152601a602052604090205460ff1661152657600e546114d883610c4f565b6114e29083612176565b11156115265760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610805565b5f61153030610c4f565b600d54909150811080159081906115515750600954600160a01b900460ff16155b801561157557506001600160a01b0385165f908152601b602052604090205460ff16155b801561159957506001600160a01b0385165f9081526019602052604090205460ff16155b80156115bd57506001600160a01b0384165f9081526019602052604090205460ff16155b156115eb576009805460ff60a01b1916600160a01b1790556115dd6119cb565b6009805460ff60a01b191690555b6009546001600160a01b0386165f9081526019602052604090205460ff600160a01b90920482161591168061163757506001600160a01b0385165f9081526019602052604090205460ff165b1561163f57505f5b5f81156117c1576001600160a01b0386165f908152601b602052604090205460ff16801561166e57505f601354115b156116fa57611693606461168d60135488611b8690919063ffffffff16565b90611c04565b9050601354601554826116a691906120da565b6116b091906120f1565b60165f8282546116c09190612176565b90915550506013546014546116d590836120da565b6116df91906120f1565b60175f8282546116ef9190612176565b909155506117a39050565b6001600160a01b0387165f908152601b602052604090205460ff16801561172257505f601054115b156117a357611741606461168d60105488611b8690919063ffffffff16565b90506010546012548261175491906120da565b61175e91906120f1565b60165f82825461176e9190612176565b909155505060105460115461178390836120da565b61178d91906120f1565b60175f82825461179d9190612176565b90915550505b80156117b4576117b48730836118c5565b6117be8186612211565b94505b6117cc8787876118c5565b50505050505050565b5f81848411156117f85760405162461bcd60e51b81526004016108059190611e96565b505f6118048486612211565b95945050505050565b6001600160a01b0382165f818152601b6020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b5f8061186c8385612176565b9050838110156118be5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610805565b9392505050565b6001600160a01b0383166118eb5760405162461bcd60e51b815260040161080590612189565b6001600160a01b0382166119115760405162461bcd60e51b8152600401610805906121ce565b61194d816040518060600160405280602681526020016122a8602691396001600160a01b0386165f9081526020819052604090205491906117d5565b6001600160a01b038085165f90815260208190526040808220939093559084168152205461197b9082611860565b6001600160a01b038381165f818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91016111f8565b5f6119d530610c4f565b90505f6017546016546119e89190612176565b90505f8215806119f6575081155b15611a0057505050565b600f54610100900460ff1615155f03611a3e57600d54611a219060146120da565b831115611a3957600d54611a369060146120da565b92505b611a4a565b611a4730610c4f565b92505b5f60028360165486611a5c91906120da565b611a6691906120f1565b611a7091906120f1565b90505f611a7d8583611c45565b905047611a8982611c86565b5f611a944783611c45565b90505f611ab08761168d60175485611b8690919063ffffffff16565b90505f611abd8284612211565b5f601681905560175590508515801590611ad657505f81115b15611b2957611ae58682611dce565b601654604080518781526020810184905280820192909252517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a15b600b546040516001600160a01b039091169047905f81818185875af1925050503d805f8114611b73576040519150601f19603f3d011682016040523d82523d5f602084013e611b78565b606091505b505050505050505050505050565b5f825f03611b9557505f6107d5565b5f611ba083856120da565b905082611bad85836120f1565b146118be5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610805565b5f6118be83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611e6a565b5f6118be83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506117d5565b6040805160028082526060820183525f9260208301908036833701905050905030815f81518110611cb957611cb9612224565b6001600160a01b03928316602091820292909201810191909152600854604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611d10573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d3491906120ab565b81600181518110611d4757611d47612224565b6001600160a01b039283166020918202929092010152600854611d6d91309116846110e1565b60085460405163791ac94760e01b81526001600160a01b039091169063791ac94790611da59085905f90869030904290600401612238565b5f604051808303815f87803b158015611dbc575f80fd5b505af1158015610c12573d5f803e3d5ffd5b600854611de69030906001600160a01b0316846110e1565b60085460405163f305d71960e01b81526001600160a01b039091169063f305d719908390611e2290309087905f90819084904290600401612110565b60606040518083038185885af1158015611e3e573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190611e63919061214b565b5050505050565b5f8183611e8a5760405162461bcd60e51b81526004016108059190611e96565b505f61180484866120f1565b5f6020808352835180828501525f5b81811015611ec157858101830151858201604001528201611ea5565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610ee4575f80fd5b5f8060408385031215611f06575f80fd5b8235611f1181611ee1565b946020939093013593505050565b5f60208284031215611f2f575f80fd5b81356118be81611ee1565b5f805f60608486031215611f4c575f80fd5b8335611f5781611ee1565b92506020840135611f6781611ee1565b929592945050506040919091013590565b80358015158114611f87575f80fd5b919050565b5f8060408385031215611f9d575f80fd5b8235611fa881611ee1565b9150611fb660208401611f78565b90509250929050565b5f60208284031215611fcf575f80fd5b6118be82611f78565b5f8060408385031215611fe9575f80fd5b8235611ff481611ee1565b9150602083013561200481611ee1565b809150509250929050565b5f805f8060808587031215612022575f80fd5b5050823594602084013594506040840135936060013592509050565b600181811c9082168061205257607f821691505b60208210810361207057634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b5f602082840312156120bb575f80fd5b81516118be81611ee1565b634e487b7160e01b5f52601160045260245ffd5b80820281158282048414176107d5576107d56120c6565b5f8261210b57634e487b7160e01b5f52601260045260245ffd5b500490565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b5f805f6060848603121561215d575f80fd5b8351925060208401519150604084015190509250925092565b808201808211156107d5576107d56120c6565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b818103818111156107d5576107d56120c6565b634e487b7160e01b5f52603260045260245ffd5b5f60a082018783526020878185015260a0604085015281875180845260c08601915082890193505f5b818110156122865784516001600160a01b031683529383019391830191600101612261565b50506001600160a01b0396909616606085015250505060800152939250505056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220d4ffdc035fc0c499d3b382e8e8d23f936133d84883b99b0227c382a3b95fe24764736f6c634300081500334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572

Deployed Bytecode

0x60806040526004361061024c575f3560e01c8063715018a611610134578063a9059cbb116100b3578063c3f70b5211610078578063c3f70b5214610675578063dd62ed3e1461068a578063df6f93be146106ce578063e11d22cf146106e3578063f1cd531a146106f7578063f2fde38b14610716575f80fd5b8063a9059cbb146105df578063b62496f5146105fe578063b69ef8a81461062c578063be85750414610641578063c024666814610656575f80fd5b806395d89b41116100f957806395d89b41146105645780639a7a23d6146105785780639ee2e924146105975780639fccce32146105ab578063a457c2d7146105c0575f80fd5b8063715018a6146104d75780637571336a146104eb578063863cf2cc1461050a5780638da5cb5b14610529578063945674fe14610546575f80fd5b806323b872dd116101cb57806348d791551161019057806348d791551461042357806349bd5a5e146104385780634fbee193146104575780635de0f2a01461048e5780636c7e15c9146104a357806370a08231146104b8575f80fd5b806323b872dd146103a15780632c28f579146103c0578063313ce567146103d457806339509351146103ef57806346469afb1461040e575f80fd5b80631694505e116102115780631694505e1461030d57806318160ddd146103445780631a8145bb146103625780631bff78981461037757806322eb66311461038c575f80fd5b806306fdde0314610257578063095ea7b3146102815780630e947809146102b05780630f299cf1146102c957806310d5de53146102df575f80fd5b3661025357005b5f80fd5b348015610262575f80fd5b5061026b610735565b6040516102789190611e96565b60405180910390f35b34801561028c575f80fd5b506102a061029b366004611ef5565b6107c5565b6040519015158152602001610278565b3480156102bb575f80fd5b50600f546102a09060ff1681565b3480156102d4575f80fd5b506102dd6107db565b005b3480156102ea575f80fd5b506102a06102f9366004611f1f565b601a6020525f908152604090205460ff1681565b348015610318575f80fd5b5060085461032c906001600160a01b031681565b6040516001600160a01b039091168152602001610278565b34801561034f575f80fd5b506002545b604051908152602001610278565b34801561036d575f80fd5b5061035460165481565b348015610382575f80fd5b5061035460135481565b348015610397575f80fd5b5061035460145481565b3480156103ac575f80fd5b506102a06103bb366004611f3a565b61090b565b3480156103cb575f80fd5b506102dd610972565b3480156103df575f80fd5b5060405160128152602001610278565b3480156103fa575f80fd5b506102a0610409366004611ef5565b610c1a565b348015610419575f80fd5b5061035460105481565b34801561042e575f80fd5b50610354600e5481565b348015610443575f80fd5b5060095461032c906001600160a01b031681565b348015610462575f80fd5b506102a0610471366004611f1f565b6001600160a01b03165f9081526019602052604090205460ff1690565b348015610499575f80fd5b50610354600d5481565b3480156104ae575f80fd5b5061035460115481565b3480156104c3575f80fd5b506103546104d2366004611f1f565b610c4f565b3480156104e2575f80fd5b506102dd610c69565b3480156104f6575f80fd5b506102dd610505366004611f8c565b610cdc565b348015610515575f80fd5b506102dd610524366004611fbf565b610d30565b348015610534575f80fd5b506005546001600160a01b031661032c565b348015610551575f80fd5b50600f546102a090610100900460ff1681565b34801561056f575f80fd5b5061026b610d74565b348015610583575f80fd5b506102dd610592366004611f8c565b610d83565b3480156105a2575f80fd5b506102dd610e3b565b3480156105b6575f80fd5b5061035460175481565b3480156105cb575f80fd5b506102a06105da366004611ef5565b610ee7565b3480156105ea575f80fd5b506102a06105f9366004611ef5565b610f34565b348015610609575f80fd5b506102a0610618366004611f1f565b601b6020525f908152604090205460ff1681565b348015610637575f80fd5b50610354600a5481565b34801561064c575f80fd5b5061035460155481565b348015610661575f80fd5b506102dd610670366004611f8c565b610f40565b348015610680575f80fd5b50610354600c5481565b348015610695575f80fd5b506103546106a4366004611fd8565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b3480156106d9575f80fd5b5061035460125481565b3480156106ee575f80fd5b506102dd610fc8565b348015610702575f80fd5b506102dd61071136600461200f565b610ffe565b348015610721575f80fd5b506102dd610730366004611f1f565b61105c565b6060600380546107449061203e565b80601f01602080910402602001604051908101604052809291908181526020018280546107709061203e565b80156107bb5780601f10610792576101008083540402835291602001916107bb565b820191905f5260205f20905b81548152906001019060200180831161079e57829003601f168201915b5050505050905090565b5f6107d13384846110e1565b5060015b92915050565b6005546001600160a01b0316331461080e5760405162461bcd60e51b815260040161080590612076565b60405180910390fd5b47806108675760405162461bcd60e51b815260206004820152602260248201527f4554482062616c616e6365206d7573742062652067726561746572207468616e604482015261020360f41b6064820152608401610805565b600b546040515f916001600160a01b03169083908381818185875af1925050503d805f81146108b1576040519150601f19603f3d011682016040523d82523d5f602084013e6108b6565b606091505b50509050806109075760405162461bcd60e51b815260206004820152601b60248201527f4661696c656420746f20636c656172204554482062616c616e636500000000006044820152606401610805565b5050565b5f610917848484611205565b6109688433610963856040518060600160405280602881526020016122ce602891396001600160a01b038a165f90815260016020908152604080832033845290915290205491906117d5565b6110e1565b5060019392505050565b6005546001600160a01b0316331461099c5760405162461bcd60e51b815260040161080590612076565b737a250d5630b4cf539739df2c5dacb4c659f2488d6109bc816001610cdc565b600880546001600160a01b0319166001600160a01b0383169081179091556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa158015610a13573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a3791906120ab565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a82573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610aa691906120ab565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af1158015610af0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b1491906120ab565b600980546001600160a01b0319166001600160a01b03929092169182179055610b3e906001610cdc565b600954610b55906001600160a01b0316600161180d565b475f6064610b6230610c4f565b610b6d90605c6120da565b610b7791906120f1565b600854909150610b929030906001600160a01b0316836110e1565b600854600b5460405163f305d71960e01b81526001600160a01b039283169263f305d719928692610bd192309288925f92839216904290600401612110565b60606040518083038185885af1158015610bed573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190610c12919061214b565b505050505050565b335f8181526001602090815260408083206001600160a01b038716845290915281205490916107d19185906109639086611860565b6001600160a01b03165f9081526020819052604090205490565b6005546001600160a01b03163314610c935760405162461bcd60e51b815260040161080590612076565b6005546040515f916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b03163314610d065760405162461bcd60e51b815260040161080590612076565b6001600160a01b03919091165f908152601a60205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314610d5a5760405162461bcd60e51b815260040161080590612076565b600f80549115156101000261ff0019909216919091179055565b6060600480546107449061203e565b6005546001600160a01b03163314610dad5760405162461bcd60e51b815260040161080590612076565b6009546001600160a01b0390811690831603610e315760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610805565b610907828261180d565b6005546001600160a01b03163314610e655760405162461bcd60e51b815260040161080590612076565b5f610e6f30610c4f565b90505f8111610ecc5760405162461bcd60e51b8152602060048201526024808201527f546f6b656e2062616c616e6365206d75737420626520677265617465722074686044820152630616e20360e41b6064820152608401610805565b600b54610ee49030906001600160a01b031683611205565b50565b5f6107d13384610963856040518060600160405280602581526020016122f660259139335f9081526001602090815260408083206001600160a01b038d16845290915290205491906117d5565b5f6107d1338484611205565b6005546001600160a01b03163314610f6a5760405162461bcd60e51b815260040161080590612076565b6001600160a01b0382165f81815260196020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b03163314610ff25760405162461bcd60e51b815260040161080590612076565b600f805460ff19169055565b6005546001600160a01b031633146110285760405162461bcd60e51b815260040161080590612076565b6011849055601282905561103c8285612176565b601055601483905560158190556110538184612176565b60135550505050565b6005546001600160a01b031633146110865760405162461bcd60e51b815260040161080590612076565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383166111435760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610805565b6001600160a01b0382166111a45760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610805565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b03831661122b5760405162461bcd60e51b815260040161080590612189565b6001600160a01b0382166112515760405162461bcd60e51b8152600401610805906121ce565b805f036112685761126383835f6118c5565b505050565b600f5460ff1615611526576005546001600160a01b0384811691161480159061129f57506005546001600160a01b03838116911614155b80156112b357506001600160a01b03821615155b80156112ca57506001600160a01b03821661dead14155b80156112e05750600954600160a01b900460ff16155b15611526576001600160a01b0383165f908152601b602052604090205460ff16801561132457506001600160a01b0382165f908152601a602052604090205460ff16155b156113f857600c548111156113995760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b6064820152608401610805565b600e546113a583610c4f565b6113af9083612176565b11156113f35760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610805565b611526565b6001600160a01b0382165f908152601b602052604090205460ff16801561143757506001600160a01b0383165f908152601a602052604090205460ff16155b156114ad57600c548111156113f35760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b6064820152608401610805565b6001600160a01b0382165f908152601a602052604090205460ff1661152657600e546114d883610c4f565b6114e29083612176565b11156115265760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610805565b5f61153030610c4f565b600d54909150811080159081906115515750600954600160a01b900460ff16155b801561157557506001600160a01b0385165f908152601b602052604090205460ff16155b801561159957506001600160a01b0385165f9081526019602052604090205460ff16155b80156115bd57506001600160a01b0384165f9081526019602052604090205460ff16155b156115eb576009805460ff60a01b1916600160a01b1790556115dd6119cb565b6009805460ff60a01b191690555b6009546001600160a01b0386165f9081526019602052604090205460ff600160a01b90920482161591168061163757506001600160a01b0385165f9081526019602052604090205460ff165b1561163f57505f5b5f81156117c1576001600160a01b0386165f908152601b602052604090205460ff16801561166e57505f601354115b156116fa57611693606461168d60135488611b8690919063ffffffff16565b90611c04565b9050601354601554826116a691906120da565b6116b091906120f1565b60165f8282546116c09190612176565b90915550506013546014546116d590836120da565b6116df91906120f1565b60175f8282546116ef9190612176565b909155506117a39050565b6001600160a01b0387165f908152601b602052604090205460ff16801561172257505f601054115b156117a357611741606461168d60105488611b8690919063ffffffff16565b90506010546012548261175491906120da565b61175e91906120f1565b60165f82825461176e9190612176565b909155505060105460115461178390836120da565b61178d91906120f1565b60175f82825461179d9190612176565b90915550505b80156117b4576117b48730836118c5565b6117be8186612211565b94505b6117cc8787876118c5565b50505050505050565b5f81848411156117f85760405162461bcd60e51b81526004016108059190611e96565b505f6118048486612211565b95945050505050565b6001600160a01b0382165f818152601b6020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b5f8061186c8385612176565b9050838110156118be5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610805565b9392505050565b6001600160a01b0383166118eb5760405162461bcd60e51b815260040161080590612189565b6001600160a01b0382166119115760405162461bcd60e51b8152600401610805906121ce565b61194d816040518060600160405280602681526020016122a8602691396001600160a01b0386165f9081526020819052604090205491906117d5565b6001600160a01b038085165f90815260208190526040808220939093559084168152205461197b9082611860565b6001600160a01b038381165f818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91016111f8565b5f6119d530610c4f565b90505f6017546016546119e89190612176565b90505f8215806119f6575081155b15611a0057505050565b600f54610100900460ff1615155f03611a3e57600d54611a219060146120da565b831115611a3957600d54611a369060146120da565b92505b611a4a565b611a4730610c4f565b92505b5f60028360165486611a5c91906120da565b611a6691906120f1565b611a7091906120f1565b90505f611a7d8583611c45565b905047611a8982611c86565b5f611a944783611c45565b90505f611ab08761168d60175485611b8690919063ffffffff16565b90505f611abd8284612211565b5f601681905560175590508515801590611ad657505f81115b15611b2957611ae58682611dce565b601654604080518781526020810184905280820192909252517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a15b600b546040516001600160a01b039091169047905f81818185875af1925050503d805f8114611b73576040519150601f19603f3d011682016040523d82523d5f602084013e611b78565b606091505b505050505050505050505050565b5f825f03611b9557505f6107d5565b5f611ba083856120da565b905082611bad85836120f1565b146118be5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610805565b5f6118be83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611e6a565b5f6118be83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506117d5565b6040805160028082526060820183525f9260208301908036833701905050905030815f81518110611cb957611cb9612224565b6001600160a01b03928316602091820292909201810191909152600854604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611d10573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d3491906120ab565b81600181518110611d4757611d47612224565b6001600160a01b039283166020918202929092010152600854611d6d91309116846110e1565b60085460405163791ac94760e01b81526001600160a01b039091169063791ac94790611da59085905f90869030904290600401612238565b5f604051808303815f87803b158015611dbc575f80fd5b505af1158015610c12573d5f803e3d5ffd5b600854611de69030906001600160a01b0316846110e1565b60085460405163f305d71960e01b81526001600160a01b039091169063f305d719908390611e2290309087905f90819084904290600401612110565b60606040518083038185885af1158015611e3e573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190611e63919061214b565b5050505050565b5f8183611e8a5760405162461bcd60e51b81526004016108059190611e96565b505f61180484866120f1565b5f6020808352835180828501525f5b81811015611ec157858101830151858201604001528201611ea5565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610ee4575f80fd5b5f8060408385031215611f06575f80fd5b8235611f1181611ee1565b946020939093013593505050565b5f60208284031215611f2f575f80fd5b81356118be81611ee1565b5f805f60608486031215611f4c575f80fd5b8335611f5781611ee1565b92506020840135611f6781611ee1565b929592945050506040919091013590565b80358015158114611f87575f80fd5b919050565b5f8060408385031215611f9d575f80fd5b8235611fa881611ee1565b9150611fb660208401611f78565b90509250929050565b5f60208284031215611fcf575f80fd5b6118be82611f78565b5f8060408385031215611fe9575f80fd5b8235611ff481611ee1565b9150602083013561200481611ee1565b809150509250929050565b5f805f8060808587031215612022575f80fd5b5050823594602084013594506040840135936060013592509050565b600181811c9082168061205257607f821691505b60208210810361207057634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b5f602082840312156120bb575f80fd5b81516118be81611ee1565b634e487b7160e01b5f52601160045260245ffd5b80820281158282048414176107d5576107d56120c6565b5f8261210b57634e487b7160e01b5f52601260045260245ffd5b500490565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b5f805f6060848603121561215d575f80fd5b8351925060208401519150604084015190509250925092565b808201808211156107d5576107d56120c6565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b818103818111156107d5576107d56120c6565b634e487b7160e01b5f52603260045260245ffd5b5f60a082018783526020878185015260a0604085015281875180845260c08601915082890193505f5b818110156122865784516001600160a01b031683529383019391830191600101612261565b50506001600160a01b0396909616606085015250505060800152939250505056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220d4ffdc035fc0c499d3b382e8e8d23f936133d84883b99b0227c382a3b95fe24764736f6c63430008150033

Deployed Bytecode Sourcemap

17582:12329:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4845:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5759:169;;;;;;;;;;-1:-1:-1;5759:169:0;;;;;:::i;:::-;;:::i;:::-;;;1188:14:1;;1181:22;1163:41;;1151:2;1136:18;5759:169:0;1023:187:1;18040:30:0;;;;;;;;;;-1:-1:-1;18040:30:0;;;;;;;;22070:311;;;;;;;;;;;;;:::i;:::-;;18613:64;;;;;;;;;;-1:-1:-1;18613:64:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;17741:41;;;;;;;;;;-1:-1:-1;17741:41:0;;;;-1:-1:-1;;;;;17741:41:0;;;;;;-1:-1:-1;;;;;1658:32:1;;;1640:51;;1628:2;1613:18;17741:41:0;1467:230:1;5166:108:0;;;;;;;;;;-1:-1:-1;5254:12:0;;5166:108;;;1848:25:1;;;1836:2;1821:18;5166:108:0;1702:177:1;18322:33:0;;;;;;;;;;;;;;;;18221:27;;;;;;;;;;;;;;;;18255:25;;;;;;;;;;;;;;;;5936:355;;;;;;;;;;-1:-1:-1;5936:355:0;;;;;:::i;:::-;;:::i;21015:1037::-;;;;;;;;;;;;;:::i;5065:93::-;;;;;;;;;;-1:-1:-1;5065:93:0;;5148:2;2487:36:1;;2475:2;2460:18;5065:93:0;2345:184:1;6299:218:0;;;;;;;;;;-1:-1:-1;6299:218:0;;;;;:::i;:::-;;:::i;18123:26::-;;;;;;;;;;;;;;;;17999:31;;;;;;;;;;;;;;;;17789:28;;;;;;;;;;-1:-1:-1;17789:28:0;;;;-1:-1:-1;;;;;17789:28:0;;;24041:125;;;;;;;;;;-1:-1:-1;24041:125:0;;;;;:::i;:::-;-1:-1:-1;;;;;24130:28:0;24106:4;24130:28;;;:19;:28;;;;;;;;;24041:125;17957:35;;;;;;;;;;;;;;;;18156:24;;;;;;;;;;;;;;;;5282:127;;;;;;;;;;-1:-1:-1;5282:127:0;;;;;:::i;:::-;;:::i;10826:148::-;;;;;;;;;;;;;:::i;22859:144::-;;;;;;;;;;-1:-1:-1;22859:144:0;;;;;:::i;:::-;;:::i;22743:107::-;;;;;;;;;;-1:-1:-1;22743:107:0;;;;;:::i;:::-;;:::i;10612:79::-;;;;;;;;;;-1:-1:-1;10677:6:0;;-1:-1:-1;;;;;10677:6:0;10612:79;;18077:37;;;;;;;;;;-1:-1:-1;18077:37:0;;;;;;;;;;;4953:104;;;;;;;;;;;;;:::i;23590:245::-;;;;;;;;;;-1:-1:-1;23590:245:0;;;;;:::i;:::-;;:::i;22389:256::-;;;;;;;;;;;;;:::i;18362:27::-;;;;;;;;;;;;;;;;6525:269;;;;;;;;;;-1:-1:-1;6525:269:0;;;;;:::i;:::-;;:::i;5417:175::-;;;;;;;;;;-1:-1:-1;5417:175:0;;;;;:::i;:::-;;:::i;18836:58::-;;;;;;;;;;-1:-1:-1;18836:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;17857:22;;;;;;;;;;;;;;;;18287:25;;;;;;;;;;;;;;;;23399:182;;;;;;;;;;-1:-1:-1;23399:182:0;;;;;:::i;:::-;;:::i;17921:29::-;;;;;;;;;;;;;;;;5600:151;;;;;;;;;;-1:-1:-1;5600:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;5716:18:0;;;5689:7;5716:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;5600:151;18187:24;;;;;;;;;;;;;;;;22653:81;;;;;;;;;;;;;:::i;23015:376::-;;;;;;;;;;-1:-1:-1;23015:376:0;;;;;:::i;:::-;;:::i;10982:169::-;;;;;;;;;;-1:-1:-1;10982:169:0;;;;;:::i;:::-;;:::i;4845:100::-;4899:13;4932:5;4925:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4845:100;:::o;5759:169::-;5842:4;5859:39;278:10;5882:7;5891:6;5859:8;:39::i;:::-;-1:-1:-1;5916:4:0;5759:169;;;;;:::o;22070:311::-;10739:6;;-1:-1:-1;;;;;10739:6:0;278:10;10739:22;10731:67;;;;-1:-1:-1;;;10731:67:0;;;;;;;:::i;:::-;;;;;;;;;22147:21:::1;22187:14:::0;22179:61:::1;;;::::0;-1:-1:-1;;;22179:61:0;;5143:2:1;22179:61:0::1;::::0;::::1;5125:21:1::0;5182:2;5162:18;;;5155:30;5221:34;5201:18;;;5194:62;-1:-1:-1;;;5272:18:1;;;5265:32;5314:19;;22179:61:0::1;4941:398:1::0;22179:61:0::1;22277:9;::::0;22269:46:::1;::::0;22252:12:::1;::::0;-1:-1:-1;;;;;22277:9:0::1;::::0;22300:10;;22252:12;22269:46;22252:12;22269:46;22300:10;22277:9;22269:46:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22251:64;;;22334:7;22326:47;;;::::0;-1:-1:-1;;;22326:47:0;;5756:2:1;22326:47:0::1;::::0;::::1;5738:21:1::0;5795:2;5775:18;;;5768:30;5834:29;5814:18;;;5807:57;5881:18;;22326:47:0::1;5554:351:1::0;22326:47:0::1;22115:266;;22070:311::o:0;5936:355::-;6076:4;6093:36;6103:6;6111:9;6122:6;6093:9;:36::i;:::-;6140:121;6149:6;278:10;6171:89;6209:6;6171:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;6171:19:0;;;;;;:11;:19;;;;;;;;278:10;6171:33;;;;;;;;;;:37;:89::i;:::-;6140:8;:121::i;:::-;-1:-1:-1;6279:4:0;5936:355;;;;;:::o;21015:1037::-;10739:6;;-1:-1:-1;;;;;10739:6:0;278:10;10739:22;10731:67;;;;-1:-1:-1;;;10731:67:0;;;;;;;:::i;:::-;21125:42:::1;21182:58;21125:42:::0;21235:4:::1;21182:25;:58::i;:::-;21251:15;:34:::0;;-1:-1:-1;;;;;;21251:34:0::1;-1:-1:-1::0;;;;;21251:34:0;::::1;::::0;;::::1;::::0;;;21333:26:::1;::::0;;-1:-1:-1;;;21333:26:0;;;;:24:::1;::::0;:26:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;21251:34;21333:26:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;21315:56:0::1;;21380:4;21387:16;-1:-1:-1::0;;;;;21387:21:0::1;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21315:96;::::0;-1:-1:-1;;;;;;21315:96:0::1;::::0;;;;;;-1:-1:-1;;;;;6396:15:1;;;21315:96:0::1;::::0;::::1;6378:34:1::0;6448:15;;6428:18;;;6421:43;6313:18;;21315:96:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21299:13;:112:::0;;-1:-1:-1;;;;;;21299:112:0::1;-1:-1:-1::0;;;;;21299:112:0;;;::::1;::::0;;::::1;::::0;;21422:55:::1;::::0;-1:-1:-1;21422:25:0::1;:55::i;:::-;21525:13;::::0;21488:58:::1;::::0;-1:-1:-1;;;;;21525:13:0::1;::::0;21488:28:::1;:58::i;:::-;21587:21;21567:17;21673:3;21641:24;21659:4;21641:9;:24::i;:::-;:29;::::0;21668:2:::1;21641:29;:::i;:::-;:35;;;;:::i;:::-;21739:15;::::0;21619:57;;-1:-1:-1;21707:62:0::1;::::0;21724:4:::1;::::0;-1:-1:-1;;;;;21739:15:0::1;21619:57:::0;21707:8:::1;:62::i;:::-;21782:15;::::0;21994:9:::1;::::0;21782:262:::1;::::0;-1:-1:-1;;;21782:262:0;;-1:-1:-1;;;;;21782:15:0;;::::1;::::0;:31:::1;::::0;21821:9;;21782:262:::1;::::0;21854:4:::1;::::0;21874:11;;21782:15:::1;::::0;;;21994:9:::1;::::0;22018:15:::1;::::0;21782:262:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;21051:1001;;;21015:1037::o:0;6299:218::-;278:10;6387:4;6436:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;6436:34:0;;;;;;;;;;6387:4;;6404:83;;6427:7;;6436:50;;6475:10;6436:38;:50::i;5282:127::-;-1:-1:-1;;;;;5383:18:0;5356:7;5383:18;;;;;;;;;;;;5282:127::o;10826:148::-;10739:6;;-1:-1:-1;;;;;10739:6:0;278:10;10739:22;10731:67;;;;-1:-1:-1;;;10731:67:0;;;;;;;:::i;:::-;10917:6:::1;::::0;10896:40:::1;::::0;10933:1:::1;::::0;-1:-1:-1;;;;;10917:6:0::1;::::0;10896:40:::1;::::0;10933:1;;10896:40:::1;10947:6;:19:::0;;-1:-1:-1;;;;;;10947:19:0::1;::::0;;10826:148::o;22859:144::-;10739:6;;-1:-1:-1;;;;;10739:6:0;278:10;10739:22;10731:67;;;;-1:-1:-1;;;10731:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22949:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;22949:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;22859:144::o;22743:107::-;10739:6;;-1:-1:-1;;;;;10739:6:0;278:10;10739:22;10731:67;;;;-1:-1:-1;;;10731:67:0;;;;;;;:::i;:::-;22815:17:::1;:27:::0;;;::::1;;;;-1:-1:-1::0;;22815:27:0;;::::1;::::0;;;::::1;::::0;;22743:107::o;4953:104::-;5009:13;5042:7;5035:14;;;;;:::i;23590:245::-;10739:6;;-1:-1:-1;;;;;10739:6:0;278:10;10739:22;10731:67;;;;-1:-1:-1;;;10731:67:0;;;;;;;:::i;:::-;23697:13:::1;::::0;-1:-1:-1;;;;;23697:13:0;;::::1;23689:21:::0;;::::1;::::0;23681:91:::1;;;::::0;-1:-1:-1;;;23681:91:0;;8127:2:1;23681:91:0::1;::::0;::::1;8109:21:1::0;8166:2;8146:18;;;8139:30;8205:34;8185:18;;;8178:62;8276:27;8256:18;;;8249:55;8321:19;;23681:91:0::1;7925:421:1::0;23681:91:0::1;23786:41;23815:4;23821:5;23786:28;:41::i;22389:256::-:0;10739:6;;-1:-1:-1;;;;;10739:6:0;278:10;10739:22;10731:67;;;;-1:-1:-1;;;10731:67:0;;;;;;;:::i;:::-;22454:20:::1;22477:24;22495:4;22477:9;:24::i;:::-;22454:47;;22535:1;22520:12;:16;22512:65;;;::::0;-1:-1:-1;;;22512:65:0;;8553:2:1;22512:65:0::1;::::0;::::1;8535:21:1::0;8592:2;8572:18;;;8565:30;8631:34;8611:18;;;8604:62;-1:-1:-1;;;8682:18:1;;;8675:34;8726:19;;22512:65:0::1;8351:400:1::0;22512:65:0::1;22613:9;::::0;22588:49:::1;::::0;22606:4:::1;::::0;-1:-1:-1;;;;;22613:9:0::1;22624:12:::0;22588:9:::1;:49::i;:::-;22443:202;22389:256::o:0;6525:269::-;6618:4;6635:129;278:10;6658:7;6667:96;6706:15;6667:96;;;;;;;;;;;;;;;;;278:10;6667:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;6667:34:0;;;;;;;;;;;;:38;:96::i;5417:175::-;5503:4;5520:42;278:10;5544:9;5555:6;5520:9;:42::i;23399:182::-;10739:6;;-1:-1:-1;;;;;10739:6:0;278:10;10739:22;10731:67;;;;-1:-1:-1;;;10731:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23484:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;23484:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;23539:34;;1163:41:1;;;23539:34:0::1;::::0;1136:18:1;23539:34:0::1;;;;;;;23399:182:::0;;:::o;22653:81::-;10739:6;;-1:-1:-1;;;;;10739:6:0;278:10;10739:22;10731:67;;;;-1:-1:-1;;;10731:67:0;;;;;;;:::i;:::-;22707:11:::1;:19:::0;;-1:-1:-1;;22707:19:0::1;::::0;;22653:81::o;23015:376::-;10739:6;;-1:-1:-1;;;;;10739:6:0;278:10;10739:22;10731:67;;;;-1:-1:-1;;;10731:67:0;;;;;;;:::i;:::-;23175:9:::1;:19:::0;;;23205:9:::1;:19:::0;;;23249:21:::1;23217:7:::0;23187;23249:21:::1;:::i;:::-;23235:11;:35:::0;23281:10:::1;:21:::0;;;23313:10:::1;:21:::0;;;23360:23:::1;23326:8:::0;23294;23360:23:::1;:::i;:::-;23345:12;:38:::0;-1:-1:-1;;;;23015:376:0:o;10982:169::-;10739:6;;-1:-1:-1;;;;;10739:6:0;278:10;10739:22;10731:67;;;;-1:-1:-1;;;10731:67:0;;;;;;;:::i;:::-;11098:6:::1;::::0;11077:38:::1;::::0;-1:-1:-1;;;;;11077:38:0;;::::1;::::0;11098:6:::1;::::0;11077:38:::1;::::0;11098:6:::1;::::0;11077:38:::1;11126:6;:17:::0;;-1:-1:-1;;;;;;11126:17:0::1;-1:-1:-1::0;;;;;11126:17:0;;;::::1;::::0;;;::::1;::::0;;10982:169::o;8201:381::-;-1:-1:-1;;;;;8337:19:0;;8329:68;;;;-1:-1:-1;;;8329:68:0;;9088:2:1;8329:68:0;;;9070:21:1;9127:2;9107:18;;;9100:30;9166:34;9146:18;;;9139:62;-1:-1:-1;;;9217:18:1;;;9210:34;9261:19;;8329:68:0;8886:400:1;8329:68:0;-1:-1:-1;;;;;8416:21:0;;8408:68;;;;-1:-1:-1;;;8408:68:0;;9493:2:1;8408:68:0;;;9475:21:1;9532:2;9512:18;;;9505:30;9571:34;9551:18;;;9544:62;-1:-1:-1;;;9622:18:1;;;9615:32;9664:19;;8408:68:0;9291:398:1;8408:68:0;-1:-1:-1;;;;;8490:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;8542:32;;1848:25:1;;;8542:32:0;;1821:18:1;8542:32:0;;;;;;;;8201:381;;;:::o;24175:3112::-;-1:-1:-1;;;;;24307:18:0;;24299:68;;;;-1:-1:-1;;;24299:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24386:16:0;;24378:64;;;;-1:-1:-1;;;24378:64:0;;;;;;;:::i;:::-;24457:6;24467:1;24457:11;24454:92;;24485:28;24501:4;24507:2;24511:1;24485:15;:28::i;:::-;24175:3112;;;:::o;24454:92::-;24562:11;;;;24559:1083;;;10677:6;;-1:-1:-1;;;;;24611:15:0;;;10677:6;;24611:15;;;;:49;;-1:-1:-1;10677:6:0;;-1:-1:-1;;;;;24647:13:0;;;10677:6;;24647:13;;24611:49;:86;;;;-1:-1:-1;;;;;;24681:16:0;;;;24611:86;:128;;;;-1:-1:-1;;;;;;24718:21:0;;24732:6;24718:21;;24611:128;:160;;;;-1:-1:-1;24761:10:0;;-1:-1:-1;;;24761:10:0;;;;24760:11;24611:160;24589:1042;;;-1:-1:-1;;;;;24855:31:0;;;;;;:25;:31;;;;;;;;:71;;;;-1:-1:-1;;;;;;24891:35:0;;;;;;:31;:35;;;;;;;;24890:36;24855:71;24851:765;;;24973:14;;24963:6;:24;;24955:90;;;;-1:-1:-1;;;24955:90:0;;10706:2:1;24955:90:0;;;10688:21:1;10745:2;10725:18;;;10718:30;10784:34;10764:18;;;10757:62;-1:-1:-1;;;10835:18:1;;;10828:51;10896:19;;24955:90:0;10504:417:1;24955:90:0;25106:16;;25089:13;25099:2;25089:9;:13::i;:::-;25080:22;;:6;:22;:::i;:::-;:42;;25072:74;;;;-1:-1:-1;;;25072:74:0;;11128:2:1;25072:74:0;;;11110:21:1;11167:2;11147:18;;;11140:30;-1:-1:-1;;;11186:18:1;;;11179:49;11245:18;;25072:74:0;10926:343:1;25072:74:0;24851:765;;;-1:-1:-1;;;;;25225:29:0;;;;;;:25;:29;;;;;;;;:71;;;;-1:-1:-1;;;;;;25259:37:0;;;;;;:31;:37;;;;;;;;25258:38;25225:71;25221:395;;;25343:14;;25333:6;:24;;25325:91;;;;-1:-1:-1;;;25325:91:0;;11476:2:1;25325:91:0;;;11458:21:1;11515:2;11495:18;;;11488:30;11554:34;11534:18;;;11527:62;-1:-1:-1;;;11605:18:1;;;11598:52;11667:19;;25325:91:0;11274:418:1;25221:395:0;-1:-1:-1;;;;;25463:35:0;;;;;;:31;:35;;;;;;;;25459:157;;25556:16;;25539:13;25549:2;25539:9;:13::i;:::-;25530:22;;:6;:22;:::i;:::-;:42;;25522:74;;;;-1:-1:-1;;;25522:74:0;;11128:2:1;25522:74:0;;;11110:21:1;11167:2;11147:18;;;11140:30;-1:-1:-1;;;11186:18:1;;;11179:49;11245:18;;25522:74:0;10926:343:1;25522:74:0;25655:28;25686:24;25704:4;25686:9;:24::i;:::-;25763:20;;25655:55;;-1:-1:-1;25739:44:0;;;;;;;25815:35;;-1:-1:-1;25840:10:0;;-1:-1:-1;;;25840:10:0;;;;25839:11;25815:35;:84;;;;-1:-1:-1;;;;;;25868:31:0;;;;;;:25;:31;;;;;;;;25867:32;25815:84;:127;;;;-1:-1:-1;;;;;;25917:25:0;;;;;;:19;:25;;;;;;;;25916:26;25815:127;:168;;;;-1:-1:-1;;;;;;25960:23:0;;;;;;:19;:23;;;;;;;;25959:24;25815:168;25797:306;;;26010:10;:17;;-1:-1:-1;;;;26010:17:0;-1:-1:-1;;;26010:17:0;;;26045:10;:8;:10::i;:::-;26073;:18;;-1:-1:-1;;;;26073:18:0;;;25797:306;26132:10;;-1:-1:-1;;;;;26244:25:0;;26116:12;26244:25;;;:19;:25;;;;;;26132:10;-1:-1:-1;;;26132:10:0;;;;;26131:11;;26244:25;;:52;;-1:-1:-1;;;;;;26273:23:0;;;;;;:19;:23;;;;;;;;26244:52;26241:99;;;-1:-1:-1;26323:5:0;26241:99;26353:12;26457:7;26454:779;;;-1:-1:-1;;;;;26508:29:0;;;;;;:25;:29;;;;;;;;:49;;;;;26556:1;26541:12;;:16;26508:49;26504:576;;;26584:33;26613:3;26584:24;26595:12;;26584:6;:10;;:24;;;;:::i;:::-;:28;;:33::i;:::-;26577:40;;26678:12;;26665:10;;26658:4;:17;;;;:::i;:::-;:32;;;;:::i;:::-;26636:18;;:54;;;;;;;:::i;:::-;;;;-1:-1:-1;;26745:12:0;;26732:10;;26725:17;;:4;:17;:::i;:::-;:32;;;;:::i;:::-;26709:12;;:48;;;;;;;:::i;:::-;;;;-1:-1:-1;26504:576:0;;-1:-1:-1;26504:576:0;;-1:-1:-1;;;;;26818:31:0;;;;;;:25;:31;;;;;;;;:50;;;;;26867:1;26853:11;;:15;26818:50;26815:265;;;26896:32;26924:3;26896:23;26907:11;;26896:6;:10;;:23;;;;:::i;:32::-;26889:39;;26988:11;;26976:9;;26969:4;:16;;;;:::i;:::-;:30;;;;:::i;:::-;26947:18;;:52;;;;;;;:::i;:::-;;;;-1:-1:-1;;27053:11:0;;27041:9;;27034:16;;:4;:16;:::i;:::-;:30;;;;:::i;:::-;27018:12;;:46;;;;;;;:::i;:::-;;;;-1:-1:-1;;26815:265:0;27100:8;;27097:93;;27132:42;27148:4;27162;27169;27132:15;:42::i;:::-;27207:14;27217:4;27207:14;;:::i;:::-;;;26454:779;27246:33;27262:4;27268:2;27272:6;27246:15;:33::i;:::-;24288:2999;;;;24175:3112;;;:::o;9089:193::-;9175:7;9211:12;9203:6;;;;9195:29;;;;-1:-1:-1;;;9195:29:0;;;;;;;;:::i;:::-;-1:-1:-1;9235:9:0;9247:5;9251:1;9247;:5;:::i;:::-;9235:17;9089:193;-1:-1:-1;;;;;9089:193:0:o;23844:189::-;-1:-1:-1;;;;;23927:31:0;;;;;;:25;:31;;;;;;:39;;-1:-1:-1;;23927:39:0;;;;;;;;;;23985:40;;23927:39;;:31;23985:40;;;23844:189;;:::o;8755:182::-;8813:7;;8845:5;8849:1;8845;:5;:::i;:::-;8833:17;;8874:1;8869;:6;;8861:46;;;;-1:-1:-1;;;8861:46:0;;12032:2:1;8861:46:0;;;12014:21:1;12071:2;12051:18;;;12044:30;12110:29;12090:18;;;12083:57;12157:18;;8861:46:0;11830:351:1;8861:46:0;8928:1;8755:182;-1:-1:-1;;;8755:182:0:o;6802:575::-;-1:-1:-1;;;;;6942:20:0;;6934:70;;;;-1:-1:-1;;;6934:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7023:23:0;;7015:71;;;;-1:-1:-1;;;7015:71:0;;;;;;;:::i;:::-;7181;7203:6;7181:71;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7181:17:0;;:9;:17;;;;;;;;;;;;:71;:21;:71::i;:::-;-1:-1:-1;;;;;7161:17:0;;;:9;:17;;;;;;;;;;;:91;;;;7286:20;;;;;;;:32;;7311:6;7286:24;:32::i;:::-;-1:-1:-1;;;;;7263:20:0;;;:9;:20;;;;;;;;;;;;:55;;;;7334:35;1848:25:1;;;7263:20:0;;7334:35;;;;;;1821:18:1;7334:35:0;1702:177:1;28431:1477:0;28470:23;28496:24;28514:4;28496:9;:24::i;:::-;28470:50;;28531:25;28580:12;;28559:18;;:33;;;;:::i;:::-;28531:61;-1:-1:-1;28603:12:0;28632:20;;;:46;;-1:-1:-1;28656:22:0;;28632:46;28629:60;;;28681:7;;;28431:1477::o;28629:60::-;28705:17;;;;;;;:26;;28726:5;28705:26;28702:254;;28768:20;;:25;;28791:2;28768:25;:::i;:::-;28750:15;:43;28747:125;;;28831:20;;:25;;28854:2;28831:25;:::i;:::-;28813:43;;28747:125;28702:254;;;28920:24;28938:4;28920:9;:24::i;:::-;28902:42;;28702:254;29028:23;29113:1;29093:17;29072:18;;29054:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;29028:86;-1:-1:-1;29125:26:0;29154:36;:15;29028:86;29154:19;:36::i;:::-;29125:65;-1:-1:-1;29232:21:0;29267:36;29125:65;29267:16;:36::i;:::-;29318:18;29339:44;:21;29365:17;29339:25;:44::i;:::-;29318:65;;29397:17;29417:51;29450:17;29417:28;29432:12;;29417:10;:14;;:28;;;;:::i;:51::-;29397:71;-1:-1:-1;29479:23:0;29505:22;29397:71;29505:10;:22;:::i;:::-;29565:1;29544:18;:22;;;29577:12;:16;29479:48;-1:-1:-1;29610:19:0;;;;;:42;;;29651:1;29633:15;:19;29610:42;29607:210;;;29668:46;29681:15;29698;29668:12;:46::i;:::-;29786:18;;29734:71;;;12388:25:1;;;12444:2;12429:18;;12422:34;;;12472:18;;;12465:34;;;;29734:71:0;;;;;;12376:2:1;29734:71:0;;;29607:210;29851:9;;29843:57;;-1:-1:-1;;;;;29851:9:0;;;;29874:21;;29843:57;;;;29874:21;29851:9;29843:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;28431:1477:0:o;9290:254::-;9348:7;9374:1;9379;9374:6;9370:47;;-1:-1:-1;9404:1:0;9397:8;;9370:47;9430:9;9442:5;9446:1;9442;:5;:::i;:::-;9430:17;-1:-1:-1;9475:1:0;9466:5;9470:1;9430:17;9466:5;:::i;:::-;:10;9458:56;;;;-1:-1:-1;;;9458:56:0;;12712:2:1;9458:56:0;;;12694:21:1;12751:2;12731:18;;;12724:30;12790:34;12770:18;;;12763:62;-1:-1:-1;;;12841:18:1;;;12834:31;12882:19;;9458:56:0;12510:397:1;9552:132:0;9610:7;9637:39;9641:1;9644;9637:39;;;;;;;;;;;;;;;;;:3;:39::i;8945:136::-;9003:7;9030:43;9034:1;9037;9030:43;;;;;;;;;;;;;;;;;:3;:43::i;27296:597::-;27449:16;;;27463:1;27449:16;;;;;;;;27425:21;;27449:16;;;;;;;;;;-1:-1:-1;27449:16:0;27425:40;;27494:4;27476;27481:1;27476:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;27476:23:0;;;:7;;;;;;;;;;:23;;;;27520:15;;:22;;;-1:-1:-1;;;27520:22:0;;;;:15;;;;;:20;;:22;;;;;27476:7;;27520:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27510:4;27515:1;27510:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;27510:32:0;;;:7;;;;;;;;;:32;27588:15;;27556:62;;27573:4;;27588:15;27606:11;27556:8;:62::i;:::-;27658:15;;:224;;-1:-1:-1;;;27658:224:0;;-1:-1:-1;;;;;27658:15:0;;;;:66;;:224;;27739:11;;27658:15;;27809:4;;27836;;27856:15;;27658:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27902:520;28082:15;;28050:62;;28067:4;;-1:-1:-1;;;;;28082:15:0;28100:11;28050:8;:62::i;:::-;28156:15;;:258;;-1:-1:-1;;;28156:258:0;;-1:-1:-1;;;;;28156:15:0;;;;:31;;28195:9;;28156:258;;28228:4;;28248:11;;28156:15;;;;28228:4;;28388:15;;28156:258;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;27902:520;;:::o;9692:279::-;9778:7;9813:12;9806:5;9798:28;;;;-1:-1:-1;;;9798:28:0;;;;;;;;:::i;:::-;-1:-1:-1;9837:9:0;9849:5;9853:1;9849;:5;:::i;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:247::-;1274:6;1327:2;1315:9;1306:7;1302:23;1298:32;1295:52;;;1343:1;1340;1333:12;1295:52;1382:9;1369:23;1401:31;1426:5;1401:31;:::i;1884:456::-;1961:6;1969;1977;2030:2;2018:9;2009:7;2005:23;2001:32;1998:52;;;2046:1;2043;2036:12;1998:52;2085:9;2072:23;2104:31;2129:5;2104:31;:::i;:::-;2154:5;-1:-1:-1;2211:2:1;2196:18;;2183:32;2224:33;2183:32;2224:33;:::i;:::-;1884:456;;2276:7;;-1:-1:-1;;;2330:2:1;2315:18;;;;2302:32;;1884:456::o;2742:160::-;2807:20;;2863:13;;2856:21;2846:32;;2836:60;;2892:1;2889;2882:12;2836:60;2742:160;;;:::o;2907:315::-;2972:6;2980;3033:2;3021:9;3012:7;3008:23;3004:32;3001:52;;;3049:1;3046;3039:12;3001:52;3088:9;3075:23;3107:31;3132:5;3107:31;:::i;:::-;3157:5;-1:-1:-1;3181:35:1;3212:2;3197:18;;3181:35;:::i;:::-;3171:45;;2907:315;;;;;:::o;3227:180::-;3283:6;3336:2;3324:9;3315:7;3311:23;3307:32;3304:52;;;3352:1;3349;3342:12;3304:52;3375:26;3391:9;3375:26;:::i;3412:388::-;3480:6;3488;3541:2;3529:9;3520:7;3516:23;3512:32;3509:52;;;3557:1;3554;3547:12;3509:52;3596:9;3583:23;3615:31;3640:5;3615:31;:::i;:::-;3665:5;-1:-1:-1;3722:2:1;3707:18;;3694:32;3735:33;3694:32;3735:33;:::i;:::-;3787:7;3777:17;;;3412:388;;;;;:::o;3805:385::-;3891:6;3899;3907;3915;3968:3;3956:9;3947:7;3943:23;3939:33;3936:53;;;3985:1;3982;3975:12;3936:53;-1:-1:-1;;4008:23:1;;;4078:2;4063:18;;4050:32;;-1:-1:-1;4129:2:1;4114:18;;4101:32;;4180:2;4165:18;4152:32;;-1:-1:-1;3805:385:1;-1:-1:-1;3805:385:1:o;4195:380::-;4274:1;4270:12;;;;4317;;;4338:61;;4392:4;4384:6;4380:17;4370:27;;4338:61;4445:2;4437:6;4434:14;4414:18;4411:38;4408:161;;4491:10;4486:3;4482:20;4479:1;4472:31;4526:4;4523:1;4516:15;4554:4;4551:1;4544:15;4408:161;;4195:380;;;:::o;4580:356::-;4782:2;4764:21;;;4801:18;;;4794:30;4860:34;4855:2;4840:18;;4833:62;4927:2;4912:18;;4580:356::o;5910:251::-;5980:6;6033:2;6021:9;6012:7;6008:23;6004:32;6001:52;;;6049:1;6046;6039:12;6001:52;6081:9;6075:16;6100:31;6125:5;6100:31;:::i;6475:127::-;6536:10;6531:3;6527:20;6524:1;6517:31;6567:4;6564:1;6557:15;6591:4;6588:1;6581:15;6607:168;6680:9;;;6711;;6728:15;;;6722:22;;6708:37;6698:71;;6749:18;;:::i;6780:217::-;6820:1;6846;6836:132;;6890:10;6885:3;6881:20;6878:1;6871:31;6925:4;6922:1;6915:15;6953:4;6950:1;6943:15;6836:132;-1:-1:-1;6982:9:1;;6780:217::o;7002:607::-;-1:-1:-1;;;;;7361:15:1;;;7343:34;;7408:2;7393:18;;7386:34;;;;7451:2;7436:18;;7429:34;;;;7494:2;7479:18;;7472:34;;;;7543:15;;;7537:3;7522:19;;7515:44;7323:3;7575:19;;7568:35;;;;7292:3;7277:19;;7002:607::o;7614:306::-;7702:6;7710;7718;7771:2;7759:9;7750:7;7746:23;7742:32;7739:52;;;7787:1;7784;7777:12;7739:52;7816:9;7810:16;7800:26;;7866:2;7855:9;7851:18;7845:25;7835:35;;7910:2;7899:9;7895:18;7889:25;7879:35;;7614:306;;;;;:::o;8756:125::-;8821:9;;;8842:10;;;8839:36;;;8855:18;;:::i;9694:401::-;9896:2;9878:21;;;9935:2;9915:18;;;9908:30;9974:34;9969:2;9954:18;;9947:62;-1:-1:-1;;;10040:2:1;10025:18;;10018:35;10085:3;10070:19;;9694:401::o;10100:399::-;10302:2;10284:21;;;10341:2;10321:18;;;10314:30;10380:34;10375:2;10360:18;;10353:62;-1:-1:-1;;;10446:2:1;10431:18;;10424:33;10489:3;10474:19;;10100:399::o;11697:128::-;11764:9;;;11785:11;;;11782:37;;;11799:18;;:::i;13044:127::-;13105:10;13100:3;13096:20;13093:1;13086:31;13136:4;13133:1;13126:15;13160:4;13157:1;13150:15;13176:980;13438:4;13486:3;13475:9;13471:19;13517:6;13506:9;13499:25;13543:2;13581:6;13576:2;13565:9;13561:18;13554:34;13624:3;13619:2;13608:9;13604:18;13597:31;13648:6;13683;13677:13;13714:6;13706;13699:22;13752:3;13741:9;13737:19;13730:26;;13791:2;13783:6;13779:15;13765:29;;13812:1;13822:195;13836:6;13833:1;13830:13;13822:195;;;13901:13;;-1:-1:-1;;;;;13897:39:1;13885:52;;13992:15;;;;13957:12;;;;13933:1;13851:9;13822:195;;;-1:-1:-1;;;;;;;14073:32:1;;;;14068:2;14053:18;;14046:60;-1:-1:-1;;;14137:3:1;14122:19;14115:35;14034:3;13176:980;-1:-1:-1;;;13176:980:1:o

Swarm Source

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