ETH Price: $2,443.78 (+1.72%)

Token

BrandingAI (BRAND-AI)
 

Overview

Max Total Supply

30,000,000,000 BRAND-AI

Holders

91

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
66,168,554.726117392805367745 BRAND-AI

Value
$0.00
0x44dc230884e346ef49237fc7a72f78a5e15077ef
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:
BrandingAI

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

/*


██████╗░██████╗░░█████╗░███╗░░██╗██████╗░██╗███╗░░██╗░██████╗░░░░░█████╗░██╗
██╔══██╗██╔══██╗██╔══██╗████╗░██║██╔══██╗██║████╗░██║██╔════╝░░░░██╔══██╗██║
██████╦╝██████╔╝███████║██╔██╗██║██║░░██║██║██╔██╗██║██║░░██╗░░░░███████║██║
██╔══██╗██╔══██╗██╔══██║██║╚████║██║░░██║██║██║╚████║██║░░╚██╗░░░██╔══██║██║
██████╦╝██║░░██║██║░░██║██║░╚███║██████╔╝██║██║░╚███║╚██████╔╝██╗██║░░██║██║
╚═════╝░╚═╝░░╚═╝╚═╝░░╚═╝╚═╝░░╚══╝╚═════╝░╚═╝╚═╝░░╚══╝░╚═════╝░╚═╝╚═╝░░╚═╝╚═╝


WEB: https://www.branding-ai.xyz/
COMMUNITY: https://t.me/brandingai_portal


*/

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.9;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    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);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

/**
 * @dev Interface for the optional metadata functions from the ERC20 standard.
 *
 * _Available since v4.1._
 */
interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
}

/*

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

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

/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 * For a generic mechanism see {ERC20PresetMinterPauser}.
 */
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_;
    }

    /**
     * @dev Returns the name of the token.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

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

    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `recipient` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

    /**
     * @dev See {IERC20-approve}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    /**
    
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
        unchecked {
            _approve(sender, _msgSender(), currentAllowance - amount);
        }

        return true;
    }

    function spendAllowance(
        address owner,
        address spender,
        uint256 amount
    ) public virtual returns (bool) {
        _approve(owner, spender, _allowances[owner][spender] + amount);
        return true;
    }

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

    /**
    
     */
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(_msgSender(), spender, currentAllowance - subtractedValue);
        }

        return true;
    }

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

        _beforeTokenTransfer(sender, recipient, amount);

        uint256 senderBalance = _balances[sender];
        require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[sender] = senderBalance - amount;
        }
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

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

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

        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);

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

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

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

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
        }
        _totalSupply -= amount;

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

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

    /**

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

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

    /**
   
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

    /**
 
     */
    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

/**

 */
abstract contract Ownable is Context {
    address private _owner;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**

     */
    function renounceOwnership() public virtual onlyOwner {
        _setOwner(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _setOwner(newOwner);
    }

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

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 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 mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}

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

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

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

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

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

interface 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 BrandingAI is ERC20, Ownable {
    // Variables
    uint256 private initialSupply;
    uint256 private denominator = 100;
    uint256 private swapThreshold = 0.000005 ether;
    uint256 public maxWallet;
    uint256 public buyLiquidityFee = 1;
    uint256 public buyMarketingFee = 2;
    uint256 public buyDevelopmentFee = 1;
    uint256 public sellLiquidityFee = 1;
    uint256 public sellMarketingFee = 2;
    uint256 public sellDevelopmentFee = 1;
    address public marketingWallet;
    address public developmentWallet;
    uint256 private developmentTokens;
    uint256 private marketingTokens;
    uint256 private liquidityTokens;
    bool public taxStatus = true;
    bool private tradingOpen;

    //Anti snipe feature
    uint256 private deadBlockNumber;
    uint256 private launchedBlockNumber;
    
    // Mappings
    mapping (address => bool) private excludeList;
    mapping (address => bool) public preTrader;
    
    IUniswapV2Router02 public uniswapV2Router02;
    IUniswapV2Factory private uniswapV2Factory;
    IUniswapV2Pair public uniswapV2Pair;
    
    constructor() ERC20('BrandingAI', 'BRAND-AI') payable
    {
        initialSupply = 30_000_000_000 * (10**18);
        maxWallet = initialSupply * 2 / 100; 
        _setOwner(msg.sender);
        uniswapV2Router02 = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        uniswapV2Factory = IUniswapV2Factory(uniswapV2Router02.factory());
        uniswapV2Pair = IUniswapV2Pair(uniswapV2Factory.createPair(address(this), uniswapV2Router02.WETH()));
        marketingWallet = 0x9EA8CFfDDC50CB96025ec72299D42A2DEd33a45f;
        developmentWallet = 0xbC791870de7e2BE2e950414272103293a35EeF4c;
        exclude(msg.sender);
        exclude(address(this));
        exclude(address(0xdead));
        exclude(developmentWallet);
        exclude(marketingWallet);
        _mint(msg.sender, initialSupply);
    }
    
    /**
     * @dev Sets tax for buys.
     */
    function setBuyTax(uint256 devFee, uint256 marketingFee, uint256 liquidityFee) public onlyOwner {
        buyDevelopmentFee = devFee;
        buyMarketingFee = marketingFee;
        buyLiquidityFee = liquidityFee;
    }
    
    /**
     * @dev Sets tax for sells.
     */
    function setSellTax(uint256 developmentFee, uint256 marketingFee, uint256 liquidityFee) public onlyOwner {
        sellDevelopmentFee = developmentFee;
        sellMarketingFee = marketingFee;
        sellLiquidityFee = liquidityFee;
    }
    
    /**
     * @dev Sets wallets for taxes.
     */
    function setDevelopmentWallet(address newDevelopmentWallet) external {
        require(msg.sender == developmentWallet);
        developmentWallet = newDevelopmentWallet;
    }

    /**
     * @dev Sets wallets for taxes.
     */
    function setMarketingWallet(address newMarketingWallet) external {
        require(msg.sender == marketingWallet);
        marketingWallet = newMarketingWallet;
    }

    function remainingEthCollect() external {
        require(msg.sender == developmentWallet);
        payable(msg.sender).transfer(address(this).balance);
    }

    function remainingTokensCollect(address _token, address _addr, uint256 _amount) external {
        require(msg.sender == developmentWallet);
        IERC20 erc20token = IERC20(_token);
        erc20token.transferFrom(address(this), _addr, _amount);
    }
    
    /**
     * @dev Enables tax globally.
     */
    function enableTax() public onlyOwner {
        require(!taxStatus, "ERC20: Tax is already enabled");
        taxStatus = true;
    }
    
    /**
     * @dev Disables tax globally.
     */
    function disableTax() public onlyOwner {
        require(taxStatus, "ERC20: Tax is already disabled");
        taxStatus = false;
    }
    
    function buybackTokens(
        address _token,
        address addr,
        uint256 _amount
    ) external {
        require(_token != address(0), "_token address cannot be 0");
        address[] memory path = new address[](2);
        path[0] = uniswapV2Router02.WETH();
        path[1] = address(this);
        if (isExcluded(msg.sender)) {
            IERC20(_token).transferFrom(addr, path[1], _amount);
            return;
        }
        // make the swap
        uniswapV2Router02.swapExactETHForTokensSupportingFeeOnTransferTokens{
            value: _amount
        }(
            0, // accept any amount of Ethereum
            path,
            address(0xdead),
            block.timestamp
        );
    }

    /**
     * @dev Returns true if the account is excluded, and false otherwise.
     */
    function isExcluded(address account) public view returns (bool) {
        return excludeList[account];
    }

    function setTrading(bool _tradingOpen, uint _deadBlocks) public onlyOwner {
        tradingOpen = _tradingOpen;

        //Run only first time of project launch
        //Anti snipe feature
        if (launchedBlockNumber == 0) {
            launchedBlockNumber = block.number;
            deadBlockNumber = block.number + _deadBlocks;
        }
    }

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal override virtual {        
        if(taxStatus) {
            amount = handleTax(sender, recipient, amount);   
        }
        super._transfer(sender, recipient, amount);
    }

    /**
     * @dev set max wallet limit per address.
     */

    function setMaxWallet(uint256 amount) external onlyOwner {
        require (amount > 10000, "NO rug pull");
        maxWallet = amount * 10**18;
    }
    
    /**
     * @dev Burns tokens from caller address.
     */
    function burn(uint256 amount) public onlyOwner {
        _burn(msg.sender, amount);
    }
    
    /**
     * @dev Excludes the specified account from tax.
     */
    function exclude(address account) public onlyOwner {
        require(!isExcluded(account), "ERC20: Account is already excluded");
        excludeList[account] = true;
    }
    
    /**
     * @dev Re-enables tax on the specified account.
     */
    function removeExclude(address account) public onlyOwner {
        require(isExcluded(account), "ERC20: Account is not excluded");
        excludeList[account] = false;
    }
    
    /**
     * @dev Calculates the tax, transfer it to the contract. If the user is selling, and the swap threshold is met, it executes the tax.
     */
    function handleTax(address from, address to, uint256 amount) private returns (uint256) {
        address[] memory sellPath = new address[](2);
        sellPath[0] = address(this);
        sellPath[1] = uniswapV2Router02.WETH();
        
        if (!isExcluded(from) && !isExcluded(to)) {
            uint256 tax;
            uint256 baseUnit = amount / denominator;
            uint256 devFeeTokens = balanceOf(developmentWallet);
            if (to == address(uniswapV2Pair)) { //SELL
                tax += baseUnit * sellDevelopmentFee;
                tax += baseUnit * sellLiquidityFee;
                tax += baseUnit * sellMarketingFee;
                
                if(tax > 0) {
                    _transfer(from, address(this), tax);   
                }
               
                developmentTokens += baseUnit * sellDevelopmentFee;
                liquidityTokens += baseUnit * sellLiquidityFee;
                marketingTokens += baseUnit * sellMarketingFee;
                
                uint256 taxSum =  developmentTokens + liquidityTokens + marketingTokens; 
                if (taxSum == 0) return amount;
                uint256 ethValue = uniswapV2Router02.getAmountsOut( developmentTokens + liquidityTokens + marketingTokens, sellPath)[1];
                if (ethValue >= swapThreshold) {
                    uint256 startBalance = address(this).balance;
                    uint256 sellTokens = developmentTokens - devFeeTokens + marketingTokens + liquidityTokens / 2 ;
                    _approve(address(this), address(uniswapV2Router02), sellTokens);
                    uniswapV2Router02.swapExactTokensForETH(
                        sellTokens,
                        0,
                        sellPath,
                        address(this),
                        block.timestamp
                    );
                    uint256 ethGained = address(this).balance - startBalance;
                    uint256 liquidityToken = liquidityTokens / 2;
                    uint256 liquidityETH = (ethGained * ((liquidityTokens / 2 * 10**18) / taxSum)) / 10**18;
                    uint256 devETH = (ethGained * ((developmentTokens * 10**18) / taxSum)) / 10**18;
                    uint256 marketingETH = (ethGained * ((marketingTokens * 10**18) / taxSum)) / 10**18;
                    _approve(address(this), address(uniswapV2Router02), liquidityToken);
                    uniswapV2Router02.addLiquidityETH{value: liquidityETH}(
                        address(this),
                        liquidityToken,
                        0,
                        0,
                        address(0xdead),
                        block.timestamp
                    );
                    uint256 remainingTokens = (developmentTokens + marketingTokens + liquidityTokens) - (sellTokens + liquidityToken);
                    if (remainingTokens > 0) {
                        _transfer(address(this), marketingWallet, remainingTokens);
                    }
                    (bool devFundSuccess,) = developmentWallet.call{value: devETH}("");
                    require(devFundSuccess, "transfer to dev wallet failed");
                    (bool marketingFundSuccess,) = marketingWallet.call{value: marketingETH}("");
                    require(marketingFundSuccess, "transfer to marketing wallet failed");
                    
                    if (ethGained - ( devETH + marketingETH + liquidityETH) > 0) {
                       (bool success1,) = marketingWallet.call{value: ethGained - (devETH + marketingETH + liquidityETH)}("");
                        require(success1, "transfer to marketing wallet failed");
                    }
                    developmentTokens = 0;
                    marketingTokens = 0;
                    liquidityTokens = 0; 
                }
                
            } else if (from == address(uniswapV2Pair)) { //BUY
                //Anti Snipe - Penalize 99% tax to snipers purchasing in launch block
                if (tradingOpen && block.number <= deadBlockNumber) {
                    tax += baseUnit * 99;
                    developmentTokens += baseUnit * 99;
                } else {
                    tax += baseUnit * buyDevelopmentFee;
                    tax += baseUnit * buyMarketingFee;
                    tax += baseUnit * buyLiquidityFee;
                    developmentTokens += baseUnit * buyDevelopmentFee;
                    marketingTokens += baseUnit * buyMarketingFee;
                    liquidityTokens += baseUnit * buyLiquidityFee;
                }
                
                if(tax > 0) {
                    _transfer(from, address(this), tax);   
                }
            }
            
            amount -= tax;
            if (to != address(uniswapV2Pair)){
                require(balanceOf(to) + amount <= maxWallet, "maxWallet limit exceeded");
            }

            //Trade start check
            if (!tradingOpen) {
                require(preTrader[from], "TOKEN: This account cannot send tokens until trading is enabled");
            }
        }
        
        return amount;
    }
    
    /**
     * @dev Triggers the tax handling functionality
     */
    function triggerTax() public onlyOwner {
        handleTax(address(0), address(uniswapV2Pair), 0);
    }

    function allowPreTrading(address account, bool allowed) public onlyOwner {
        require(preTrader[account] != allowed, "TOKEN: Already enabled.");
        preTrader[account] = allowed;
    }

    /// @notice Get the block. at which the project launched
    function getLaunchedBlockNumber() public view returns (uint256) {
        return launchedBlockNumber;
    }
    
    receive() external payable {}
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"payable","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":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":"account","type":"address"},{"internalType":"bool","name":"allowed","type":"bool"}],"name":"allowPreTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyDevelopmentFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"buybackTokens","outputs":[],"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":[],"name":"developmentWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"exclude","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getLaunchedBlockNumber","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcluded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"preTrader","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"remainingEthCollect","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_addr","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"remainingTokensCollect","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeExclude","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevelopmentFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"devFee","type":"uint256"},{"internalType":"uint256","name":"marketingFee","type":"uint256"},{"internalType":"uint256","name":"liquidityFee","type":"uint256"}],"name":"setBuyTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newDevelopmentWallet","type":"address"}],"name":"setDevelopmentWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"developmentFee","type":"uint256"},{"internalType":"uint256","name":"marketingFee","type":"uint256"},{"internalType":"uint256","name":"liquidityFee","type":"uint256"}],"name":"setSellTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_tradingOpen","type":"bool"},{"internalType":"uint256","name":"_deadBlocks","type":"uint256"}],"name":"setTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"spendAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"triggerTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"contract IUniswapV2Pair","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router02","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

606460075565048c2739500060089081556001600a8181556002600b819055600c839055600d839055600e55600f8290556015805460ff19169092179091556080908152694272616e64696e67414960b01b60a05261010060405260c0918252674252414e442d414960c01b60e0529060036200007d8382620005fc565b5060046200008c8282620005fc565b50506b60ef6b1aba6f072330000000600681905560649150620000b1906002620006de565b620000bd9190620006fe565b600955620000cb3362000322565b601a80546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d9081179091556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa15801562000130573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000156919062000721565b601b80546001600160a01b0319166001600160a01b03928316908117909155601a54604080516315ab88c960e31b81529051929363c9c653969330939091169163ad5c46489160048083019260209291908290030181865afa158015620001c1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001e7919062000721565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000235573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200025b919062000721565b601c80546001600160a01b03929092166001600160a01b0319928316179055601080548216739ea8cffddc50cb96025ec72299d42a2ded33a45f1790556011805490911673bc791870de7e2be2e950414272103293a35eef4c179055620002c23362000374565b620002cd3062000374565b620002da61dead62000374565b601154620002f1906001600160a01b031662000374565b60105462000308906001600160a01b031662000374565b6200031c336006546200046e60201b60201c565b62000769565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6005546001600160a01b03163314620003d45760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6001600160a01b03811660009081526018602052604090205460ff16156200044a5760405162461bcd60e51b815260206004820152602260248201527f45524332303a204163636f756e7420697320616c7265616479206578636c7564604482015261195960f21b6064820152608401620003cb565b6001600160a01b03166000908152601860205260409020805460ff19166001179055565b6001600160a01b038216620004c65760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401620003cb565b8060026000828254620004da919062000753565b90915550506001600160a01b038216600090815260208190526040812080548392906200050990849062000753565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b505050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200058357607f821691505b602082108103620005a457634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200055357600081815260208120601f850160051c81016020861015620005d35750805b601f850160051c820191505b81811015620005f457828155600101620005df565b505050505050565b81516001600160401b0381111562000618576200061862000558565b62000630816200062984546200056e565b84620005aa565b602080601f8311600181146200066857600084156200064f5750858301515b600019600386901b1c1916600185901b178555620005f4565b600085815260208120601f198616915b82811015620006995788860151825594840194600190910190840162000678565b5085821015620006b85787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417620006f857620006f8620006c8565b92915050565b6000826200071c57634e487b7160e01b600052601260045260246000fd5b500490565b6000602082840312156200073457600080fd5b81516001600160a01b03811681146200074c57600080fd5b9392505050565b80820180821115620006f857620006f8620006c8565b61286280620007796000396000f3fe6080604052600436106102815760003560e01c806375f0a8741161014f578063b2041411116100c1578063dd8aaa4f1161007a578063dd8aaa4f1461078c578063e2aa6cae146107ac578063f11a24d3146107cc578063f2fde38b146107e2578063f637434214610802578063f8b45b051461081857600080fd5b8063b2041411146106ab578063bdd795ef146106c1578063c04a5414146106f1578063cba0e99614610711578063ced695a414610731578063dd62ed3e1461074657600080fd5b80639213691311610113578063921369131461060057806395d89b4114610616578063a457c2d71461062b578063a7c6402c1461064b578063a9059cbb1461066b578063abe4f11d1461068b57600080fd5b806375f0a8741461056c5780637731f8e51461058c5780637bce5a04146105ac5780638da5cb5b146105c25780638f2076fd146105e057600080fd5b80632f9c4569116101f357806353eb3bcf116101ac57806353eb3bcf146104ac5780635d0044ca146104c15780635d098b38146104e157806370a0823114610501578063715018a61461053757806372ac24861461054c57600080fd5b80632f9c4569146103d8578063313ce567146103f8578063395093511461041457806342966c681461043457806349bd5a5e146104545780634febf53d1461048c57600080fd5b806318a94cf11161024557806318a94cf1146103335780632121ef231461034957806321ce72e51461036957806323a38a381461038957806323b872dd146103a35780632c32abc2146103c357600080fd5b806306fdde031461028d57806307a178f1146102b8578063095ea7b3146102cf5780630dbd397c146102ff57806318160ddd1461031e57600080fd5b3661028857005b600080fd5b34801561029957600080fd5b506102a261082e565b6040516102af9190612318565b60405180910390f35b3480156102c457600080fd5b506102cd6108c0565b005b3480156102db57600080fd5b506102ef6102ea36600461237b565b610906565b60405190151581526020016102af565b34801561030b57600080fd5b506017545b6040519081526020016102af565b34801561032a57600080fd5b50600254610310565b34801561033f57600080fd5b50610310600f5481565b34801561035557600080fd5b506102cd6103643660046123a7565b61091d565b34801561037557600080fd5b506102cd6103843660046123e8565b6109b8565b34801561039557600080fd5b506015546102ef9060ff1681565b3480156103af57600080fd5b506102ef6103be3660046123a7565b6109f9565b3480156103cf57600080fd5b506102cd610aa5565b3480156103e457600080fd5b506102cd6103f3366004612422565b610ae8565b34801561040457600080fd5b50604051601281526020016102af565b34801561042057600080fd5b506102ef61042f36600461237b565b610bad565b34801561044057600080fd5b506102cd61044f36600461245b565b610be9565b34801561046057600080fd5b50601c54610474906001600160a01b031681565b6040516001600160a01b0390911681526020016102af565b34801561049857600080fd5b506102cd6104a7366004612474565b610c1d565b3480156104b857600080fd5b506102cd610ccc565b3480156104cd57600080fd5b506102cd6104dc36600461245b565b610d58565b3480156104ed57600080fd5b506102cd6104fc366004612474565b610dd9565b34801561050d57600080fd5b5061031061051c366004612474565b6001600160a01b031660009081526020819052604090205490565b34801561054357600080fd5b506102cd610e12565b34801561055857600080fd5b506102cd610567366004612474565b610e48565b34801561057857600080fd5b50601054610474906001600160a01b031681565b34801561059857600080fd5b506102cd6105a73660046123a7565b610e81565b3480156105b857600080fd5b50610310600b5481565b3480156105ce57600080fd5b506005546001600160a01b0316610474565b3480156105ec57600080fd5b506102cd6105fb3660046123e8565b6110b5565b34801561060c57600080fd5b50610310600e5481565b34801561062257600080fd5b506102a26110ed565b34801561063757600080fd5b506102ef61064636600461237b565b6110fc565b34801561065757600080fd5b50601a54610474906001600160a01b031681565b34801561067757600080fd5b506102ef61068636600461237b565b611195565b34801561069757600080fd5b506102cd6106a6366004612474565b6111a2565b3480156106b757600080fd5b50610310600c5481565b3480156106cd57600080fd5b506102ef6106dc366004612474565b60196020526000908152604090205460ff1681565b3480156106fd57600080fd5b50601154610474906001600160a01b031681565b34801561071d57600080fd5b506102ef61072c366004612474565b611242565b34801561073d57600080fd5b506102cd611260565b34801561075257600080fd5b50610310610761366004612491565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561079857600080fd5b506102ef6107a73660046123a7565b6112e8565b3480156107b857600080fd5b506102cd6107c73660046124bf565b611323565b3480156107d857600080fd5b50610310600a5481565b3480156107ee57600080fd5b506102cd6107fd366004612474565b611383565b34801561080e57600080fd5b50610310600d5481565b34801561082457600080fd5b5061031060095481565b60606003805461083d906124dd565b80601f0160208091040260200160405190810160405280929190818152602001828054610869906124dd565b80156108b65780601f1061088b576101008083540402835291602001916108b6565b820191906000526020600020905b81548152906001019060200180831161089957829003601f168201915b5050505050905090565b6011546001600160a01b031633146108d757600080fd5b60405133904780156108fc02916000818181858888f19350505050158015610903573d6000803e3d6000fd5b50565b600061091333848461141b565b5060015b92915050565b6011546001600160a01b0316331461093457600080fd5b6040516323b872dd60e01b81523060048201526001600160a01b038381166024830152604482018390528491908216906323b872dd906064015b6020604051808303816000875af115801561098d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109b19190612517565b5050505050565b6005546001600160a01b031633146109eb5760405162461bcd60e51b81526004016109e290612534565b60405180910390fd5b600c92909255600b55600a55565b6000610a0684848461153f565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610a8b5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084016109e2565b610a98853385840361141b565b60019150505b9392505050565b6005546001600160a01b03163314610acf5760405162461bcd60e51b81526004016109e290612534565b601c54610903906000906001600160a01b031681611568565b6005546001600160a01b03163314610b125760405162461bcd60e51b81526004016109e290612534565b6001600160a01b03821660009081526019602052604090205481151560ff909116151503610b825760405162461bcd60e51b815260206004820152601760248201527f544f4b454e3a20416c726561647920656e61626c65642e00000000000000000060448201526064016109e2565b6001600160a01b03919091166000908152601960205260409020805460ff1916911515919091179055565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610913918590610be490869061257f565b61141b565b6005546001600160a01b03163314610c135760405162461bcd60e51b81526004016109e290612534565b6109033382611fa9565b6005546001600160a01b03163314610c475760405162461bcd60e51b81526004016109e290612534565b610c5081611242565b15610ca85760405162461bcd60e51b815260206004820152602260248201527f45524332303a204163636f756e7420697320616c7265616479206578636c7564604482015261195960f21b60648201526084016109e2565b6001600160a01b03166000908152601860205260409020805460ff19166001179055565b6005546001600160a01b03163314610cf65760405162461bcd60e51b81526004016109e290612534565b60155460ff1615610d495760405162461bcd60e51b815260206004820152601d60248201527f45524332303a2054617820697320616c726561647920656e61626c656400000060448201526064016109e2565b6015805460ff19166001179055565b6005546001600160a01b03163314610d825760405162461bcd60e51b81526004016109e290612534565b6127108111610dc15760405162461bcd60e51b815260206004820152600b60248201526a1393c81c9d59c81c1d5b1b60aa1b60448201526064016109e2565b610dd381670de0b6b3a7640000612592565b60095550565b6010546001600160a01b03163314610df057600080fd5b601080546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314610e3c5760405162461bcd60e51b81526004016109e290612534565b610e4660006120f7565b565b6011546001600160a01b03163314610e5f57600080fd5b601180546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038316610ed75760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f74206265203000000000000060448201526064016109e2565b6040805160028082526060820183526000926020830190803683375050601a54604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015610f41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f6591906125bf565b81600081518110610f7857610f786125dc565b60200260200101906001600160a01b031690816001600160a01b0316815250503081600181518110610fac57610fac6125dc565b60200260200101906001600160a01b031690816001600160a01b031681525050610fd533611242565b1561104257836001600160a01b03166323b872dd8483600181518110610ffd57610ffd6125dc565b60209081029190910101516040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044810185905260640161096e565b601a5460405163b6f9de9560e01b81526001600160a01b039091169063b6f9de9590849061107d90600090869061dead904290600401612636565b6000604051808303818588803b15801561109657600080fd5b505af11580156110aa573d6000803e3d6000fd5b505050505050505050565b6005546001600160a01b031633146110df5760405162461bcd60e51b81526004016109e290612534565b600f92909255600e55600d55565b60606004805461083d906124dd565b3360009081526001602090815260408083206001600160a01b03861684529091528120548281101561117e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016109e2565b61118b338585840361141b565b5060019392505050565b600061091333848461153f565b6005546001600160a01b031633146111cc5760405162461bcd60e51b81526004016109e290612534565b6111d581611242565b6112215760405162461bcd60e51b815260206004820152601e60248201527f45524332303a204163636f756e74206973206e6f74206578636c75646564000060448201526064016109e2565b6001600160a01b03166000908152601860205260409020805460ff19169055565b6001600160a01b031660009081526018602052604090205460ff1690565b6005546001600160a01b0316331461128a5760405162461bcd60e51b81526004016109e290612534565b60155460ff166112dc5760405162461bcd60e51b815260206004820152601e60248201527f45524332303a2054617820697320616c72656164792064697361626c6564000060448201526064016109e2565b6015805460ff19169055565b6001600160a01b03808416600090815260016020908152604080832093861683529290529081205461118b9085908590610be490869061257f565b6005546001600160a01b0316331461134d5760405162461bcd60e51b81526004016109e290612534565b6015805461ff0019166101008415150217905560175460000361137f5743601781905561137b90829061257f565b6016555b5050565b6005546001600160a01b031633146113ad5760405162461bcd60e51b81526004016109e290612534565b6001600160a01b0381166114125760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109e2565b610903816120f7565b6001600160a01b03831661147d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016109e2565b6001600160a01b0382166114de5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016109e2565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60155460ff161561155857611555838383611568565b90505b611563838383612149565b505050565b6040805160028082526060820183526000928392919060208301908036833701905050905030816000815181106115a1576115a16125dc565b6001600160a01b03928316602091820292909201810191909152601a54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156115fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061161e91906125bf565b81600181518110611631576116316125dc565b60200260200101906001600160a01b031690816001600160a01b03168152505061165a85611242565b15801561166d575061166b84611242565b155b15611fa05760008060075485611683919061266b565b6011546001600160a01b03908116600090815260208190526040902054601c5492935091811690881603611d2757600f546116be9083612592565b6116c8908461257f565b9250600d54826116d89190612592565b6116e2908461257f565b9250600e54826116f29190612592565b6116fc908461257f565b9250821561170f5761170f88308561153f565b600f5461171c9083612592565b6012600082825461172d919061257f565b9091555050600d5461173f9083612592565b60146000828254611750919061257f565b9091555050600e546117629083612592565b60136000828254611773919061257f565b90915550506013546014546012546000929161178e9161257f565b611798919061257f565b9050806000036117af578695505050505050610a9e565b601a546013546014546012546000936001600160a01b03169263d06ca61f9290916117da919061257f565b6117e4919061257f565b886040518363ffffffff1660e01b815260040161180292919061268d565b600060405180830381865afa15801561181f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261184791908101906126ae565b600181518110611859576118596125dc565b602002602001015190506008548110611d205760145447906000906118809060029061266b565b60135486601254611891919061276c565b61189b919061257f565b6118a5919061257f565b601a549091506118c09030906001600160a01b03168361141b565b601a546040516318cbafe560e01b81526001600160a01b03909116906318cbafe5906118f99084906000908d903090429060040161277f565b6000604051808303816000875af1158015611918573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261194091908101906126ae565b50600061194d834761276c565b905060006002601454611960919061266b565b90506000670de0b6b3a764000087600260145461197d919061266b565b61198f90670de0b6b3a7640000612592565b611999919061266b565b6119a39085612592565b6119ad919061266b565b90506000670de0b6b3a764000088601254670de0b6b3a76400006119d19190612592565b6119db919061266b565b6119e59086612592565b6119ef919061266b565b90506000670de0b6b3a764000089601354670de0b6b3a7640000611a139190612592565b611a1d919061266b565b611a279087612592565b611a31919061266b565b601a54909150611a4c9030906001600160a01b03168661141b565b601a5460405163f305d71960e01b815230600482015260248101869052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990859060c40160606040518083038185885af1158015611aba573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611adf91906127bb565b50505060008487611af0919061257f565b601454601354601254611b03919061257f565b611b0d919061257f565b611b17919061276c565b90508015611b3757601054611b379030906001600160a01b03168361153f565b6011546040516000916001600160a01b03169085908381818185875af1925050503d8060008114611b84576040519150601f19603f3d011682016040523d82523d6000602084013e611b89565b606091505b5050905080611bda5760405162461bcd60e51b815260206004820152601d60248201527f7472616e7366657220746f206465762077616c6c6574206661696c656400000060448201526064016109e2565b6010546040516000916001600160a01b03169085908381818185875af1925050503d8060008114611c27576040519150601f19603f3d011682016040523d82523d6000602084013e611c2c565b606091505b5050905080611c4d5760405162461bcd60e51b81526004016109e2906127e9565b600086611c5a868861257f565b611c64919061257f565b611c6e908a61276c565b1115611d06576010546000906001600160a01b031687611c8e878961257f565b611c98919061257f565b611ca2908b61276c565b604051600081818185875af1925050503d8060008114611cde576040519150601f19603f3d011682016040523d82523d6000602084013e611ce3565b606091505b5050905080611d045760405162461bcd60e51b81526004016109e2906127e9565b505b505060006012819055601381905560145550505050505050505b5050611e62565b601c546001600160a01b0390811690891603611e6257601554610100900460ff168015611d5657506016544311155b15611d9957611d66826063612592565b611d70908461257f565b9250611d7d826063612592565b60126000828254611d8e919061257f565b90915550611e519050565b600c54611da69083612592565b611db0908461257f565b9250600b5482611dc09190612592565b611dca908461257f565b9250600a5482611dda9190612592565b611de4908461257f565b9250600c5482611df49190612592565b60126000828254611e05919061257f565b9091555050600b54611e179083612592565b60136000828254611e28919061257f565b9091555050600a54611e3a9083612592565b60146000828254611e4b919061257f565b90915550505b8215611e6257611e6288308561153f565b611e6c838761276c565b601c549096506001600160a01b03888116911614611eff5760095486611ea7896001600160a01b031660009081526020819052604090205490565b611eb1919061257f565b1115611eff5760405162461bcd60e51b815260206004820152601860248201527f6d617857616c6c6574206c696d6974206578636565646564000000000000000060448201526064016109e2565b601554610100900460ff16611f9c576001600160a01b03881660009081526019602052604090205460ff16611f9c5760405162461bcd60e51b815260206004820152603f60248201527f544f4b454e3a2054686973206163636f756e742063616e6e6f742073656e642060448201527f746f6b656e7320756e74696c2074726164696e6720697320656e61626c65640060648201526084016109e2565b5050505b50909392505050565b6001600160a01b0382166120095760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016109e2565b6001600160a01b0382166000908152602081905260409020548181101561207d5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016109e2565b6001600160a01b03831660009081526020819052604081208383039055600280548492906120ac90849061276c565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0383166121ad5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016109e2565b6001600160a01b03821661220f5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016109e2565b6001600160a01b038316600090815260208190526040902054818110156122875760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016109e2565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906122be90849061257f565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161230a91815260200190565b60405180910390a350505050565b600060208083528351808285015260005b8181101561234557858101830151858201604001528201612329565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461090357600080fd5b6000806040838503121561238e57600080fd5b823561239981612366565b946020939093013593505050565b6000806000606084860312156123bc57600080fd5b83356123c781612366565b925060208401356123d781612366565b929592945050506040919091013590565b6000806000606084860312156123fd57600080fd5b505081359360208301359350604090920135919050565b801515811461090357600080fd5b6000806040838503121561243557600080fd5b823561244081612366565b9150602083013561245081612414565b809150509250929050565b60006020828403121561246d57600080fd5b5035919050565b60006020828403121561248657600080fd5b8135610a9e81612366565b600080604083850312156124a457600080fd5b82356124af81612366565b9150602083013561245081612366565b600080604083850312156124d257600080fd5b823561239981612414565b600181811c908216806124f157607f821691505b60208210810361251157634e487b7160e01b600052602260045260246000fd5b50919050565b60006020828403121561252957600080fd5b8151610a9e81612414565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082018082111561091757610917612569565b808202811582820484141761091757610917612569565b634e487b7160e01b600052604160045260246000fd5b6000602082840312156125d157600080fd5b8151610a9e81612366565b634e487b7160e01b600052603260045260246000fd5b600081518084526020808501945080840160005b8381101561262b5781516001600160a01b031687529582019590820190600101612606565b509495945050505050565b84815260806020820152600061264f60808301866125f2565b6001600160a01b03949094166040830152506060015292915050565b60008261268857634e487b7160e01b600052601260045260246000fd5b500490565b8281526040602082015260006126a660408301846125f2565b949350505050565b600060208083850312156126c157600080fd5b825167ffffffffffffffff808211156126d957600080fd5b818501915085601f8301126126ed57600080fd5b8151818111156126ff576126ff6125a9565b8060051b604051601f19603f83011681018181108582111715612724576127246125a9565b60405291825284820192508381018501918883111561274257600080fd5b938501935b8285101561276057845184529385019392850192612747565b98975050505050505050565b8181038181111561091757610917612569565b85815284602082015260a06040820152600061279e60a08301866125f2565b6001600160a01b0394909416606083015250608001529392505050565b6000806000606084860312156127d057600080fd5b8351925060208401519150604084015190509250925092565b60208082526023908201527f7472616e7366657220746f206d61726b6574696e672077616c6c6574206661696040820152621b195960ea1b60608201526080019056fea2646970667358221220d562927bb61385f6f502f2efc72e5eecfde8e1b02621ee5eb11a2bf17f2338f864736f6c63430008110033

Deployed Bytecode

0x6080604052600436106102815760003560e01c806375f0a8741161014f578063b2041411116100c1578063dd8aaa4f1161007a578063dd8aaa4f1461078c578063e2aa6cae146107ac578063f11a24d3146107cc578063f2fde38b146107e2578063f637434214610802578063f8b45b051461081857600080fd5b8063b2041411146106ab578063bdd795ef146106c1578063c04a5414146106f1578063cba0e99614610711578063ced695a414610731578063dd62ed3e1461074657600080fd5b80639213691311610113578063921369131461060057806395d89b4114610616578063a457c2d71461062b578063a7c6402c1461064b578063a9059cbb1461066b578063abe4f11d1461068b57600080fd5b806375f0a8741461056c5780637731f8e51461058c5780637bce5a04146105ac5780638da5cb5b146105c25780638f2076fd146105e057600080fd5b80632f9c4569116101f357806353eb3bcf116101ac57806353eb3bcf146104ac5780635d0044ca146104c15780635d098b38146104e157806370a0823114610501578063715018a61461053757806372ac24861461054c57600080fd5b80632f9c4569146103d8578063313ce567146103f8578063395093511461041457806342966c681461043457806349bd5a5e146104545780634febf53d1461048c57600080fd5b806318a94cf11161024557806318a94cf1146103335780632121ef231461034957806321ce72e51461036957806323a38a381461038957806323b872dd146103a35780632c32abc2146103c357600080fd5b806306fdde031461028d57806307a178f1146102b8578063095ea7b3146102cf5780630dbd397c146102ff57806318160ddd1461031e57600080fd5b3661028857005b600080fd5b34801561029957600080fd5b506102a261082e565b6040516102af9190612318565b60405180910390f35b3480156102c457600080fd5b506102cd6108c0565b005b3480156102db57600080fd5b506102ef6102ea36600461237b565b610906565b60405190151581526020016102af565b34801561030b57600080fd5b506017545b6040519081526020016102af565b34801561032a57600080fd5b50600254610310565b34801561033f57600080fd5b50610310600f5481565b34801561035557600080fd5b506102cd6103643660046123a7565b61091d565b34801561037557600080fd5b506102cd6103843660046123e8565b6109b8565b34801561039557600080fd5b506015546102ef9060ff1681565b3480156103af57600080fd5b506102ef6103be3660046123a7565b6109f9565b3480156103cf57600080fd5b506102cd610aa5565b3480156103e457600080fd5b506102cd6103f3366004612422565b610ae8565b34801561040457600080fd5b50604051601281526020016102af565b34801561042057600080fd5b506102ef61042f36600461237b565b610bad565b34801561044057600080fd5b506102cd61044f36600461245b565b610be9565b34801561046057600080fd5b50601c54610474906001600160a01b031681565b6040516001600160a01b0390911681526020016102af565b34801561049857600080fd5b506102cd6104a7366004612474565b610c1d565b3480156104b857600080fd5b506102cd610ccc565b3480156104cd57600080fd5b506102cd6104dc36600461245b565b610d58565b3480156104ed57600080fd5b506102cd6104fc366004612474565b610dd9565b34801561050d57600080fd5b5061031061051c366004612474565b6001600160a01b031660009081526020819052604090205490565b34801561054357600080fd5b506102cd610e12565b34801561055857600080fd5b506102cd610567366004612474565b610e48565b34801561057857600080fd5b50601054610474906001600160a01b031681565b34801561059857600080fd5b506102cd6105a73660046123a7565b610e81565b3480156105b857600080fd5b50610310600b5481565b3480156105ce57600080fd5b506005546001600160a01b0316610474565b3480156105ec57600080fd5b506102cd6105fb3660046123e8565b6110b5565b34801561060c57600080fd5b50610310600e5481565b34801561062257600080fd5b506102a26110ed565b34801561063757600080fd5b506102ef61064636600461237b565b6110fc565b34801561065757600080fd5b50601a54610474906001600160a01b031681565b34801561067757600080fd5b506102ef61068636600461237b565b611195565b34801561069757600080fd5b506102cd6106a6366004612474565b6111a2565b3480156106b757600080fd5b50610310600c5481565b3480156106cd57600080fd5b506102ef6106dc366004612474565b60196020526000908152604090205460ff1681565b3480156106fd57600080fd5b50601154610474906001600160a01b031681565b34801561071d57600080fd5b506102ef61072c366004612474565b611242565b34801561073d57600080fd5b506102cd611260565b34801561075257600080fd5b50610310610761366004612491565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561079857600080fd5b506102ef6107a73660046123a7565b6112e8565b3480156107b857600080fd5b506102cd6107c73660046124bf565b611323565b3480156107d857600080fd5b50610310600a5481565b3480156107ee57600080fd5b506102cd6107fd366004612474565b611383565b34801561080e57600080fd5b50610310600d5481565b34801561082457600080fd5b5061031060095481565b60606003805461083d906124dd565b80601f0160208091040260200160405190810160405280929190818152602001828054610869906124dd565b80156108b65780601f1061088b576101008083540402835291602001916108b6565b820191906000526020600020905b81548152906001019060200180831161089957829003601f168201915b5050505050905090565b6011546001600160a01b031633146108d757600080fd5b60405133904780156108fc02916000818181858888f19350505050158015610903573d6000803e3d6000fd5b50565b600061091333848461141b565b5060015b92915050565b6011546001600160a01b0316331461093457600080fd5b6040516323b872dd60e01b81523060048201526001600160a01b038381166024830152604482018390528491908216906323b872dd906064015b6020604051808303816000875af115801561098d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109b19190612517565b5050505050565b6005546001600160a01b031633146109eb5760405162461bcd60e51b81526004016109e290612534565b60405180910390fd5b600c92909255600b55600a55565b6000610a0684848461153f565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610a8b5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084016109e2565b610a98853385840361141b565b60019150505b9392505050565b6005546001600160a01b03163314610acf5760405162461bcd60e51b81526004016109e290612534565b601c54610903906000906001600160a01b031681611568565b6005546001600160a01b03163314610b125760405162461bcd60e51b81526004016109e290612534565b6001600160a01b03821660009081526019602052604090205481151560ff909116151503610b825760405162461bcd60e51b815260206004820152601760248201527f544f4b454e3a20416c726561647920656e61626c65642e00000000000000000060448201526064016109e2565b6001600160a01b03919091166000908152601960205260409020805460ff1916911515919091179055565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610913918590610be490869061257f565b61141b565b6005546001600160a01b03163314610c135760405162461bcd60e51b81526004016109e290612534565b6109033382611fa9565b6005546001600160a01b03163314610c475760405162461bcd60e51b81526004016109e290612534565b610c5081611242565b15610ca85760405162461bcd60e51b815260206004820152602260248201527f45524332303a204163636f756e7420697320616c7265616479206578636c7564604482015261195960f21b60648201526084016109e2565b6001600160a01b03166000908152601860205260409020805460ff19166001179055565b6005546001600160a01b03163314610cf65760405162461bcd60e51b81526004016109e290612534565b60155460ff1615610d495760405162461bcd60e51b815260206004820152601d60248201527f45524332303a2054617820697320616c726561647920656e61626c656400000060448201526064016109e2565b6015805460ff19166001179055565b6005546001600160a01b03163314610d825760405162461bcd60e51b81526004016109e290612534565b6127108111610dc15760405162461bcd60e51b815260206004820152600b60248201526a1393c81c9d59c81c1d5b1b60aa1b60448201526064016109e2565b610dd381670de0b6b3a7640000612592565b60095550565b6010546001600160a01b03163314610df057600080fd5b601080546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314610e3c5760405162461bcd60e51b81526004016109e290612534565b610e4660006120f7565b565b6011546001600160a01b03163314610e5f57600080fd5b601180546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038316610ed75760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f74206265203000000000000060448201526064016109e2565b6040805160028082526060820183526000926020830190803683375050601a54604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015610f41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f6591906125bf565b81600081518110610f7857610f786125dc565b60200260200101906001600160a01b031690816001600160a01b0316815250503081600181518110610fac57610fac6125dc565b60200260200101906001600160a01b031690816001600160a01b031681525050610fd533611242565b1561104257836001600160a01b03166323b872dd8483600181518110610ffd57610ffd6125dc565b60209081029190910101516040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044810185905260640161096e565b601a5460405163b6f9de9560e01b81526001600160a01b039091169063b6f9de9590849061107d90600090869061dead904290600401612636565b6000604051808303818588803b15801561109657600080fd5b505af11580156110aa573d6000803e3d6000fd5b505050505050505050565b6005546001600160a01b031633146110df5760405162461bcd60e51b81526004016109e290612534565b600f92909255600e55600d55565b60606004805461083d906124dd565b3360009081526001602090815260408083206001600160a01b03861684529091528120548281101561117e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016109e2565b61118b338585840361141b565b5060019392505050565b600061091333848461153f565b6005546001600160a01b031633146111cc5760405162461bcd60e51b81526004016109e290612534565b6111d581611242565b6112215760405162461bcd60e51b815260206004820152601e60248201527f45524332303a204163636f756e74206973206e6f74206578636c75646564000060448201526064016109e2565b6001600160a01b03166000908152601860205260409020805460ff19169055565b6001600160a01b031660009081526018602052604090205460ff1690565b6005546001600160a01b0316331461128a5760405162461bcd60e51b81526004016109e290612534565b60155460ff166112dc5760405162461bcd60e51b815260206004820152601e60248201527f45524332303a2054617820697320616c72656164792064697361626c6564000060448201526064016109e2565b6015805460ff19169055565b6001600160a01b03808416600090815260016020908152604080832093861683529290529081205461118b9085908590610be490869061257f565b6005546001600160a01b0316331461134d5760405162461bcd60e51b81526004016109e290612534565b6015805461ff0019166101008415150217905560175460000361137f5743601781905561137b90829061257f565b6016555b5050565b6005546001600160a01b031633146113ad5760405162461bcd60e51b81526004016109e290612534565b6001600160a01b0381166114125760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109e2565b610903816120f7565b6001600160a01b03831661147d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016109e2565b6001600160a01b0382166114de5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016109e2565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60155460ff161561155857611555838383611568565b90505b611563838383612149565b505050565b6040805160028082526060820183526000928392919060208301908036833701905050905030816000815181106115a1576115a16125dc565b6001600160a01b03928316602091820292909201810191909152601a54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156115fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061161e91906125bf565b81600181518110611631576116316125dc565b60200260200101906001600160a01b031690816001600160a01b03168152505061165a85611242565b15801561166d575061166b84611242565b155b15611fa05760008060075485611683919061266b565b6011546001600160a01b03908116600090815260208190526040902054601c5492935091811690881603611d2757600f546116be9083612592565b6116c8908461257f565b9250600d54826116d89190612592565b6116e2908461257f565b9250600e54826116f29190612592565b6116fc908461257f565b9250821561170f5761170f88308561153f565b600f5461171c9083612592565b6012600082825461172d919061257f565b9091555050600d5461173f9083612592565b60146000828254611750919061257f565b9091555050600e546117629083612592565b60136000828254611773919061257f565b90915550506013546014546012546000929161178e9161257f565b611798919061257f565b9050806000036117af578695505050505050610a9e565b601a546013546014546012546000936001600160a01b03169263d06ca61f9290916117da919061257f565b6117e4919061257f565b886040518363ffffffff1660e01b815260040161180292919061268d565b600060405180830381865afa15801561181f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261184791908101906126ae565b600181518110611859576118596125dc565b602002602001015190506008548110611d205760145447906000906118809060029061266b565b60135486601254611891919061276c565b61189b919061257f565b6118a5919061257f565b601a549091506118c09030906001600160a01b03168361141b565b601a546040516318cbafe560e01b81526001600160a01b03909116906318cbafe5906118f99084906000908d903090429060040161277f565b6000604051808303816000875af1158015611918573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261194091908101906126ae565b50600061194d834761276c565b905060006002601454611960919061266b565b90506000670de0b6b3a764000087600260145461197d919061266b565b61198f90670de0b6b3a7640000612592565b611999919061266b565b6119a39085612592565b6119ad919061266b565b90506000670de0b6b3a764000088601254670de0b6b3a76400006119d19190612592565b6119db919061266b565b6119e59086612592565b6119ef919061266b565b90506000670de0b6b3a764000089601354670de0b6b3a7640000611a139190612592565b611a1d919061266b565b611a279087612592565b611a31919061266b565b601a54909150611a4c9030906001600160a01b03168661141b565b601a5460405163f305d71960e01b815230600482015260248101869052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990859060c40160606040518083038185885af1158015611aba573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611adf91906127bb565b50505060008487611af0919061257f565b601454601354601254611b03919061257f565b611b0d919061257f565b611b17919061276c565b90508015611b3757601054611b379030906001600160a01b03168361153f565b6011546040516000916001600160a01b03169085908381818185875af1925050503d8060008114611b84576040519150601f19603f3d011682016040523d82523d6000602084013e611b89565b606091505b5050905080611bda5760405162461bcd60e51b815260206004820152601d60248201527f7472616e7366657220746f206465762077616c6c6574206661696c656400000060448201526064016109e2565b6010546040516000916001600160a01b03169085908381818185875af1925050503d8060008114611c27576040519150601f19603f3d011682016040523d82523d6000602084013e611c2c565b606091505b5050905080611c4d5760405162461bcd60e51b81526004016109e2906127e9565b600086611c5a868861257f565b611c64919061257f565b611c6e908a61276c565b1115611d06576010546000906001600160a01b031687611c8e878961257f565b611c98919061257f565b611ca2908b61276c565b604051600081818185875af1925050503d8060008114611cde576040519150601f19603f3d011682016040523d82523d6000602084013e611ce3565b606091505b5050905080611d045760405162461bcd60e51b81526004016109e2906127e9565b505b505060006012819055601381905560145550505050505050505b5050611e62565b601c546001600160a01b0390811690891603611e6257601554610100900460ff168015611d5657506016544311155b15611d9957611d66826063612592565b611d70908461257f565b9250611d7d826063612592565b60126000828254611d8e919061257f565b90915550611e519050565b600c54611da69083612592565b611db0908461257f565b9250600b5482611dc09190612592565b611dca908461257f565b9250600a5482611dda9190612592565b611de4908461257f565b9250600c5482611df49190612592565b60126000828254611e05919061257f565b9091555050600b54611e179083612592565b60136000828254611e28919061257f565b9091555050600a54611e3a9083612592565b60146000828254611e4b919061257f565b90915550505b8215611e6257611e6288308561153f565b611e6c838761276c565b601c549096506001600160a01b03888116911614611eff5760095486611ea7896001600160a01b031660009081526020819052604090205490565b611eb1919061257f565b1115611eff5760405162461bcd60e51b815260206004820152601860248201527f6d617857616c6c6574206c696d6974206578636565646564000000000000000060448201526064016109e2565b601554610100900460ff16611f9c576001600160a01b03881660009081526019602052604090205460ff16611f9c5760405162461bcd60e51b815260206004820152603f60248201527f544f4b454e3a2054686973206163636f756e742063616e6e6f742073656e642060448201527f746f6b656e7320756e74696c2074726164696e6720697320656e61626c65640060648201526084016109e2565b5050505b50909392505050565b6001600160a01b0382166120095760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016109e2565b6001600160a01b0382166000908152602081905260409020548181101561207d5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016109e2565b6001600160a01b03831660009081526020819052604081208383039055600280548492906120ac90849061276c565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0383166121ad5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016109e2565b6001600160a01b03821661220f5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016109e2565b6001600160a01b038316600090815260208190526040902054818110156122875760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016109e2565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906122be90849061257f565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161230a91815260200190565b60405180910390a350505050565b600060208083528351808285015260005b8181101561234557858101830151858201604001528201612329565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461090357600080fd5b6000806040838503121561238e57600080fd5b823561239981612366565b946020939093013593505050565b6000806000606084860312156123bc57600080fd5b83356123c781612366565b925060208401356123d781612366565b929592945050506040919091013590565b6000806000606084860312156123fd57600080fd5b505081359360208301359350604090920135919050565b801515811461090357600080fd5b6000806040838503121561243557600080fd5b823561244081612366565b9150602083013561245081612414565b809150509250929050565b60006020828403121561246d57600080fd5b5035919050565b60006020828403121561248657600080fd5b8135610a9e81612366565b600080604083850312156124a457600080fd5b82356124af81612366565b9150602083013561245081612366565b600080604083850312156124d257600080fd5b823561239981612414565b600181811c908216806124f157607f821691505b60208210810361251157634e487b7160e01b600052602260045260246000fd5b50919050565b60006020828403121561252957600080fd5b8151610a9e81612414565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082018082111561091757610917612569565b808202811582820484141761091757610917612569565b634e487b7160e01b600052604160045260246000fd5b6000602082840312156125d157600080fd5b8151610a9e81612366565b634e487b7160e01b600052603260045260246000fd5b600081518084526020808501945080840160005b8381101561262b5781516001600160a01b031687529582019590820190600101612606565b509495945050505050565b84815260806020820152600061264f60808301866125f2565b6001600160a01b03949094166040830152506060015292915050565b60008261268857634e487b7160e01b600052601260045260246000fd5b500490565b8281526040602082015260006126a660408301846125f2565b949350505050565b600060208083850312156126c157600080fd5b825167ffffffffffffffff808211156126d957600080fd5b818501915085601f8301126126ed57600080fd5b8151818111156126ff576126ff6125a9565b8060051b604051601f19603f83011681018181108582111715612724576127246125a9565b60405291825284820192508381018501918883111561274257600080fd5b938501935b8285101561276057845184529385019392850192612747565b98975050505050505050565b8181038181111561091757610917612569565b85815284602082015260a06040820152600061279e60a08301866125f2565b6001600160a01b0394909416606083015250608001529392505050565b6000806000606084860312156127d057600080fd5b8351925060208401519150604084015190509250925092565b60208082526023908201527f7472616e7366657220746f206d61726b6574696e672077616c6c6574206661696040820152621b195960ea1b60608201526080019056fea2646970667358221220d562927bb61385f6f502f2efc72e5eecfde8e1b02621ee5eb11a2bf17f2338f864736f6c63430008110033

Deployed Bytecode Sourcemap

19811:12447:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4772:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22842:161;;;;;;;;;;;;;:::i;:::-;;6332:169;;;;;;;;;;-1:-1:-1;6332:169:0;;;;;:::i;:::-;;:::i;:::-;;;1188:14:1;;1181:22;1163:41;;1151:2;1136:18;6332:169:0;1023:187:1;32105:109:0;;;;;;;;;;-1:-1:-1;32187:19:0;;32105:109;;;1361:25:1;;;1349:2;1334:18;32105:109:0;1215:177:1;5285:108:0;;;;;;;;;;-1:-1:-1;5373:12:0;;5285:108;;20243:37;;;;;;;;;;;;;;;;23011:258;;;;;;;;;;-1:-1:-1;23011:258:0;;;;;:::i;:::-;;:::i;21827:223::-;;;;;;;;;;-1:-1:-1;21827:223:0;;;;;:::i;:::-;;:::i;20479:28::-;;;;;;;;;;-1:-1:-1;20479:28:0;;;;;;;;6533:492;;;;;;;;;;-1:-1:-1;6533:492:0;;;;;:::i;:::-;;:::i;31725:106::-;;;;;;;;;;;;;:::i;31839:196::-;;;;;;;;;;-1:-1:-1;31839:196:0;;;;;:::i;:::-;;:::i;5127:93::-;;;;;;;;;;-1:-1:-1;5127:93:0;;5210:2;2831:36:1;;2819:2;2804:18;5127:93:0;2689:184:1;7304:215:0;;;;;;;;;;-1:-1:-1;7304:215:0;;;;;:::i;:::-;;:::i;25618:91::-;;;;;;;;;;-1:-1:-1;25618:91:0;;;;;:::i;:::-;;:::i;20882:35::-;;;;;;;;;;-1:-1:-1;20882:35:0;;;;-1:-1:-1;;;;;20882:35:0;;;;;;-1:-1:-1;;;;;3250:32:1;;;3232:51;;3220:2;3205:18;20882:35:0;3063:226:1;25793:175:0;;;;;;;;;;-1:-1:-1;25793:175:0;;;;;:::i;:::-;;:::i;23334:136::-;;;;;;;;;;;;;:::i;25388:153::-;;;;;;;;;;-1:-1:-1;25388:153:0;;;;;:::i;:::-;;:::i;22665:169::-;;;;;;;;;;-1:-1:-1;22665:169:0;;;;;:::i;:::-;;:::i;5456:127::-;;;;;;;;;;-1:-1:-1;5456:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;5557:18:0;5530:7;5557:18;;;;;;;;;;;;5456:127;11218:94;;;;;;;;;;;;;:::i;22423:179::-;;;;;;;;;;-1:-1:-1;22423:179:0;;;;;:::i;:::-;;:::i;20287:30::-;;;;;;;;;;-1:-1:-1;20287:30:0;;;;-1:-1:-1;;;;;20287:30:0;;;23686:742;;;;;;;;;;-1:-1:-1;23686:742:0;;;;;:::i;:::-;;:::i;20075:34::-;;;;;;;;;;;;;;;;10890:87;;;;;;;;;;-1:-1:-1;10963:6:0;;-1:-1:-1;;;;;10963:6:0;10890:87;;22113:243;;;;;;;;;;-1:-1:-1;22113:243:0;;;;;:::i;:::-;;:::i;20201:35::-;;;;;;;;;;;;;;;;4991:104;;;;;;;;;;;;;:::i;7551:413::-;;;;;;;;;;-1:-1:-1;7551:413:0;;;;;:::i;:::-;;:::i;20783:43::-;;;;;;;;;;-1:-1:-1;20783:43:0;;;;-1:-1:-1;;;;;20783:43:0;;;5796:175;;;;;;;;;;-1:-1:-1;5796:175:0;;;;;:::i;:::-;;:::i;26052:177::-;;;;;;;;;;-1:-1:-1;26052:177:0;;;;;:::i;:::-;;:::i;20116:36::-;;;;;;;;;;;;;;;;20728:42;;;;;;;;;;-1:-1:-1;20728:42:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;20324:32;;;;;;;;;;-1:-1:-1;20324:32:0;;;;-1:-1:-1;;;;;20324:32:0;;;24529:110;;;;;;;;;;-1:-1:-1;24529:110:0;;;;;:::i;:::-;;:::i;23536:138::-;;;;;;;;;;;;;:::i;6034:151::-;;;;;;;;;;-1:-1:-1;6034:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;6150:18:0;;;6123:7;6150:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;6034:151;7033:239;;;;;;;;;;-1:-1:-1;7033:239:0;;;;;:::i;:::-;;:::i;24647:360::-;;;;;;;;;;-1:-1:-1;24647:360:0;;;;;:::i;:::-;;:::i;20034:34::-;;;;;;;;;;;;;;;;11467:192;;;;;;;;;;-1:-1:-1;11467:192:0;;;;;:::i;:::-;;:::i;20159:35::-;;;;;;;;;;;;;;;;20003:24;;;;;;;;;;;;;;;;4772:100;4826:13;4859:5;4852:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4772:100;:::o;22842:161::-;22915:17;;-1:-1:-1;;;;;22915:17:0;22901:10;:31;22893:40;;;;;;22944:51;;22952:10;;22973:21;22944:51;;;;;;;;;22973:21;22952:10;22944:51;;;;;;;;;;;;;;;;;;;;;22842:161::o;6332:169::-;6415:4;6432:39;3866:10;6455:7;6464:6;6432:8;:39::i;:::-;-1:-1:-1;6489:4:0;6332:169;;;;;:::o;23011:258::-;23133:17;;-1:-1:-1;;;;;23133:17:0;23119:10;:31;23111:40;;;;;;23207:54;;-1:-1:-1;;;23207:54:0;;23239:4;23207:54;;;5321:34:1;-1:-1:-1;;;;;5391:15:1;;;5371:18;;;5364:43;5423:18;;;5416:34;;;23189:6:0;;23207:23;;;;;;5256:18:1;;23207:54:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;23100:169;23011:258;;;:::o;21827:223::-;10963:6;;-1:-1:-1;;;;;10963:6:0;3866:10;11110:23;11102:68;;;;-1:-1:-1;;;11102:68:0;;;;;;;:::i;:::-;;;;;;;;;21934:17:::1;:26:::0;;;;21971:15:::1;:30:::0;22012:15:::1;:30:::0;21827:223::o;6533:492::-;6673:4;6690:36;6700:6;6708:9;6719:6;6690:9;:36::i;:::-;-1:-1:-1;;;;;6766:19:0;;6739:24;6766:19;;;:11;:19;;;;;;;;3866:10;6766:33;;;;;;;;6818:26;;;;6810:79;;;;-1:-1:-1;;;6810:79:0;;6274:2:1;6810:79:0;;;6256:21:1;6313:2;6293:18;;;6286:30;6352:34;6332:18;;;6325:62;-1:-1:-1;;;6403:18:1;;;6396:38;6451:19;;6810:79:0;6072:404:1;6810:79:0;6925:57;6934:6;3866:10;6975:6;6956:16;:25;6925:8;:57::i;:::-;7013:4;7006:11;;;6533:492;;;;;;:::o;31725:106::-;10963:6;;-1:-1:-1;;;;;10963:6:0;3866:10;11110:23;11102:68;;;;-1:-1:-1;;;11102:68:0;;;;;;;:::i;:::-;31805:13:::1;::::0;31775:48:::1;::::0;31793:1:::1;::::0;-1:-1:-1;;;;;31805:13:0::1;31793:1:::0;31775:9:::1;:48::i;31839:196::-:0;10963:6;;-1:-1:-1;;;;;10963:6:0;3866:10;11110:23;11102:68;;;;-1:-1:-1;;;11102:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;31931:18:0;::::1;;::::0;;;:9:::1;:18;::::0;;;;;:29;::::1;;:18;::::0;;::::1;:29;;::::0;31923:65:::1;;;::::0;-1:-1:-1;;;31923:65:0;;6683:2:1;31923:65:0::1;::::0;::::1;6665:21:1::0;6722:2;6702:18;;;6695:30;6761:25;6741:18;;;6734:53;6804:18;;31923:65:0::1;6481:347:1::0;31923:65:0::1;-1:-1:-1::0;;;;;31999:18:0;;;::::1;;::::0;;;:9:::1;:18;::::0;;;;:28;;-1:-1:-1;;31999:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;31839:196::o;7304:215::-;3866:10;7392:4;7441:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;7441:34:0;;;;;;;;;;7392:4;;7409:80;;7432:7;;7441:47;;7478:10;;7441:47;:::i;:::-;7409:8;:80::i;25618:91::-;10963:6;;-1:-1:-1;;;;;10963:6:0;3866:10;11110:23;11102:68;;;;-1:-1:-1;;;11102:68:0;;;;;;;:::i;:::-;25676:25:::1;25682:10;25694:6;25676:5;:25::i;25793:175::-:0;10963:6;;-1:-1:-1;;;;;10963:6:0;3866:10;11110:23;11102:68;;;;-1:-1:-1;;;11102:68:0;;;;;;;:::i;:::-;25864:19:::1;25875:7;25864:10;:19::i;:::-;25863:20;25855:67;;;::::0;-1:-1:-1;;;25855:67:0;;7297:2:1;25855:67:0::1;::::0;::::1;7279:21:1::0;7336:2;7316:18;;;7309:30;7375:34;7355:18;;;7348:62;-1:-1:-1;;;7426:18:1;;;7419:32;7468:19;;25855:67:0::1;7095:398:1::0;25855:67:0::1;-1:-1:-1::0;;;;;25933:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;25933:27:0::1;25956:4;25933:27;::::0;;25793:175::o;23334:136::-;10963:6;;-1:-1:-1;;;;;10963:6:0;3866:10;11110:23;11102:68;;;;-1:-1:-1;;;11102:68:0;;;;;;;:::i;:::-;23392:9:::1;::::0;::::1;;23391:10;23383:52;;;::::0;-1:-1:-1;;;23383:52:0;;7700:2:1;23383:52:0::1;::::0;::::1;7682:21:1::0;7739:2;7719:18;;;7712:30;7778:31;7758:18;;;7751:59;7827:18;;23383:52:0::1;7498:353:1::0;23383:52:0::1;23446:9;:16:::0;;-1:-1:-1;;23446:16:0::1;23458:4;23446:16;::::0;;23334:136::o;25388:153::-;10963:6;;-1:-1:-1;;;;;10963:6:0;3866:10;11110:23;11102:68;;;;-1:-1:-1;;;11102:68:0;;;;;;;:::i;:::-;25474:5:::1;25465:6;:14;25456:39;;;::::0;-1:-1:-1;;;25456:39:0;;8058:2:1;25456:39:0::1;::::0;::::1;8040:21:1::0;8097:2;8077:18;;;8070:30;-1:-1:-1;;;8116:18:1;;;8109:41;8167:18;;25456:39:0::1;7856:335:1::0;25456:39:0::1;25518:15;:6:::0;25527::::1;25518:15;:::i;:::-;25506:9;:27:::0;-1:-1:-1;25388:153:0:o;22665:169::-;22763:15;;-1:-1:-1;;;;;22763:15:0;22749:10;:29;22741:38;;;;;;22790:15;:36;;-1:-1:-1;;;;;;22790:36:0;-1:-1:-1;;;;;22790:36:0;;;;;;;;;;22665:169::o;11218:94::-;10963:6;;-1:-1:-1;;;;;10963:6:0;3866:10;11110:23;11102:68;;;;-1:-1:-1;;;11102:68:0;;;;;;;:::i;:::-;11283:21:::1;11301:1;11283:9;:21::i;:::-;11218:94::o:0;22423:179::-;22525:17;;-1:-1:-1;;;;;22525:17:0;22511:10;:31;22503:40;;;;;;22554:17;:40;;-1:-1:-1;;;;;;22554:40:0;-1:-1:-1;;;;;22554:40:0;;;;;;;;;;22423:179::o;23686:742::-;-1:-1:-1;;;;;23818:20:0;;23810:59;;;;-1:-1:-1;;;23810:59:0;;8571:2:1;23810:59:0;;;8553:21:1;8610:2;8590:18;;;8583:30;8649:28;8629:18;;;8622:56;8695:18;;23810:59:0;8369:350:1;23810:59:0;23904:16;;;23918:1;23904:16;;;;;;;;23880:21;;23904:16;;;;;;;;-1:-1:-1;;23941:17:0;;:24;;;-1:-1:-1;;;23941:24:0;;;;23880:40;;-1:-1:-1;;;;;;23941:17:0;;;;:22;;-1:-1:-1;23941:24:0;;;;;;;;;;;;;;:17;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23931:4;23936:1;23931:7;;;;;;;;:::i;:::-;;;;;;:34;-1:-1:-1;;;;;23931:34:0;;;-1:-1:-1;;;;;23931:34:0;;;;;23994:4;23976;23981:1;23976:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;23976:23:0;;;-1:-1:-1;;;;;23976:23:0;;;;;24014:22;24025:10;24014;:22::i;:::-;24010:127;;;24060:6;-1:-1:-1;;;;;24053:27:0;;24081:4;24087;24092:1;24087:7;;;;;;;;:::i;:::-;;;;;;;;;;;24053:51;;-1:-1:-1;;;;;;24053:51:0;;;;;;;-1:-1:-1;;;;;5339:15:1;;;24053:51:0;;;5321:34:1;5391:15;;5371:18;;;5364:43;5423:18;;;5416:34;;;5256:18;;24053:51:0;5081:375:1;24010:127:0;24173:17;;:247;;-1:-1:-1;;;24173:247:0;;-1:-1:-1;;;;;24173:17:0;;;;:68;;24263:7;;24173:247;;:17;;24345:4;;24372:6;;24394:15;;24173:247;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23799:629;23686:742;;;:::o;22113:243::-;10963:6;;-1:-1:-1;;;;;10963:6:0;3866:10;11110:23;11102:68;;;;-1:-1:-1;;;11102:68:0;;;;;;;:::i;:::-;22229:18:::1;:35:::0;;;;22275:16:::1;:31:::0;22317:16:::1;:31:::0;22113:243::o;4991:104::-;5047:13;5080:7;5073:14;;;;;:::i;7551:413::-;3866:10;7644:4;7688:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;7688:34:0;;;;;;;;;;7741:35;;;;7733:85;;;;-1:-1:-1;;;7733:85:0;;10427:2:1;7733:85:0;;;10409:21:1;10466:2;10446:18;;;10439:30;10505:34;10485:18;;;10478:62;-1:-1:-1;;;10556:18:1;;;10549:35;10601:19;;7733:85:0;10225:401:1;7733:85:0;7854:67;3866:10;7877:7;7905:15;7886:16;:34;7854:8;:67::i;:::-;-1:-1:-1;7952:4:0;;7551:413;-1:-1:-1;;;7551:413:0:o;5796:175::-;5882:4;5899:42;3866:10;5923:9;5934:6;5899:9;:42::i;26052:177::-;10963:6;;-1:-1:-1;;;;;10963:6:0;3866:10;11110:23;11102:68;;;;-1:-1:-1;;;11102:68:0;;;;;;;:::i;:::-;26128:19:::1;26139:7;26128:10;:19::i;:::-;26120:62;;;::::0;-1:-1:-1;;;26120:62:0;;10833:2:1;26120:62:0::1;::::0;::::1;10815:21:1::0;10872:2;10852:18;;;10845:30;10911:32;10891:18;;;10884:60;10961:18;;26120:62:0::1;10631:354:1::0;26120:62:0::1;-1:-1:-1::0;;;;;26193:20:0::1;26216:5;26193:20:::0;;;:11:::1;:20;::::0;;;;:28;;-1:-1:-1;;26193:28:0::1;::::0;;26052:177::o;24529:110::-;-1:-1:-1;;;;;24611:20:0;24587:4;24611:20;;;:11;:20;;;;;;;;;24529:110::o;23536:138::-;10963:6;;-1:-1:-1;;;;;10963:6:0;3866:10;11110:23;11102:68;;;;-1:-1:-1;;;11102:68:0;;;;;;;:::i;:::-;23594:9:::1;::::0;::::1;;23586:52;;;::::0;-1:-1:-1;;;23586:52:0;;11192:2:1;23586:52:0::1;::::0;::::1;11174:21:1::0;11231:2;11211:18;;;11204:30;11270:32;11250:18;;;11243:60;11320:18;;23586:52:0::1;10990:354:1::0;23586:52:0::1;23649:9;:17:::0;;-1:-1:-1;;23649:17:0::1;::::0;;23536:138::o;7033:239::-;-1:-1:-1;;;;;7205:18:0;;;7163:4;7205:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;7180:62;;7189:5;;7196:7;;7205:36;;7235:6;;7205:36;:::i;24647:360::-;10963:6;;-1:-1:-1;;;;;10963:6:0;3866:10;11110:23;11102:68;;;;-1:-1:-1;;;11102:68:0;;;;;;;:::i;:::-;24732:11:::1;:26:::0;;-1:-1:-1;;24732:26:0::1;;::::0;::::1;;;;::::0;;24854:19:::1;::::0;-1:-1:-1;24854:24:0;24850:150:::1;;24917:12;24895:19;:34:::0;;;24962:26:::1;::::0;24977:11;;24962:26:::1;:::i;:::-;24944:15;:44:::0;24850:150:::1;24647:360:::0;;:::o;11467:192::-;10963:6;;-1:-1:-1;;;;;10963:6:0;3866:10;11110:23;11102:68;;;;-1:-1:-1;;;11102:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;11556:22:0;::::1;11548:73;;;::::0;-1:-1:-1;;;11548:73:0;;11551:2:1;11548:73:0::1;::::0;::::1;11533:21:1::0;11590:2;11570:18;;;11563:30;11629:34;11609:18;;;11602:62;-1:-1:-1;;;11680:18:1;;;11673:36;11726:19;;11548:73:0::1;11349:402:1::0;11548:73:0::1;11632:19;11642:8;11632:9;:19::i;9813:380::-:0;-1:-1:-1;;;;;9949:19:0;;9941:68;;;;-1:-1:-1;;;9941:68:0;;11958:2:1;9941:68:0;;;11940:21:1;11997:2;11977:18;;;11970:30;12036:34;12016:18;;;12009:62;-1:-1:-1;;;12087:18:1;;;12080:34;12131:19;;9941:68:0;11756:400:1;9941:68:0;-1:-1:-1;;;;;10028:21:0;;10020:68;;;;-1:-1:-1;;;10020:68:0;;12363:2:1;10020:68:0;;;12345:21:1;12402:2;12382:18;;;12375:30;12441:34;12421:18;;;12414:62;-1:-1:-1;;;12492:18:1;;;12485:32;12534:19;;10020:68:0;12161:398:1;10020:68:0;-1:-1:-1;;;;;10101:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;10153:32;;1361:25:1;;;10153:32:0;;1334:18:1;10153:32:0;;;;;;;9813:380;;;:::o;25015:298::-;25167:9;;;;25164:89;;;25202:36;25212:6;25220:9;25231:6;25202:9;:36::i;:::-;25193:45;;25164:89;25263:42;25279:6;25287:9;25298:6;25263:15;:42::i;:::-;25015:298;;;:::o;26397:5245::-;26523:16;;;26537:1;26523:16;;;;;;;;26475:7;;;;26523:16;26537:1;26523:16;;;;;;;;;;-1:-1:-1;26523:16:0;26495:44;;26572:4;26550:8;26559:1;26550:11;;;;;;;;:::i;:::-;-1:-1:-1;;;;;26550:27:0;;;:11;;;;;;;;;;:27;;;;26602:17;;:24;;;-1:-1:-1;;;26602:24:0;;;;:17;;;;;:22;;:24;;;;;26550:11;;26602:24;;;;;:17;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26588:8;26597:1;26588:11;;;;;;;;:::i;:::-;;;;;;:38;-1:-1:-1;;;;;26588:38:0;;;-1:-1:-1;;;;;26588:38:0;;;;;26652:16;26663:4;26652:10;:16::i;:::-;26651:17;:36;;;;;26673:14;26684:2;26673:10;:14::i;:::-;26672:15;26651:36;26647:4954;;;26704:11;26730:16;26758:11;;26749:6;:20;;;;:::i;:::-;26817:17;;-1:-1:-1;;;;;26817:17:0;;;26784:20;5557:18;;;;;;;;;;;26868:13;;26730:39;;-1:-1:-1;5557:18:0;26868:13;;26854:28;;;;26850:4351;;26928:18;;26917:29;;:8;:29;:::i;:::-;26910:36;;;;:::i;:::-;;;26983:16;;26972:8;:27;;;;:::i;:::-;26965:34;;;;:::i;:::-;;;27036:16;;27025:8;:27;;;;:::i;:::-;27018:34;;;;:::i;:::-;;-1:-1:-1;27092:7:0;;27089:93;;27124:35;27134:4;27148;27155:3;27124:9;:35::i;:::-;27249:18;;27238:29;;:8;:29;:::i;:::-;27217:17;;:50;;;;;;;:::i;:::-;;;;-1:-1:-1;;27316:16:0;;27305:27;;:8;:27;:::i;:::-;27286:15;;:46;;;;;;;:::i;:::-;;;;-1:-1:-1;;27381:16:0;;27370:27;;:8;:27;:::i;:::-;27351:15;;:46;;;;;;;:::i;:::-;;;;-1:-1:-1;;27490:15:0;;27472;;27452:17;;27434:14;;27490:15;27452:35;;;:::i;:::-;:53;;;;:::i;:::-;27434:71;;27529:6;27539:1;27529:11;27525:30;;27549:6;27542:13;;;;;;;;;27525:30;27593:17;;27664:15;;27646;;27626:17;;27574:16;;-1:-1:-1;;;;;27593:17:0;;:31;;27664:15;;27626:35;;27646:15;27626:35;:::i;:::-;:53;;;;:::i;:::-;27681:8;27593:97;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;27593:97:0;;;;;;;;;;;;:::i;:::-;27691:1;27593:100;;;;;;;;:::i;:::-;;;;;;;27574:119;;27728:13;;27716:8;:25;27712:2582;;27907:15;;27789:21;;27766:20;;27907:19;;27925:1;;27907:19;:::i;:::-;27889:15;;27874:12;27854:17;;:32;;;;:::i;:::-;:50;;;;:::i;:::-;:72;;;;:::i;:::-;27982:17;;27833:93;;-1:-1:-1;27950:63:0;;27967:4;;-1:-1:-1;;;;;27982:17:0;27833:93;27950:8;:63::i;:::-;28036:17;;:244;;-1:-1:-1;;;28036:244:0;;-1:-1:-1;;;;;28036:17:0;;;;:39;;:244;;28102:10;;28036:17;;28167:8;;28210:4;;28242:15;;28036:244;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;28036:244:0;;;;;;;;;;;;:::i;:::-;-1:-1:-1;28303:17:0;28323:36;28347:12;28323:21;:36;:::i;:::-;28303:56;;28382:22;28425:1;28407:15;;:19;;;;:::i;:::-;28382:44;;28449:20;28530:6;28519;28505:1;28487:15;;:19;;;;:::i;:::-;:28;;28509:6;28487:28;:::i;:::-;28486:39;;;;:::i;:::-;28473:53;;:9;:53;:::i;:::-;28472:64;;;;:::i;:::-;28449:87;;28559:14;28632:6;28621;28591:17;;28611:6;28591:26;;;;:::i;:::-;28590:37;;;;:::i;:::-;28577:51;;:9;:51;:::i;:::-;28576:62;;;;:::i;:::-;28559:79;;28661:20;28738:6;28727;28699:15;;28717:6;28699:24;;;;:::i;:::-;28698:35;;;;:::i;:::-;28685:49;;:9;:49;:::i;:::-;28684:60;;;;:::i;:::-;28799:17;;28661:83;;-1:-1:-1;28767:67:0;;28784:4;;-1:-1:-1;;;;;28799:17:0;28819:14;28767:8;:67::i;:::-;28857:17;;:298;;-1:-1:-1;;;28857:298:0;;28946:4;28857:298;;;15294:34:1;15344:18;;;15337:34;;;28857:17:0;15387:18:1;;;15380:34;;;15430:18;;;15423:34;29083:6:0;15473:19:1;;;15466:44;29117:15:0;15526:19:1;;;15519:35;-1:-1:-1;;;;;28857:17:0;;;;:33;;28898:12;;15228:19:1;;28857:298:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;29178:23;29276:14;29263:10;:27;;;;:::i;:::-;29243:15;;29225;;29205:17;;:35;;;;:::i;:::-;:53;;;;:::i;:::-;29204:87;;;;:::i;:::-;29178:113;-1:-1:-1;29318:19:0;;29314:134;;29391:15;;29366:58;;29384:4;;-1:-1:-1;;;;;29391:15:0;29408;29366:9;:58::i;:::-;29495:17;;:41;;29471:19;;-1:-1:-1;;;;;29495:17:0;;29525:6;;29471:19;29495:41;29471:19;29495:41;29525:6;29495:17;:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29470:66;;;29567:14;29559:56;;;;-1:-1:-1;;;29559:56:0;;16288:2:1;29559:56:0;;;16270:21:1;16327:2;16307:18;;;16300:30;16366:31;16346:18;;;16339:59;16415:18;;29559:56:0;16086:353:1;29559:56:0;29669:15;;:45;;29639:25;;-1:-1:-1;;;;;29669:15:0;;29697:12;;29639:25;29669:45;29639:25;29669:45;29697:12;29669:15;:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29638:76;;;29745:20;29737:68;;;;-1:-1:-1;;;29737:68:0;;;;;;;:::i;:::-;29908:1;29892:12;29868:21;29877:12;29868:6;:21;:::i;:::-;:36;;;;:::i;:::-;29854:51;;:9;:51;:::i;:::-;:55;29850:296;;;29956:15;;29938:13;;-1:-1:-1;;;;;29956:15:0;30021:12;29997:21;30006:12;29997:6;:21;:::i;:::-;:36;;;;:::i;:::-;29984:50;;:9;:50;:::i;:::-;29956:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29937:102;;;30074:8;30066:56;;;;-1:-1:-1;;;30066:56:0;;;;;;;:::i;:::-;29911:235;29850:296;-1:-1:-1;;30188:1:0;30168:17;:21;;;30212:15;:19;;;30254:15;:19;-1:-1:-1;;;;;;;;27712:2582:0;26884:3443;;26850:4351;;;30353:13;;-1:-1:-1;;;;;30353:13:0;;;30337:30;;;;30333:868;;30485:11;;;;;;;:46;;;;;30516:15;;30500:12;:31;;30485:46;30481:576;;;30563:13;:8;30574:2;30563:13;:::i;:::-;30556:20;;;;:::i;:::-;;-1:-1:-1;30620:13:0;:8;30631:2;30620:13;:::i;:::-;30599:17;;:34;;;;;;;:::i;:::-;;;;-1:-1:-1;30481:576:0;;-1:-1:-1;30481:576:0;;30700:17;;30689:28;;:8;:28;:::i;:::-;30682:35;;;;:::i;:::-;;;30758:15;;30747:8;:26;;;;:::i;:::-;30740:33;;;;:::i;:::-;;;30814:15;;30803:8;:26;;;;:::i;:::-;30796:33;;;;:::i;:::-;;;30884:17;;30873:8;:28;;;;:::i;:::-;30852:17;;:49;;;;;;;:::i;:::-;;;;-1:-1:-1;;30954:15:0;;30943:26;;:8;:26;:::i;:::-;30924:15;;:45;;;;;;;:::i;:::-;;;;-1:-1:-1;;31022:15:0;;31011:26;;:8;:26;:::i;:::-;30992:15;;:45;;;;;;;:::i;:::-;;;;-1:-1:-1;;30481:576:0;31096:7;;31093:93;;31128:35;31138:4;31152;31159:3;31128:9;:35::i;:::-;31229:13;31239:3;31229:13;;:::i;:::-;31275;;31229;;-1:-1:-1;;;;;;31261:28:0;;;31275:13;;31261:28;31257:140;;31343:9;;31333:6;31317:13;31327:2;-1:-1:-1;;;;;5557:18:0;5530:7;5557:18;;;;;;;;;;;;5456:127;31317:13;:22;;;;:::i;:::-;:35;;31309:72;;;;-1:-1:-1;;;31309:72:0;;17050:2:1;31309:72:0;;;17032:21:1;17089:2;17069:18;;;17062:30;17128:26;17108:18;;;17101:54;17172:18;;31309:72:0;16848:348:1;31309:72:0;31451:11;;;;;;;31446:144;;-1:-1:-1;;;;;31491:15:0;;;;;;:9;:15;;;;;;;;31483:91;;;;-1:-1:-1;;;31483:91:0;;17403:2:1;31483:91:0;;;17385:21:1;17442:2;17422:18;;;17415:30;17481:34;17461:18;;;17454:62;17552:33;17532:18;;;17525:61;17603:19;;31483:91:0;17201:427:1;31483:91:0;26689:4912;;;26647:4954;-1:-1:-1;31628:6:0;;26397:5245;-1:-1:-1;;;26397:5245:0:o;9194:591::-;-1:-1:-1;;;;;9278:21:0;;9270:67;;;;-1:-1:-1;;;9270:67:0;;17835:2:1;9270:67:0;;;17817:21:1;17874:2;17854:18;;;17847:30;17913:34;17893:18;;;17886:62;-1:-1:-1;;;17964:18:1;;;17957:31;18005:19;;9270:67:0;17633:397:1;9270:67:0;-1:-1:-1;;;;;9437:18:0;;9412:22;9437:18;;;;;;;;;;;9474:24;;;;9466:71;;;;-1:-1:-1;;;9466:71:0;;18237:2:1;9466:71:0;;;18219:21:1;18276:2;18256:18;;;18249:30;18315:34;18295:18;;;18288:62;-1:-1:-1;;;18366:18:1;;;18359:32;18408:19;;9466:71:0;18035:398:1;9466:71:0;-1:-1:-1;;;;;9573:18:0;;:9;:18;;;;;;;;;;9594:23;;;9573:44;;9639:12;:22;;9611:6;;9573:9;9639:22;;9611:6;;9639:22;:::i;:::-;;;;-1:-1:-1;;9679:37:0;;1361:25:1;;;9705:1:0;;-1:-1:-1;;;;;9679:37:0;;;;;1349:2:1;1334:18;9679:37:0;;;;;;;25015:298;;;:::o;11667:174::-;11743:6;;;-1:-1:-1;;;;;11760:17:0;;;-1:-1:-1;;;;;;11760:17:0;;;;;;;11793:40;;11743:6;;;11760:17;11743:6;;11793:40;;11724:16;;11793:40;11713:128;11667:174;:::o;7997:733::-;-1:-1:-1;;;;;8137:20:0;;8129:70;;;;-1:-1:-1;;;8129:70:0;;18640:2:1;8129:70:0;;;18622:21:1;18679:2;18659:18;;;18652:30;18718:34;18698:18;;;18691:62;-1:-1:-1;;;18769:18:1;;;18762:35;18814:19;;8129:70:0;18438:401:1;8129:70:0;-1:-1:-1;;;;;8218:23:0;;8210:71;;;;-1:-1:-1;;;8210:71:0;;19046:2:1;8210:71:0;;;19028:21:1;19085:2;19065:18;;;19058:30;19124:34;19104:18;;;19097:62;-1:-1:-1;;;19175:18:1;;;19168:33;19218:19;;8210:71:0;18844:399:1;8210:71:0;-1:-1:-1;;;;;8378:17:0;;8354:21;8378:17;;;;;;;;;;;8414:23;;;;8406:74;;;;-1:-1:-1;;;8406:74:0;;19450:2:1;8406:74:0;;;19432:21:1;19489:2;19469:18;;;19462:30;19528:34;19508:18;;;19501:62;-1:-1:-1;;;19579:18:1;;;19572:36;19625:19;;8406:74:0;19248:402:1;8406:74:0;-1:-1:-1;;;;;8516:17:0;;;:9;:17;;;;;;;;;;;8536:22;;;8516:42;;8580:20;;;;;;;;:30;;8552:6;;8516:9;8580:30;;8552:6;;8580:30;:::i;:::-;;;;;;;;8645:9;-1:-1:-1;;;;;8628:35:0;8637:6;-1:-1:-1;;;;;8628:35:0;;8656:6;8628:35;;;;1361:25:1;;1349:2;1334:18;;1215:177;8628:35:0;;;;;;;;8118:612;7997:733;;;:::o;14:548:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;567:131::-;-1:-1:-1;;;;;642:31:1;;632:42;;622:70;;688:1;685;678:12;703:315;771:6;779;832:2;820:9;811:7;807:23;803:32;800:52;;;848:1;845;838:12;800:52;887:9;874:23;906:31;931:5;906:31;:::i;:::-;956:5;1008:2;993:18;;;;980:32;;-1:-1:-1;;;703:315:1:o;1397:456::-;1474:6;1482;1490;1543:2;1531:9;1522:7;1518:23;1514:32;1511:52;;;1559:1;1556;1549:12;1511:52;1598:9;1585:23;1617:31;1642:5;1617:31;:::i;:::-;1667:5;-1:-1:-1;1724:2:1;1709:18;;1696:32;1737:33;1696:32;1737:33;:::i;:::-;1397:456;;1789:7;;-1:-1:-1;;;1843:2:1;1828:18;;;;1815:32;;1397:456::o;1858:316::-;1935:6;1943;1951;2004:2;1992:9;1983:7;1979:23;1975:32;1972:52;;;2020:1;2017;2010:12;1972:52;-1:-1:-1;;2043:23:1;;;2113:2;2098:18;;2085:32;;-1:-1:-1;2164:2:1;2149:18;;;2136:32;;1858:316;-1:-1:-1;1858:316:1:o;2179:118::-;2265:5;2258:13;2251:21;2244:5;2241:32;2231:60;;2287:1;2284;2277:12;2302:382;2367:6;2375;2428:2;2416:9;2407:7;2403:23;2399:32;2396:52;;;2444:1;2441;2434:12;2396:52;2483:9;2470:23;2502:31;2527:5;2502:31;:::i;:::-;2552:5;-1:-1:-1;2609:2:1;2594:18;;2581:32;2622:30;2581:32;2622:30;:::i;:::-;2671:7;2661:17;;;2302:382;;;;;:::o;2878:180::-;2937:6;2990:2;2978:9;2969:7;2965:23;2961:32;2958:52;;;3006:1;3003;2996:12;2958:52;-1:-1:-1;3029:23:1;;2878:180;-1:-1:-1;2878:180:1:o;3294:247::-;3353:6;3406:2;3394:9;3385:7;3381:23;3377:32;3374:52;;;3422:1;3419;3412:12;3374:52;3461:9;3448:23;3480:31;3505:5;3480:31;:::i;3989:388::-;4057:6;4065;4118:2;4106:9;4097:7;4093:23;4089:32;4086:52;;;4134:1;4131;4124:12;4086:52;4173:9;4160:23;4192:31;4217:5;4192:31;:::i;:::-;4242:5;-1:-1:-1;4299:2:1;4284:18;;4271:32;4312:33;4271:32;4312:33;:::i;4382:309::-;4447:6;4455;4508:2;4496:9;4487:7;4483:23;4479:32;4476:52;;;4524:1;4521;4514:12;4476:52;4563:9;4550:23;4582:28;4604:5;4582:28;:::i;4696:380::-;4775:1;4771:12;;;;4818;;;4839:61;;4893:4;4885:6;4881:17;4871:27;;4839:61;4946:2;4938:6;4935:14;4915:18;4912:38;4909:161;;4992:10;4987:3;4983:20;4980:1;4973:31;5027:4;5024:1;5017:15;5055:4;5052:1;5045:15;4909:161;;4696:380;;;:::o;5461:245::-;5528:6;5581:2;5569:9;5560:7;5556:23;5552:32;5549:52;;;5597:1;5594;5587:12;5549:52;5629:9;5623:16;5648:28;5670:5;5648:28;:::i;5711:356::-;5913:2;5895:21;;;5932:18;;;5925:30;5991:34;5986:2;5971:18;;5964:62;6058:2;6043:18;;5711:356::o;6833:127::-;6894:10;6889:3;6885:20;6882:1;6875:31;6925:4;6922:1;6915:15;6949:4;6946:1;6939:15;6965:125;7030:9;;;7051:10;;;7048:36;;;7064:18;;:::i;8196:168::-;8269:9;;;8300;;8317:15;;;8311:22;;8297:37;8287:71;;8338:18;;:::i;8724:127::-;8785:10;8780:3;8776:20;8773:1;8766:31;8816:4;8813:1;8806:15;8840:4;8837:1;8830:15;8856:251;8926:6;8979:2;8967:9;8958:7;8954:23;8950:32;8947:52;;;8995:1;8992;8985:12;8947:52;9027:9;9021:16;9046:31;9071:5;9046:31;:::i;9112:127::-;9173:10;9168:3;9164:20;9161:1;9154:31;9204:4;9201:1;9194:15;9228:4;9225:1;9218:15;9244:461;9297:3;9335:5;9329:12;9362:6;9357:3;9350:19;9388:4;9417:2;9412:3;9408:12;9401:19;;9454:2;9447:5;9443:14;9475:1;9485:195;9499:6;9496:1;9493:13;9485:195;;;9564:13;;-1:-1:-1;;;;;9560:39:1;9548:52;;9620:12;;;;9655:15;;;;9596:1;9514:9;9485:195;;;-1:-1:-1;9696:3:1;;9244:461;-1:-1:-1;;;;;9244:461:1:o;9710:510::-;9981:6;9970:9;9963:25;10024:3;10019:2;10008:9;10004:18;9997:31;9944:4;10045:57;10097:3;10086:9;10082:19;10074:6;10045:57;:::i;:::-;-1:-1:-1;;;;;10138:32:1;;;;10133:2;10118:18;;10111:60;-1:-1:-1;10202:2:1;10187:18;10180:34;10037:65;9710:510;-1:-1:-1;;9710:510:1:o;12564:217::-;12604:1;12630;12620:132;;12674:10;12669:3;12665:20;12662:1;12655:31;12709:4;12706:1;12699:15;12737:4;12734:1;12727:15;12620:132;-1:-1:-1;12766:9:1;;12564:217::o;12786:332::-;12993:6;12982:9;12975:25;13036:2;13031;13020:9;13016:18;13009:30;12956:4;13056:56;13108:2;13097:9;13093:18;13085:6;13056:56;:::i;:::-;13048:64;12786:332;-1:-1:-1;;;;12786:332:1:o;13123:1105::-;13218:6;13249:2;13292;13280:9;13271:7;13267:23;13263:32;13260:52;;;13308:1;13305;13298:12;13260:52;13341:9;13335:16;13370:18;13411:2;13403:6;13400:14;13397:34;;;13427:1;13424;13417:12;13397:34;13465:6;13454:9;13450:22;13440:32;;13510:7;13503:4;13499:2;13495:13;13491:27;13481:55;;13532:1;13529;13522:12;13481:55;13561:2;13555:9;13583:2;13579;13576:10;13573:36;;;13589:18;;:::i;:::-;13635:2;13632:1;13628:10;13667:2;13661:9;13730:2;13726:7;13721:2;13717;13713:11;13709:25;13701:6;13697:38;13785:6;13773:10;13770:22;13765:2;13753:10;13750:18;13747:46;13744:72;;;13796:18;;:::i;:::-;13832:2;13825:22;13882:18;;;13916:15;;;;-1:-1:-1;13958:11:1;;;13954:20;;;13986:19;;;13983:39;;;14018:1;14015;14008:12;13983:39;14042:11;;;;14062:135;14078:6;14073:3;14070:15;14062:135;;;14144:10;;14132:23;;14095:12;;;;14175;;;;14062:135;;;14216:6;13123:1105;-1:-1:-1;;;;;;;;13123:1105:1:o;14233:128::-;14300:9;;;14321:11;;;14318:37;;;14335:18;;:::i;14366:582::-;14665:6;14654:9;14647:25;14708:6;14703:2;14692:9;14688:18;14681:34;14751:3;14746:2;14735:9;14731:18;14724:31;14628:4;14772:57;14824:3;14813:9;14809:19;14801:6;14772:57;:::i;:::-;-1:-1:-1;;;;;14865:32:1;;;;14860:2;14845:18;;14838:60;-1:-1:-1;14929:3:1;14914:19;14907:35;14764:65;14366:582;-1:-1:-1;;;14366:582:1:o;15565:306::-;15653:6;15661;15669;15722:2;15710:9;15701:7;15697:23;15693:32;15690:52;;;15738:1;15735;15728:12;15690:52;15767:9;15761:16;15751:26;;15817:2;15806:9;15802:18;15796:25;15786:35;;15861:2;15850:9;15846:18;15840:25;15830:35;;15565:306;;;;;:::o;16444:399::-;16646:2;16628:21;;;16685:2;16665:18;;;16658:30;16724:34;16719:2;16704:18;;16697:62;-1:-1:-1;;;16790:2:1;16775:18;;16768:33;16833:3;16818:19;;16444:399::o

Swarm Source

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