ETH Price: $3,356.14 (-2.84%)
Gas: 2 Gwei

Token

Libai (Libai)
 

Overview

Max Total Supply

1,000,000,000,000 Libai

Holders

45

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
16,000,000,000 Libai

Value
$0.00
0x07562196985c0a74251a39fdc0c528f6f0b608dc
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:
Libai

Compiler Version
v0.8.5+commit.a4f2e591

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-02-09
*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.4;

abstract contract Context {

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

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

interface IERC20 {

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

library SafeMath {

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

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }

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

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

library Address {

    function isContract(address account) internal view returns (bool) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(account) }
        return (codehash != accountHash && codehash != 0x0);
    }

    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
      return functionCall(target, data, "Address: low-level call failed");
    }

    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }

    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        return _functionCallWithValue(target, data, value, errorMessage);
    }

    function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
        if (success) {
            return returndata;
        } else {
            
            if (returndata.length > 0) {
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    function initialize(address, address) external;
}

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

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

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

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

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

contract Libai is Context, IERC20, Ownable {
    
    using SafeMath for uint256;
    using Address for address;
    
    string private _name = "Libai";
    string private _symbol = "Libai";
    uint8  private _decimals = 18;
    uint256 private _totalSupply = 100 * 10**10 * 10**_decimals;
    uint256 public _maxTxAmount = _totalSupply.div(50); 
    uint256 public _walletMax = _totalSupply.div(50);
    uint256 private minimumTokensBeforeSwap = _totalSupply.div(10000); 
    address payable public marketingWalletAddress = payable(msg.sender); 

    mapping (address => uint256) _balances;
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => bool) public isExcludedFromFee;
    mapping (address => bool) public isWalletLimitExempt;
    mapping (address => bool) public isTxLimitExempt;
    mapping (address => bool) public isMarketPair;
    mapping (address => bool) public _isBlacklisted;
    
    uint256 private _buyLiquidityFee =0;
    uint256 private _buyMarketingFee =20;
    uint256 private _sellLiquidityFee =0;
    uint256 private _sellMarketingFee =20;
    uint256 private _liquidityShare = _buyLiquidityFee.add(_sellLiquidityFee);
    uint256 private _marketingShare = _buyMarketingFee.add(_sellMarketingFee);
    uint256 public _totalTaxIfBuying;
    uint256 public _totalTaxIfSelling;
    uint256 private _totalDistributionShares;

    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapPair;
    bool inSwapAndLiquify;
    bool private swapAndLiquifyEnabled = true;
    bool private swapAndLiquifyByLimitOnly = false;
    bool private checkWalletLimit = true;

    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );
    
    event SwapETHForTokens(
        uint256 amountIn,
        address[] path
    );
    
    event SwapTokensForETH(
        uint256 amountIn,
        address[] path
    );
    
    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }
    
    constructor () {
        
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); 

        uniswapPair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        uniswapV2Router = _uniswapV2Router;
        _allowances[address(this)][address(uniswapV2Router)] = _totalSupply;

        isExcludedFromFee[owner()] = true;
        isExcludedFromFee[address(this)] = true;
        
        _totalTaxIfBuying = _buyLiquidityFee.add(_buyMarketingFee);
        _totalTaxIfSelling = _sellLiquidityFee.add(_sellMarketingFee);
        _totalDistributionShares = _liquidityShare.add(_marketingShare);
        isWalletLimitExempt[owner()] = true;
        isWalletLimitExempt[address(uniswapPair)] = true;
        isWalletLimitExempt[address(this)] = true;
        
        isTxLimitExempt[owner()] = true;
        isTxLimitExempt[address(this)] = true;

        isMarketPair[address(uniswapPair)] = true;

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

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

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

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

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

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

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

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

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

    function minimumTokensBeforeSwapAmount() private view returns (uint256) {
        return minimumTokensBeforeSwap;
    }

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

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

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

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

    function setIsTxLimitAndWalletLimitExempt(address holder, bool exempt) external onlyOwner {
        isTxLimitExempt[holder] = exempt;
        isWalletLimitExempt[holder] = exempt;
    }
    
    function setNumTokensBeforeSwap(uint256 newLimit) external onlyOwner() {
        minimumTokensBeforeSwap = newLimit;
    }

    function setTaxes(
        uint256 newbuyLiquidityTax, uint256 newbuyMarketingTax,
        uint256 newsellLiquidityTax, uint256 newsellMarketingTax,
        uint256 newLiquidityShare, uint256 newMarketingShare
        ) external onlyOwner() {   
        require(newbuyLiquidityTax.add(newbuyMarketingTax) <= 5, "Total tax cannot exceed 5%");
        require(newsellLiquidityTax.add(newsellMarketingTax) <= 5, "Total tax cannot exceed 5%");
        require(newLiquidityShare.add(newMarketingShare) <= 10, "Total tax cannot exceed 10%");

        _buyLiquidityFee = newbuyLiquidityTax;
        _buyMarketingFee = newbuyMarketingTax;
        _totalTaxIfBuying = _buyLiquidityFee.add(_buyMarketingFee);

        _sellLiquidityFee = newsellLiquidityTax;
        _sellMarketingFee = newsellMarketingTax;
        _totalTaxIfSelling = _sellLiquidityFee.add(_sellMarketingFee);

        _liquidityShare = newLiquidityShare;
        _marketingShare = newMarketingShare;
        _totalDistributionShares = _liquidityShare.add(_marketingShare);
    }
    
    function setIsExcludedFromFee(address[] calldata accounts, bool newValue) public onlyOwner {
        for(uint256 i = 0; i < accounts.length; i++) {
              isExcludedFromFee[accounts[i]] = newValue;
        }
    }

    function SetBlacklisted(address[] calldata accounts, bool newValue) public onlyOwner {
        for(uint256 i = 0; i < accounts.length; i++) {
               _isBlacklisted[accounts[i]] = newValue;
        }
    }

    function setMaxWalletAndTxnAmount(uint256 newTxnNum, uint256 newMaxWalletNum) external onlyOwner {
        require((newTxnNum  * (10**_decimals))>=  _totalSupply.div(200), "Cannot set maxTxn lower than 0.5%");
        require((newMaxWalletNum  * (10**_decimals))>= _totalSupply.div(200),"Cannot set maxWallet lower than 0.5%");
        _maxTxAmount = newTxnNum  * (10**_decimals);
        _walletMax = newMaxWalletNum  * (10**_decimals);
    }


    function setMarketingWalletAddress(address newAddress) external onlyOwner() {
        marketingWalletAddress = payable(newAddress);
    }

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

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(newRouterAddress); 

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

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

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

        isWalletLimitExempt[address(uniswapPair)] = true;
        isMarketPair[address(uniswapPair)] = true;
    }

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

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

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

    function _transfer(address sender, address recipient, uint256 amount) private returns (bool) {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address"); 
        require(_isBlacklisted[sender] == false, "You are banned");
        require(_isBlacklisted[recipient] == false, "The recipient is banned");     

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

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

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

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

            if(checkWalletLimit && !isWalletLimitExempt[recipient])
                require(balanceOf(recipient).add(finalAmount) <= _walletMax);

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

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

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

    function swapAndLiquify(uint256 tAmount) private lockTheSwap {
        
        uint256 tokensForLP = tAmount.mul(_liquidityShare).div(_totalDistributionShares).div(2);
        uint256 tokensForSwap = tAmount.sub(tokensForLP);

        swapTokensForEth(tokensForSwap);
        uint256 amountReceived = address(this).balance;

        uint256 totalETHFee = _totalDistributionShares.sub(_liquidityShare.div(2));
        
        uint256 amountETHLiquidity = amountReceived.mul(_liquidityShare).div(totalETHFee).div(2);

        uint256 amountETHMarketing = amountReceived.sub(amountETHLiquidity);

        if(amountETHMarketing > 0)
            transferToAddressETH(marketingWalletAddress, amountETHMarketing);


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

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

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

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

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

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

        return amount.sub(feeAmount);
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapETHForTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapTokensForETH","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"newValue","type":"bool"}],"name":"SetBlacklisted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalTaxIfBuying","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalTaxIfSelling","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_walletMax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newRouterAddress","type":"address"}],"name":"changeRouterVersion","outputs":[{"internalType":"address","name":"newPairAddress","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isMarketPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isTxLimitExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isWalletLimitExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWalletAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"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":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"newValue","type":"bool"}],"name":"setIsExcludedFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsTxLimitAndWalletLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"newValue","type":"bool"}],"name":"setMarketPairStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"setMarketingWalletAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newTxnNum","type":"uint256"},{"internalType":"uint256","name":"newMaxWalletNum","type":"uint256"}],"name":"setMaxWalletAndTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"setNumTokensBeforeSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newbuyLiquidityTax","type":"uint256"},{"internalType":"uint256","name":"newbuyMarketingTax","type":"uint256"},{"internalType":"uint256","name":"newsellLiquidityTax","type":"uint256"},{"internalType":"uint256","name":"newsellMarketingTax","type":"uint256"},{"internalType":"uint256","name":"newLiquidityShare","type":"uint256"},{"internalType":"uint256","name":"newMarketingShare","type":"uint256"}],"name":"setTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"waiveOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c060405260056080819052644c6962616960d81b60a0908152620000289160019190620006b6565b50604080518082019091526005808252644c6962616960d81b60209092019182526200005791600291620006b6565b506003805460ff191660129081179091556200007590600a62000866565b620000869064e8d4a5100062000925565b600455620000a66032600454620005c060201b6200130b1790919060201c565b600555620000c66032600454620005c060201b6200130b1790919060201c565b600655620000e7612710600454620005c060201b6200130b1790919060201c565b60075560088054336001600160a01b0319909116179055600060108190556014601181905560128290556013556200012c908062000613602090811b6200134d17901c565b6014556200014d6013546011546200061360201b6200134d1790919060201c565b601555601a805462ffffff60a81b19166201000160a81b1790553480156200017457600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d9050806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200020957600080fd5b505afa1580156200021e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200024491906200075c565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200028d57600080fd5b505afa158015620002a2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002c891906200075c565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b1580156200031157600080fd5b505af115801562000326573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200034c91906200075c565b601a80546001600160a01b039283166001600160a01b031991821617909155601980549284169290911682179055600454306000908152600a6020908152604080832094835293905291822055600190600b90620003b26000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff19958616179055308152600b83522080549092166001179091556011546010546200040e929091906200134d62000613821b17901c565b601681905550620004326013546012546200061360201b6200134d1790919060201c565b601781905550620004566015546014546200061360201b6200134d1790919060201c565b6018556001600c6000620004726000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055601a549091168152600c90925280822080548416600190811790915530835290822080549093168117909255600d90620004e26000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055308152600d8452828120805486166001908117909155601a549092168152600e909352908220805490931617909155600454906009906200054e3390565b6001600160a01b03168152602081019190915260400160002055336001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600454604051620005b191815260200190565b60405180910390a3506200099a565b60006200060a83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506200067a60201b60201c565b90505b92915050565b600080620006228385620007df565b9050838110156200060a5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064015b60405180910390fd5b600081836200069e5760405162461bcd60e51b815260040162000671919062000787565b506000620006ad8486620007fa565b95945050505050565b828054620006c49062000947565b90600052602060002090601f016020900481019282620006e8576000855562000733565b82601f106200070357805160ff191683800117855562000733565b8280016001018555821562000733579182015b828111156200073357825182559160200191906001019062000716565b506200074192915062000745565b5090565b5b8082111562000741576000815560010162000746565b6000602082840312156200076f57600080fd5b81516001600160a01b03811681146200060a57600080fd5b600060208083528351808285015260005b81811015620007b65785810183015185820160400152820162000798565b81811115620007c9576000604083870101525b50601f01601f1916929092016040019392505050565b60008219821115620007f557620007f562000984565b500190565b6000826200081857634e487b7160e01b600052601260045260246000fd5b500490565b600181815b808511156200085e57816000190482111562000842576200084262000984565b808516156200085057918102915b93841c939080029062000822565b509250929050565b60006200060a60ff84168360008262000882575060016200060d565b8162000891575060006200060d565b8160018114620008aa5760028114620008b557620008d5565b60019150506200060d565b60ff841115620008c957620008c962000984565b50506001821b6200060d565b5060208310610133831016604e8410600b8410161715620008fa575081810a6200060d565b6200090683836200081d565b80600019048211156200091d576200091d62000984565b029392505050565b600081600019048311821515161562000942576200094262000984565b500290565b600181811c908216806200095c57607f821691505b602082108114156200097e57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b61263080620009aa6000396000f3fe6080604052600436106102085760003560e01c80637d1db4a511610118578063a9059cbb116100a0578063d158272d1161006f578063d158272d1461063a578063dd62ed3e1461065a578063ed609f15146106a0578063f0cd1dac146106c0578063f2fde38b146106d657600080fd5b8063a9059cbb146105aa578063af06c235146105ca578063c816841b146105ea578063c867d60b1461060a57600080fd5b80638b42507f116100e75780638b42507f146105125780638da5cb5b14610542578063914eb66a1461056057806395d89b4114610575578063a457c2d71461058a57600080fd5b80637d1db4a5146104b0578063807c2d9c146104c657806382eefb43146104dc578063844d591c146104f257600080fd5b806323b872dd1161019b5780633ecad2711161016a5780633ecad271146103da5780634cb80fd51461040a5780635342acb41461042a5780635881f3ef1461045a57806370a082311461047a57600080fd5b806323b872dd14610358578063313ce56714610378578063395093511461039a5780633b97084a146103ba57600080fd5b806309e75607116101d757806309e75607146102b15780631694505e146102d157806318160ddd146103095780631cdd3be31461032857600080fd5b8063022d02e51461021457806304d4c9901461023657806306fdde0314610256578063095ea7b31461028157600080fd5b3661020f57005b600080fd5b34801561022057600080fd5b5061023461022f3660046121f7565b6106f6565b005b34801561024257600080fd5b50610234610251366004612247565b61086d565b34801561026257600080fd5b5061026b6109f2565b60405161027891906122ce565b60405180910390f35b34801561028d57600080fd5b506102a161029c36600461212e565b610a84565b6040519015158152602001610278565b3480156102bd57600080fd5b506102346102cc36600461215a565b610a9b565b3480156102dd57600080fd5b506019546102f1906001600160a01b031681565b6040516001600160a01b039091168152602001610278565b34801561031557600080fd5b506004545b604051908152602001610278565b34801561033457600080fd5b506102a1610343366004612045565b600f6020526000908152604090205460ff1681565b34801561036457600080fd5b506102a16103733660046120b8565b610b3c565b34801561038457600080fd5b5060035460405160ff9091168152602001610278565b3480156103a657600080fd5b506102a16103b536600461212e565b610ba7565b3480156103c657600080fd5b506102346103d53660046121de565b610bdd565b3480156103e657600080fd5b506102a16103f5366004612045565b600e6020526000908152604090205460ff1681565b34801561041657600080fd5b50610234610425366004612045565b610c0c565b34801561043657600080fd5b506102a1610445366004612045565b600b6020526000908152604090205460ff1681565b34801561046657600080fd5b506102f1610475366004612045565b610c58565b34801561048657600080fd5b5061031a610495366004612045565b6001600160a01b031660009081526009602052604090205490565b3480156104bc57600080fd5b5061031a60055481565b3480156104d257600080fd5b5061031a60065481565b3480156104e857600080fd5b5061031a60175481565b3480156104fe57600080fd5b5061023461050d3660046120f9565b610fea565b34801561051e57600080fd5b506102a161052d366004612045565b600d6020526000908152604090205460ff1681565b34801561054e57600080fd5b506000546001600160a01b03166102f1565b34801561056c57600080fd5b5061023461103f565b34801561058157600080fd5b5061026b6110b3565b34801561059657600080fd5b506102a16105a536600461212e565b6110c2565b3480156105b657600080fd5b506102a16105c536600461212e565b611111565b3480156105d657600080fd5b506102346105e53660046120f9565b61111e565b3480156105f657600080fd5b50601a546102f1906001600160a01b031681565b34801561061657600080fd5b506102a1610625366004612045565b600c6020526000908152604090205460ff1681565b34801561064657600080fd5b506008546102f1906001600160a01b031681565b34801561066657600080fd5b5061031a61067536600461207f565b6001600160a01b039182166000908152600a6020908152604080832093909416825291909152205490565b3480156106ac57600080fd5b506102346106bb36600461215a565b611186565b3480156106cc57600080fd5b5061031a60165481565b3480156106e257600080fd5b506102346106f1366004612045565b611221565b6000546001600160a01b031633146107295760405162461bcd60e51b815260040161072090612323565b60405180910390fd5b6004546107379060c861130b565b6003546107489060ff16600a612432565b61075290846124dd565b10156107aa5760405162461bcd60e51b815260206004820152602160248201527f43616e6e6f7420736574206d617854786e206c6f776572207468616e20302e356044820152602560f81b6064820152608401610720565b6004546107b89060c861130b565b6003546107c99060ff16600a612432565b6107d390836124dd565b101561082d5760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263302e352560e01b6064820152608401610720565b60035461083e9060ff16600a612432565b61084890836124dd565b60055560035461085c9060ff16600a612432565b61086690826124dd565b6006555050565b6000546001600160a01b031633146108975760405162461bcd60e51b815260040161072090612323565b60056108a3878761134d565b11156108f15760405162461bcd60e51b815260206004820152601a60248201527f546f74616c207461782063616e6e6f74206578636565642035250000000000006044820152606401610720565b60056108fd858561134d565b111561094b5760405162461bcd60e51b815260206004820152601a60248201527f546f74616c207461782063616e6e6f74206578636565642035250000000000006044820152606401610720565b600a610957838361134d565b11156109a55760405162461bcd60e51b815260206004820152601b60248201527f546f74616c207461782063616e6e6f74206578636565642031302500000000006044820152606401610720565b601086905560118590556109b9868661134d565b601655601284905560138390556109d0848461134d565b601755601482905560158190556109e7828261134d565b601855505050505050565b606060018054610a0190612513565b80601f0160208091040260200160405190810160405280929190818152602001828054610a2d90612513565b8015610a7a5780601f10610a4f57610100808354040283529160200191610a7a565b820191906000526020600020905b815481529060010190602001808311610a5d57829003601f168201915b5050505050905090565b6000610a913384846113ac565b5060015b92915050565b6000546001600160a01b03163314610ac55760405162461bcd60e51b815260040161072090612323565b60005b82811015610b365781600f6000868685818110610ae757610ae761257f565b9050602002016020810190610afc9190612045565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580610b2e8161254e565b915050610ac8565b50505050565b6000610b498484846114d0565b50610b9c8433610b97856040518060600160405280602881526020016125ae602891396001600160a01b038a166000908152600a602090815260408083203384529091529020549190611968565b6113ac565b5060015b9392505050565b336000818152600a602090815260408083206001600160a01b03871684529091528120549091610a91918590610b97908661134d565b6000546001600160a01b03163314610c075760405162461bcd60e51b815260040161072090612323565b600755565b6000546001600160a01b03163314610c365760405162461bcd60e51b815260040161072090612323565b600880546001600160a01b0319166001600160a01b0392909216919091179055565b600080546001600160a01b03163314610c835760405162461bcd60e51b815260040161072090612323565b6000829050806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015610cc157600080fd5b505afa158015610cd5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cf99190612062565b6001600160a01b031663e6a4390530836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015610d4157600080fd5b505afa158015610d55573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d799190612062565b6040516001600160e01b031960e085901b1681526001600160a01b0392831660048201529116602482015260440160206040518083038186803b158015610dbf57600080fd5b505afa158015610dd3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610df79190612062565b91506001600160a01b038216610f7b57806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015610e4057600080fd5b505afa158015610e54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e789190612062565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015610ec057600080fd5b505afa158015610ed4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ef89190612062565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015610f4057600080fd5b505af1158015610f54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f789190612062565b91505b601a80546001600160a01b03199081166001600160a01b03858116918217845560198054909316948116949094179091556000908152600c60209081526040808320805460ff19908116600190811790925594549095168352600e909152902080549091169091179055919050565b6000546001600160a01b031633146110145760405162461bcd60e51b815260040161072090612323565b6001600160a01b03919091166000908152600e60205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146110695760405162461bcd60e51b815260040161072090612323565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b606060028054610a0190612513565b6000610a913384610b97856040518060600160405280602581526020016125d660259139336000908152600a602090815260408083206001600160a01b038d1684529091529020549190611968565b6000610b9c3384846114d0565b6000546001600160a01b031633146111485760405162461bcd60e51b815260040161072090612323565b6001600160a01b039091166000908152600d60209081526040808320805494151560ff199586168117909155600c9092529091208054909216179055565b6000546001600160a01b031633146111b05760405162461bcd60e51b815260040161072090612323565b60005b82811015610b365781600b60008686858181106111d2576111d261257f565b90506020020160208101906111e79190612045565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055806112198161254e565b9150506111b3565b6000546001600160a01b0316331461124b5760405162461bcd60e51b815260040161072090612323565b6001600160a01b0381166112b05760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610720565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000610ba083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506119a2565b60008061135a83856123b5565b905083811015610ba05760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610720565b6001600160a01b03831661140e5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610720565b6001600160a01b03821661146f5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610720565b6001600160a01b038381166000818152600a602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b0384166115365760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610720565b6001600160a01b0383166115985760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610720565b6001600160a01b0384166000908152600f602052604090205460ff16156115f25760405162461bcd60e51b815260206004820152600e60248201526d165bdd48185c994818985b9b995960921b6044820152606401610720565b6001600160a01b0383166000908152600f602052604090205460ff161561165b5760405162461bcd60e51b815260206004820152601760248201527f54686520726563697069656e742069732062616e6e65640000000000000000006044820152606401610720565b601a54600160a01b900460ff161561167f576116788484846119d0565b9050610ba0565b6001600160a01b0384166000908152600d602052604090205460ff161580156116c157506001600160a01b0383166000908152600d602052604090205460ff16155b15611729576005548211156117295760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610720565b30600090815260096020526040902054600754811080159081906117575750601a54600160a01b900460ff16155b801561177c57506001600160a01b0386166000908152600e602052604090205460ff16155b80156117915750601a54600160a81b900460ff165b156117b757601a54600160b01b900460ff16156117ae5760075491505b6117b782611ab6565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b038916600090815260099091529190912054611809918690611968565b6001600160a01b038716600090815260096020908152604080832093909355600b90529081205460ff168061185657506001600160a01b0386166000908152600b602052604090205460ff165b61186a57611865878787611ba8565b61186c565b845b601a54909150600160b81b900460ff1680156118a157506001600160a01b0386166000908152600c602052604090205460ff16155b156118dd576006546118d2826118cc896001600160a01b031660009081526009602052604090205490565b9061134d565b11156118dd57600080fd5b6001600160a01b038616600090815260096020526040902054611900908261134d565b6001600160a01b0380881660008181526009602052604090819020939093559151908916907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906119549085815260200190565b60405180910390a360019350505050610ba0565b6000818484111561198c5760405162461bcd60e51b815260040161072091906122ce565b50600061199984866124fc565b95945050505050565b600081836119c35760405162461bcd60e51b815260040161072091906122ce565b50600061199984866123cd565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0386166000908152600990915291822054611a21918490611968565b6001600160a01b038086166000908152600960205260408082209390935590851681522054611a50908361134d565b6001600160a01b0380851660008181526009602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611aa49086815260200190565b60405180910390a35060019392505050565b601a805460ff60a01b1916600160a01b179055601854601454600091611aec91600291611ae69182908790611cae565b9061130b565b90506000611afa8383611d2d565b9050611b0581611d6f565b6014544790600090611b2590611b1c90600261130b565b60185490611d2d565b90506000611b476002611ae684611ae660145488611cae90919063ffffffff16565b90506000611b558483611d2d565b90508015611b7357600854611b73906001600160a01b031682611f11565b600082118015611b835750600086115b15611b9257611b928683611f4c565b5050601a805460ff60a01b191690555050505050565b6001600160a01b0383166000908152600e6020526040812054819060ff1615611bec57611be56064611ae660165486611cae90919063ffffffff16565b9050611c2a565b6001600160a01b0384166000908152600e602052604090205460ff1615611c2a57611c276064611ae660175486611cae90919063ffffffff16565b90505b8015611ca45730600090815260096020526040902054611c4a908261134d565b30600081815260096020526040908190209290925590516001600160a01b038716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611c9b9085815260200190565b60405180910390a35b6119998382611d2d565b600082611cbd57506000610a95565b6000611cc983856124dd565b905082611cd685836123cd565b14610ba05760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610720565b6000610ba083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611968565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611da457611da461257f565b6001600160a01b03928316602091820292909201810191909152601954604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015611df857600080fd5b505afa158015611e0c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e309190612062565b81600181518110611e4357611e4361257f565b6001600160a01b039283166020918202929092010152601954611e6991309116846113ac565b60195460405163791ac94760e01b81526001600160a01b039091169063791ac94790611ea2908590600090869030904290600401612379565b600060405180830381600087803b158015611ebc57600080fd5b505af1158015611ed0573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051611f05929190612358565b60405180910390a15050565b6040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015611f47573d6000803e3d6000fd5b505050565b601954611f649030906001600160a01b0316846113ac565b6019546001600160a01b031663f305d719823085600080611f8d6000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b158015611ff057600080fd5b505af1158015612004573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906120299190612219565b5050505050565b8035801515811461204057600080fd5b919050565b60006020828403121561205757600080fd5b8135610ba081612595565b60006020828403121561207457600080fd5b8151610ba081612595565b6000806040838503121561209257600080fd5b823561209d81612595565b915060208301356120ad81612595565b809150509250929050565b6000806000606084860312156120cd57600080fd5b83356120d881612595565b925060208401356120e881612595565b929592945050506040919091013590565b6000806040838503121561210c57600080fd5b823561211781612595565b915061212560208401612030565b90509250929050565b6000806040838503121561214157600080fd5b823561214c81612595565b946020939093013593505050565b60008060006040848603121561216f57600080fd5b833567ffffffffffffffff8082111561218757600080fd5b818601915086601f83011261219b57600080fd5b8135818111156121aa57600080fd5b8760208260051b85010111156121bf57600080fd5b6020928301955093506121d59186019050612030565b90509250925092565b6000602082840312156121f057600080fd5b5035919050565b6000806040838503121561220a57600080fd5b50508035926020909101359150565b60008060006060848603121561222e57600080fd5b8351925060208401519150604084015190509250925092565b60008060008060008060c0878903121561226057600080fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b600081518084526020808501945080840160005b838110156122c35781516001600160a01b03168752958201959082019060010161229e565b509495945050505050565b600060208083528351808285015260005b818110156122fb578581018301518582016040015282016122df565b8181111561230d576000604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b828152604060208201526000612371604083018461228a565b949350505050565b85815284602082015260a06040820152600061239860a083018661228a565b6001600160a01b0394909416606083015250608001529392505050565b600082198211156123c8576123c8612569565b500190565b6000826123ea57634e487b7160e01b600052601260045260246000fd5b500490565b600181815b8085111561242a57816000190482111561241057612410612569565b8085161561241d57918102915b93841c93908002906123f4565b509250929050565b6000610ba060ff84168360008261244b57506001610a95565b8161245857506000610a95565b816001811461246e576002811461247857612494565b6001915050610a95565b60ff84111561248957612489612569565b50506001821b610a95565b5060208310610133831016604e8410600b84101617156124b7575081810a610a95565b6124c183836123ef565b80600019048211156124d5576124d5612569565b029392505050565b60008160001904831182151516156124f7576124f7612569565b500290565b60008282101561250e5761250e612569565b500390565b600181811c9082168061252757607f821691505b6020821081141561254857634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561256257612562612569565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b03811681146125aa57600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212208dfe15be1582033f843c0612731bcef0e0d1ddb2e0c066cb28a65edbd6d7e23d64736f6c63430008050033

Deployed Bytecode

0x6080604052600436106102085760003560e01c80637d1db4a511610118578063a9059cbb116100a0578063d158272d1161006f578063d158272d1461063a578063dd62ed3e1461065a578063ed609f15146106a0578063f0cd1dac146106c0578063f2fde38b146106d657600080fd5b8063a9059cbb146105aa578063af06c235146105ca578063c816841b146105ea578063c867d60b1461060a57600080fd5b80638b42507f116100e75780638b42507f146105125780638da5cb5b14610542578063914eb66a1461056057806395d89b4114610575578063a457c2d71461058a57600080fd5b80637d1db4a5146104b0578063807c2d9c146104c657806382eefb43146104dc578063844d591c146104f257600080fd5b806323b872dd1161019b5780633ecad2711161016a5780633ecad271146103da5780634cb80fd51461040a5780635342acb41461042a5780635881f3ef1461045a57806370a082311461047a57600080fd5b806323b872dd14610358578063313ce56714610378578063395093511461039a5780633b97084a146103ba57600080fd5b806309e75607116101d757806309e75607146102b15780631694505e146102d157806318160ddd146103095780631cdd3be31461032857600080fd5b8063022d02e51461021457806304d4c9901461023657806306fdde0314610256578063095ea7b31461028157600080fd5b3661020f57005b600080fd5b34801561022057600080fd5b5061023461022f3660046121f7565b6106f6565b005b34801561024257600080fd5b50610234610251366004612247565b61086d565b34801561026257600080fd5b5061026b6109f2565b60405161027891906122ce565b60405180910390f35b34801561028d57600080fd5b506102a161029c36600461212e565b610a84565b6040519015158152602001610278565b3480156102bd57600080fd5b506102346102cc36600461215a565b610a9b565b3480156102dd57600080fd5b506019546102f1906001600160a01b031681565b6040516001600160a01b039091168152602001610278565b34801561031557600080fd5b506004545b604051908152602001610278565b34801561033457600080fd5b506102a1610343366004612045565b600f6020526000908152604090205460ff1681565b34801561036457600080fd5b506102a16103733660046120b8565b610b3c565b34801561038457600080fd5b5060035460405160ff9091168152602001610278565b3480156103a657600080fd5b506102a16103b536600461212e565b610ba7565b3480156103c657600080fd5b506102346103d53660046121de565b610bdd565b3480156103e657600080fd5b506102a16103f5366004612045565b600e6020526000908152604090205460ff1681565b34801561041657600080fd5b50610234610425366004612045565b610c0c565b34801561043657600080fd5b506102a1610445366004612045565b600b6020526000908152604090205460ff1681565b34801561046657600080fd5b506102f1610475366004612045565b610c58565b34801561048657600080fd5b5061031a610495366004612045565b6001600160a01b031660009081526009602052604090205490565b3480156104bc57600080fd5b5061031a60055481565b3480156104d257600080fd5b5061031a60065481565b3480156104e857600080fd5b5061031a60175481565b3480156104fe57600080fd5b5061023461050d3660046120f9565b610fea565b34801561051e57600080fd5b506102a161052d366004612045565b600d6020526000908152604090205460ff1681565b34801561054e57600080fd5b506000546001600160a01b03166102f1565b34801561056c57600080fd5b5061023461103f565b34801561058157600080fd5b5061026b6110b3565b34801561059657600080fd5b506102a16105a536600461212e565b6110c2565b3480156105b657600080fd5b506102a16105c536600461212e565b611111565b3480156105d657600080fd5b506102346105e53660046120f9565b61111e565b3480156105f657600080fd5b50601a546102f1906001600160a01b031681565b34801561061657600080fd5b506102a1610625366004612045565b600c6020526000908152604090205460ff1681565b34801561064657600080fd5b506008546102f1906001600160a01b031681565b34801561066657600080fd5b5061031a61067536600461207f565b6001600160a01b039182166000908152600a6020908152604080832093909416825291909152205490565b3480156106ac57600080fd5b506102346106bb36600461215a565b611186565b3480156106cc57600080fd5b5061031a60165481565b3480156106e257600080fd5b506102346106f1366004612045565b611221565b6000546001600160a01b031633146107295760405162461bcd60e51b815260040161072090612323565b60405180910390fd5b6004546107379060c861130b565b6003546107489060ff16600a612432565b61075290846124dd565b10156107aa5760405162461bcd60e51b815260206004820152602160248201527f43616e6e6f7420736574206d617854786e206c6f776572207468616e20302e356044820152602560f81b6064820152608401610720565b6004546107b89060c861130b565b6003546107c99060ff16600a612432565b6107d390836124dd565b101561082d5760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263302e352560e01b6064820152608401610720565b60035461083e9060ff16600a612432565b61084890836124dd565b60055560035461085c9060ff16600a612432565b61086690826124dd565b6006555050565b6000546001600160a01b031633146108975760405162461bcd60e51b815260040161072090612323565b60056108a3878761134d565b11156108f15760405162461bcd60e51b815260206004820152601a60248201527f546f74616c207461782063616e6e6f74206578636565642035250000000000006044820152606401610720565b60056108fd858561134d565b111561094b5760405162461bcd60e51b815260206004820152601a60248201527f546f74616c207461782063616e6e6f74206578636565642035250000000000006044820152606401610720565b600a610957838361134d565b11156109a55760405162461bcd60e51b815260206004820152601b60248201527f546f74616c207461782063616e6e6f74206578636565642031302500000000006044820152606401610720565b601086905560118590556109b9868661134d565b601655601284905560138390556109d0848461134d565b601755601482905560158190556109e7828261134d565b601855505050505050565b606060018054610a0190612513565b80601f0160208091040260200160405190810160405280929190818152602001828054610a2d90612513565b8015610a7a5780601f10610a4f57610100808354040283529160200191610a7a565b820191906000526020600020905b815481529060010190602001808311610a5d57829003601f168201915b5050505050905090565b6000610a913384846113ac565b5060015b92915050565b6000546001600160a01b03163314610ac55760405162461bcd60e51b815260040161072090612323565b60005b82811015610b365781600f6000868685818110610ae757610ae761257f565b9050602002016020810190610afc9190612045565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580610b2e8161254e565b915050610ac8565b50505050565b6000610b498484846114d0565b50610b9c8433610b97856040518060600160405280602881526020016125ae602891396001600160a01b038a166000908152600a602090815260408083203384529091529020549190611968565b6113ac565b5060015b9392505050565b336000818152600a602090815260408083206001600160a01b03871684529091528120549091610a91918590610b97908661134d565b6000546001600160a01b03163314610c075760405162461bcd60e51b815260040161072090612323565b600755565b6000546001600160a01b03163314610c365760405162461bcd60e51b815260040161072090612323565b600880546001600160a01b0319166001600160a01b0392909216919091179055565b600080546001600160a01b03163314610c835760405162461bcd60e51b815260040161072090612323565b6000829050806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015610cc157600080fd5b505afa158015610cd5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cf99190612062565b6001600160a01b031663e6a4390530836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015610d4157600080fd5b505afa158015610d55573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d799190612062565b6040516001600160e01b031960e085901b1681526001600160a01b0392831660048201529116602482015260440160206040518083038186803b158015610dbf57600080fd5b505afa158015610dd3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610df79190612062565b91506001600160a01b038216610f7b57806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015610e4057600080fd5b505afa158015610e54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e789190612062565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015610ec057600080fd5b505afa158015610ed4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ef89190612062565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015610f4057600080fd5b505af1158015610f54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f789190612062565b91505b601a80546001600160a01b03199081166001600160a01b03858116918217845560198054909316948116949094179091556000908152600c60209081526040808320805460ff19908116600190811790925594549095168352600e909152902080549091169091179055919050565b6000546001600160a01b031633146110145760405162461bcd60e51b815260040161072090612323565b6001600160a01b03919091166000908152600e60205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146110695760405162461bcd60e51b815260040161072090612323565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b606060028054610a0190612513565b6000610a913384610b97856040518060600160405280602581526020016125d660259139336000908152600a602090815260408083206001600160a01b038d1684529091529020549190611968565b6000610b9c3384846114d0565b6000546001600160a01b031633146111485760405162461bcd60e51b815260040161072090612323565b6001600160a01b039091166000908152600d60209081526040808320805494151560ff199586168117909155600c9092529091208054909216179055565b6000546001600160a01b031633146111b05760405162461bcd60e51b815260040161072090612323565b60005b82811015610b365781600b60008686858181106111d2576111d261257f565b90506020020160208101906111e79190612045565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055806112198161254e565b9150506111b3565b6000546001600160a01b0316331461124b5760405162461bcd60e51b815260040161072090612323565b6001600160a01b0381166112b05760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610720565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000610ba083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506119a2565b60008061135a83856123b5565b905083811015610ba05760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610720565b6001600160a01b03831661140e5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610720565b6001600160a01b03821661146f5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610720565b6001600160a01b038381166000818152600a602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b0384166115365760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610720565b6001600160a01b0383166115985760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610720565b6001600160a01b0384166000908152600f602052604090205460ff16156115f25760405162461bcd60e51b815260206004820152600e60248201526d165bdd48185c994818985b9b995960921b6044820152606401610720565b6001600160a01b0383166000908152600f602052604090205460ff161561165b5760405162461bcd60e51b815260206004820152601760248201527f54686520726563697069656e742069732062616e6e65640000000000000000006044820152606401610720565b601a54600160a01b900460ff161561167f576116788484846119d0565b9050610ba0565b6001600160a01b0384166000908152600d602052604090205460ff161580156116c157506001600160a01b0383166000908152600d602052604090205460ff16155b15611729576005548211156117295760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610720565b30600090815260096020526040902054600754811080159081906117575750601a54600160a01b900460ff16155b801561177c57506001600160a01b0386166000908152600e602052604090205460ff16155b80156117915750601a54600160a81b900460ff165b156117b757601a54600160b01b900460ff16156117ae5760075491505b6117b782611ab6565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b038916600090815260099091529190912054611809918690611968565b6001600160a01b038716600090815260096020908152604080832093909355600b90529081205460ff168061185657506001600160a01b0386166000908152600b602052604090205460ff165b61186a57611865878787611ba8565b61186c565b845b601a54909150600160b81b900460ff1680156118a157506001600160a01b0386166000908152600c602052604090205460ff16155b156118dd576006546118d2826118cc896001600160a01b031660009081526009602052604090205490565b9061134d565b11156118dd57600080fd5b6001600160a01b038616600090815260096020526040902054611900908261134d565b6001600160a01b0380881660008181526009602052604090819020939093559151908916907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906119549085815260200190565b60405180910390a360019350505050610ba0565b6000818484111561198c5760405162461bcd60e51b815260040161072091906122ce565b50600061199984866124fc565b95945050505050565b600081836119c35760405162461bcd60e51b815260040161072091906122ce565b50600061199984866123cd565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0386166000908152600990915291822054611a21918490611968565b6001600160a01b038086166000908152600960205260408082209390935590851681522054611a50908361134d565b6001600160a01b0380851660008181526009602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611aa49086815260200190565b60405180910390a35060019392505050565b601a805460ff60a01b1916600160a01b179055601854601454600091611aec91600291611ae69182908790611cae565b9061130b565b90506000611afa8383611d2d565b9050611b0581611d6f565b6014544790600090611b2590611b1c90600261130b565b60185490611d2d565b90506000611b476002611ae684611ae660145488611cae90919063ffffffff16565b90506000611b558483611d2d565b90508015611b7357600854611b73906001600160a01b031682611f11565b600082118015611b835750600086115b15611b9257611b928683611f4c565b5050601a805460ff60a01b191690555050505050565b6001600160a01b0383166000908152600e6020526040812054819060ff1615611bec57611be56064611ae660165486611cae90919063ffffffff16565b9050611c2a565b6001600160a01b0384166000908152600e602052604090205460ff1615611c2a57611c276064611ae660175486611cae90919063ffffffff16565b90505b8015611ca45730600090815260096020526040902054611c4a908261134d565b30600081815260096020526040908190209290925590516001600160a01b038716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611c9b9085815260200190565b60405180910390a35b6119998382611d2d565b600082611cbd57506000610a95565b6000611cc983856124dd565b905082611cd685836123cd565b14610ba05760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610720565b6000610ba083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611968565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611da457611da461257f565b6001600160a01b03928316602091820292909201810191909152601954604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015611df857600080fd5b505afa158015611e0c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e309190612062565b81600181518110611e4357611e4361257f565b6001600160a01b039283166020918202929092010152601954611e6991309116846113ac565b60195460405163791ac94760e01b81526001600160a01b039091169063791ac94790611ea2908590600090869030904290600401612379565b600060405180830381600087803b158015611ebc57600080fd5b505af1158015611ed0573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051611f05929190612358565b60405180910390a15050565b6040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015611f47573d6000803e3d6000fd5b505050565b601954611f649030906001600160a01b0316846113ac565b6019546001600160a01b031663f305d719823085600080611f8d6000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b158015611ff057600080fd5b505af1158015612004573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906120299190612219565b5050505050565b8035801515811461204057600080fd5b919050565b60006020828403121561205757600080fd5b8135610ba081612595565b60006020828403121561207457600080fd5b8151610ba081612595565b6000806040838503121561209257600080fd5b823561209d81612595565b915060208301356120ad81612595565b809150509250929050565b6000806000606084860312156120cd57600080fd5b83356120d881612595565b925060208401356120e881612595565b929592945050506040919091013590565b6000806040838503121561210c57600080fd5b823561211781612595565b915061212560208401612030565b90509250929050565b6000806040838503121561214157600080fd5b823561214c81612595565b946020939093013593505050565b60008060006040848603121561216f57600080fd5b833567ffffffffffffffff8082111561218757600080fd5b818601915086601f83011261219b57600080fd5b8135818111156121aa57600080fd5b8760208260051b85010111156121bf57600080fd5b6020928301955093506121d59186019050612030565b90509250925092565b6000602082840312156121f057600080fd5b5035919050565b6000806040838503121561220a57600080fd5b50508035926020909101359150565b60008060006060848603121561222e57600080fd5b8351925060208401519150604084015190509250925092565b60008060008060008060c0878903121561226057600080fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b600081518084526020808501945080840160005b838110156122c35781516001600160a01b03168752958201959082019060010161229e565b509495945050505050565b600060208083528351808285015260005b818110156122fb578581018301518582016040015282016122df565b8181111561230d576000604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b828152604060208201526000612371604083018461228a565b949350505050565b85815284602082015260a06040820152600061239860a083018661228a565b6001600160a01b0394909416606083015250608001529392505050565b600082198211156123c8576123c8612569565b500190565b6000826123ea57634e487b7160e01b600052601260045260246000fd5b500490565b600181815b8085111561242a57816000190482111561241057612410612569565b8085161561241d57918102915b93841c93908002906123f4565b509250929050565b6000610ba060ff84168360008261244b57506001610a95565b8161245857506000610a95565b816001811461246e576002811461247857612494565b6001915050610a95565b60ff84111561248957612489612569565b50506001821b610a95565b5060208310610133831016604e8410600b84101617156124b7575081810a610a95565b6124c183836123ef565b80600019048211156124d5576124d5612569565b029392505050565b60008160001904831182151516156124f7576124f7612569565b500290565b60008282101561250e5761250e612569565b500390565b600181811c9082168061252757607f821691505b6020821081141561254857634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561256257612562612569565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b03811681146125aa57600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212208dfe15be1582033f843c0612731bcef0e0d1ddb2e0c066cb28a65edbd6d7e23d64736f6c63430008050033

Deployed Bytecode Sourcemap

14075:14195:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21232:448;;;;;;;;;;-1:-1:-1;21232:448:0;;;;;:::i;:::-;;:::i;:::-;;19706:1058;;;;;;;;;;-1:-1:-1;19706:1058:0;;;;;:::i;:::-;;:::i;17428:83::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18723:161;;;;;;;;;;-1:-1:-1;18723:161:0;;;;;:::i;:::-;;:::i;:::-;;;6136:14:1;;6129:22;6111:41;;6099:2;6084:18;18723:161:0;6066:92:1;21008:216:0;;;;;;;;;;-1:-1:-1;21008:216:0;;;;;:::i;:::-;;:::i;15507:41::-;;;;;;;;;;-1:-1:-1;15507:41:0;;;;-1:-1:-1;;;;;15507:41:0;;;;;;-1:-1:-1;;;;;4782:32:1;;;4764:51;;4752:2;4737:18;15507:41:0;4719:102:1;17705:100:0;;;;;;;;;;-1:-1:-1;17785:12:0;;17705:100;;;12912:25:1;;;12900:2;12885:18;17705:100:0;12867:76:1;14987:47:0;;;;;;;;;;-1:-1:-1;14987:47:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;23059:313;;;;;;;;;;-1:-1:-1;23059:313:0;;;;;:::i;:::-;;:::i;17614:83::-;;;;;;;;;;-1:-1:-1;17680:9:0;;17614:83;;17680:9;;;;14014:36:1;;14002:2;13987:18;17614:83:0;13969:87:1;18091:218:0;;;;;;;;;;-1:-1:-1;18091:218:0;;;;;:::i;:::-;;:::i;19574:124::-;;;;;;;;;;-1:-1:-1;19574:124:0;;;;;:::i;:::-;;:::i;14935:45::-;;;;;;;;;;-1:-1:-1;14935:45:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;21690:139;;;;;;;;;;-1:-1:-1;21690:139:0;;;;;:::i;:::-;;:::i;14764:50::-;;;;;;;;;;-1:-1:-1;14764:50:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;21975:807;;;;;;;;;;-1:-1:-1;21975:807:0;;;;;:::i;:::-;;:::i;17813:119::-;;;;;;;;;;-1:-1:-1;17813:119:0;;;;;:::i;:::-;-1:-1:-1;;;;;17906:18:0;17879:7;17906:18;;;:9;:18;;;;;;;17813:119;14380:50;;;;;;;;;;;;;;;;14438:48;;;;;;;;;;;;;;;;15418:33;;;;;;;;;;;;;;;;19237:129;;;;;;;;;;-1:-1:-1;19237:129:0;;;;;:::i;:::-;;:::i;14880:48::-;;;;;;;;;;-1:-1:-1;14880:48:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;5608:79;;;;;;;;;;-1:-1:-1;5646:7:0;5673:6;-1:-1:-1;;;;;5673:6:0;5608:79;;5833:145;;;;;;;;;;;;;:::i;17519:87::-;;;;;;;;;;;;;:::i;18317:269::-;;;;;;;;;;-1:-1:-1;18317:269:0;;;;;:::i;:::-;;:::i;22884:167::-;;;;;;;;;;-1:-1:-1;22884:167:0;;;;;:::i;:::-;;:::i;19374:188::-;;;;;;;;;;-1:-1:-1;19374:188:0;;;;;:::i;:::-;;:::i;15555:26::-;;;;;;;;;;-1:-1:-1;15555:26:0;;;;-1:-1:-1;;;;;15555:26:0;;;14821:52;;;;;;;;;;-1:-1:-1;14821:52:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;14566:67;;;;;;;;;;-1:-1:-1;14566:67:0;;;;-1:-1:-1;;;;;14566:67:0;;;17940:143;;;;;;;;;;-1:-1:-1;17940:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;18048:18:0;;;18021:7;18048:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;17940:143;20776:224;;;;;;;;;;-1:-1:-1;20776:224:0;;;;;:::i;:::-;;:::i;15379:32::-;;;;;;;;;;;;;;;;5986:244;;;;;;;;;;-1:-1:-1;5986:244:0;;;;;:::i;:::-;;:::i;21232:448::-;5742:6;;-1:-1:-1;;;;;5742:6:0;193:10;5742:22;5734:67;;;;-1:-1:-1;;;5734:67:0;;;;;;;:::i;:::-;;;;;;;;;21382:12:::1;::::0;:21:::1;::::0;21399:3:::1;21382:16;:21::i;:::-;21367:9;::::0;21363:13:::1;::::0;21367:9:::1;;21363:2;:13;:::i;:::-;21349:28;::::0;:9;:28:::1;:::i;:::-;21348:55;;21340:101;;;::::0;-1:-1:-1;;;21340:101:0;;9885:2:1;21340:101:0::1;::::0;::::1;9867:21:1::0;9924:2;9904:18;;;9897:30;9963:34;9943:18;;;9936:62;-1:-1:-1;;;10014:18:1;;;10007:31;10055:19;;21340:101:0::1;9857:223:1::0;21340:101:0::1;21499:12;::::0;:21:::1;::::0;21516:3:::1;21499:16;:21::i;:::-;21485:9;::::0;21481:13:::1;::::0;21485:9:::1;;21481:2;:13;:::i;:::-;21461:34;::::0;:15;:34:::1;:::i;:::-;21460:60;;21452:108;;;::::0;-1:-1:-1;;;21452:108:0;;9124:2:1;21452:108:0::1;::::0;::::1;9106:21:1::0;9163:2;9143:18;;;9136:30;9202:34;9182:18;;;9175:62;-1:-1:-1;;;9253:18:1;;;9246:34;9297:19;;21452:108:0::1;9096:226:1::0;21452:108:0::1;21604:9;::::0;21600:13:::1;::::0;21604:9:::1;;21600:2;:13;:::i;:::-;21586:28;::::0;:9;:28:::1;:::i;:::-;21571:12;:43:::0;21662:9:::1;::::0;21658:13:::1;::::0;21662:9:::1;;21658:2;:13;:::i;:::-;21638:34;::::0;:15;:34:::1;:::i;:::-;21625:10;:47:::0;-1:-1:-1;;21232:448:0:o;19706:1058::-;5742:6;;-1:-1:-1;;;;;5742:6:0;193:10;5742:22;5734:67;;;;-1:-1:-1;;;5734:67:0;;;;;;;:::i;:::-;20019:1:::1;19973:42;:18:::0;19996;19973:22:::1;:42::i;:::-;:47;;19965:86;;;::::0;-1:-1:-1;;;19965:86:0;;12613:2:1;19965:86:0::1;::::0;::::1;12595:21:1::0;12652:2;12632:18;;;12625:30;12691:28;12671:18;;;12664:56;12737:18;;19965:86:0::1;12585:176:1::0;19965:86:0::1;20118:1;20070:44;:19:::0;20094;20070:23:::1;:44::i;:::-;:49;;20062:88;;;::::0;-1:-1:-1;;;20062:88:0;;12613:2:1;20062:88:0::1;::::0;::::1;12595:21:1::0;12652:2;12632:18;;;12625:30;12691:28;12671:18;;;12664:56;12737:18;;20062:88:0::1;12585:176:1::0;20062:88:0::1;20213:2;20169:40;:17:::0;20191;20169:21:::1;:40::i;:::-;:46;;20161:86;;;::::0;-1:-1:-1;;;20161:86:0;;9529:2:1;20161:86:0::1;::::0;::::1;9511:21:1::0;9568:2;9548:18;;;9541:30;9607:29;9587:18;;;9580:57;9654:18;;20161:86:0::1;9501:177:1::0;20161:86:0::1;20260:16;:37:::0;;;20308:16:::1;:37:::0;;;20376:38:::1;20279:18:::0;20327;20376:20:::1;:38::i;:::-;20356:17;:58:::0;20427:17:::1;:39:::0;;;20477:17:::1;:39:::0;;;20548:40:::1;20447:19:::0;20497;20548:21:::1;:40::i;:::-;20527:18;:61:::0;20601:15:::1;:35:::0;;;20647:15:::1;:35:::0;;;20720:36:::1;20619:17:::0;20665;20720:19:::1;:36::i;:::-;20693:24;:63:::0;-1:-1:-1;;;;;;19706:1058:0:o;17428:83::-;17465:13;17498:5;17491:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17428:83;:::o;18723:161::-;18798:4;18815:39;193:10;18838:7;18847:6;18815:8;:39::i;:::-;-1:-1:-1;18872:4:0;18723:161;;;;;:::o;21008:216::-;5742:6;;-1:-1:-1;;;;;5742:6:0;193:10;5742:22;5734:67;;;;-1:-1:-1;;;5734:67:0;;;;;;;:::i;:::-;21108:9:::1;21104:113;21123:19:::0;;::::1;21104:113;;;21197:8;21167:14;:27;21182:8;;21191:1;21182:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;21167:27:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;21167:27:0;:38;;-1:-1:-1;;21167:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;21144:3;::::1;::::0;::::1;:::i;:::-;;;;21104:113;;;;21008:216:::0;;;:::o;23059:313::-;23157:4;23174:36;23184:6;23192:9;23203:6;23174:9;:36::i;:::-;-1:-1:-1;23221:121:0;23230:6;193:10;23252:89;23290:6;23252:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;23252:19:0;;;;;;:11;:19;;;;;;;;193:10;23252:33;;;;;;;;;;:37;:89::i;:::-;23221:8;:121::i;:::-;-1:-1:-1;23360:4:0;23059:313;;;;;;:::o;18091:218::-;193:10;18179:4;18228:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;18228:34:0;;;;;;;;;;18179:4;;18196:83;;18219:7;;18228:50;;18267:10;18228:38;:50::i;19574:124::-;5742:6;;-1:-1:-1;;;;;5742:6:0;193:10;5742:22;5734:67;;;;-1:-1:-1;;;5734:67:0;;;;;;;:::i;:::-;19656:23:::1;:34:::0;19574:124::o;21690:139::-;5742:6;;-1:-1:-1;;;;;5742:6:0;193:10;5742:22;5734:67;;;;-1:-1:-1;;;5734:67:0;;;;;;;:::i;:::-;21777:22:::1;:44:::0;;-1:-1:-1;;;;;;21777:44:0::1;-1:-1:-1::0;;;;;21777:44:0;;;::::1;::::0;;;::::1;::::0;;21690:139::o;21975:807::-;22055:22;5742:6;;-1:-1:-1;;;;;5742:6:0;193:10;5742:22;5734:67;;;;-1:-1:-1;;;5734:67:0;;;;;;;:::i;:::-;22092:35:::1;22149:16;22092:74;;22215:16;-1:-1:-1::0;;;;;22215:24:0::1;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;22197:53:0::1;;22259:4;22266:16;-1:-1:-1::0;;;;;22266:21:0::1;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22197:93;::::0;-1:-1:-1;;;;;;22197:93:0::1;::::0;;;;;;-1:-1:-1;;;;;5280:15:1;;;22197:93:0::1;::::0;::::1;5262:34:1::0;5332:15;;5312:18;;;5305:43;5197:18;;22197:93:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22180:110:::0;-1:-1:-1;;;;;;22306:28:0;::::1;22303:225;;22420:16;-1:-1:-1::0;;;;;22420:24:0::1;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;22402:74:0::1;;22485:4;22492:16;-1:-1:-1::0;;;;;22492:21:0::1;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22402:114;::::0;-1:-1:-1;;;;;;22402:114:0::1;::::0;;;;;;-1:-1:-1;;;;;5280:15:1;;;22402:114:0::1;::::0;::::1;5262:34:1::0;5332:15;;5312:18;;;5305:43;5197:18;;22402:114:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22385:131;;22303:225;22540:11;:28:::0;;-1:-1:-1;;;;;;22540:28:0;;::::1;-1:-1:-1::0;;;;;22540:28:0;;::::1;::::0;;::::1;::::0;;22602:15:::1;:34:::0;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;-1:-1:-1;22674:41:0;;;:19:::1;:41;::::0;;;;;;;:48;;-1:-1:-1;;22674:48:0;;::::1;-1:-1:-1::0;22674:48:0;;::::1;::::0;;;22754:11;;;;::::1;22733:34:::0;;:12:::1;:34:::0;;;;;:41;;;;::::1;::::0;;::::1;::::0;;22540:28;22554:14;-1:-1:-1;21975:807:0:o;19237:129::-;5742:6;;-1:-1:-1;;;;;5742:6:0;193:10;5742:22;5734:67;;;;-1:-1:-1;;;5734:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19326:21:0;;;::::1;;::::0;;;:12:::1;:21;::::0;;;;:32;;-1:-1:-1;;19326:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;19237:129::o;5833:145::-;5742:6;;-1:-1:-1;;;;;5742:6:0;193:10;5742:22;5734:67;;;;-1:-1:-1;;;5734:67:0;;;;;;;:::i;:::-;5937:1:::1;5921:6:::0;;5900:40:::1;::::0;-1:-1:-1;;;;;5921:6:0;;::::1;::::0;5900:40:::1;::::0;5937:1;;5900:40:::1;5968:1;5951:19:::0;;-1:-1:-1;;;;;;5951:19:0::1;::::0;;5833:145::o;17519:87::-;17558:13;17591:7;17584:14;;;;;:::i;18317:269::-;18410:4;18427:129;193:10;18450:7;18459:96;18498:15;18459:96;;;;;;;;;;;;;;;;;193:10;18459:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;18459:34:0;;;;;;;;;;;;:38;:96::i;22884:167::-;22962:4;22979:42;193:10;23003:9;23014:6;22979:9;:42::i;19374:188::-;5742:6;;-1:-1:-1;;;;;5742:6:0;193:10;5742:22;5734:67;;;;-1:-1:-1;;;5734:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19475:23:0;;::::1;;::::0;;;:15:::1;:23;::::0;;;;;;;:32;;;::::1;;-1:-1:-1::0;;19475:32:0;;::::1;::::0;::::1;::::0;;;19518:19:::1;:27:::0;;;;;;:36;;;;::::1;;::::0;;19374:188::o;20776:224::-;5742:6;;-1:-1:-1;;;;;5742:6:0;193:10;5742:22;5734:67;;;;-1:-1:-1;;;5734:67:0;;;;;;;:::i;:::-;20882:9:::1;20878:115;20897:19:::0;;::::1;20878:115;;;20973:8;20940:17;:30;20958:8;;20967:1;20958:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;20940:30:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;20940:30:0;:41;;-1:-1:-1;;20940:41:0::1;::::0;::::1;;::::0;;;::::1;::::0;;20918:3;::::1;::::0;::::1;:::i;:::-;;;;20878:115;;5986:244:::0;5742:6;;-1:-1:-1;;;;;5742:6:0;193:10;5742:22;5734:67;;;;-1:-1:-1;;;5734:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6075:22:0;::::1;6067:73;;;::::0;-1:-1:-1;;;6067:73:0;;7606:2:1;6067:73:0::1;::::0;::::1;7588:21:1::0;7645:2;7625:18;;;7618:30;7684:34;7664:18;;;7657:62;-1:-1:-1;;;7735:18:1;;;7728:36;7781:19;;6067:73:0::1;7578:228:1::0;6067:73:0::1;6177:6;::::0;;6156:38:::1;::::0;-1:-1:-1;;;;;6156:38:0;;::::1;::::0;6177:6;::::1;::::0;6156:38:::1;::::0;::::1;6205:6;:17:::0;;-1:-1:-1;;;;;;6205:17:0::1;-1:-1:-1::0;;;;;6205:17:0;;;::::1;::::0;;;::::1;::::0;;5986:244::o;1838:132::-;1896:7;1923:39;1927:1;1930;1923:39;;;;;;;;;;;;;;;;;:3;:39::i;1047:181::-;1105:7;;1137:5;1141:1;1137;:5;:::i;:::-;1125:17;;1166:1;1161;:6;;1153:46;;;;-1:-1:-1;;;1153:46:0;;8768:2:1;1153:46:0;;;8750:21:1;8807:2;8787:18;;;8780:30;8846:29;8826:18;;;8819:57;8893:18;;1153:46:0;8740:177:1;18892:337:0;-1:-1:-1;;;;;18985:19:0;;18977:68;;;;-1:-1:-1;;;18977:68:0;;12208:2:1;18977:68:0;;;12190:21:1;12247:2;12227:18;;;12220:30;12286:34;12266:18;;;12259:62;-1:-1:-1;;;12337:18:1;;;12330:34;12381:19;;18977:68:0;12180:226:1;18977:68:0;-1:-1:-1;;;;;19064:21:0;;19056:68;;;;-1:-1:-1;;;19056:68:0;;8013:2:1;19056:68:0;;;7995:21:1;8052:2;8032:18;;;8025:30;8091:34;8071:18;;;8064:62;-1:-1:-1;;;8142:18:1;;;8135:32;8184:19;;19056:68:0;7985:224:1;19056:68:0;-1:-1:-1;;;;;19137:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;19189:32;;12912:25:1;;;19189:32:0;;12885:18:1;19189:32:0;;;;;;;18892:337;;;:::o;23380:1861::-;23467:4;-1:-1:-1;;;;;23492:20:0;;23484:70;;;;-1:-1:-1;;;23484:70:0;;11802:2:1;23484:70:0;;;11784:21:1;11841:2;11821:18;;;11814:30;11880:34;11860:18;;;11853:62;-1:-1:-1;;;11931:18:1;;;11924:35;11976:19;;23484:70:0;11774:227:1;23484:70:0;-1:-1:-1;;;;;23573:23:0;;23565:71;;;;-1:-1:-1;;;23565:71:0;;7202:2:1;23565:71:0;;;7184:21:1;7241:2;7221:18;;;7214:30;7280:34;7260:18;;;7253:62;-1:-1:-1;;;7331:18:1;;;7324:33;7374:19;;23565:71:0;7174:225:1;23565:71:0;-1:-1:-1;;;;;23656:22:0;;;;;;:14;:22;;;;;;;;:31;23648:58;;;;-1:-1:-1;;;23648:58:0;;10287:2:1;23648:58:0;;;10269:21:1;10326:2;10306:18;;;10299:30;-1:-1:-1;;;10345:18:1;;;10338:44;10399:18;;23648:58:0;10259:164:1;23648:58:0;-1:-1:-1;;;;;23725:25:0;;;;;;:14;:25;;;;;;;;:34;23717:70;;;;-1:-1:-1;;;23717:70:0;;8416:2:1;23717:70:0;;;8398:21:1;8455:2;8435:18;;;8428:30;8494:25;8474:18;;;8467:53;8537:18;;23717:70:0;8388:173:1;23717:70:0;23808:16;;-1:-1:-1;;;23808:16:0;;;;23805:1429;;;23858:41;23873:6;23881:9;23892:6;23858:14;:41::i;:::-;23851:48;;;;23805:1429;-1:-1:-1;;;;;23955:23:0;;;;;;:15;:23;;;;;;;;23954:24;:55;;;;-1:-1:-1;;;;;;23983:26:0;;;;;;:15;:26;;;;;;;;23982:27;23954:55;23951:170;;;24048:12;;24038:6;:22;;24030:75;;;;-1:-1:-1;;;24030:75:0;;10630:2:1;24030:75:0;;;10612:21:1;10669:2;10649:18;;;10642:30;10708:34;10688:18;;;10681:62;-1:-1:-1;;;10759:18:1;;;10752:38;10807:19;;24030:75:0;10602:230:1;24030:75:0;24198:4;24149:28;17906:18;;;:9;:18;;;;;;24274:23;;24250:47;;;;;;;24330:44;;-1:-1:-1;24358:16:0;;-1:-1:-1;;;24358:16:0;;;;24357:17;24330:44;:69;;;;-1:-1:-1;;;;;;24379:20:0;;;;;;:12;:20;;;;;;;;24378:21;24330:69;:94;;;;-1:-1:-1;24403:21:0;;-1:-1:-1;;;24403:21:0;;;;24330:94;24326:305;;;24462:25;;-1:-1:-1;;;24462:25:0;;;;24459:97;;;24533:23;;24510:46;;24459:97;24575:36;24590:20;24575:14;:36::i;:::-;24667:53;;;;;;;;;;;-1:-1:-1;;;24667:53:0;;;;;;;;-1:-1:-1;;;;;24667:17:0;;-1:-1:-1;24667:17:0;;;:9;:17;;;;;;;;:53;;24689:6;;24667:21;:53::i;:::-;-1:-1:-1;;;;;24647:17:0;;;;;;:9;:17;;;;;;;;:73;;;;24760:17;:25;;;;;;;;;:57;;-1:-1:-1;;;;;;24789:28:0;;;;;;:17;:28;;;;;;;;24760:57;24759:148;;24873:34;24881:6;24889:9;24900:6;24873:7;:34::i;:::-;24759:148;;;24864:6;24759:148;24927:16;;24737:170;;-1:-1:-1;;;;24927:16:0;;;;:51;;;;-1:-1:-1;;;;;;24948:30:0;;;;;;:19;:30;;;;;;;;24947:31;24927:51;24924:133;;;25046:10;;25005:37;25030:11;25005:20;25015:9;-1:-1:-1;;;;;17906:18:0;17879:7;17906:18;;;:9;:18;;;;;;;17813:119;25005:20;:24;;:37::i;:::-;:51;;24997:60;;;;;;-1:-1:-1;;;;;25097:20:0;;;;;;:9;:20;;;;;;:37;;25122:11;25097:24;:37::i;:::-;-1:-1:-1;;;;;25074:20:0;;;;;;;:9;:20;;;;;;;:60;;;;25156:40;;;;;;;;;;25184:11;12912:25:1;;12900:2;12885:18;;12867:76;25156:40:0;;;;;;;;25218:4;25211:11;;;;;;;1380:192;1466:7;1502:12;1494:6;;;;1486:29;;;;-1:-1:-1;;;1486:29:0;;;;;;;;:::i;:::-;-1:-1:-1;1526:9:0;1538:5;1542:1;1538;:5;:::i;:::-;1526:17;1380:192;-1:-1:-1;;;;;1380:192:0:o;1978:278::-;2064:7;2099:12;2092:5;2084:28;;;;-1:-1:-1;;;2084:28:0;;;;;;;;:::i;:::-;-1:-1:-1;2123:9:0;2135:5;2139:1;2135;:5;:::i;25249:330::-;25379:53;;;;;;;;;;;-1:-1:-1;;;25379:53:0;;;;;;;;-1:-1:-1;;;;;25379:17:0;;25342:4;25379:17;;;:9;:17;;;;;;;:53;;25401:6;;25379:21;:53::i;:::-;-1:-1:-1;;;;;25359:17:0;;;;;;;:9;:17;;;;;;:73;;;;25466:20;;;;;;;:32;;25491:6;25466:24;:32::i;:::-;-1:-1:-1;;;;;25443:20:0;;;;;;;:9;:20;;;;;;;:55;;;;25514:35;;;;;;;;;;25542:6;12912:25:1;;12900:2;12885:18;;12867:76;25514:35:0;;;;;;;;-1:-1:-1;25567:4:0;25249:330;;;;;:::o;25587:849::-;16176:16;:23;;-1:-1:-1;;;;16176:23:0;-1:-1:-1;;;16176:23:0;;;25724:24:::1;::::0;16176:16;25703:15;16176:23;;25691:65:::1;::::0;25754:1:::1;::::0;25691:58:::1;::::0;;;:7;;:11:::1;:28::i;:::-;:32:::0;::::1;:58::i;:65::-;25669:87:::0;-1:-1:-1;25767:21:0::1;25791:24;:7:::0;25669:87;25791:11:::1;:24::i;:::-;25767:48;;25828:31;25845:13;25828:16;:31::i;:::-;25980:15;::::0;25895:21:::1;::::0;25870:22:::1;::::0;25951:52:::1;::::0;25980:22:::1;::::0;26000:1:::1;25980:19;:22::i;:::-;25951:24;::::0;;:28:::1;:52::i;:::-;25929:74;;26024:26;26053:59;26110:1;26053:52;26093:11;26053:35;26072:15;;26053:14;:18;;:35;;;;:::i;:59::-;26024:88:::0;-1:-1:-1;26125:26:0::1;26154:38;:14:::0;26024:88;26154:18:::1;:38::i;:::-;26125:67:::0;-1:-1:-1;26208:22:0;;26205:104:::1;;26266:22;::::0;26245:64:::1;::::0;-1:-1:-1;;;;;26266:22:0::1;26290:18:::0;26245:20:::1;:64::i;:::-;26348:1;26327:18;:22;:41;;;;;26367:1;26353:11;:15;26327:41;26324:104;;;26383:45;26396:11;26409:18;26383:12;:45::i;:::-;-1:-1:-1::0;;16222:16:0;:24;;-1:-1:-1;;;;16222:24:0;;;-1:-1:-1;;;;;25587:849:0:o;27643:622::-;-1:-1:-1;;;;;27804:20:0;;27729:7;27804:20;;;:12;:20;;;;;;27729:7;;27804:20;;27801:223;;;27853:38;27887:3;27853:29;27864:17;;27853:6;:10;;:29;;;;:::i;:38::-;27841:50;;27801:223;;;-1:-1:-1;;;;;27921:23:0;;;;;;:12;:23;;;;;;;;27918:106;;;27973:39;28008:3;27973:30;27984:18;;27973:6;:10;;:30;;;;:::i;:39::-;27961:51;;27918:106;28047:13;;28044:173;;28122:4;28104:24;;;;:9;:24;;;;;;:39;;28133:9;28104:28;:39::i;:::-;28095:4;28077:24;;;;:9;:24;;;;;;;:66;;;;28163:42;;-1:-1:-1;;;;;28163:42:0;;;;;;;28195:9;12912:25:1;;12900:2;12885:18;;12867:76;28163:42:0;;;;;;;;28044:173;28236:21;:6;28247:9;28236:10;:21::i;1580:250::-;1638:7;1662:6;1658:47;;-1:-1:-1;1692:1:0;1685:8;;1658:47;1717:9;1729:5;1733:1;1729;:5;:::i;:::-;1717:17;-1:-1:-1;1762:1:0;1753:5;1757:1;1717:17;1753:5;:::i;:::-;:10;1745:56;;;;-1:-1:-1;;;1745:56:0;;11039:2:1;1745:56:0;;;11021:21:1;11078:2;11058:18;;;11051:30;11117:34;11097:18;;;11090:62;-1:-1:-1;;;11168:18:1;;;11161:31;11209:19;;1745:56:0;11011:223:1;1236:136:0;1294:7;1321:43;1325:1;1328;1321:43;;;;;;;;;;;;;;;;;:3;:43::i;26448:666::-;26598:16;;;26612:1;26598:16;;;;;;;;26574:21;;26598:16;;;;;;;;;;-1:-1:-1;26598:16:0;26574:40;;26643:4;26625;26630:1;26625:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;26625:23:0;;;:7;;;;;;;;;;:23;;;;26669:15;;:22;;;-1:-1:-1;;;26669:22:0;;;;:15;;;;;:20;;:22;;;;;26625:7;;26669:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26659:4;26664:1;26659:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;26659:32:0;;;:7;;;;;;;;;:32;26736:15;;26704:62;;26721:4;;26736:15;26754:11;26704:8;:62::i;:::-;26805:15;;:240;;-1:-1:-1;;;26805:240:0;;-1:-1:-1;;;;;26805:15:0;;;;:66;;:240;;26886:11;;26805:15;;26956:4;;26983;;27019:15;;26805:240;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27071:35;27088:11;27101:4;27071:35;;;;;;;:::i;:::-;;;;;;;;26503:611;26448:666;:::o;21837:126::-;21929:26;;-1:-1:-1;;;;;21929:18:0;;;:26;;;;;21948:6;;21929:26;;;;21948:6;21929:18;:26;;;;;;;;;;;;;;;;;;;;;21837:126;;:::o;27122:513::-;27302:15;;27270:62;;27287:4;;-1:-1:-1;;;;;27302:15:0;27320:11;27270:8;:62::i;:::-;27375:15;;-1:-1:-1;;;;;27375:15:0;:31;27414:9;27447:4;27467:11;27375:15;;27579:7;5646;5673:6;-1:-1:-1;;;;;5673:6:0;;5608:79;27579:7;27375:252;;;;;;-1:-1:-1;;;;;;27375:252:0;;;-1:-1:-1;;;;;5718:15:1;;;27375:252:0;;;5700:34:1;5750:18;;;5743:34;;;;5793:18;;;5786:34;;;;5836:18;;;5829:34;5900:15;;;5879:19;;;5872:44;27601:15:0;5932:19:1;;;5925:35;5634:19;;27375:252:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;27122:513;;:::o;14:160:1:-;79:20;;135:13;;128:21;118:32;;108:2;;164:1;161;154:12;108:2;60:114;;;:::o;179:247::-;238:6;291:2;279:9;270:7;266:23;262:32;259:2;;;307:1;304;297:12;259:2;346:9;333:23;365:31;390:5;365:31;:::i;431:251::-;501:6;554:2;542:9;533:7;529:23;525:32;522:2;;;570:1;567;560:12;522:2;602:9;596:16;621:31;646:5;621:31;:::i;687:388::-;755:6;763;816:2;804:9;795:7;791:23;787:32;784:2;;;832:1;829;822:12;784:2;871:9;858:23;890:31;915:5;890:31;:::i;:::-;940:5;-1:-1:-1;997:2:1;982:18;;969:32;1010:33;969:32;1010:33;:::i;:::-;1062:7;1052:17;;;774:301;;;;;:::o;1080:456::-;1157:6;1165;1173;1226:2;1214:9;1205:7;1201:23;1197:32;1194:2;;;1242:1;1239;1232:12;1194:2;1281:9;1268:23;1300:31;1325:5;1300:31;:::i;:::-;1350:5;-1:-1:-1;1407:2:1;1392:18;;1379:32;1420:33;1379:32;1420:33;:::i;:::-;1184:352;;1472:7;;-1:-1:-1;;;1526:2:1;1511:18;;;;1498:32;;1184:352::o;1541:315::-;1606:6;1614;1667:2;1655:9;1646:7;1642:23;1638:32;1635:2;;;1683:1;1680;1673:12;1635:2;1722:9;1709:23;1741:31;1766:5;1741:31;:::i;:::-;1791:5;-1:-1:-1;1815:35:1;1846:2;1831:18;;1815:35;:::i;:::-;1805:45;;1625:231;;;;;:::o;1861:315::-;1929:6;1937;1990:2;1978:9;1969:7;1965:23;1961:32;1958:2;;;2006:1;2003;1996:12;1958:2;2045:9;2032:23;2064:31;2089:5;2064:31;:::i;:::-;2114:5;2166:2;2151:18;;;;2138:32;;-1:-1:-1;;;1948:228:1:o;2181:689::-;2273:6;2281;2289;2342:2;2330:9;2321:7;2317:23;2313:32;2310:2;;;2358:1;2355;2348:12;2310:2;2398:9;2385:23;2427:18;2468:2;2460:6;2457:14;2454:2;;;2484:1;2481;2474:12;2454:2;2522:6;2511:9;2507:22;2497:32;;2567:7;2560:4;2556:2;2552:13;2548:27;2538:2;;2589:1;2586;2579:12;2538:2;2629;2616:16;2655:2;2647:6;2644:14;2641:2;;;2671:1;2668;2661:12;2641:2;2726:7;2719:4;2709:6;2706:1;2702:14;2698:2;2694:23;2690:34;2687:47;2684:2;;;2747:1;2744;2737:12;2684:2;2778:4;2770:13;;;;-1:-1:-1;2802:6:1;-1:-1:-1;2827:37:1;;2843:20;;;-1:-1:-1;2827:37:1;:::i;:::-;2817:47;;2300:570;;;;;:::o;2875:180::-;2934:6;2987:2;2975:9;2966:7;2962:23;2958:32;2955:2;;;3003:1;3000;2993:12;2955:2;-1:-1:-1;3026:23:1;;2945:110;-1:-1:-1;2945:110:1:o;3060:248::-;3128:6;3136;3189:2;3177:9;3168:7;3164:23;3160:32;3157:2;;;3205:1;3202;3195:12;3157:2;-1:-1:-1;;3228:23:1;;;3298:2;3283:18;;;3270:32;;-1:-1:-1;3147:161:1:o;3313:306::-;3401:6;3409;3417;3470:2;3458:9;3449:7;3445:23;3441:32;3438:2;;;3486:1;3483;3476:12;3438:2;3515:9;3509:16;3499:26;;3565:2;3554:9;3550:18;3544:25;3534:35;;3609:2;3598:9;3594:18;3588:25;3578:35;;3428:191;;;;;:::o;3624:523::-;3728:6;3736;3744;3752;3760;3768;3821:3;3809:9;3800:7;3796:23;3792:33;3789:2;;;3838:1;3835;3828:12;3789:2;-1:-1:-1;;3861:23:1;;;3931:2;3916:18;;3903:32;;-1:-1:-1;3982:2:1;3967:18;;3954:32;;4033:2;4018:18;;4005:32;;-1:-1:-1;4084:3:1;4069:19;;4056:33;;-1:-1:-1;4136:3:1;4121:19;4108:33;;-1:-1:-1;3779:368:1;-1:-1:-1;3779:368:1:o;4152:461::-;4205:3;4243:5;4237:12;4270:6;4265:3;4258:19;4296:4;4325:2;4320:3;4316:12;4309:19;;4362:2;4355:5;4351:14;4383:1;4393:195;4407:6;4404:1;4401:13;4393:195;;;4472:13;;-1:-1:-1;;;;;4468:39:1;4456:52;;4528:12;;;;4563:15;;;;4504:1;4422:9;4393:195;;;-1:-1:-1;4604:3:1;;4213:400;-1:-1:-1;;;;;4213:400:1:o;6398:597::-;6510:4;6539:2;6568;6557:9;6550:21;6600:6;6594:13;6643:6;6638:2;6627:9;6623:18;6616:34;6668:1;6678:140;6692:6;6689:1;6686:13;6678:140;;;6787:14;;;6783:23;;6777:30;6753:17;;;6772:2;6749:26;6742:66;6707:10;;6678:140;;;6836:6;6833:1;6830:13;6827:2;;;6906:1;6901:2;6892:6;6881:9;6877:22;6873:31;6866:42;6827:2;-1:-1:-1;6979:2:1;6958:15;-1:-1:-1;;6954:29:1;6939:45;;;;6986:2;6935:54;;6519:476;-1:-1:-1;;;6519:476:1:o;11239:356::-;11441:2;11423:21;;;11460:18;;;11453:30;11519:34;11514:2;11499:18;;11492:62;11586:2;11571:18;;11413:182::o;12948:332::-;13155:6;13144:9;13137:25;13198:2;13193;13182:9;13178:18;13171:30;13118:4;13218:56;13270:2;13259:9;13255:18;13247:6;13218:56;:::i;:::-;13210:64;13127:153;-1:-1:-1;;;;13127:153:1:o;13285:582::-;13584:6;13573:9;13566:25;13627:6;13622:2;13611:9;13607:18;13600:34;13670:3;13665:2;13654:9;13650:18;13643:31;13547:4;13691:57;13743:3;13732:9;13728:19;13720:6;13691:57;:::i;:::-;-1:-1:-1;;;;;13784:32:1;;;;13779:2;13764:18;;13757:60;-1:-1:-1;13848:3:1;13833:19;13826:35;13683:65;13556:311;-1:-1:-1;;;13556:311:1:o;14061:128::-;14101:3;14132:1;14128:6;14125:1;14122:13;14119:2;;;14138:18;;:::i;:::-;-1:-1:-1;14174:9:1;;14109:80::o;14194:217::-;14234:1;14260;14250:2;;14304:10;14299:3;14295:20;14292:1;14285:31;14339:4;14336:1;14329:15;14367:4;14364:1;14357:15;14250:2;-1:-1:-1;14396:9:1;;14240:171::o;14416:422::-;14505:1;14548:5;14505:1;14562:270;14583:7;14573:8;14570:21;14562:270;;;14642:4;14638:1;14634:6;14630:17;14624:4;14621:27;14618:2;;;14651:18;;:::i;:::-;14701:7;14691:8;14687:22;14684:2;;;14721:16;;;;14684:2;14800:22;;;;14760:15;;;;14562:270;;;14566:3;14480:358;;;;;:::o;14843:140::-;14901:5;14930:47;14971:4;14961:8;14957:19;14951:4;15037:5;15067:8;15057:2;;-1:-1:-1;15108:1:1;15122:5;;15057:2;15156:4;15146:2;;-1:-1:-1;15193:1:1;15207:5;;15146:2;15238:4;15256:1;15251:59;;;;15324:1;15319:130;;;;15231:218;;15251:59;15281:1;15272:10;;15295:5;;;15319:130;15356:3;15346:8;15343:17;15340:2;;;15363:18;;:::i;:::-;-1:-1:-1;;15419:1:1;15405:16;;15434:5;;15231:218;;15533:2;15523:8;15520:16;15514:3;15508:4;15505:13;15501:36;15495:2;15485:8;15482:16;15477:2;15471:4;15468:12;15464:35;15461:77;15458:2;;;-1:-1:-1;15570:19:1;;;15602:5;;15458:2;15649:34;15674:8;15668:4;15649:34;:::i;:::-;15719:6;15715:1;15711:6;15707:19;15698:7;15695:32;15692:2;;;15730:18;;:::i;:::-;15768:20;;15047:747;-1:-1:-1;;;15047:747:1:o;15799:168::-;15839:7;15905:1;15901;15897:6;15893:14;15890:1;15887:21;15882:1;15875:9;15868:17;15864:45;15861:2;;;15912:18;;:::i;:::-;-1:-1:-1;15952:9:1;;15851:116::o;15972:125::-;16012:4;16040:1;16037;16034:8;16031:2;;;16045:18;;:::i;:::-;-1:-1:-1;16082:9:1;;16021:76::o;16102:380::-;16181:1;16177:12;;;;16224;;;16245:2;;16299:4;16291:6;16287:17;16277:27;;16245:2;16352;16344:6;16341:14;16321:18;16318:38;16315:2;;;16398:10;16393:3;16389:20;16386:1;16379:31;16433:4;16430:1;16423:15;16461:4;16458:1;16451:15;16315:2;;16157:325;;;:::o;16487:135::-;16526:3;-1:-1:-1;;16547:17:1;;16544:2;;;16567:18;;:::i;:::-;-1:-1:-1;16614:1:1;16603:13;;16534:88::o;16627:127::-;16688:10;16683:3;16679:20;16676:1;16669:31;16719:4;16716:1;16709:15;16743:4;16740:1;16733:15;16759:127;16820:10;16815:3;16811:20;16808:1;16801:31;16851:4;16848:1;16841:15;16875:4;16872:1;16865:15;17023:131;-1:-1:-1;;;;;17098:31:1;;17088:42;;17078:2;;17144:1;17141;17134:12;17078:2;17068:86;:::o

Swarm Source

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