ETH Price: $2,524.23 (+2.33%)
Gas: 9.06 Gwei

Token

ErnieAI (ERNIE)
 

Overview

Max Total Supply

1,000,000 ERNIE

Holders

14

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
9,486.170180106708485358 ERNIE

Value
$0.00
0x52439670c2b4763e73513baca06d94733799d585
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:
Ernie

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-03-19
*/

//SPDX-License-Identifier: MIT

/*
 https://techwireasia.com/2023/02/baidus-ernie-joins-the-ai-chatbot-party/
 https://t.me/ErnieAiProtocol
 https://twitter.com/ErnieAiERC
 https://medium.com/@ernieaichain_39546
 https://www.ernieprotocol.com


 */

pragma solidity ^0.8.1;

library SafeMath {

    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

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

abstract contract Ownable is Context {
    address private _owner;

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

    constructor() {
        _transferOwnership(_msgSender());
    }
    modifier onlyOwner() {
        _checkOwner();
        _;
    }
    function owner() public view virtual returns (address) {
        return _owner;
    }
    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}
interface IERC20 {

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

    event Approval(address indexed owner, address indexed spender, uint256 value);

    function totalSupply() external view returns (uint256);

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

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

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

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

    function transferFrom(

        address from,

        address to,

        uint256 amount

    ) external returns (bool);

}

interface IERC20Metadata is IERC20 {

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

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

    function decimals() external view returns (uint8);
}

abstract contract ERC20 is Context, IERC20, IERC20Metadata {

    mapping(address => uint256) private _balances;

    mapping(address => mapping(address => uint256)) private _allowances;

    uint256 private _totalSupply;

    string private _name;

    string private _symbol;

    constructor(string memory name_, string memory symbol_) {

        _name = name_;

        _symbol = symbol_;

    }

    function name() public view virtual override returns (string memory) {

        return _name;

    }

    function symbol() public view virtual override returns (string memory) {

        return _symbol;

    }

    function decimals() public view virtual override returns (uint8) {

        return 18;

    }

    function totalSupply() public view virtual override returns (uint256) {

        return _totalSupply;

    }

    function balanceOf(address account) public view virtual override returns (uint256) {

        return _balances[account];

    }

    function transfer(address to, uint256 amount) public virtual override returns (bool) {

        address owner = _msgSender();

        _transfer(owner, to, amount);

        return true;

    }

    function allowance(address owner, address spender) public view virtual override returns (uint256) {

        return _allowances[owner][spender];

    }

    function approve(address spender, uint256 amount) public virtual override returns (bool) {

        address owner = _msgSender();

        _approve(owner, spender, amount);

        return true;

    }

    function transferFrom(

        address from,

        address to,

        uint256 amount

    ) public virtual override returns (bool) {

        address spender = _msgSender();

        _spendAllowance(from, spender, amount);

        _transfer(from, to, amount);

        return true;

    }

    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {

        address owner = _msgSender();

        _approve(owner, spender, allowance(owner, spender) + addedValue);

        return true;

    }

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {

        address owner = _msgSender();

        uint256 currentAllowance = allowance(owner, spender);

        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");

        unchecked {

            _approve(owner, spender, currentAllowance - subtractedValue);

        }

        return true;

    }

    function _transfer(

        address from,

        address to,

        uint256 amount

    ) internal virtual {

        require(from != address(0), "ERC20: transfer from the zero address");

        require(to != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(from, to, amount);

        uint256 fromBalance = _balances[from];

        require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");

        unchecked {

            _balances[from] = fromBalance - amount;

            _balances[to] += amount;

        }

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, amount);

    }

    function _mint(address account, uint256 amount) internal virtual {

        require(account != address(0), "ERC20: mint to the zero address");

        _beforeTokenTransfer(address(0), account, amount);

        _totalSupply += amount;

        unchecked {

            _balances[account] += amount;

        }

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

        _afterTokenTransfer(address(0), account, amount);

    }
    function _approve(

        address owner,

        address spender,

        uint256 amount

    ) internal virtual {

        require(owner != address(0), "ERC20: approve from the zero address");

        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = amount;

        emit Approval(owner, spender, amount);

    }
    function _spendAllowance(

        address owner,

        address spender,

        uint256 amount

    ) internal virtual {

        uint256 currentAllowance = allowance(owner, spender);

        if (currentAllowance != type(uint256).max) {

            require(currentAllowance >= amount, "ERC20: insufficient allowance");

            unchecked {

                _approve(owner, spender, currentAllowance - amount);

            }

        }

    }
    function _beforeTokenTransfer(

        address from,

        address to,

        uint256 amount

    ) internal virtual {}
    function _afterTokenTransfer(

        address from,

        address to,

        uint256 amount

    ) internal virtual {}

}
contract Ernie is ERC20, Ownable {
    using SafeMath for uint256;

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    address public constant deadAddress = address(0xdead);
    mapping (address => bool) private _blacklist;

    bool private swapping;

    address public marketingWallet;
    address public devWallet;

    uint256 public swapTokensAtAmount;

    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = false;

    mapping(address => uint256) private _holderLastTransferTimestamp;
    bool public transferDelayEnabled = true;

    uint256 public buyTotalFees;
    uint256 public buyMarketingFee;
    uint256 public buyDevFee;

    uint256 public sellTotalFees;
    uint256 public sellMarketingFee;
    uint256 public sellDevFee;

    uint256 public tokensForMarketing;
    uint256 public tokensForDev;

    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) public automatedMarketMakerPairs;

    event UpdateUniswapV2Router(
        address indexed newAddress,
        address indexed oldAddress
    );

    event ExcludeFromFees(address indexed account, bool isExcluded);

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


    event marketingWalletUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );

    event devWalletUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );

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

    constructor() ERC20("ErnieAI", "ERNIE") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);

        uniswapV2Router = _uniswapV2Router;

        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
            _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);
            
        uint256 _buyMarketingFee = 2;
        uint256 _buyDevFee = 3;

        uint256 _sellMarketingFee = 20;
        uint256 _sellDevFee = 20;

        uint256 totalSupply = 1_000_000* 1e18;

        swapTokensAtAmount = (totalSupply * 5) / 10000; // 0.05% swap wallet

        buyMarketingFee = _buyMarketingFee;
        buyDevFee = _buyDevFee;
        buyTotalFees = buyMarketingFee + buyDevFee;

        sellMarketingFee = _sellMarketingFee;
        sellDevFee = _sellDevFee;
        sellTotalFees = sellMarketingFee + sellDevFee;

        marketingWallet = address(0x66dC4efF5c4C444C725Bdc7cda088bEf8D7FD988);
        devWallet = address(0x66dC4efF5c4C444C725Bdc7cda088bEf8D7FD988); 

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

        _mint(msg.sender, totalSupply);
    }

    receive() external payable {}


    // once enabled, can never be turned off
    function enableTrading() external onlyOwner {
        tradingActive = true;
        swapEnabled = true;
    }

    // remove limits after token is stable
    function removeLimits() external onlyOwner returns (bool) {
        limitsInEffect = false;
        return true;
    }

    // disable Transfer delay - cannot be reenabled
    function disableTransferDelay() external onlyOwner returns (bool) {
        transferDelayEnabled = false;
        return true;
    }

    // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(uint256 newAmount)
        external
        onlyOwner
        returns (bool)
    {
        require(
            newAmount >= (totalSupply() * 1) / 100000,
            "Swap amount cannot be lower than 0.001% total supply."
        );
        require(
            newAmount <= (totalSupply() * 5) / 1000,
            "Swap amount cannot be higher than 0.5% total supply."
        );
        swapTokensAtAmount = newAmount;
        return true;
    }


    // only use to disable contract sales if absolutely necessary (emergency use only)
    function updateSwapEnabled(bool enabled) external onlyOwner {
        swapEnabled = enabled;
    }

    function updateBuyFees(
        uint256 _marketingFee,
        uint256 _devFee
    ) external onlyOwner {
        buyMarketingFee = _marketingFee;
        buyDevFee = _devFee;
        buyTotalFees = buyMarketingFee + buyDevFee;
    }

    function updateSellFees(
        uint256 _marketingFee,
        uint256 _devFee
    ) external onlyOwner {
        sellMarketingFee = _marketingFee;
        sellDevFee = _devFee;
        sellTotalFees = sellMarketingFee + sellDevFee;
    }

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

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

        _setAutomatedMarketMakerPair(pair, value);
    }

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

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function updateMarketingWallet(address newMarketingWallet)
        external
        onlyOwner
    {
        emit marketingWalletUpdated(newMarketingWallet, marketingWallet);
        marketingWallet = newMarketingWallet;
    }

    function updateDevWallet(address newWallet) external onlyOwner {
        emit devWalletUpdated(newWallet, devWallet);
        devWallet = newWallet;
    }

    function isExcludedFromFees(address account) public view returns (bool) {
        return _isExcludedFromFees[account];
    }

    event BoughtEarly(address indexed sniper);

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(!_blacklist[from] && !_blacklist[to], "You are a bot");

        if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        }

        if (limitsInEffect) {
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !swapping
            ) {
                if (!tradingActive) {
                    require(
                        _isExcludedFromFees[from] || _isExcludedFromFees[to],
                        "Trading is not active."
                    );
                }

                // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.
                if (transferDelayEnabled) {
                    if (
                        to != owner() &&
                        to != address(uniswapV2Router) &&
                        to != address(uniswapV2Pair)
                    ) {
                        require(
                            _holderLastTransferTimestamp[tx.origin] <
                                block.number,
                            "_transfer:: Transfer Delay enabled.  Only one purchase per block allowed."
                        );
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                    }
                }
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

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

            swapping = false;
        }

        bool takeFee = !swapping;

        // if any account belongs to _isExcludedFromFee account then remove the fee
        if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }

        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if (takeFee) {
            // on sell
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0) {
                fees = amount.mul(sellTotalFees).div(100);
                tokensForDev += (fees * sellDevFee) / sellTotalFees;
                tokensForMarketing += (fees * sellMarketingFee) / sellTotalFees;
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(100);
                tokensForDev += (fees * buyDevFee) / buyTotalFees;
                tokensForMarketing += (fees * buyMarketingFee) / buyTotalFees;
            }

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

            amount -= fees;
        }

        super._transfer(from, to, amount);
    }

    function addBL(address account, bool isBlacklisted) public onlyOwner {
        _blacklist[account] = isBlacklisted;
    }
 
    function multiBL(address[] memory multiblacklist_) public onlyOwner {
        for (uint256 i = 0; i < multiblacklist_.length; i++) {
            _blacklist[multiblacklist_[i]] = true;
        }
    }

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

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

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }
}
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 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;

}

interface IUniswapV2Pair {

    event Approval(address indexed owner, address indexed spender, uint value);

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

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

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

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint);

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

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

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

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

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

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

    function nonces(address owner) external view returns (uint);

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

    event Mint(address indexed sender, uint amount0, uint amount1);

    event Swap(

        address indexed sender,

        uint amount0In,

        uint amount1In,

        uint amount0Out,

        uint amount1Out,

        address indexed to

    );

    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);

    function price0CumulativeLast() external view returns (uint);

    function price1CumulativeLast() external view returns (uint);

    function kLast() external view returns (uint);

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

    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;

}

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":"sniper","type":"address"}],"name":"BoughtEarly","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"devWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"isBlacklisted","type":"bool"}],"name":"addBL","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"multiblacklist_","type":"address[]"}],"name":"multiBL","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c0604052600a805462ffffff19166001908117909155600c805460ff191690911790553480156200003057600080fd5b506040518060400160405280600781526020016645726e6965414960c81b8152506040518060400160405280600581526020016445524e494560d81b815250816003908162000080919062000613565b5060046200008f828262000613565b505050620000ac620000a66200033260201b60201c565b62000336565b737a250d5630b4cf539739df2c5dacb4c659f2488d60808190526040805163c45a015560e01b81529051829163c45a01559160048083019260209291908290030181865afa15801562000103573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001299190620006df565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000177573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200019d9190620006df565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015620001eb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002119190620006df565b6001600160a01b031660a08190526200022c90600162000388565b6002600360148069d3c21bcecceda10000006127106200024e82600562000727565b6200025a919062000747565b600955600e859055600f8490556200027384866200076a565b600d55601183905560128290556200028c82846200076a565b601055600780547466dc4eff5c4c444c725bdc7cda088bef8d7fd98800610100600160a81b0319909116179055600880546001600160a01b0319167366dc4eff5c4c444c725bdc7cda088bef8d7fd988179055620002fe620002f66005546001600160a01b031690565b6001620003dc565b6200030b306001620003dc565b6200031a61dead6001620003dc565b62000326338262000445565b50505050505062000780565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038216600081815260166020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b620003e66200050c565b6001600160a01b038216600081815260156020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038216620004a15760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064015b60405180910390fd5b8060026000828254620004b591906200076a565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6005546001600160a01b03163314620005685760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640162000498565b565b505050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200059a57607f821691505b602082108103620005bb57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200056a57600081815260208120601f850160051c81016020861015620005ea5750805b601f850160051c820191505b818110156200060b57828155600101620005f6565b505050505050565b81516001600160401b038111156200062f576200062f6200056f565b620006478162000640845462000585565b84620005c1565b602080601f8311600181146200067f5760008415620006665750858301515b600019600386901b1c1916600185901b1785556200060b565b600085815260208120601f198616915b82811015620006b0578886015182559484019460019091019084016200068f565b5085821015620006cf5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600060208284031215620006f257600080fd5b81516001600160a01b03811681146200070a57600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141762000741576200074162000711565b92915050565b6000826200076557634e487b7160e01b600052601260045260246000fd5b500490565b8082018082111562000741576200074162000711565b60805160a051611d1d620007bb6000396000818161045a01528181610b34015261138201526000818161034701526113440152611d1d6000f3fe60806040526004361061028c5760003560e01c80638a8c523c1161015a578063a9059cbb116100c1578063d257b34f1161007a578063d257b34f146107c9578063d85ba063146107e9578063dd62ed3e146107ff578063e2f456051461081f578063e884f26014610835578063f2fde38b1461084a57600080fd5b8063a9059cbb14610700578063aacebbe314610720578063b62496f514610740578063bbc0c74214610770578063c02466681461078f578063c876d0b9146107af57600080fd5b806395d89b411161011357806395d89b41146106695780639a7a23d61461067e5780639c3b4fdc1461069e5780639fccce32146106b4578063a0d82dc5146106ca578063a457c2d7146106e057600080fd5b80638a8c523c146105c05780638da5cb5b146105d55780638ea5220f146105f357806390a0bb35146106135780639213691314610633578063924de9b71461064957600080fd5b806339509351116101fe5780636ddd1713116101b75780636ddd17131461050557806370a0823114610525578063715018a61461055b578063751039fc1461057057806375f0a874146105855780637bce5a04146105aa57600080fd5b8063395093511461042857806349bd5a5e146104485780634a62bb651461047c5780634fbee1931461049657806366ca9b83146104cf5780636a486a8e146104ef57600080fd5b806318160ddd1161025057806318160ddd146103815780631816467f146103a05780631f3fed8f146103c057806323b872dd146103d657806327c8f835146103f6578063313ce5671461040c57600080fd5b806302dbd8f81461029857806306fdde03146102ba578063095ea7b3146102e55780630f822e80146103155780631694505e1461033557600080fd5b3661029357005b600080fd5b3480156102a457600080fd5b506102b86102b33660046118fd565b61086a565b005b3480156102c657600080fd5b506102cf61088d565b6040516102dc919061191f565b60405180910390f35b3480156102f157600080fd5b50610305610300366004611984565b61091f565b60405190151581526020016102dc565b34801561032157600080fd5b506102b86103303660046119c4565b610939565b34801561034157600080fd5b506103697f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016102dc565b34801561038d57600080fd5b506002545b6040519081526020016102dc565b3480156103ac57600080fd5b506102b86103bb366004611a89565b6109ad565b3480156103cc57600080fd5b5061039260135481565b3480156103e257600080fd5b506103056103f1366004611aa4565b610a12565b34801561040257600080fd5b5061036961dead81565b34801561041857600080fd5b50604051601281526020016102dc565b34801561043457600080fd5b50610305610443366004611984565b610a36565b34801561045457600080fd5b506103697f000000000000000000000000000000000000000000000000000000000000000081565b34801561048857600080fd5b50600a546103059060ff1681565b3480156104a257600080fd5b506103056104b1366004611a89565b6001600160a01b031660009081526015602052604090205460ff1690565b3480156104db57600080fd5b506102b86104ea3660046118fd565b610a58565b3480156104fb57600080fd5b5061039260105481565b34801561051157600080fd5b50600a546103059062010000900460ff1681565b34801561053157600080fd5b50610392610540366004611a89565b6001600160a01b031660009081526020819052604090205490565b34801561056757600080fd5b506102b8610a7b565b34801561057c57600080fd5b50610305610a8f565b34801561059157600080fd5b506007546103699061010090046001600160a01b031681565b3480156105b657600080fd5b50610392600e5481565b3480156105cc57600080fd5b506102b8610aa9565b3480156105e157600080fd5b506005546001600160a01b0316610369565b3480156105ff57600080fd5b50600854610369906001600160a01b031681565b34801561061f57600080fd5b506102b861062e366004611af0565b610ac4565b34801561063f57600080fd5b5061039260115481565b34801561065557600080fd5b506102b8610664366004611b23565b610af7565b34801561067557600080fd5b506102cf610b1b565b34801561068a57600080fd5b506102b8610699366004611af0565b610b2a565b3480156106aa57600080fd5b50610392600f5481565b3480156106c057600080fd5b5061039260145481565b3480156106d657600080fd5b5061039260125481565b3480156106ec57600080fd5b506103056106fb366004611984565b610be8565b34801561070c57600080fd5b5061030561071b366004611984565b610c63565b34801561072c57600080fd5b506102b861073b366004611a89565b610c71565b34801561074c57600080fd5b5061030561075b366004611a89565b60166020526000908152604090205460ff1681565b34801561077c57600080fd5b50600a5461030590610100900460ff1681565b34801561079b57600080fd5b506102b86107aa366004611af0565b610ce1565b3480156107bb57600080fd5b50600c546103059060ff1681565b3480156107d557600080fd5b506103056107e4366004611b3e565b610d48565b3480156107f557600080fd5b50610392600d5481565b34801561080b57600080fd5b5061039261081a366004611b57565b610e7c565b34801561082b57600080fd5b5061039260095481565b34801561084157600080fd5b50610305610ea7565b34801561085657600080fd5b506102b8610865366004611a89565b610ec1565b610872610f3a565b601182905560128190556108868183611b97565b6010555050565b60606003805461089c90611baa565b80601f01602080910402602001604051908101604052809291908181526020018280546108c890611baa565b80156109155780601f106108ea57610100808354040283529160200191610915565b820191906000526020600020905b8154815290600101906020018083116108f857829003601f168201915b5050505050905090565b60003361092d818585610f94565b60019150505b92915050565b610941610f3a565b60005b81518110156109a95760016006600084848151811061096557610965611be4565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055806109a181611bfa565b915050610944565b5050565b6109b5610f3a565b6008546040516001600160a01b03918216918316907f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74390600090a3600880546001600160a01b0319166001600160a01b0392909216919091179055565b600033610a208582856110b8565b610a2b858585611132565b506001949350505050565b60003361092d818585610a498383610e7c565b610a539190611b97565b610f94565b610a60610f3a565b600e829055600f819055610a748183611b97565b600d555050565b610a83610f3a565b610a8d600061170e565b565b6000610a99610f3a565b50600a805460ff19169055600190565b610ab1610f3a565b600a805462ffff00191662010100179055565b610acc610f3a565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b610aff610f3a565b600a8054911515620100000262ff000019909216919091179055565b60606004805461089c90611baa565b610b32610f3a565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031603610bde5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b657250616972730000000000000060648201526084015b60405180910390fd5b6109a98282611760565b60003381610bf68286610e7c565b905083811015610c565760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610bd5565b610a2b8286868403610f94565b60003361092d818585611132565b610c79610f3a565b6007546040516001600160a01b036101009092048216918316907fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567490600090a3600780546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b610ce9610f3a565b6001600160a01b038216600081815260156020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6000610d52610f3a565b620186a0610d5f60025490565b610d6a906001611c13565b610d749190611c2a565b821015610de15760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610bd5565b6103e8610ded60025490565b610df8906005611c13565b610e029190611c2a565b821115610e6e5760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610bd5565b50600981905560015b919050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6000610eb1610f3a565b50600c805460ff19169055600190565b610ec9610f3a565b6001600160a01b038116610f2e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610bd5565b610f378161170e565b50565b6005546001600160a01b03163314610a8d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610bd5565b6001600160a01b038316610ff65760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610bd5565b6001600160a01b0382166110575760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610bd5565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006110c48484610e7c565b9050600019811461112c578181101561111f5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610bd5565b61112c8484848403610f94565b50505050565b6001600160a01b0383166111585760405162461bcd60e51b8152600401610bd590611c4c565b6001600160a01b03821661117e5760405162461bcd60e51b8152600401610bd590611c91565b6001600160a01b03831660009081526006602052604090205460ff161580156111c057506001600160a01b03821660009081526006602052604090205460ff16155b6111fc5760405162461bcd60e51b815260206004820152600d60248201526c165bdd48185c99481848189bdd609a1b6044820152606401610bd5565b8060000361121557611210838360006117b4565b505050565b600a5460ff1615611465576005546001600160a01b0384811691161480159061124c57506005546001600160a01b03838116911614155b801561126057506001600160a01b03821615155b801561127757506001600160a01b03821661dead14155b8015611286575060075460ff16155b1561146557600a54610100900460ff1661131e576001600160a01b03831660009081526015602052604090205460ff16806112d957506001600160a01b03821660009081526015602052604090205460ff165b61131e5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610bd5565b600c5460ff1615611465576005546001600160a01b0383811691161480159061137957507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b80156113b757507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b1561146557326000908152600b602052604090205443116114525760405162461bcd60e51b815260206004820152604960248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b6064820152681030b63637bbb2b21760b91b608482015260a401610bd5565b326000908152600b602052604090204390555b30600090815260208190526040902054600954811080159081906114915750600a5462010000900460ff165b80156114a0575060075460ff16155b80156114c557506001600160a01b03851660009081526016602052604090205460ff16155b80156114ea57506001600160a01b03851660009081526015602052604090205460ff16155b801561150f57506001600160a01b03841660009081526015602052604090205460ff16155b1561151f576007805460ff191690555b6007546001600160a01b03861660009081526015602052604090205460ff9182161591168061156657506001600160a01b03851660009081526015602052604090205460ff165b1561156f575060005b600081156116fa576001600160a01b03861660009081526016602052604090205460ff1680156115a157506000601054115b1561162f576115c660646115c0601054886118de90919063ffffffff16565b906118f1565b9050601054601254826115d99190611c13565b6115e39190611c2a565b601460008282546115f49190611b97565b90915550506010546011546116099083611c13565b6116139190611c2a565b601360008282546116249190611b97565b909155506116dc9050565b6001600160a01b03871660009081526016602052604090205460ff16801561165957506000600d54115b156116dc5761167860646115c0600d54886118de90919063ffffffff16565b9050600d54600f548261168b9190611c13565b6116959190611c2a565b601460008282546116a69190611b97565b9091555050600d54600e546116bb9083611c13565b6116c59190611c2a565b601360008282546116d69190611b97565b90915550505b80156116ed576116ed8730836117b4565b6116f78186611cd4565b94505b6117058787876117b4565b50505050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038216600081815260166020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b0383166117da5760405162461bcd60e51b8152600401610bd590611c4c565b6001600160a01b0382166118005760405162461bcd60e51b8152600401610bd590611c91565b6001600160a01b038316600090815260208190526040902054818110156118785760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610bd5565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a361112c565b60006118ea8284611c13565b9392505050565b60006118ea8284611c2a565b6000806040838503121561191057600080fd5b50508035926020909101359150565b600060208083528351808285015260005b8181101561194c57858101830151858201604001528201611930565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b0381168114610e7757600080fd5b6000806040838503121561199757600080fd5b6119a08361196d565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b600060208083850312156119d757600080fd5b823567ffffffffffffffff808211156119ef57600080fd5b818501915085601f830112611a0357600080fd5b813581811115611a1557611a156119ae565b8060051b604051601f19603f83011681018181108582111715611a3a57611a3a6119ae565b604052918252848201925083810185019188831115611a5857600080fd5b938501935b82851015611a7d57611a6e8561196d565b84529385019392850192611a5d565b98975050505050505050565b600060208284031215611a9b57600080fd5b6118ea8261196d565b600080600060608486031215611ab957600080fd5b611ac28461196d565b9250611ad06020850161196d565b9150604084013590509250925092565b80358015158114610e7757600080fd5b60008060408385031215611b0357600080fd5b611b0c8361196d565b9150611b1a60208401611ae0565b90509250929050565b600060208284031215611b3557600080fd5b6118ea82611ae0565b600060208284031215611b5057600080fd5b5035919050565b60008060408385031215611b6a57600080fd5b611b738361196d565b9150611b1a6020840161196d565b634e487b7160e01b600052601160045260246000fd5b8082018082111561093357610933611b81565b600181811c90821680611bbe57607f821691505b602082108103611bde57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b600060018201611c0c57611c0c611b81565b5060010190565b808202811582820484141761093357610933611b81565b600082611c4757634e487b7160e01b600052601260045260246000fd5b500490565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b8181038181111561093357610933611b8156fea264697066735822122077947305e5e154bfcd243f66501e29e0669b660381990a6309471479e3cfd5df64736f6c63430008120033

Deployed Bytecode

0x60806040526004361061028c5760003560e01c80638a8c523c1161015a578063a9059cbb116100c1578063d257b34f1161007a578063d257b34f146107c9578063d85ba063146107e9578063dd62ed3e146107ff578063e2f456051461081f578063e884f26014610835578063f2fde38b1461084a57600080fd5b8063a9059cbb14610700578063aacebbe314610720578063b62496f514610740578063bbc0c74214610770578063c02466681461078f578063c876d0b9146107af57600080fd5b806395d89b411161011357806395d89b41146106695780639a7a23d61461067e5780639c3b4fdc1461069e5780639fccce32146106b4578063a0d82dc5146106ca578063a457c2d7146106e057600080fd5b80638a8c523c146105c05780638da5cb5b146105d55780638ea5220f146105f357806390a0bb35146106135780639213691314610633578063924de9b71461064957600080fd5b806339509351116101fe5780636ddd1713116101b75780636ddd17131461050557806370a0823114610525578063715018a61461055b578063751039fc1461057057806375f0a874146105855780637bce5a04146105aa57600080fd5b8063395093511461042857806349bd5a5e146104485780634a62bb651461047c5780634fbee1931461049657806366ca9b83146104cf5780636a486a8e146104ef57600080fd5b806318160ddd1161025057806318160ddd146103815780631816467f146103a05780631f3fed8f146103c057806323b872dd146103d657806327c8f835146103f6578063313ce5671461040c57600080fd5b806302dbd8f81461029857806306fdde03146102ba578063095ea7b3146102e55780630f822e80146103155780631694505e1461033557600080fd5b3661029357005b600080fd5b3480156102a457600080fd5b506102b86102b33660046118fd565b61086a565b005b3480156102c657600080fd5b506102cf61088d565b6040516102dc919061191f565b60405180910390f35b3480156102f157600080fd5b50610305610300366004611984565b61091f565b60405190151581526020016102dc565b34801561032157600080fd5b506102b86103303660046119c4565b610939565b34801561034157600080fd5b506103697f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b0390911681526020016102dc565b34801561038d57600080fd5b506002545b6040519081526020016102dc565b3480156103ac57600080fd5b506102b86103bb366004611a89565b6109ad565b3480156103cc57600080fd5b5061039260135481565b3480156103e257600080fd5b506103056103f1366004611aa4565b610a12565b34801561040257600080fd5b5061036961dead81565b34801561041857600080fd5b50604051601281526020016102dc565b34801561043457600080fd5b50610305610443366004611984565b610a36565b34801561045457600080fd5b506103697f0000000000000000000000004b96ff3565fa12642fb24cf75bba49c4ed8583e681565b34801561048857600080fd5b50600a546103059060ff1681565b3480156104a257600080fd5b506103056104b1366004611a89565b6001600160a01b031660009081526015602052604090205460ff1690565b3480156104db57600080fd5b506102b86104ea3660046118fd565b610a58565b3480156104fb57600080fd5b5061039260105481565b34801561051157600080fd5b50600a546103059062010000900460ff1681565b34801561053157600080fd5b50610392610540366004611a89565b6001600160a01b031660009081526020819052604090205490565b34801561056757600080fd5b506102b8610a7b565b34801561057c57600080fd5b50610305610a8f565b34801561059157600080fd5b506007546103699061010090046001600160a01b031681565b3480156105b657600080fd5b50610392600e5481565b3480156105cc57600080fd5b506102b8610aa9565b3480156105e157600080fd5b506005546001600160a01b0316610369565b3480156105ff57600080fd5b50600854610369906001600160a01b031681565b34801561061f57600080fd5b506102b861062e366004611af0565b610ac4565b34801561063f57600080fd5b5061039260115481565b34801561065557600080fd5b506102b8610664366004611b23565b610af7565b34801561067557600080fd5b506102cf610b1b565b34801561068a57600080fd5b506102b8610699366004611af0565b610b2a565b3480156106aa57600080fd5b50610392600f5481565b3480156106c057600080fd5b5061039260145481565b3480156106d657600080fd5b5061039260125481565b3480156106ec57600080fd5b506103056106fb366004611984565b610be8565b34801561070c57600080fd5b5061030561071b366004611984565b610c63565b34801561072c57600080fd5b506102b861073b366004611a89565b610c71565b34801561074c57600080fd5b5061030561075b366004611a89565b60166020526000908152604090205460ff1681565b34801561077c57600080fd5b50600a5461030590610100900460ff1681565b34801561079b57600080fd5b506102b86107aa366004611af0565b610ce1565b3480156107bb57600080fd5b50600c546103059060ff1681565b3480156107d557600080fd5b506103056107e4366004611b3e565b610d48565b3480156107f557600080fd5b50610392600d5481565b34801561080b57600080fd5b5061039261081a366004611b57565b610e7c565b34801561082b57600080fd5b5061039260095481565b34801561084157600080fd5b50610305610ea7565b34801561085657600080fd5b506102b8610865366004611a89565b610ec1565b610872610f3a565b601182905560128190556108868183611b97565b6010555050565b60606003805461089c90611baa565b80601f01602080910402602001604051908101604052809291908181526020018280546108c890611baa565b80156109155780601f106108ea57610100808354040283529160200191610915565b820191906000526020600020905b8154815290600101906020018083116108f857829003601f168201915b5050505050905090565b60003361092d818585610f94565b60019150505b92915050565b610941610f3a565b60005b81518110156109a95760016006600084848151811061096557610965611be4565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055806109a181611bfa565b915050610944565b5050565b6109b5610f3a565b6008546040516001600160a01b03918216918316907f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74390600090a3600880546001600160a01b0319166001600160a01b0392909216919091179055565b600033610a208582856110b8565b610a2b858585611132565b506001949350505050565b60003361092d818585610a498383610e7c565b610a539190611b97565b610f94565b610a60610f3a565b600e829055600f819055610a748183611b97565b600d555050565b610a83610f3a565b610a8d600061170e565b565b6000610a99610f3a565b50600a805460ff19169055600190565b610ab1610f3a565b600a805462ffff00191662010100179055565b610acc610f3a565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b610aff610f3a565b600a8054911515620100000262ff000019909216919091179055565b60606004805461089c90611baa565b610b32610f3a565b7f0000000000000000000000004b96ff3565fa12642fb24cf75bba49c4ed8583e66001600160a01b0316826001600160a01b031603610bde5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b657250616972730000000000000060648201526084015b60405180910390fd5b6109a98282611760565b60003381610bf68286610e7c565b905083811015610c565760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610bd5565b610a2b8286868403610f94565b60003361092d818585611132565b610c79610f3a565b6007546040516001600160a01b036101009092048216918316907fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567490600090a3600780546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b610ce9610f3a565b6001600160a01b038216600081815260156020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6000610d52610f3a565b620186a0610d5f60025490565b610d6a906001611c13565b610d749190611c2a565b821015610de15760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610bd5565b6103e8610ded60025490565b610df8906005611c13565b610e029190611c2a565b821115610e6e5760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610bd5565b50600981905560015b919050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6000610eb1610f3a565b50600c805460ff19169055600190565b610ec9610f3a565b6001600160a01b038116610f2e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610bd5565b610f378161170e565b50565b6005546001600160a01b03163314610a8d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610bd5565b6001600160a01b038316610ff65760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610bd5565b6001600160a01b0382166110575760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610bd5565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006110c48484610e7c565b9050600019811461112c578181101561111f5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610bd5565b61112c8484848403610f94565b50505050565b6001600160a01b0383166111585760405162461bcd60e51b8152600401610bd590611c4c565b6001600160a01b03821661117e5760405162461bcd60e51b8152600401610bd590611c91565b6001600160a01b03831660009081526006602052604090205460ff161580156111c057506001600160a01b03821660009081526006602052604090205460ff16155b6111fc5760405162461bcd60e51b815260206004820152600d60248201526c165bdd48185c99481848189bdd609a1b6044820152606401610bd5565b8060000361121557611210838360006117b4565b505050565b600a5460ff1615611465576005546001600160a01b0384811691161480159061124c57506005546001600160a01b03838116911614155b801561126057506001600160a01b03821615155b801561127757506001600160a01b03821661dead14155b8015611286575060075460ff16155b1561146557600a54610100900460ff1661131e576001600160a01b03831660009081526015602052604090205460ff16806112d957506001600160a01b03821660009081526015602052604090205460ff165b61131e5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610bd5565b600c5460ff1615611465576005546001600160a01b0383811691161480159061137957507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0316826001600160a01b031614155b80156113b757507f0000000000000000000000004b96ff3565fa12642fb24cf75bba49c4ed8583e66001600160a01b0316826001600160a01b031614155b1561146557326000908152600b602052604090205443116114525760405162461bcd60e51b815260206004820152604960248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b6064820152681030b63637bbb2b21760b91b608482015260a401610bd5565b326000908152600b602052604090204390555b30600090815260208190526040902054600954811080159081906114915750600a5462010000900460ff165b80156114a0575060075460ff16155b80156114c557506001600160a01b03851660009081526016602052604090205460ff16155b80156114ea57506001600160a01b03851660009081526015602052604090205460ff16155b801561150f57506001600160a01b03841660009081526015602052604090205460ff16155b1561151f576007805460ff191690555b6007546001600160a01b03861660009081526015602052604090205460ff9182161591168061156657506001600160a01b03851660009081526015602052604090205460ff165b1561156f575060005b600081156116fa576001600160a01b03861660009081526016602052604090205460ff1680156115a157506000601054115b1561162f576115c660646115c0601054886118de90919063ffffffff16565b906118f1565b9050601054601254826115d99190611c13565b6115e39190611c2a565b601460008282546115f49190611b97565b90915550506010546011546116099083611c13565b6116139190611c2a565b601360008282546116249190611b97565b909155506116dc9050565b6001600160a01b03871660009081526016602052604090205460ff16801561165957506000600d54115b156116dc5761167860646115c0600d54886118de90919063ffffffff16565b9050600d54600f548261168b9190611c13565b6116959190611c2a565b601460008282546116a69190611b97565b9091555050600d54600e546116bb9083611c13565b6116c59190611c2a565b601360008282546116d69190611b97565b90915550505b80156116ed576116ed8730836117b4565b6116f78186611cd4565b94505b6117058787876117b4565b50505050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038216600081815260166020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b0383166117da5760405162461bcd60e51b8152600401610bd590611c4c565b6001600160a01b0382166118005760405162461bcd60e51b8152600401610bd590611c91565b6001600160a01b038316600090815260208190526040902054818110156118785760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610bd5565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a361112c565b60006118ea8284611c13565b9392505050565b60006118ea8284611c2a565b6000806040838503121561191057600080fd5b50508035926020909101359150565b600060208083528351808285015260005b8181101561194c57858101830151858201604001528201611930565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b0381168114610e7757600080fd5b6000806040838503121561199757600080fd5b6119a08361196d565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b600060208083850312156119d757600080fd5b823567ffffffffffffffff808211156119ef57600080fd5b818501915085601f830112611a0357600080fd5b813581811115611a1557611a156119ae565b8060051b604051601f19603f83011681018181108582111715611a3a57611a3a6119ae565b604052918252848201925083810185019188831115611a5857600080fd5b938501935b82851015611a7d57611a6e8561196d565b84529385019392850192611a5d565b98975050505050505050565b600060208284031215611a9b57600080fd5b6118ea8261196d565b600080600060608486031215611ab957600080fd5b611ac28461196d565b9250611ad06020850161196d565b9150604084013590509250925092565b80358015158114610e7757600080fd5b60008060408385031215611b0357600080fd5b611b0c8361196d565b9150611b1a60208401611ae0565b90509250929050565b600060208284031215611b3557600080fd5b6118ea82611ae0565b600060208284031215611b5057600080fd5b5035919050565b60008060408385031215611b6a57600080fd5b611b738361196d565b9150611b1a6020840161196d565b634e487b7160e01b600052601160045260246000fd5b8082018082111561093357610933611b81565b600181811c90821680611bbe57607f821691505b602082108103611bde57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b600060018201611c0c57611c0c611b81565b5060010190565b808202811582820484141761093357610933611b81565b600082611c4757634e487b7160e01b600052601260045260246000fd5b500490565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b8181038181111561093357610933611b8156fea264697066735822122077947305e5e154bfcd243f66501e29e0669b660381990a6309471479e3cfd5df64736f6c63430008120033

Deployed Bytecode Sourcemap

10016:10515:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14642:246;;;;;;;;;;-1:-1:-1;14642:246:0;;;;;:::i;:::-;;:::i;:::-;;5479:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6443:209;;;;;;;;;;-1:-1:-1;6443:209:0;;;;;:::i;:::-;;:::i;:::-;;;1422:14:1;;1415:22;1397:41;;1385:2;1370:18;6443:209:0;1257:187:1;19728:203:0;;;;;;;;;;-1:-1:-1;19728:203:0;;;;;:::i;:::-;;:::i;10091:51::-;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2898:32:1;;;2880:51;;2868:2;2853:18;10091:51:0;2707:230:1;5812:112:0;;;;;;;;;;-1:-1:-1;5902:12:0;;5812:112;;;3088:25:1;;;3076:2;3061:18;5812:112:0;2942:177:1;15833:157:0;;;;;;;;;;-1:-1:-1;15833:157:0;;;;;:::i;:::-;;:::i;10899:33::-;;;;;;;;;;;;;;;;6660:313;;;;;;;;;;-1:-1:-1;6660:313:0;;;;;:::i;:::-;;:::i;10194:53::-;;;;;;;;;;;;10240:6;10194:53;;5707:97;;;;;;;;;;-1:-1:-1;5707:97:0;;5792:2;3998:36:1;;3986:2;3971:18;5707:97:0;3856:184:1;6981:246:0;;;;;;;;;;-1:-1:-1;6981:246:0;;;;;:::i;:::-;;:::i;10149:38::-;;;;;;;;;;;;;;;10449:33;;;;;;;;;;-1:-1:-1;10449:33:0;;;;;;;;15998:126;;;;;;;;;;-1:-1:-1;15998:126:0;;;;;:::i;:::-;-1:-1:-1;;;;;16088:28:0;16064:4;16088:28;;;:19;:28;;;;;;;;;15998:126;14394:240;;;;;;;;;;-1:-1:-1;14394:240:0;;;;;:::i;:::-;;:::i;10792:28::-;;;;;;;;;;;;;;;;10529:31;;;;;;;;;;-1:-1:-1;10529:31:0;;;;;;;;;;;5932:131;;;;;;;;;;-1:-1:-1;5932:131:0;;;;;:::i;:::-;-1:-1:-1;;;;;6035:18:0;6006:7;6035:18;;;;;;;;;;;;5932:131;3594:103;;;;;;;;;;;;;:::i;13304:121::-;;;;;;;;;;;;;:::i;10337:30::-;;;;;;;;;;-1:-1:-1;10337:30:0;;;;;;;-1:-1:-1;;;;;10337:30:0;;;10722;;;;;;;;;;;;;;;;13140:112;;;;;;;;;;;;;:::i;3363:87::-;;;;;;;;;;-1:-1:-1;3436:6:0;;-1:-1:-1;;;;;3436:6:0;3363:87;;10374:24;;;;;;;;;;-1:-1:-1;10374:24:0;;;;-1:-1:-1;;;;;10374:24:0;;;19596:123;;;;;;;;;;-1:-1:-1;19596:123:0;;;;;:::i;:::-;;:::i;10827:31::-;;;;;;;;;;;;;;;;14286:100;;;;;;;;;;-1:-1:-1;14286:100:0;;;;;:::i;:::-;;:::i;5591:108::-;;;;;;;;;;;;;:::i;15086:304::-;;;;;;;;;;-1:-1:-1;15086:304:0;;;;;:::i;:::-;;:::i;10759:24::-;;;;;;;;;;;;;;;;10939:27;;;;;;;;;;;;;;;;10865:25;;;;;;;;;;;;;;;;7235:450;;;;;;;;;;-1:-1:-1;7235:450:0;;;;;:::i;:::-;;:::i;6071:201::-;;;;;;;;;;-1:-1:-1;6071:201:0;;;;;:::i;:::-;;:::i;15594:231::-;;;;;;;;;;-1:-1:-1;15594:231:0;;;;;:::i;:::-;;:::i;11034:57::-;;;;;;;;;;-1:-1:-1;11034:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;10489:33;;;;;;;;;;-1:-1:-1;10489:33:0;;;;;;;;;;;14896:182;;;;;;;;;;-1:-1:-1;14896:182:0;;;;;:::i;:::-;;:::i;10640:39::-;;;;;;;;;;-1:-1:-1;10640:39:0;;;;;;;;13691:497;;;;;;;;;;-1:-1:-1;13691:497:0;;;;;:::i;:::-;;:::i;10688:27::-;;;;;;;;;;;;;;;;6280:155;;;;;;;;;;-1:-1:-1;6280:155:0;;;;;:::i;:::-;;:::i;10407:33::-;;;;;;;;;;;;;;;;13486:135;;;;;;;;;;;;;:::i;3703:201::-;;;;;;;;;;-1:-1:-1;3703:201:0;;;;;:::i;:::-;;:::i;14642:246::-;3324:13;:11;:13::i;:::-;14761:16:::1;:32:::0;;;14804:10:::1;:20:::0;;;14851:29:::1;14817:7:::0;14780:13;14851:29:::1;:::i;:::-;14835:13;:45:::0;-1:-1:-1;;14642:246:0:o;5479:104::-;5533:13;5568:5;5561:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5479:104;:::o;6443:209::-;6526:4;2920:10;6586:32;2920:10;6602:7;6611:6;6586:8;:32::i;:::-;6638:4;6631:11;;;6443:209;;;;;:::o;19728:203::-;3324:13;:11;:13::i;:::-;19812:9:::1;19807:117;19831:15;:22;19827:1;:26;19807:117;;;19908:4;19875:10;:30;19886:15;19902:1;19886:18;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;19875:30:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;19875:30:0;:37;;-1:-1:-1;;19875:37:0::1;::::0;::::1;;::::0;;;::::1;::::0;;19855:3;::::1;::::0;::::1;:::i;:::-;;;;19807:117;;;;19728:203:::0;:::o;15833:157::-;3324:13;:11;:13::i;:::-;15940:9:::1;::::0;15912:38:::1;::::0;-1:-1:-1;;;;;15940:9:0;;::::1;::::0;15912:38;::::1;::::0;::::1;::::0;15940:9:::1;::::0;15912:38:::1;15961:9;:21:::0;;-1:-1:-1;;;;;;15961:21:0::1;-1:-1:-1::0;;;;;15961:21:0;;;::::1;::::0;;;::::1;::::0;;15833:157::o;6660:313::-;6799:4;2920:10;6861:38;6877:4;2920:10;6892:6;6861:15;:38::i;:::-;6912:27;6922:4;6928:2;6932:6;6912:9;:27::i;:::-;-1:-1:-1;6959:4:0;;6660:313;-1:-1:-1;;;;6660:313:0:o;6981:246::-;7069:4;2920:10;7129:64;2920:10;7145:7;7182:10;7154:25;2920:10;7145:7;7154:9;:25::i;:::-;:38;;;;:::i;:::-;7129:8;:64::i;14394:240::-;3324:13;:11;:13::i;:::-;14512:15:::1;:31:::0;;;14554:9:::1;:19:::0;;;14599:27:::1;14566:7:::0;14530:13;14599:27:::1;:::i;:::-;14584:12;:42:::0;-1:-1:-1;;14394:240:0:o;3594:103::-;3324:13;:11;:13::i;:::-;3659:30:::1;3686:1;3659:18;:30::i;:::-;3594:103::o:0;13304:121::-;13356:4;3324:13;:11;:13::i;:::-;-1:-1:-1;13373:14:0::1;:22:::0;;-1:-1:-1;;13373:22:0::1;::::0;;;13304:121;:::o;13140:112::-;3324:13;:11;:13::i;:::-;13195::::1;:20:::0;;-1:-1:-1;;13226:18:0;;;;;13140:112::o;19596:123::-;3324:13;:11;:13::i;:::-;-1:-1:-1;;;;;19676:19:0;;;::::1;;::::0;;;:10:::1;:19;::::0;;;;:35;;-1:-1:-1;;19676:35:0::1;::::0;::::1;;::::0;;;::::1;::::0;;19596:123::o;14286:100::-;3324:13;:11;:13::i;:::-;14357:11:::1;:21:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;14357:21:0;;::::1;::::0;;;::::1;::::0;;14286:100::o;5591:108::-;5647:13;5682:7;5675:14;;;;;:::i;15086:304::-;3324:13;:11;:13::i;:::-;15230::::1;-1:-1:-1::0;;;;;15222:21:0::1;:4;-1:-1:-1::0;;;;;15222:21:0::1;::::0;15200:128:::1;;;::::0;-1:-1:-1;;;15200:128:0;;6225:2:1;15200:128:0::1;::::0;::::1;6207:21:1::0;6264:2;6244:18;;;6237:30;6303:34;6283:18;;;6276:62;6374:27;6354:18;;;6347:55;6419:19;;15200:128:0::1;;;;;;;;;15341:41;15370:4;15376:5;15341:28;:41::i;7235:450::-:0;7328:4;2920:10;7328:4;7415:25;2920:10;7432:7;7415:9;:25::i;:::-;7388:52;;7481:15;7461:16;:35;;7453:85;;;;-1:-1:-1;;;7453:85:0;;6651:2:1;7453:85:0;;;6633:21:1;6690:2;6670:18;;;6663:30;6729:34;6709:18;;;6702:62;-1:-1:-1;;;6780:18:1;;;6773:35;6825:19;;7453:85:0;6449:401:1;7453:85:0;7578:60;7587:5;7594:7;7622:15;7603:16;:34;7578:8;:60::i;6071:201::-;6150:4;2920:10;6210:28;2920:10;6227:2;6231:6;6210:9;:28::i;15594:231::-;3324:13;:11;:13::i;:::-;15754:15:::1;::::0;15711:59:::1;::::0;-1:-1:-1;;;;;15754:15:0::1;::::0;;::::1;::::0;::::1;::::0;15711:59;::::1;::::0;::::1;::::0;;;::::1;15781:15;:36:::0;;-1:-1:-1;;;;;15781:36:0;;::::1;;;-1:-1:-1::0;;;;;;15781:36:0;;::::1;::::0;;;::::1;::::0;;15594:231::o;14896:182::-;3324:13;:11;:13::i;:::-;-1:-1:-1;;;;;14981:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;14981:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;15036:34;;1397:41:1;;;15036:34:0::1;::::0;1370:18:1;15036:34:0::1;;;;;;;14896:182:::0;;:::o;13691:497::-;13799:4;3324:13;:11;:13::i;:::-;13878:6:::1;13857:13;5902:12:::0;;;5812:112;13857:13:::1;:17;::::0;13873:1:::1;13857:17;:::i;:::-;13856:28;;;;:::i;:::-;13843:9;:41;;13821:144;;;::::0;-1:-1:-1;;;13821:144:0;;7452:2:1;13821:144:0::1;::::0;::::1;7434:21:1::0;7491:2;7471:18;;;7464:30;7530:34;7510:18;;;7503:62;-1:-1:-1;;;7581:18:1;;;7574:51;7642:19;;13821:144:0::1;7250:417:1::0;13821:144:0::1;14033:4;14012:13;5902:12:::0;;;5812:112;14012:13:::1;:17;::::0;14028:1:::1;14012:17;:::i;:::-;14011:26;;;;:::i;:::-;13998:9;:39;;13976:141;;;::::0;-1:-1:-1;;;13976:141:0;;7874:2:1;13976:141:0::1;::::0;::::1;7856:21:1::0;7913:2;7893:18;;;7886:30;7952:34;7932:18;;;7925:62;-1:-1:-1;;;8003:18:1;;;7996:50;8063:19;;13976:141:0::1;7672:416:1::0;13976:141:0::1;-1:-1:-1::0;14128:18:0::1;:30:::0;;;14176:4:::1;3348:1;13691:497:::0;;;:::o;6280:155::-;-1:-1:-1;;;;;6398:18:0;;;6369:7;6398:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;6280:155::o;13486:135::-;13546:4;3324:13;:11;:13::i;:::-;-1:-1:-1;13563:20:0::1;:28:::0;;-1:-1:-1;;13563:28:0::1;::::0;;;13486:135;:::o;3703:201::-;3324:13;:11;:13::i;:::-;-1:-1:-1;;;;;3792:22:0;::::1;3784:73;;;::::0;-1:-1:-1;;;3784:73:0;;8295:2:1;3784:73:0::1;::::0;::::1;8277:21:1::0;8334:2;8314:18;;;8307:30;8373:34;8353:18;;;8346:62;-1:-1:-1;;;8424:18:1;;;8417:36;8470:19;;3784:73:0::1;8093:402:1::0;3784:73:0::1;3868:28;3887:8;3868:18;:28::i;:::-;3703:201:::0;:::o;3456:132::-;3436:6;;-1:-1:-1;;;;;3436:6:0;2920:10;3520:23;3512:68;;;;-1:-1:-1;;;3512:68:0;;8702:2:1;3512:68:0;;;8684:21:1;;;8721:18;;;8714:30;8780:34;8760:18;;;8753:62;8832:18;;3512:68:0;8500:356:1;8853:396:0;-1:-1:-1;;;;;8999:19:0;;8991:68;;;;-1:-1:-1;;;8991:68:0;;9063:2:1;8991:68:0;;;9045:21:1;9102:2;9082:18;;;9075:30;9141:34;9121:18;;;9114:62;-1:-1:-1;;;9192:18:1;;;9185:34;9236:19;;8991:68:0;8861:400:1;8991:68:0;-1:-1:-1;;;;;9080:21:0;;9072:68;;;;-1:-1:-1;;;9072:68:0;;9468:2:1;9072:68:0;;;9450:21:1;9507:2;9487:18;;;9480:30;9546:34;9526:18;;;9519:62;-1:-1:-1;;;9597:18:1;;;9590:32;9639:19;;9072:68:0;9266:398:1;9072:68:0;-1:-1:-1;;;;;9153:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;9207:32;;3088:25:1;;;9207:32:0;;3061:18:1;9207:32:0;;;;;;;8853:396;;;:::o;9255:477::-;9400:24;9427:25;9437:5;9444:7;9427:9;:25::i;:::-;9400:52;;-1:-1:-1;;9469:16:0;:37;9465:258;;9553:6;9533:16;:26;;9525:68;;;;-1:-1:-1;;;9525:68:0;;9871:2:1;9525:68:0;;;9853:21:1;9910:2;9890:18;;;9883:30;9949:31;9929:18;;;9922:59;9998:18;;9525:68:0;9669:353:1;9525:68:0;9641:51;9650:5;9657:7;9685:6;9666:16;:25;9641:8;:51::i;:::-;9387:345;9255:477;;;:::o;16182:3406::-;-1:-1:-1;;;;;16314:18:0;;16306:68;;;;-1:-1:-1;;;16306:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16393:16:0;;16385:64;;;;-1:-1:-1;;;16385:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16469:16:0;;;;;;:10;:16;;;;;;;;16468:17;:36;;;;-1:-1:-1;;;;;;16490:14:0;;;;;;:10;:14;;;;;;;;16489:15;16468:36;16460:62;;;;-1:-1:-1;;;16460:62:0;;11039:2:1;16460:62:0;;;11021:21:1;11078:2;11058:18;;;11051:30;-1:-1:-1;;;11097:18:1;;;11090:43;11150:18;;16460:62:0;10837:337:1;16460:62:0;16539:6;16549:1;16539:11;16535:93;;16567:28;16583:4;16589:2;16593:1;16567:15;:28::i;:::-;16182:3406;;;:::o;16535:93::-;16644:14;;;;16640:1292;;;3436:6;;-1:-1:-1;;;;;16697:15:0;;;3436:6;;16697:15;;;;:49;;-1:-1:-1;3436:6:0;;-1:-1:-1;;;;;16733:13:0;;;3436:6;;16733:13;;16697:49;:86;;;;-1:-1:-1;;;;;;16767:16:0;;;;16697:86;:128;;;;-1:-1:-1;;;;;;16804:21:0;;16818:6;16804:21;;16697:128;:158;;;;-1:-1:-1;16847:8:0;;;;16846:9;16697:158;16675:1246;;;16895:13;;;;;;;16890:223;;-1:-1:-1;;;;;16967:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;16996:23:0;;;;;;:19;:23;;;;;;;;16967:52;16933:160;;;;-1:-1:-1;;;16933:160:0;;11381:2:1;16933:160:0;;;11363:21:1;11420:2;11400:18;;;11393:30;-1:-1:-1;;;11439:18:1;;;11432:52;11501:18;;16933:160:0;11179:346:1;16933:160:0;17269:20;;;;17265:641;;;3436:6;;-1:-1:-1;;;;;17344:13:0;;;3436:6;;17344:13;;;;:72;;;17400:15;-1:-1:-1;;;;;17386:30:0;:2;-1:-1:-1;;;;;17386:30:0;;;17344:72;:129;;;;;17459:13;-1:-1:-1;;;;;17445:28:0;:2;-1:-1:-1;;;;;17445:28:0;;;17344:129;17314:573;;;17591:9;17562:39;;;;:28;:39;;;;;;17637:12;-1:-1:-1;17524:258:0;;;;-1:-1:-1;;;17524:258:0;;11732:2:1;17524:258:0;;;11714:21:1;11771:2;11751:18;;;11744:30;11810:34;11790:18;;;11783:62;11881:34;11861:18;;;11854:62;-1:-1:-1;;;11932:19:1;;;11925:40;11982:19;;17524:258:0;11530:477:1;17524:258:0;17838:9;17809:39;;;;:28;:39;;;;;17851:12;17809:54;;17314:573;17993:4;17944:28;6035:18;;;;;;;;;;;18051;;18027:42;;;;;;;18100:35;;-1:-1:-1;18124:11:0;;;;;;;18100:35;:61;;;;-1:-1:-1;18153:8:0;;;;18152:9;18100:61;:110;;;;-1:-1:-1;;;;;;18179:31:0;;;;;;:25;:31;;;;;;;;18178:32;18100:110;:153;;;;-1:-1:-1;;;;;;18228:25:0;;;;;;:19;:25;;;;;;;;18227:26;18100:153;:194;;;;-1:-1:-1;;;;;;18271:23:0;;;;;;:19;:23;;;;;;;;18270:24;18100:194;18082:299;;;18321:8;:15;;-1:-1:-1;;18321:15:0;18353:16;;18082:299;18409:8;;-1:-1:-1;;;;;18519:25:0;;18393:12;18519:25;;;:19;:25;;;;;;18409:8;;;;18408:9;;18519:25;;:52;;-1:-1:-1;;;;;;18548:23:0;;;;;;:19;:23;;;;;;;;18519:52;18515:100;;;-1:-1:-1;18598:5:0;18515:100;18627:12;18732:7;18728:807;;;-1:-1:-1;;;;;18784:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;18833:1;18817:13;;:17;18784:50;18780:606;;;18862:34;18892:3;18862:25;18873:13;;18862:6;:10;;:25;;;;:::i;:::-;:29;;:34::i;:::-;18855:41;;18953:13;;18939:10;;18932:4;:17;;;;:::i;:::-;18931:35;;;;:::i;:::-;18915:12;;:51;;;;;;;:::i;:::-;;;;-1:-1:-1;;19035:13:0;;19015:16;;19008:23;;:4;:23;:::i;:::-;19007:41;;;;:::i;:::-;18985:18;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;18780:606:0;;-1:-1:-1;18780:606:0;;-1:-1:-1;;;;;19110:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;19160:1;19145:12;;:16;19110:51;19106:280;;;19189:33;19218:3;19189:24;19200:12;;19189:6;:10;;:24;;;;:::i;:33::-;19182:40;;19278:12;;19265:9;;19258:4;:16;;;;:::i;:::-;19257:33;;;;:::i;:::-;19241:12;;:49;;;;;;;:::i;:::-;;;;-1:-1:-1;;19358:12:0;;19339:15;;19332:22;;:4;:22;:::i;:::-;19331:39;;;;:::i;:::-;19309:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;19106:280:0;19406:8;;19402:91;;19435:42;19451:4;19465;19472;19435:15;:42::i;:::-;19509:14;19519:4;19509:14;;:::i;:::-;;;18728:807;19547:33;19563:4;19569:2;19573:6;19547:15;:33::i;:::-;16295:3293;;;;16182:3406;;;:::o;3910:191::-;4003:6;;;-1:-1:-1;;;;;4020:17:0;;;-1:-1:-1;;;;;;4020:17:0;;;;;;;4053:40;;4003:6;;;4020:17;4003:6;;4053:40;;3984:16;;4053:40;3973:128;3910:191;:::o;15398:188::-;-1:-1:-1;;;;;15481:31:0;;;;;;:25;:31;;;;;;:39;;-1:-1:-1;;15481:39:0;;;;;;;;;;15538:40;;15481:39;;:31;15538:40;;;15398:188;;:::o;7693:699::-;-1:-1:-1;;;;;7834:18:0;;7826:68;;;;-1:-1:-1;;;7826:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7915:16:0;;7907:64;;;;-1:-1:-1;;;7907:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;8057:15:0;;8035:19;8057:15;;;;;;;;;;;8093:21;;;;8085:72;;;;-1:-1:-1;;;8085:72:0;;12347:2:1;8085:72:0;;;12329:21:1;12386:2;12366:18;;;12359:30;12425:34;12405:18;;;12398:62;-1:-1:-1;;;12476:18:1;;;12469:36;12522:19;;8085:72:0;12145:402:1;8085:72:0;-1:-1:-1;;;;;8197:15:0;;;:9;:15;;;;;;;;;;;8215:20;;;8197:38;;8252:13;;;;;;;;;;:23;;;;;;8306:26;;3088:25:1;;;8252:13:0;;8306:26;;3061:18:1;8306:26:0;;;;;;;8345:37;16182:3406;1862:98;1920:7;1947:5;1951:1;1947;:5;:::i;:::-;1940:12;1862:98;-1:-1:-1;;;1862:98:0:o;1966:::-;2024:7;2051:5;2055:1;2051;:5;:::i;14:248:1:-;82:6;90;143:2;131:9;122:7;118:23;114:32;111:52;;;159:1;156;149:12;111:52;-1:-1:-1;;182:23:1;;;252:2;237:18;;;224:32;;-1:-1:-1;14:248:1:o;267:548::-;379:4;408:2;437;426:9;419:21;469:6;463:13;512:6;507:2;496:9;492:18;485:34;537:1;547:140;561:6;558:1;555:13;547:140;;;656:14;;;652:23;;646:30;622:17;;;641:2;618:26;611:66;576:10;;547:140;;;551:3;736:1;731:2;722:6;711:9;707:22;703:31;696:42;806:2;799;795:7;790:2;782:6;778:15;774:29;763:9;759:45;755:54;747:62;;;;267:548;;;;:::o;820:173::-;888:20;;-1:-1:-1;;;;;937:31:1;;927:42;;917:70;;983:1;980;973:12;998:254;1066:6;1074;1127:2;1115:9;1106:7;1102:23;1098:32;1095:52;;;1143:1;1140;1133:12;1095:52;1166:29;1185:9;1166:29;:::i;:::-;1156:39;1242:2;1227:18;;;;1214:32;;-1:-1:-1;;;998:254:1:o;1449:127::-;1510:10;1505:3;1501:20;1498:1;1491:31;1541:4;1538:1;1531:15;1565:4;1562:1;1555:15;1581:1121;1665:6;1696:2;1739;1727:9;1718:7;1714:23;1710:32;1707:52;;;1755:1;1752;1745:12;1707:52;1795:9;1782:23;1824:18;1865:2;1857:6;1854:14;1851:34;;;1881:1;1878;1871:12;1851:34;1919:6;1908:9;1904:22;1894:32;;1964:7;1957:4;1953:2;1949:13;1945:27;1935:55;;1986:1;1983;1976:12;1935:55;2022:2;2009:16;2044:2;2040;2037:10;2034:36;;;2050:18;;:::i;:::-;2096:2;2093:1;2089:10;2128:2;2122:9;2191:2;2187:7;2182:2;2178;2174:11;2170:25;2162:6;2158:38;2246:6;2234:10;2231:22;2226:2;2214:10;2211:18;2208:46;2205:72;;;2257:18;;:::i;:::-;2293:2;2286:22;2343:18;;;2377:15;;;;-1:-1:-1;2419:11:1;;;2415:20;;;2447:19;;;2444:39;;;2479:1;2476;2469:12;2444:39;2503:11;;;;2523:148;2539:6;2534:3;2531:15;2523:148;;;2605:23;2624:3;2605:23;:::i;:::-;2593:36;;2556:12;;;;2649;;;;2523:148;;;2690:6;1581:1121;-1:-1:-1;;;;;;;;1581:1121:1:o;3124:186::-;3183:6;3236:2;3224:9;3215:7;3211:23;3207:32;3204:52;;;3252:1;3249;3242:12;3204:52;3275:29;3294:9;3275:29;:::i;3315:328::-;3392:6;3400;3408;3461:2;3449:9;3440:7;3436:23;3432:32;3429:52;;;3477:1;3474;3467:12;3429:52;3500:29;3519:9;3500:29;:::i;:::-;3490:39;;3548:38;3582:2;3571:9;3567:18;3548:38;:::i;:::-;3538:48;;3633:2;3622:9;3618:18;3605:32;3595:42;;3315:328;;;;;:::o;4045:160::-;4110:20;;4166:13;;4159:21;4149:32;;4139:60;;4195:1;4192;4185:12;4210:254;4275:6;4283;4336:2;4324:9;4315:7;4311:23;4307:32;4304:52;;;4352:1;4349;4342:12;4304:52;4375:29;4394:9;4375:29;:::i;:::-;4365:39;;4423:35;4454:2;4443:9;4439:18;4423:35;:::i;:::-;4413:45;;4210:254;;;;;:::o;4469:180::-;4525:6;4578:2;4566:9;4557:7;4553:23;4549:32;4546:52;;;4594:1;4591;4584:12;4546:52;4617:26;4633:9;4617:26;:::i;4654:180::-;4713:6;4766:2;4754:9;4745:7;4741:23;4737:32;4734:52;;;4782:1;4779;4772:12;4734:52;-1:-1:-1;4805:23:1;;4654:180;-1:-1:-1;4654:180:1:o;4839:260::-;4907:6;4915;4968:2;4956:9;4947:7;4943:23;4939:32;4936:52;;;4984:1;4981;4974:12;4936:52;5007:29;5026:9;5007:29;:::i;:::-;4997:39;;5055:38;5089:2;5078:9;5074:18;5055:38;:::i;5104:127::-;5165:10;5160:3;5156:20;5153:1;5146:31;5196:4;5193:1;5186:15;5220:4;5217:1;5210:15;5236:125;5301:9;;;5322:10;;;5319:36;;;5335:18;;:::i;5366:380::-;5445:1;5441:12;;;;5488;;;5509:61;;5563:4;5555:6;5551:17;5541:27;;5509:61;5616:2;5608:6;5605:14;5585:18;5582:38;5579:161;;5662:10;5657:3;5653:20;5650:1;5643:31;5697:4;5694:1;5687:15;5725:4;5722:1;5715:15;5579:161;;5366:380;;;:::o;5751:127::-;5812:10;5807:3;5803:20;5800:1;5793:31;5843:4;5840:1;5833:15;5867:4;5864:1;5857:15;5883:135;5922:3;5943:17;;;5940:43;;5963:18;;:::i;:::-;-1:-1:-1;6010:1:1;5999:13;;5883:135::o;6855:168::-;6928:9;;;6959;;6976:15;;;6970:22;;6956:37;6946:71;;6997:18;;:::i;7028:217::-;7068:1;7094;7084:132;;7138:10;7133:3;7129:20;7126:1;7119:31;7173:4;7170:1;7163:15;7201:4;7198:1;7191:15;7084:132;-1:-1:-1;7230:9:1;;7028:217::o;10027:401::-;10229:2;10211:21;;;10268:2;10248:18;;;10241:30;10307:34;10302:2;10287:18;;10280:62;-1:-1:-1;;;10373:2:1;10358:18;;10351:35;10418:3;10403:19;;10027:401::o;10433:399::-;10635:2;10617:21;;;10674:2;10654:18;;;10647:30;10713:34;10708:2;10693:18;;10686:62;-1:-1:-1;;;10779:2:1;10764:18;;10757:33;10822:3;10807:19;;10433:399::o;12012:128::-;12079:9;;;12100:11;;;12097:37;;;12114:18;;:::i

Swarm Source

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