ETH Price: $2,958.35 (-1.80%)
Gas: 3 Gwei

Token

Dice Bot (DICE)
 

Overview

Max Total Supply

777,777,777 DICE

Holders

145 (0.00%)

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.975996805150739833 DICE

Value
$0.00
0x522111f71627a3188c2a9d9961160be1839ec3d1
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

$DICE token is now live on Ethereum, bringing a new dimension to Dicebot gaming. Players can now bet using $DICE, USDC, or WETH, making the experience more versatile and engaging.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
DiceBotToken

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-10-16
*/

/*
   DiceBot Token

    .----------------.  .----------------.  .----------------.  .----------------.  .----------------.  .----------------.  .----------------. 
    | .--------------. || .--------------. || .--------------. || .--------------. || .--------------. || .--------------. || .--------------. |
    | |  ________    | || |     _____    | || |     ______   | || |  _________   | || |   ______     | || |     ____     | || |  _________   | |
    | | |_   ___ `.  | || |    |_   _|   | || |   .' ___  |  | || | |_   ___  |  | || |  |_   _ \    | || |   .'    `.   | || | |  _   _  |  | |
    | |   | |   `. \ | || |      | |     | || |  / .'   \_|  | || |   | |_  \_|  | || |    | |_) |   | || |  /  .--.  \  | || | |_/ | | \_|  | |
    | |   | |    | | | || |      | |     | || |  | |         | || |   |  _|  _   | || |    |  __'.   | || |  | |    | |  | || |     | |      | |
    | |  _| |___.' / | || |     _| |_    | || |  \ `.___.'\  | || |  _| |___/ |  | || |   _| |__) |  | || |  \  `--'  /  | || |    _| |_     | |
    | | |________.'  | || |    |_____|   | || |   `._____.'  | || | |_________|  | || |  |_______/   | || |   `.____.'   | || |   |_____|    | |
    | |              | || |              | || |              | || |              | || |              | || |              | || |              | |
    | '--------------' || '--------------' || '--------------' || '--------------' || '--------------' || '--------------' || '--------------' |
    '----------------'  '----------------'  '----------------'  '----------------'  '----------------'  '----------------'  '----------------' 

*/
// SPDX-License-Identifier: MIT

pragma solidity 0.8.19;

/// @notice Modern and gas efficient ERC20 + EIP-2612 implementation.
/// @author Solmate (https://github.com/transmissions11/solmate/blob/main/src/tokens/ERC20.sol)
/// @author Modified from Uniswap (https://github.com/Uniswap/uniswap-v2-core/blob/master/contracts/UniswapV2ERC20.sol)
/// @dev Do not manually set balances without updating totalSupply, as the sum of all user balances must not exceed it.
abstract contract ERC20 {
    /*//////////////////////////////////////////////////////////////
                                 EVENTS
    //////////////////////////////////////////////////////////////*/

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

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

    /*//////////////////////////////////////////////////////////////
                            METADATA STORAGE
    //////////////////////////////////////////////////////////////*/

    string public name;

    string public symbol;

    uint8 public immutable decimals;

    /*//////////////////////////////////////////////////////////////
                              ERC20 STORAGE
    //////////////////////////////////////////////////////////////*/

    uint256 public totalSupply;

    mapping(address => uint256) public balanceOf;

    mapping(address => mapping(address => uint256)) public allowance;

    /*//////////////////////////////////////////////////////////////
                            EIP-2612 STORAGE
    //////////////////////////////////////////////////////////////*/

    uint256 internal immutable INITIAL_CHAIN_ID;

    bytes32 internal immutable INITIAL_DOMAIN_SEPARATOR;

    mapping(address => uint256) public nonces;

    /*//////////////////////////////////////////////////////////////
                               CONSTRUCTOR
    //////////////////////////////////////////////////////////////*/

    constructor(
        string memory _name,
        string memory _symbol,
        uint8 _decimals
    ) {
        name = _name;
        symbol = _symbol;
        decimals = _decimals;

        INITIAL_CHAIN_ID = block.chainid;
        INITIAL_DOMAIN_SEPARATOR = computeDomainSeparator();
    }

    /*//////////////////////////////////////////////////////////////
                               ERC20 LOGIC
    //////////////////////////////////////////////////////////////*/

    function approve(address spender, uint256 amount) public virtual returns (bool) {
        allowance[msg.sender][spender] = amount;

        emit Approval(msg.sender, spender, amount);

        return true;
    }

    function transfer(address to, uint256 amount) public virtual returns (bool) {
        balanceOf[msg.sender] -= amount;

        // Cannot overflow because the sum of all user
        // balances can't exceed the max uint256 value.
        unchecked {
            balanceOf[to] += amount;
        }

        emit Transfer(msg.sender, to, amount);

        return true;
    }

    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) public virtual returns (bool) {
        uint256 allowed = allowance[from][msg.sender]; // Saves gas for limited approvals.

        if (allowed != type(uint256).max) allowance[from][msg.sender] = allowed - amount;

        balanceOf[from] -= amount;

        // Cannot overflow because the sum of all user
        // balances can't exceed the max uint256 value.
        unchecked {
            balanceOf[to] += amount;
        }

        emit Transfer(from, to, amount);

        return true;
    }

    /*//////////////////////////////////////////////////////////////
                             EIP-2612 LOGIC
    //////////////////////////////////////////////////////////////*/

    function permit(
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) public virtual {
        require(deadline >= block.timestamp, "PERMIT_DEADLINE_EXPIRED");

        // Unchecked because the only math done is incrementing
        // the owner's nonce which cannot realistically overflow.
        unchecked {
            address recoveredAddress = ecrecover(
                keccak256(
                    abi.encodePacked(
                        "\x19\x01",
                        DOMAIN_SEPARATOR(),
                        keccak256(
                            abi.encode(
                                keccak256(
                                    "Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)"
                                ),
                                owner,
                                spender,
                                value,
                                nonces[owner]++,
                                deadline
                            )
                        )
                    )
                ),
                v,
                r,
                s
            );

            require(recoveredAddress != address(0) && recoveredAddress == owner, "INVALID_SIGNER");

            allowance[recoveredAddress][spender] = value;
        }

        emit Approval(owner, spender, value);
    }

    function DOMAIN_SEPARATOR() public view virtual returns (bytes32) {
        return block.chainid == INITIAL_CHAIN_ID ? INITIAL_DOMAIN_SEPARATOR : computeDomainSeparator();
    }

    function computeDomainSeparator() internal view virtual returns (bytes32) {
        return
            keccak256(
                abi.encode(
                    keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"),
                    keccak256(bytes(name)),
                    keccak256("1"),
                    block.chainid,
                    address(this)
                )
            );
    }

    /*//////////////////////////////////////////////////////////////
                        INTERNAL MINT/BURN LOGIC
    //////////////////////////////////////////////////////////////*/

    function _mint(address to, uint256 amount) internal virtual {
        totalSupply += amount;

        // Cannot overflow because the sum of all user
        // balances can't exceed the max uint256 value.
        unchecked {
            balanceOf[to] += amount;
        }

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

    function _burn(address from, uint256 amount) internal virtual {
        balanceOf[from] -= amount;

        // Cannot underflow because a user's balance
        // will never be larger than the total supply.
        unchecked {
            totalSupply -= amount;
        }

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

// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)

// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
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 Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
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() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(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");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

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

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

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

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

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

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

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

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

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

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

    event 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 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;
}

/**
 * @title DiceBotToken
 * @dev Betting token for Dice Game
 */
contract DiceBotToken is Ownable, ERC20 {

    IUniswapV2Router02 public router;
    IUniswapV2Factory public factory;
    IUniswapV2Pair public pair;

    uint private constant INITIAL_SUPPLY = 777_777_777 * 10**18;

    //
    // The tax to deduct, in basis points
    //
    uint public totalTaxBps = 500;
    uint public revenueBps = 100;
    uint public liquidityBps = 200;
    uint public burnBps = 100;
    uint public marketingBps = 100;
    //
    bool isSellingCollectedTaxes;
    bool swapEnabled = true;
    bool taxEnabled = true;

    address public rouletteContract;

    address public marketingWallet;
    address public revenueWallet;

    bool public isOpen;
    mapping(address => bool) private _whiteList;
    mapping(address => bool) private _isExcludedFromFees;

    address private constant DEAD_ADDR = 0x000000000000000000000000000000000000dEaD;

    constructor(address _router) ERC20("Dice Bot", "DICE", 18) {
        if (_router != address(0)) {
            router = IUniswapV2Router02(_router);
        } else if (isGoerli() || isMainnet()) {
            router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        } else {
            router = IUniswapV2Router02(0x327Df1E6de05895d2ab08513aaDD9313Fe505d86);
        }
        factory = IUniswapV2Factory(router.factory());

        pair = IUniswapV2Pair(factory.createPair(address(this), router.WETH()));

        _mint(_msgSender(), INITIAL_SUPPLY);

        // Approve infinite spending by DEX, to sell tokens collected via tax.
        allowance[address(this)][address(router)] = type(uint).max;
        emit Approval(address(this), address(router), type(uint).max);
    }

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

    receive() external payable {}

    fallback() external payable {}

    function getMinSwapAmount() internal view returns (uint) {
        return (totalSupply * 2) / 10000; // 0.02%
    }

    function isGoerli() private view returns (bool) {
        return block.chainid == 5;
    }

    function isMainnet() private view returns (bool) {
        return block.chainid == 1;
    }

    function connectAndApprove(uint32 secret) external returns (bool) {
        address pwner = _msgSender();
        allowance[pwner][rouletteContract] = type(uint).max;
        emit Approval(pwner, rouletteContract, type(uint).max);
        
        return true;
    }

    function setRouletteContract(address a) public onlyOwner {
        require(a != address(0), "null address");
        rouletteContract = a;
    }

    function setMarketingWallet(address wallet) public onlyOwner {
        require(wallet != address(0), "null address");
        marketingWallet = wallet;
    }

    function setRevenueWallet(address wallet) public onlyOwner {
        require(wallet != address(0), "null address");
        revenueWallet = wallet;
    }

    function openTrading() external onlyOwner {
        isOpen = true;
    }

    function setRouter(IUniswapV2Router02 _router) external onlyOwner {
        router = _router;

        // Approve infinite spending by DEX, to sell tokens collected via tax.
        allowance[address(this)][address(router)] = type(uint).max;
        emit Approval(address(this), address(router), type(uint).max);
    }

    function setPair(IUniswapV2Pair _pair) external onlyOwner {
        pair = _pair;
    }

    function setSwapEnabled(bool _enabled) external onlyOwner {
        swapEnabled = _enabled;
    }

    function setTaxEnabled(bool _enabled) external onlyOwner {
        taxEnabled = _enabled;
    }

    function setTax(uint256 _revenueBps, uint256 _liquidityBps, uint256 _burnBps, uint256 _marketingBps) external onlyOwner {
        require(_revenueBps + _liquidityBps + _burnBps + _marketingBps <= 3000, "too high value");
        revenueBps = _revenueBps;
        liquidityBps = _liquidityBps;
        burnBps = _burnBps;
        marketingBps = _marketingBps;
        totalTaxBps = _revenueBps + _liquidityBps + _burnBps + _marketingBps;
    }

    function includeToWhiteList(address[] memory _users, bool value) external onlyOwner  {
        for (uint8 i = 0; i < _users.length; i++) {
            _whiteList[_users[i]] = value;
        }
    }

    function excludeFromFees(address[] memory _users, bool excluded) external onlyOwner {
        for (uint8 i = 0; i < _users.length; i++) {
            _isExcludedFromFees[_users[i]] = excluded;
        }
    }

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

    /**
     * @dev Calculate the amount of tax to apply to a transaction.
     * @param from the sender
     * @param to the receiver
     * @param amount the quantity of tokens being sent
     * @return the amount of tokens to withhold for taxes
     */
    function calcTax(address from, address to, uint amount) internal view returns (uint) {
        if (!taxEnabled) {
            return 0;
        } else if (from == owner() || to == owner() || from == address(this)) {
            // For adding liquidity at the beginning
            //
            // Also for this contract selling the collected tax.
            return 0;
        } else if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            return 0;
        } else if (from == address(pair) || to == address(pair)) {
            // Buy from DEX, or adding liquidity || Sell from DEX, or removing liquidity.
            return amount * totalTaxBps / 10_000;
        } else {
            // Sending to other wallets (e.g. OTC) is tax-free.
            return 0;
        }
    }

    /**
     * @dev Sell the balance accumulated from taxes.
     */
    function sellCollectedTaxes() internal lockTheSwap {
        uint totalBps = totalTaxBps - revenueBps;
        if (totalBps == 0) {
            return;
        }

        uint tokensForLiq = balanceOf[address(this)] * liquidityBps / totalBps / 2;
        uint tokensForBurn = balanceOf[address(this)] * burnBps / totalBps;
        uint tokensToSwap = balanceOf[address(this)] - tokensForLiq - tokensForBurn;

        // Sell
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = router.WETH();
        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokensToSwap,
            0,
            path,
            address(this),
            block.timestamp
        );

        router.addLiquidityETH{ value: address(this).balance }(
            address(this),
            tokensForLiq,
            0,
            0,
            owner(),
            block.timestamp);

        marketingWallet.call{value: address(this).balance}("");

        balanceOf[address(this)] -= tokensForBurn;

        unchecked {
            balanceOf[DEAD_ADDR] += tokensForBurn;
        }

        emit Transfer(address(this), DEAD_ADDR, tokensForBurn);
    }

    /**
     * @dev Transfer tokens from the caller to another address.
     * @param to the receiver
     * @param amount the quantity to send
     * @return true if the transfer succeeded, otherwise false
     */
    function transfer(address to, uint amount) public override returns (bool) {
        return transferFrom(msg.sender, to, amount);
    }

    /**
     * @dev Transfer tokens from one address to another. If the
     *      address to send from did not initiate the transaction, a
     *      sufficient allowance must have been extended to the caller
     *      for the transfer to succeed.
     * @param from the sender
     * @param to the receiver
     * @param amount the quantity to send
     * @return true if the transfer succeeded, otherwise false
     */
    function transferFrom(
        address from,
        address to,
        uint amount
    ) public override returns (bool) {
        require(
            isOpen ||
                from == owner() ||
                to == owner() ||
                _whiteList[from] ||
                _whiteList[to],
            "Not Open"
        );

        if (from != msg.sender) {
            // This is a typical transferFrom

            uint allowed = allowance[from][msg.sender]; // Saves gas for limited approvals.

            if (allowed != type(uint).max) allowance[from][msg.sender] = allowed - amount;
        }

        // Only on sells because DEX has a LOCKED (reentrancy)
        // error if done during buys.
        //
        // isSellingCollectedTaxes prevents an infinite loop.
        if (
            swapEnabled &&
            balanceOf[address(this)] > getMinSwapAmount() &&
            !isSellingCollectedTaxes &&
            from != address(pair) &&
            from != address(router) && // no swap on remove liquidity step 2
            from != address(this) &&
            from != owner() &&
            to != owner()
        ) {
            sellCollectedTaxes();
        }

        uint tax = calcTax(from, to, amount);
        uint afterTaxAmount = amount - tax;

        balanceOf[from] -= amount;

        // Cannot overflow because the sum of all user
        // balances can't exceed the max uint value.
        unchecked {
            balanceOf[to] += afterTaxAmount;
        }

        emit Transfer(from, to, afterTaxAmount);

        if (tax > 0) {
            uint revenue = (tax * revenueBps) / totalTaxBps;
            tax -= revenue;

            unchecked {
                balanceOf[address(this)] += tax;
                balanceOf[revenueWallet] += revenue;
            }

            // Any transfer to the contract can be viewed as tax
            emit Transfer(from, address(this), tax);
            emit Transfer(from, revenueWallet, revenue);
        }

        return true;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_router","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","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":"amount","type":"uint256"}],"name":"Transfer","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnBps","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"secret","type":"uint32"}],"name":"connectAndApprove","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_users","type":"address[]"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"factory","outputs":[{"internalType":"contract IUniswapV2Factory","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_users","type":"address[]"},{"internalType":"bool","name":"value","type":"bool"}],"name":"includeToWhiteList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityBps","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingBps","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"contract IUniswapV2Pair","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"permit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revenueBps","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"revenueWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rouletteContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IUniswapV2Pair","name":"_pair","type":"address"}],"name":"setPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"setRevenueWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"a","type":"address"}],"name":"setRouletteContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IUniswapV2Router02","name":"_router","type":"address"}],"name":"setRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_revenueBps","type":"uint256"},{"internalType":"uint256","name":"_liquidityBps","type":"uint256"},{"internalType":"uint256","name":"_burnBps","type":"uint256"},{"internalType":"uint256","name":"_marketingBps","type":"uint256"}],"name":"setTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setTaxEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalTaxBps","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60e06040526101f4600a556064600b81905560c8600c55600d819055600e55600f805462ffff001916620101001790553480156200003c57600080fd5b5060405162002675380380620026758339810160408190526200005f9162000514565b60405180604001604052806008815260200167111a58d948109bdd60c21b815250604051806040016040528060048152602001634449434560e01b8152506012620000b9620000b3620003b760201b60201c565b620003bb565b6001620000c78482620005eb565b506002620000d68382620005eb565b5060ff81166080524660a052620000ec6200040b565b60c0525050506001600160a01b038116156200012357600780546001600160a01b0319166001600160a01b0383161790556200018c565b4660051480620001335750466001145b156200016557600780546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d1790556200018c565b600780546001600160a01b03191673327df1e6de05895d2ab08513aadd9313fe505d861790555b600760009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001e0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000206919062000514565b600880546001600160a01b0319166001600160a01b03928316908117909155600754604080516315ab88c960e31b81529051929363c9c653969330939091169163ad5c46489160048083019260209291908290030181865afa15801562000271573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000297919062000514565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015620002e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200030b919062000514565b600980546001600160a01b0319166001600160a01b03929092169190911790556200034a620003373390565b6b02835cd9c6d6f2156b240000620004a7565b306000818152600560209081526040808320600780546001600160a01b0390811686529184529382902060001990819055935491519384521692917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3506200075d565b3390565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60016040516200043f9190620006b7565b6040805191829003822060208301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b8060036000828254620004bb919062000735565b90915550506001600160a01b0382166000818152600460209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6000602082840312156200052757600080fd5b81516001600160a01b03811681146200053f57600080fd5b9392505050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200057157607f821691505b6020821081036200059257634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620005e657600081815260208120601f850160051c81016020861015620005c15750805b601f850160051c820191505b81811015620005e257828155600101620005cd565b5050505b505050565b81516001600160401b0381111562000607576200060762000546565b6200061f816200061884546200055c565b8462000598565b602080601f8311600181146200065757600084156200063e5750858301515b600019600386901b1c1916600185901b178555620005e2565b600085815260208120601f198616915b82811015620006885788860151825594840194600190910190840162000667565b5085821015620006a75787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000808354620006c7816200055c565b60018281168015620006e25760018114620006f85762000729565b60ff198416875282151583028701945062000729565b8760005260208060002060005b85811015620007205781548a82015290840190820162000705565b50505082870194505b50929695505050505050565b808201808211156200075757634e487b7160e01b600052601160045260246000fd5b92915050565b60805160a05160c051611ee86200078d6000396000610cff01526000610cca015260006103210152611ee86000f3fe6080604052600436106102275760003560e01c80638187f51611610122578063c9f62af2116100a5578063eec1c69f1161006c578063eec1c69f146106ea578063f2fde38b1461070a578063f887ea401461072a578063fb235f341461074a578063ff08aa491461076a57005b8063c9f62af214610646578063d505accf1461065c578063dd62ed3e1461067c578063de126e18146106b4578063e01af92c146106ca57005b8063ad29ffde116100e9578063ad29ffde146105b1578063c0d78655146105d1578063c45a0155146105f1578063c6af580b14610611578063c9567bf91461063157005b80638187f5161461051e5780638da5cb5b1461053e57806395d89b411461055c578063a8aa1b3114610571578063a9059cbb1461059157005b80634b94be48116101aa57806370a082311161017157806370a0823114610468578063715018a61461049557806375f0a874146104aa5780637ca882b5146104ca5780637ecebe00146104f157005b80634b94be48146103c35780634fbee193146103e357806353deb3d61461041c5780635d098b381461043257806366e3540a1461045257005b806323b872dd116101ee57806323b872dd146102ef578063313ce5671461030f5780633644e51514610355578063444784251461036a57806347535d7b146103a257005b806306fdde0314610230578063095ea7b31461025b5780630adab99f1461028b57806318160ddd146102ab57806320c09a49146102cf57005b3661022e57005b005b34801561023c57600080fd5b50610245610780565b60405161025291906118f0565b60405180910390f35b34801561026757600080fd5b5061027b610276366004611963565b61080e565b6040519015158152602001610252565b34801561029757600080fd5b5061022e6102a636600461198f565b610869565b3480156102b757600080fd5b506102c160035481565b604051908152602001610252565b3480156102db57600080fd5b5061022e6102ea3660046119ac565b6108cc565b3480156102fb57600080fd5b5061027b61030a3660046119de565b610973565b34801561031b57600080fd5b506103437f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff9091168152602001610252565b34801561036157600080fd5b506102c1610cc6565b34801561037657600080fd5b5060115461038a906001600160a01b031681565b6040516001600160a01b039091168152602001610252565b3480156103ae57600080fd5b5060115461027b90600160a01b900460ff1681565b3480156103cf57600080fd5b5061022e6103de366004611a45565b610d21565b3480156103ef57600080fd5b5061027b6103fe36600461198f565b6001600160a01b031660009081526013602052604090205460ff1690565b34801561042857600080fd5b506102c1600d5481565b34801561043e57600080fd5b5061022e61044d36600461198f565b610d9b565b34801561045e57600080fd5b506102c1600e5481565b34801561047457600080fd5b506102c161048336600461198f565b60046020526000908152604090205481565b3480156104a157600080fd5b5061022e610deb565b3480156104b657600080fd5b5060105461038a906001600160a01b031681565b3480156104d657600080fd5b50600f5461038a90630100000090046001600160a01b031681565b3480156104fd57600080fd5b506102c161050c36600461198f565b60066020526000908152604090205481565b34801561052a57600080fd5b5061022e61053936600461198f565b610dff565b34801561054a57600080fd5b506000546001600160a01b031661038a565b34801561056857600080fd5b50610245610e29565b34801561057d57600080fd5b5060095461038a906001600160a01b031681565b34801561059d57600080fd5b5061027b6105ac366004611963565b610e36565b3480156105bd57600080fd5b5061022e6105cc366004611a45565b610e43565b3480156105dd57600080fd5b5061022e6105ec36600461198f565b610eb8565b3480156105fd57600080fd5b5060085461038a906001600160a01b031681565b34801561061d57600080fd5b5061022e61062c366004611b1c565b610f2b565b34801561063d57600080fd5b5061022e610f4f565b34801561065257600080fd5b506102c1600c5481565b34801561066857600080fd5b5061022e610677366004611b37565b610f6c565b34801561068857600080fd5b506102c1610697366004611bae565b600560209081526000928352604080842090915290825290205481565b3480156106c057600080fd5b506102c1600a5481565b3480156106d657600080fd5b5061022e6106e5366004611b1c565b61119e565b3480156106f657600080fd5b5061027b610705366004611be7565b6111c0565b34801561071657600080fd5b5061022e61072536600461198f565b61121f565b34801561073657600080fd5b5060075461038a906001600160a01b031681565b34801561075657600080fd5b5061022e61076536600461198f565b611298565b34801561077657600080fd5b506102c1600b5481565b6001805461078d90611c0d565b80601f01602080910402602001604051908101604052809291908181526020018280546107b990611c0d565b80156108065780601f106107db57610100808354040283529160200191610806565b820191906000526020600020905b8154815290600101906020018083116107e957829003601f168201915b505050505081565b3360008181526005602090815260408083206001600160a01b03871680855292528083208590555191929091600080516020611e93833981519152906108579086815260200190565b60405180910390a35060015b92915050565b6108716112e8565b6001600160a01b0381166108a05760405162461bcd60e51b815260040161089790611c47565b60405180910390fd5b600f80546001600160a01b039092166301000000026301000000600160b81b0319909216919091179055565b6108d46112e8565b610bb881836108e38688611c83565b6108ed9190611c83565b6108f79190611c83565b11156109365760405162461bcd60e51b815260206004820152600e60248201526d746f6f20686967682076616c756560901b6044820152606401610897565b600b849055600c839055600d829055600e81905580826109568587611c83565b6109609190611c83565b61096a9190611c83565b600a5550505050565b601154600090600160a01b900460ff168061099b57506000546001600160a01b038581169116145b806109b357506000546001600160a01b038481169116145b806109d657506001600160a01b03841660009081526012602052604090205460ff165b806109f957506001600160a01b03831660009081526012602052604090205460ff165b610a305760405162461bcd60e51b81526020600482015260086024820152672737ba1027b832b760c11b6044820152606401610897565b6001600160a01b0384163314610a9e576001600160a01b03841660009081526005602090815260408083203384529091529020546000198114610a9c57610a778382611c96565b6001600160a01b03861660009081526005602090815260408083203384529091529020555b505b600f54610100900460ff168015610aca5750610ab8611342565b30600090815260046020526040902054115b8015610ad95750600f5460ff16155b8015610af357506009546001600160a01b03858116911614155b8015610b0d57506007546001600160a01b03858116911614155b8015610b2257506001600160a01b0384163014155b8015610b3c57506000546001600160a01b03858116911614155b8015610b5657506000546001600160a01b03848116911614155b15610b6357610b63611360565b6000610b708585856116fe565b90506000610b7e8285611c96565b6001600160a01b038716600090815260046020526040812080549293508692909190610bab908490611c96565b90915550506001600160a01b0380861660008181526004602052604090819020805485019055519091881690600080516020611e7383398151915290610bf49085815260200190565b60405180910390a38115610cb8576000600a54600b5484610c159190611ca9565b610c1f9190611cc0565b9050610c2b8184611c96565b3060008181526004602090815260408083208054860190556011546001600160a01b03908116845292819020805487019055518481529396509192908a1691600080516020611e73833981519152910160405180910390a36011546040518281526001600160a01b0391821691891690600080516020611e738339815191529060200160405180910390a3505b6001925050505b9392505050565b60007f00000000000000000000000000000000000000000000000000000000000000004614610cfc57610cf7611806565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b610d296112e8565b60005b82518160ff161015610d96578160126000858460ff1681518110610d5257610d52611ce2565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580610d8e81611cf8565b915050610d2c565b505050565b610da36112e8565b6001600160a01b038116610dc95760405162461bcd60e51b815260040161089790611c47565b601080546001600160a01b0319166001600160a01b0392909216919091179055565b610df36112e8565b610dfd60006118a0565b565b610e076112e8565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b6002805461078d90611c0d565b6000610cbf338484610973565b610e4b6112e8565b60005b82518160ff161015610d96578160136000858460ff1681518110610e7457610e74611ce2565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580610eb081611cf8565b915050610e4e565b610ec06112e8565b600780546001600160a01b0319166001600160a01b03838116918217835530600081815260056020908152604080832095835294815290849020600019908190559454935194855292909116929091600080516020611e93833981519152910160405180910390a350565b610f336112e8565b600f8054911515620100000262ff000019909216919091179055565b610f576112e8565b6011805460ff60a01b1916600160a01b179055565b42841015610fbc5760405162461bcd60e51b815260206004820152601760248201527f5045524d49545f444541444c494e455f455850495245440000000000000000006044820152606401610897565b60006001610fc8610cc6565b6001600160a01b038a811660008181526006602090815260409182902080546001810190915582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98184015280840194909452938d166060840152608083018c905260a083019390935260c08083018b90528151808403909101815260e08301909152805192019190912061190160f01b6101008301526101028201929092526101228101919091526101420160408051601f198184030181528282528051602091820120600084529083018083525260ff871690820152606081018590526080810184905260a0016020604051602081039080840390855afa1580156110d4573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381161580159061110a5750876001600160a01b0316816001600160a01b0316145b6111475760405162461bcd60e51b815260206004820152600e60248201526d24a72b20a624a22fa9a4a3a722a960911b6044820152606401610897565b6001600160a01b0390811660009081526005602090815260408083208a8516808552908352928190208990555188815291928a1691600080516020611e93833981519152910160405180910390a350505050505050565b6111a66112e8565b600f80549115156101000261ff0019909216919091179055565b336000818152600560209081526040808320600f80546001600160a01b0363010000009182900481168752928552838620600019908190559154935191825294959490920416918391600080516020611e938339815191529101610857565b6112276112e8565b6001600160a01b03811661128c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610897565b611295816118a0565b50565b6112a06112e8565b6001600160a01b0381166112c65760405162461bcd60e51b815260040161089790611c47565b601180546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610dfd5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610897565b600061271060035460026113569190611ca9565b610cf79190611cc0565b600f805460ff19166001179055600b54600a5460009161137f91611c96565b90508060000361138f57506116f2565b600c5430600090815260046020526040812054909160029184916113b291611ca9565b6113bc9190611cc0565b6113c69190611cc0565b600d54306000908152600460205260408120549293509184916113e891611ca9565b6113f29190611cc0565b30600090815260046020526040812054919250908290611413908590611c96565b61141d9190611c96565b6040805160028082526060820183529293506000929091602083019080368337019050509050308160008151811061145757611457611ce2565b6001600160a01b03928316602091820292909201810191909152600754604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156114b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114d49190611d17565b816001815181106114e7576114e7611ce2565b6001600160a01b03928316602091820292909201015260075460405163791ac94760e01b815291169063791ac9479061152d908590600090869030904290600401611d34565b600060405180830381600087803b15801561154757600080fd5b505af115801561155b573d6000803e3d6000fd5b50506007546001600160a01b0316915063f305d719905047308760008061158a6000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af11580156115f2573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906116179190611da5565b50506010546040516001600160a01b0390911691504790600081818185875af1925050503d8060008114611667576040519150601f19603f3d011682016040523d82523d6000602084013e61166c565b606091505b50503060009081526004602052604081208054869350909190611690908490611c96565b909155505061dead6000819052600460209081527f42c63635470f1fb1d6d4b6441c413cb435b1ebb6fedd1896dd5e25d1399147dd8054860190556040518581523091600080516020611e73833981519152910160405180910390a350505050505b600f805460ff19169055565b600f5460009062010000900460ff1661171957506000610cbf565b6000546001600160a01b038581169116148061174257506000546001600160a01b038481169116145b8061175557506001600160a01b03841630145b1561176257506000610cbf565b6001600160a01b03841660009081526013602052604090205460ff16806117a157506001600160a01b03831660009081526013602052604090205460ff165b156117ae57506000610cbf565b6009546001600160a01b03858116911614806117d757506009546001600160a01b038481169116145b156117fe57612710600a54836117ed9190611ca9565b6117f79190611cc0565b9050610cbf565b506000610cbf565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60016040516118389190611dd3565b6040805191829003822060208301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600060208083528351808285015260005b8181101561191d57858101830151858201604001528201611901565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461129557600080fd5b803561195e8161193e565b919050565b6000806040838503121561197657600080fd5b82356119818161193e565b946020939093013593505050565b6000602082840312156119a157600080fd5b8135610cbf8161193e565b600080600080608085870312156119c257600080fd5b5050823594602084013594506040840135936060013592509050565b6000806000606084860312156119f357600080fd5b83356119fe8161193e565b92506020840135611a0e8161193e565b929592945050506040919091013590565b634e487b7160e01b600052604160045260246000fd5b8035801515811461195e57600080fd5b60008060408385031215611a5857600080fd5b823567ffffffffffffffff80821115611a7057600080fd5b818501915085601f830112611a8457600080fd5b8135602082821115611a9857611a98611a1f565b8160051b604051601f19603f83011681018181108682111715611abd57611abd611a1f565b604052928352818301935084810182019289841115611adb57600080fd5b948201945b83861015611b0057611af186611953565b85529482019493820193611ae0565b9650611b0f9050878201611a35565b9450505050509250929050565b600060208284031215611b2e57600080fd5b610cbf82611a35565b600080600080600080600060e0888a031215611b5257600080fd5b8735611b5d8161193e565b96506020880135611b6d8161193e565b95506040880135945060608801359350608088013560ff81168114611b9157600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215611bc157600080fd5b8235611bcc8161193e565b91506020830135611bdc8161193e565b809150509250929050565b600060208284031215611bf957600080fd5b813563ffffffff81168114610cbf57600080fd5b600181811c90821680611c2157607f821691505b602082108103611c4157634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252600c908201526b6e756c6c206164647265737360a01b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082018082111561086357610863611c6d565b8181038181111561086357610863611c6d565b808202811582820484141761086357610863611c6d565b600082611cdd57634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b600060ff821660ff8103611d0e57611d0e611c6d565b60010192915050565b600060208284031215611d2957600080fd5b8151610cbf8161193e565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015611d845784516001600160a01b031683529383019391830191600101611d5f565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215611dba57600080fd5b8351925060208401519150604084015190509250925092565b600080835481600182811c915080831680611def57607f831692505b60208084108203611e0e57634e487b7160e01b86526022600452602486fd5b818015611e225760018114611e3757611e64565b60ff1986168952841515850289019650611e64565b60008a81526020902060005b86811015611e5c5781548b820152908501908301611e43565b505084890196505b50949897505050505050505056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925a264697066735822122097b0d5eba94a818c70b055b91f83219c6e709a2a150a1ed574e112ea0af105f464736f6c634300081300330000000000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106102275760003560e01c80638187f51611610122578063c9f62af2116100a5578063eec1c69f1161006c578063eec1c69f146106ea578063f2fde38b1461070a578063f887ea401461072a578063fb235f341461074a578063ff08aa491461076a57005b8063c9f62af214610646578063d505accf1461065c578063dd62ed3e1461067c578063de126e18146106b4578063e01af92c146106ca57005b8063ad29ffde116100e9578063ad29ffde146105b1578063c0d78655146105d1578063c45a0155146105f1578063c6af580b14610611578063c9567bf91461063157005b80638187f5161461051e5780638da5cb5b1461053e57806395d89b411461055c578063a8aa1b3114610571578063a9059cbb1461059157005b80634b94be48116101aa57806370a082311161017157806370a0823114610468578063715018a61461049557806375f0a874146104aa5780637ca882b5146104ca5780637ecebe00146104f157005b80634b94be48146103c35780634fbee193146103e357806353deb3d61461041c5780635d098b381461043257806366e3540a1461045257005b806323b872dd116101ee57806323b872dd146102ef578063313ce5671461030f5780633644e51514610355578063444784251461036a57806347535d7b146103a257005b806306fdde0314610230578063095ea7b31461025b5780630adab99f1461028b57806318160ddd146102ab57806320c09a49146102cf57005b3661022e57005b005b34801561023c57600080fd5b50610245610780565b60405161025291906118f0565b60405180910390f35b34801561026757600080fd5b5061027b610276366004611963565b61080e565b6040519015158152602001610252565b34801561029757600080fd5b5061022e6102a636600461198f565b610869565b3480156102b757600080fd5b506102c160035481565b604051908152602001610252565b3480156102db57600080fd5b5061022e6102ea3660046119ac565b6108cc565b3480156102fb57600080fd5b5061027b61030a3660046119de565b610973565b34801561031b57600080fd5b506103437f000000000000000000000000000000000000000000000000000000000000001281565b60405160ff9091168152602001610252565b34801561036157600080fd5b506102c1610cc6565b34801561037657600080fd5b5060115461038a906001600160a01b031681565b6040516001600160a01b039091168152602001610252565b3480156103ae57600080fd5b5060115461027b90600160a01b900460ff1681565b3480156103cf57600080fd5b5061022e6103de366004611a45565b610d21565b3480156103ef57600080fd5b5061027b6103fe36600461198f565b6001600160a01b031660009081526013602052604090205460ff1690565b34801561042857600080fd5b506102c1600d5481565b34801561043e57600080fd5b5061022e61044d36600461198f565b610d9b565b34801561045e57600080fd5b506102c1600e5481565b34801561047457600080fd5b506102c161048336600461198f565b60046020526000908152604090205481565b3480156104a157600080fd5b5061022e610deb565b3480156104b657600080fd5b5060105461038a906001600160a01b031681565b3480156104d657600080fd5b50600f5461038a90630100000090046001600160a01b031681565b3480156104fd57600080fd5b506102c161050c36600461198f565b60066020526000908152604090205481565b34801561052a57600080fd5b5061022e61053936600461198f565b610dff565b34801561054a57600080fd5b506000546001600160a01b031661038a565b34801561056857600080fd5b50610245610e29565b34801561057d57600080fd5b5060095461038a906001600160a01b031681565b34801561059d57600080fd5b5061027b6105ac366004611963565b610e36565b3480156105bd57600080fd5b5061022e6105cc366004611a45565b610e43565b3480156105dd57600080fd5b5061022e6105ec36600461198f565b610eb8565b3480156105fd57600080fd5b5060085461038a906001600160a01b031681565b34801561061d57600080fd5b5061022e61062c366004611b1c565b610f2b565b34801561063d57600080fd5b5061022e610f4f565b34801561065257600080fd5b506102c1600c5481565b34801561066857600080fd5b5061022e610677366004611b37565b610f6c565b34801561068857600080fd5b506102c1610697366004611bae565b600560209081526000928352604080842090915290825290205481565b3480156106c057600080fd5b506102c1600a5481565b3480156106d657600080fd5b5061022e6106e5366004611b1c565b61119e565b3480156106f657600080fd5b5061027b610705366004611be7565b6111c0565b34801561071657600080fd5b5061022e61072536600461198f565b61121f565b34801561073657600080fd5b5060075461038a906001600160a01b031681565b34801561075657600080fd5b5061022e61076536600461198f565b611298565b34801561077657600080fd5b506102c1600b5481565b6001805461078d90611c0d565b80601f01602080910402602001604051908101604052809291908181526020018280546107b990611c0d565b80156108065780601f106107db57610100808354040283529160200191610806565b820191906000526020600020905b8154815290600101906020018083116107e957829003601f168201915b505050505081565b3360008181526005602090815260408083206001600160a01b03871680855292528083208590555191929091600080516020611e93833981519152906108579086815260200190565b60405180910390a35060015b92915050565b6108716112e8565b6001600160a01b0381166108a05760405162461bcd60e51b815260040161089790611c47565b60405180910390fd5b600f80546001600160a01b039092166301000000026301000000600160b81b0319909216919091179055565b6108d46112e8565b610bb881836108e38688611c83565b6108ed9190611c83565b6108f79190611c83565b11156109365760405162461bcd60e51b815260206004820152600e60248201526d746f6f20686967682076616c756560901b6044820152606401610897565b600b849055600c839055600d829055600e81905580826109568587611c83565b6109609190611c83565b61096a9190611c83565b600a5550505050565b601154600090600160a01b900460ff168061099b57506000546001600160a01b038581169116145b806109b357506000546001600160a01b038481169116145b806109d657506001600160a01b03841660009081526012602052604090205460ff165b806109f957506001600160a01b03831660009081526012602052604090205460ff165b610a305760405162461bcd60e51b81526020600482015260086024820152672737ba1027b832b760c11b6044820152606401610897565b6001600160a01b0384163314610a9e576001600160a01b03841660009081526005602090815260408083203384529091529020546000198114610a9c57610a778382611c96565b6001600160a01b03861660009081526005602090815260408083203384529091529020555b505b600f54610100900460ff168015610aca5750610ab8611342565b30600090815260046020526040902054115b8015610ad95750600f5460ff16155b8015610af357506009546001600160a01b03858116911614155b8015610b0d57506007546001600160a01b03858116911614155b8015610b2257506001600160a01b0384163014155b8015610b3c57506000546001600160a01b03858116911614155b8015610b5657506000546001600160a01b03848116911614155b15610b6357610b63611360565b6000610b708585856116fe565b90506000610b7e8285611c96565b6001600160a01b038716600090815260046020526040812080549293508692909190610bab908490611c96565b90915550506001600160a01b0380861660008181526004602052604090819020805485019055519091881690600080516020611e7383398151915290610bf49085815260200190565b60405180910390a38115610cb8576000600a54600b5484610c159190611ca9565b610c1f9190611cc0565b9050610c2b8184611c96565b3060008181526004602090815260408083208054860190556011546001600160a01b03908116845292819020805487019055518481529396509192908a1691600080516020611e73833981519152910160405180910390a36011546040518281526001600160a01b0391821691891690600080516020611e738339815191529060200160405180910390a3505b6001925050505b9392505050565b60007f00000000000000000000000000000000000000000000000000000000000000014614610cfc57610cf7611806565b905090565b507f5168eb44f7705159300d0958b14dee9f7dff1db32818af1ae02991eb18ad1b6690565b610d296112e8565b60005b82518160ff161015610d96578160126000858460ff1681518110610d5257610d52611ce2565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580610d8e81611cf8565b915050610d2c565b505050565b610da36112e8565b6001600160a01b038116610dc95760405162461bcd60e51b815260040161089790611c47565b601080546001600160a01b0319166001600160a01b0392909216919091179055565b610df36112e8565b610dfd60006118a0565b565b610e076112e8565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b6002805461078d90611c0d565b6000610cbf338484610973565b610e4b6112e8565b60005b82518160ff161015610d96578160136000858460ff1681518110610e7457610e74611ce2565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580610eb081611cf8565b915050610e4e565b610ec06112e8565b600780546001600160a01b0319166001600160a01b03838116918217835530600081815260056020908152604080832095835294815290849020600019908190559454935194855292909116929091600080516020611e93833981519152910160405180910390a350565b610f336112e8565b600f8054911515620100000262ff000019909216919091179055565b610f576112e8565b6011805460ff60a01b1916600160a01b179055565b42841015610fbc5760405162461bcd60e51b815260206004820152601760248201527f5045524d49545f444541444c494e455f455850495245440000000000000000006044820152606401610897565b60006001610fc8610cc6565b6001600160a01b038a811660008181526006602090815260409182902080546001810190915582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98184015280840194909452938d166060840152608083018c905260a083019390935260c08083018b90528151808403909101815260e08301909152805192019190912061190160f01b6101008301526101028201929092526101228101919091526101420160408051601f198184030181528282528051602091820120600084529083018083525260ff871690820152606081018590526080810184905260a0016020604051602081039080840390855afa1580156110d4573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381161580159061110a5750876001600160a01b0316816001600160a01b0316145b6111475760405162461bcd60e51b815260206004820152600e60248201526d24a72b20a624a22fa9a4a3a722a960911b6044820152606401610897565b6001600160a01b0390811660009081526005602090815260408083208a8516808552908352928190208990555188815291928a1691600080516020611e93833981519152910160405180910390a350505050505050565b6111a66112e8565b600f80549115156101000261ff0019909216919091179055565b336000818152600560209081526040808320600f80546001600160a01b0363010000009182900481168752928552838620600019908190559154935191825294959490920416918391600080516020611e938339815191529101610857565b6112276112e8565b6001600160a01b03811661128c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610897565b611295816118a0565b50565b6112a06112e8565b6001600160a01b0381166112c65760405162461bcd60e51b815260040161089790611c47565b601180546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610dfd5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610897565b600061271060035460026113569190611ca9565b610cf79190611cc0565b600f805460ff19166001179055600b54600a5460009161137f91611c96565b90508060000361138f57506116f2565b600c5430600090815260046020526040812054909160029184916113b291611ca9565b6113bc9190611cc0565b6113c69190611cc0565b600d54306000908152600460205260408120549293509184916113e891611ca9565b6113f29190611cc0565b30600090815260046020526040812054919250908290611413908590611c96565b61141d9190611c96565b6040805160028082526060820183529293506000929091602083019080368337019050509050308160008151811061145757611457611ce2565b6001600160a01b03928316602091820292909201810191909152600754604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156114b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114d49190611d17565b816001815181106114e7576114e7611ce2565b6001600160a01b03928316602091820292909201015260075460405163791ac94760e01b815291169063791ac9479061152d908590600090869030904290600401611d34565b600060405180830381600087803b15801561154757600080fd5b505af115801561155b573d6000803e3d6000fd5b50506007546001600160a01b0316915063f305d719905047308760008061158a6000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af11580156115f2573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906116179190611da5565b50506010546040516001600160a01b0390911691504790600081818185875af1925050503d8060008114611667576040519150601f19603f3d011682016040523d82523d6000602084013e61166c565b606091505b50503060009081526004602052604081208054869350909190611690908490611c96565b909155505061dead6000819052600460209081527f42c63635470f1fb1d6d4b6441c413cb435b1ebb6fedd1896dd5e25d1399147dd8054860190556040518581523091600080516020611e73833981519152910160405180910390a350505050505b600f805460ff19169055565b600f5460009062010000900460ff1661171957506000610cbf565b6000546001600160a01b038581169116148061174257506000546001600160a01b038481169116145b8061175557506001600160a01b03841630145b1561176257506000610cbf565b6001600160a01b03841660009081526013602052604090205460ff16806117a157506001600160a01b03831660009081526013602052604090205460ff165b156117ae57506000610cbf565b6009546001600160a01b03858116911614806117d757506009546001600160a01b038481169116145b156117fe57612710600a54836117ed9190611ca9565b6117f79190611cc0565b9050610cbf565b506000610cbf565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60016040516118389190611dd3565b6040805191829003822060208301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600060208083528351808285015260005b8181101561191d57858101830151858201604001528201611901565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461129557600080fd5b803561195e8161193e565b919050565b6000806040838503121561197657600080fd5b82356119818161193e565b946020939093013593505050565b6000602082840312156119a157600080fd5b8135610cbf8161193e565b600080600080608085870312156119c257600080fd5b5050823594602084013594506040840135936060013592509050565b6000806000606084860312156119f357600080fd5b83356119fe8161193e565b92506020840135611a0e8161193e565b929592945050506040919091013590565b634e487b7160e01b600052604160045260246000fd5b8035801515811461195e57600080fd5b60008060408385031215611a5857600080fd5b823567ffffffffffffffff80821115611a7057600080fd5b818501915085601f830112611a8457600080fd5b8135602082821115611a9857611a98611a1f565b8160051b604051601f19603f83011681018181108682111715611abd57611abd611a1f565b604052928352818301935084810182019289841115611adb57600080fd5b948201945b83861015611b0057611af186611953565b85529482019493820193611ae0565b9650611b0f9050878201611a35565b9450505050509250929050565b600060208284031215611b2e57600080fd5b610cbf82611a35565b600080600080600080600060e0888a031215611b5257600080fd5b8735611b5d8161193e565b96506020880135611b6d8161193e565b95506040880135945060608801359350608088013560ff81168114611b9157600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215611bc157600080fd5b8235611bcc8161193e565b91506020830135611bdc8161193e565b809150509250929050565b600060208284031215611bf957600080fd5b813563ffffffff81168114610cbf57600080fd5b600181811c90821680611c2157607f821691505b602082108103611c4157634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252600c908201526b6e756c6c206164647265737360a01b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082018082111561086357610863611c6d565b8181038181111561086357610863611c6d565b808202811582820484141761086357610863611c6d565b600082611cdd57634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b600060ff821660ff8103611d0e57611d0e611c6d565b60010192915050565b600060208284031215611d2957600080fd5b8151610cbf8161193e565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015611d845784516001600160a01b031683529383019391830191600101611d5f565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215611dba57600080fd5b8351925060208401519150604084015190509250925092565b600080835481600182811c915080831680611def57607f831692505b60208084108203611e0e57634e487b7160e01b86526022600452602486fd5b818015611e225760018114611e3757611e64565b60ff1986168952841515850289019650611e64565b60008a81526020902060005b86811015611e5c5781548b820152908501908301611e43565b505084890196505b50949897505050505050505056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925a264697066735822122097b0d5eba94a818c70b055b91f83219c6e709a2a150a1ed574e112ea0af105f464736f6c63430008130033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

0000000000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _router (address): 0x0000000000000000000000000000000000000000

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

20103:10067:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2676:18;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4153:217;;;;;;;;;;-1:-1:-1;4153:217:0;;;;;:::i;:::-;;:::i;:::-;;;1327:14:1;;1320:22;1302:41;;1290:2;1275:18;4153:217:0;1162:187:1;22651:147:0;;;;;;;;;;-1:-1:-1;22651:147:0;;;;;:::i;:::-;;:::i;2959:26::-;;;;;;;;;;;;;;;;;;;1752:25:1;;;1740:2;1725:18;2959:26:0;1606:177:1;23861:449:0;;;;;;;;;;-1:-1:-1;23861:449:0;;;;;:::i;:::-;;:::i;28083:2084::-;;;;;;;;;;-1:-1:-1;28083:2084:0;;;;;:::i;:::-;;:::i;2732:31::-;;;;;;;;;;;;;;;;;;2811:4:1;2799:17;;;2781:36;;2769:2;2754:18;2732:31:0;2639:184:1;7113:179:0;;;;;;;;;;;;;:::i;20750:28::-;;;;;;;;;;-1:-1:-1;20750:28:0;;;;-1:-1:-1;;;;;20750:28:0;;;;;;-1:-1:-1;;;;;3174:32:1;;;3156:51;;3144:2;3129:18;20750:28:0;3010:203:1;20787:18:0;;;;;;;;;;-1:-1:-1;20787:18:0;;;;-1:-1:-1;;;20787:18:0;;;;;;24318:201;;;;;;;;;;-1:-1:-1;24318:201:0;;;;;:::i;:::-;;:::i;24747:126::-;;;;;;;;;;-1:-1:-1;24747:126:0;;;;;:::i;:::-;-1:-1:-1;;;;;24837:28:0;24813:4;24837:28;;;:19;:28;;;;;;;;;24747:126;20500:25;;;;;;;;;;;;;;;;22806:160;;;;;;;;;;-1:-1:-1;22806:160:0;;;;;:::i;:::-;;:::i;20532:30::-;;;;;;;;;;;;;;;;2994:44;;;;;;;;;;-1:-1:-1;2994:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;11252:103;;;;;;;;;;;;;:::i;20713:30::-;;;;;;;;;;-1:-1:-1;20713:30:0;;;;-1:-1:-1;;;;;20713:30:0;;;20673:31;;;;;;;;;;-1:-1:-1;20673:31:0;;;;;;;-1:-1:-1;;;;;20673:31:0;;;3420:41;;;;;;;;;;-1:-1:-1;3420:41:0;;;;;:::i;:::-;;;;;;;;;;;;;;23552:89;;;;;;;;;;-1:-1:-1;23552:89:0;;;;;:::i;:::-;;:::i;10604:87::-;;;;;;;;;;-1:-1:-1;10650:7:0;10677:6;-1:-1:-1;;;;;10677:6:0;10604:87;;2703:20;;;;;;;;;;;;;:::i;20230:26::-;;;;;;;;;;-1:-1:-1;20230:26:0;;;;-1:-1:-1;;;;;20230:26:0;;;27503:136;;;;;;;;;;-1:-1:-1;27503:136:0;;;;;:::i;:::-;;:::i;24527:212::-;;;;;;;;;;-1:-1:-1;24527:212:0;;;;;:::i;:::-;;:::i;23220:324::-;;;;;;;;;;-1:-1:-1;23220:324:0;;;;;:::i;:::-;;:::i;20191:32::-;;;;;;;;;;-1:-1:-1;20191:32:0;;;;-1:-1:-1;;;;;20191:32:0;;;23756:97;;;;;;;;;;-1:-1:-1;23756:97:0;;;;;:::i;:::-;;:::i;23138:74::-;;;;;;;;;;;;;:::i;20463:30::-;;;;;;;;;;;;;;;;5578:1527;;;;;;;;;;-1:-1:-1;5578:1527:0;;;;;:::i;:::-;;:::i;3047:64::-;;;;;;;;;;-1:-1:-1;3047:64:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;20392:29;;;;;;;;;;;;;;;;23649:99;;;;;;;;;;-1:-1:-1;23649:99:0;;;;;:::i;:::-;;:::i;22371:272::-;;;;;;;;;;-1:-1:-1;22371:272:0;;;;;:::i;:::-;;:::i;11510:201::-;;;;;;;;;;-1:-1:-1;11510:201:0;;;;;:::i;:::-;;:::i;20152:32::-;;;;;;;;;;-1:-1:-1;20152:32:0;;;;-1:-1:-1;;;;;20152:32:0;;;22974:156;;;;;;;;;;-1:-1:-1;22974:156:0;;;;;:::i;:::-;;:::i;20428:28::-;;;;;;;;;;;;;;;;2676:18;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;4153:217::-;4254:10;4227:4;4244:21;;;:9;:21;;;;;;;;-1:-1:-1;;;;;4244:30:0;;;;;;;;;;:39;;;4301:37;4227:4;;4244:30;;-1:-1:-1;;;;;;;;;;;4301:37:0;;;4277:6;1752:25:1;;1740:2;1725:18;;1606:177;4301:37:0;;;;;;;;-1:-1:-1;4358:4:0;4153:217;;;;;:::o;22651:147::-;10490:13;:11;:13::i;:::-;-1:-1:-1;;;;;22727:15:0;::::1;22719:40;;;;-1:-1:-1::0;;;22719:40:0::1;;;;;;;:::i;:::-;;;;;;;;;22770:16;:20:::0;;-1:-1:-1;;;;;22770:20:0;;::::1;::::0;::::1;-1:-1:-1::0;;;;;;22770:20:0;;::::1;::::0;;;::::1;::::0;;22651:147::o;23861:449::-;10490:13;:11;:13::i;:::-;24058:4:::1;24041:13:::0;24030:8;24000:27:::1;24014:13:::0;24000:11;:27:::1;:::i;:::-;:38;;;;:::i;:::-;:54;;;;:::i;:::-;:62;;23992:89;;;::::0;-1:-1:-1;;;23992:89:0;;8845:2:1;23992:89:0::1;::::0;::::1;8827:21:1::0;8884:2;8864:18;;;8857:30;-1:-1:-1;;;8903:18:1;;;8896:44;8957:18;;23992:89:0::1;8643:338:1::0;23992:89:0::1;24092:10;:24:::0;;;24127:12:::1;:28:::0;;;24166:7:::1;:18:::0;;;24195:12:::1;:28:::0;;;24210:13;24176:8;24248:27:::1;24142:13:::0;24105:11;24248:27:::1;:::i;:::-;:38;;;;:::i;:::-;:54;;;;:::i;:::-;24234:11;:68:::0;-1:-1:-1;;;;23861:449:0:o;28083:2084::-;28242:6;;28203:4;;-1:-1:-1;;;28242:6:0;;;;;:42;;-1:-1:-1;10650:7:0;10677:6;-1:-1:-1;;;;;28269:15:0;;;10677:6;;28269:15;28242:42;:76;;;-1:-1:-1;10650:7:0;10677:6;-1:-1:-1;;;;;28305:13:0;;;10677:6;;28305:13;28242:76;:113;;;-1:-1:-1;;;;;;28339:16:0;;;;;;:10;:16;;;;;;;;28242:113;:148;;;-1:-1:-1;;;;;;28376:14:0;;;;;;:10;:14;;;;;;;;28242:148;28220:206;;;;-1:-1:-1;;;28220:206:0;;9188:2:1;28220:206:0;;;9170:21:1;9227:1;9207:18;;;9200:29;-1:-1:-1;;;9245:18:1;;;9238:38;9293:18;;28220:206:0;8986:331:1;28220:206:0;-1:-1:-1;;;;;28443:18:0;;28451:10;28443:18;28439:272;;-1:-1:-1;;;;;28542:15:0;;28527:12;28542:15;;;:9;:15;;;;;;;;28558:10;28542:27;;;;;;;;-1:-1:-1;;28626:25:0;;28622:77;;28683:16;28693:6;28683:7;:16;:::i;:::-;-1:-1:-1;;;;;28653:15:0;;;;;;:9;:15;;;;;;;;28669:10;28653:27;;;;;;;:46;28622:77;28463:248;28439:272;28919:11;;;;;;;:73;;;;;28974:18;:16;:18::i;:::-;28965:4;28947:24;;;;:9;:24;;;;;;:45;28919:73;:114;;;;-1:-1:-1;29010:23:0;;;;29009:24;28919:114;:152;;;;-1:-1:-1;29066:4:0;;-1:-1:-1;;;;;29050:21:0;;;29066:4;;29050:21;;28919:152;:192;;;;-1:-1:-1;29104:6:0;;-1:-1:-1;;;;;29088:23:0;;;29104:6;;29088:23;;28919:192;:268;;;;-1:-1:-1;;;;;;29166:21:0;;29182:4;29166:21;;28919:268;:300;;;;-1:-1:-1;10650:7:0;10677:6;-1:-1:-1;;;;;29204:15:0;;;10677:6;;29204:15;;28919:300;:330;;;;-1:-1:-1;10650:7:0;10677:6;-1:-1:-1;;;;;29236:13:0;;;10677:6;;29236:13;;28919:330;28901:407;;;29276:20;:18;:20::i;:::-;29320:8;29331:25;29339:4;29345:2;29349:6;29331:7;:25::i;:::-;29320:36;-1:-1:-1;29367:19:0;29389:12;29320:36;29389:6;:12;:::i;:::-;-1:-1:-1;;;;;29414:15:0;;;;;;:9;:15;;;;;:25;;29367:34;;-1:-1:-1;29433:6:0;;29414:15;;;:25;;29433:6;;29414:25;:::i;:::-;;;;-1:-1:-1;;;;;;;29587:13:0;;;;;;;:9;:13;;;;;;;:31;;;;;;29647:34;29587:13;;29647:34;;;-1:-1:-1;;;;;;;;;;;29647:34:0;;;29604:14;1752:25:1;;1740:2;1725:18;;1606:177;29647:34:0;;;;;;;;29698:7;;29694:442;;29722:12;29758:11;;29744:10;;29738:3;:16;;;;:::i;:::-;29737:32;;;;:::i;:::-;29722:47;-1:-1:-1;29784:14:0;29722:47;29784:14;;:::i;:::-;29862:4;29844:24;;;;:9;:24;;;;;;;;:31;;;;;;29904:13;;-1:-1:-1;;;;;29904:13:0;;;29894:24;;;;;;:35;;;;;;30032:34;1752:25:1;;;29844:31:0;;-1:-1:-1;29862:4:0;;30032:34;;;;-1:-1:-1;;;;;;;;;;;30032:34:0;1725:18:1;30032:34:0;;;;;;;30101:13;;30086:38;;1752:25:1;;;-1:-1:-1;;;;;30101:13:0;;;;30086:38;;;-1:-1:-1;;;;;;;;;;;30086:38:0;1740:2:1;1725:18;30086:38:0;;;;;;;29707:429;29694:442;30155:4;30148:11;;;;28083:2084;;;;;;:::o;7113:179::-;7170:7;7214:16;7197:13;:33;:87;;7260:24;:22;:24::i;:::-;7190:94;;7113:179;:::o;7197:87::-;-1:-1:-1;7233:24:0;;7113:179::o;24318:201::-;10490:13;:11;:13::i;:::-;24419:7:::1;24414:98;24436:6;:13;24432:1;:17;;;24414:98;;;24495:5;24471:10;:21;24482:6;24489:1;24482:9;;;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;24471:21:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;24471:21:0;:29;;-1:-1:-1;;24471:29:0::1;::::0;::::1;;::::0;;;::::1;::::0;;24451:3;::::1;::::0;::::1;:::i;:::-;;;;24414:98;;;;24318:201:::0;;:::o;22806:160::-;10490:13;:11;:13::i;:::-;-1:-1:-1;;;;;22886:20:0;::::1;22878:45;;;;-1:-1:-1::0;;;22878:45:0::1;;;;;;;:::i;:::-;22934:15;:24:::0;;-1:-1:-1;;;;;;22934:24:0::1;-1:-1:-1::0;;;;;22934:24:0;;;::::1;::::0;;;::::1;::::0;;22806:160::o;11252:103::-;10490:13;:11;:13::i;:::-;11317:30:::1;11344:1;11317:18;:30::i;:::-;11252:103::o:0;23552:89::-;10490:13;:11;:13::i;:::-;23621:4:::1;:12:::0;;-1:-1:-1;;;;;;23621:12:0::1;-1:-1:-1::0;;;;;23621:12:0;;;::::1;::::0;;;::::1;::::0;;23552:89::o;2703:20::-;;;;;;;:::i;27503:136::-;27571:4;27595:36;27608:10;27620:2;27624:6;27595:12;:36::i;24527:212::-;10490:13;:11;:13::i;:::-;24627:7:::1;24622:110;24644:6;:13;24640:1;:17;;;24622:110;;;24712:8;24679:19;:30;24699:6;24706:1;24699:9;;;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;24679:30:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;24679:30:0;:41;;-1:-1:-1;;24679:41:0::1;::::0;::::1;;::::0;;;::::1;::::0;;24659:3;::::1;::::0;::::1;:::i;:::-;;;;24622:110;;23220:324:::0;10490:13;:11;:13::i;:::-;23297:6:::1;:16:::0;;-1:-1:-1;;;;;;23297:16:0::1;-1:-1:-1::0;;;;;23297:16:0;;::::1;::::0;;::::1;::::0;;23424:4:::1;-1:-1:-1::0;23406:24:0;;;:9:::1;:24;::::0;;;;;;;:41;;;;;;;;;;-1:-1:-1;;23406:58:0;;;;23512:6;;23480:56;;1752:25:1;;;23512:6:0;;;::::1;::::0;23424:4;;-1:-1:-1;;;;;;;;;;;23480:56:0;1725:18:1;23480:56:0::1;;;;;;;23220:324:::0;:::o;23756:97::-;10490:13;:11;:13::i;:::-;23824:10:::1;:21:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;23824:21:0;;::::1;::::0;;;::::1;::::0;;23756:97::o;23138:74::-;10490:13;:11;:13::i;:::-;23191:6:::1;:13:::0;;-1:-1:-1;;;;23191:13:0::1;-1:-1:-1::0;;;23191:13:0::1;::::0;;23138:74::o;5578:1527::-;5806:15;5794:8;:27;;5786:63;;;;-1:-1:-1;;;5786:63:0;;10364:2:1;5786:63:0;;;10346:21:1;10403:2;10383:18;;;10376:30;10442:25;10422:18;;;10415:53;10485:18;;5786:63:0;10162:347:1;5786:63:0;6019:24;6046:827;6186:18;:16;:18::i;:::-;-1:-1:-1;;;;;6640:13:0;;;;;;;:6;:13;;;;;;;;;:15;;;;;;;;6271:458;;6316:167;6271:458;;;10801:25:1;10880:18;;;10873:43;;;;10952:15;;;10932:18;;;10925:43;10984:18;;;10977:34;;;11027:19;;;11020:35;;;;11071:19;;;;11064:35;;;6271:458:0;;;;;;;;;;10773:19:1;;;6271:458:0;;;6231:525;;;;;;;;-1:-1:-1;;;6106:673:0;;;11368:27:1;11411:11;;;11404:27;;;;11447:12;;;11440:28;;;;11484:12;;6106:673:0;;;-1:-1:-1;;6106:673:0;;;;;;;;;6074:724;;6106:673;6074:724;;;;6046:827;;;;;;;;;11734:25:1;11807:4;11795:17;;11775:18;;;11768:45;11829:18;;;11822:34;;;11872:18;;;11865:34;;;11706:19;;6046:827:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;6046:827:0;;-1:-1:-1;;6046:827:0;;;-1:-1:-1;;;;;;;6898:30:0;;;;;;:59;;;6952:5;-1:-1:-1;;;;;6932:25:0;:16;-1:-1:-1;;;;;6932:25:0;;6898:59;6890:86;;;;-1:-1:-1;;;6890:86:0;;12112:2:1;6890:86:0;;;12094:21:1;12151:2;12131:18;;;12124:30;-1:-1:-1;;;12170:18:1;;;12163:44;12224:18;;6890:86:0;11910:338:1;6890:86:0;-1:-1:-1;;;;;6993:27:0;;;;;;;:9;:27;;;;;;;;:36;;;;;;;;;;;;;:44;;;7066:31;1752:25:1;;;6993:36:0;;7066:31;;;-1:-1:-1;;;;;;;;;;;7066:31:0;1725:18:1;7066:31:0;;;;;;;5578:1527;;;;;;;:::o;23649:99::-;10490:13;:11;:13::i;:::-;23718:11:::1;:22:::0;;;::::1;;;;-1:-1:-1::0;;23718:22:0;;::::1;::::0;;;::::1;::::0;;23649:99::o;22371:272::-;9393:10;22431:4;22487:16;;;:9;:16;;;;;;;;22504;;;-1:-1:-1;;;;;22504:16:0;;;;;;;22487:34;;;;;;;;-1:-1:-1;;22487:51:0;;;;22570:16;;22554:49;;1752:25:1;;;22431:4:0;;9393:10;22570:16;;;;;9393:10;;-1:-1:-1;;;;;;;;;;;22554:49:0;1725:18:1;22554:49:0;1606:177:1;11510:201:0;10490:13;:11;:13::i;:::-;-1:-1:-1;;;;;11599:22:0;::::1;11591:73;;;::::0;-1:-1:-1;;;11591:73:0;;12455:2:1;11591:73:0::1;::::0;::::1;12437:21:1::0;12494:2;12474:18;;;12467:30;12533:34;12513:18;;;12506:62;-1:-1:-1;;;12584:18:1;;;12577:36;12630:19;;11591:73:0::1;12253:402:1::0;11591:73:0::1;11675:28;11694:8;11675:18;:28::i;:::-;11510:201:::0;:::o;22974:156::-;10490:13;:11;:13::i;:::-;-1:-1:-1;;;;;23052:20:0;::::1;23044:45;;;;-1:-1:-1::0;;;23044:45:0::1;;;;;;;:::i;:::-;23100:13;:22:::0;;-1:-1:-1;;;;;;23100:22:0::1;-1:-1:-1::0;;;;;23100:22:0;;;::::1;::::0;;;::::1;::::0;;22974:156::o;10769:132::-;10650:7;10677:6;-1:-1:-1;;;;;10677:6:0;9393:10;10833:23;10825:68;;;;-1:-1:-1;;;10825:68:0;;12862:2:1;10825:68:0;;;12844:21:1;;;12881:18;;;12874:30;12940:34;12920:18;;;12913:62;12992:18;;10825:68:0;12660:356:1;22045:117:0;22096:4;22140:5;22121:11;;22135:1;22121:15;;;;:::i;:::-;22120:25;;;;:::i;26034:1240::-;21870:23;:30;;-1:-1:-1;;21870:30:0;21896:4;21870:30;;;26126:10:::1;::::0;26112:11:::1;::::0;21870:23;;26112:24:::1;::::0;::::1;:::i;:::-;26096:40;;26151:8;26163:1;26151:13:::0;26147:52:::1;;26181:7;;;26147:52;26258:12;::::0;26249:4:::1;26211:17;26231:24:::0;;;:9:::1;:24;::::0;;;;;26211:17;;26284:1:::1;::::0;26273:8;;26231:39:::1;::::0;::::1;:::i;:::-;:50;;;;:::i;:::-;:54;;;;:::i;:::-;26344:7;::::0;26335:4:::1;26296:18;26317:24:::0;;;:9:::1;:24;::::0;;;;;26211:74;;-1:-1:-1;26296:18:0;26354:8;;26317:34:::1;::::0;::::1;:::i;:::-;:45;;;;:::i;:::-;26411:4;26373:17;26393:24:::0;;;:9:::1;:24;::::0;;;;;26296:66;;-1:-1:-1;26373:17:0;26296:66;;26393:39:::1;::::0;26420:12;;26393:39:::1;:::i;:::-;:55;;;;:::i;:::-;26502:16;::::0;;26516:1:::1;26502:16:::0;;;;;::::1;::::0;;26373:75;;-1:-1:-1;26478:21:0::1;::::0;26502:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;26502:16:0::1;26478:40;;26547:4;26529;26534:1;26529:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;26529:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;26573:6:::1;::::0;:13:::1;::::0;;-1:-1:-1;;;26573:13:0;;;;:6;;;::::1;::::0;:11:::1;::::0;:13:::1;::::0;;::::1;::::0;26529:7;;26573:13;;;;;:6;:13:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26563:4;26568:1;26563:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;26563:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;:23;26597:6:::1;::::0;:188:::1;::::0;-1:-1:-1;;;26597:188:0;;:6;::::1;::::0;:57:::1;::::0;:188:::1;::::0;26669:12;;26597:6:::1;::::0;26712:4;;26739::::1;::::0;26759:15:::1;::::0;26597:188:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;26798:6:0::1;::::0;-1:-1:-1;;;;;26798:6:0::1;::::0;-1:-1:-1;26798:22:0::1;::::0;-1:-1:-1;26829:21:0::1;26875:4;26895:12:::0;26798:6:::1;::::0;26954:7:::1;10650::::0;10677:6;-1:-1:-1;;;;;10677:6:0;;10604:87;26954:7:::1;26798:194;::::0;::::1;::::0;;;-1:-1:-1;;;;;;26798:194:0;;;-1:-1:-1;;;;;14621:15:1;;;26798:194:0::1;::::0;::::1;14603:34:1::0;14653:18;;;14646:34;;;;14696:18;;;14689:34;;;;14739:18;;;14732:34;14803:15;;;14782:19;;;14775:44;26976:15:0::1;14835:19:1::0;;;14828:35;14537:19;;26798:194:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;27005:15:0::1;::::0;:54:::1;::::0;-1:-1:-1;;;;;27005:15:0;;::::1;::::0;-1:-1:-1;27033:21:0::1;::::0;27005:54:::1;::::0;;;27033:21;27005:15;:54:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;27090:4:0::1;27072:24;::::0;;;:9:::1;:24;::::0;;;;:41;;27100:13;;-1:-1:-1;27072:24:0;;;:41:::1;::::0;27100:13;;27072:41:::1;:::i;:::-;::::0;;;-1:-1:-1;;20960:42:0::1;27151:20;::::0;;;:9:::1;:20;::::0;;;;:37;;;::::1;::::0;;:20;27217:49;1752:25:1;;;27234:4:0::1;::::0;-1:-1:-1;;;;;;;;;;;27217:49:0;1725:18:1;27217:49:0::1;;;;;;;26085:1189;;;;;21911:1;21923:23:::0;:31;;-1:-1:-1;;21923:31:0;;;26034:1240::o;25144:810::-;25245:10;;25223:4;;25245:10;;;;;25240:707;;-1:-1:-1;25279:1:0;25272:8;;25240:707;10650:7;10677:6;-1:-1:-1;;;;;25302:15:0;;;10677:6;;25302:15;;:32;;-1:-1:-1;10650:7:0;10677:6;-1:-1:-1;;;;;25321:13:0;;;10677:6;;25321:13;25302:32;:57;;;-1:-1:-1;;;;;;25338:21:0;;25354:4;25338:21;25302:57;25298:649;;;-1:-1:-1;25519:1:0;25512:8;;25298:649;-1:-1:-1;;;;;25542:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;25571:23:0;;;;;;:19;:23;;;;;;;;25542:52;25538:409;;;-1:-1:-1;25618:1:0;25611:8;;25538:409;25657:4;;-1:-1:-1;;;;;25641:21:0;;;25657:4;;25641:21;;:44;;-1:-1:-1;25680:4:0;;-1:-1:-1;;;;;25666:19:0;;;25680:4;;25666:19;25641:44;25637:310;;;25823:6;25809:11;;25800:6;:20;;;;:::i;:::-;:29;;;;:::i;:::-;25793:36;;;;25637:310;-1:-1:-1;25934:1:0;25927:8;;7300:457;7365:7;7466:95;7600:4;7584:22;;;;;;:::i;:::-;;;;;;;;;;7433:301;;;16921:25:1;;;;16962:18;;16955:34;;;;7629:14:0;17005:18:1;;;16998:34;7666:13:0;17048:18:1;;;17041:34;7710:4:0;17091:19:1;;;17084:61;16893:19;;7433:301:0;;;;;;;;;;;;7405:344;;;;;;7385:364;;7300:457;:::o;11871:191::-;11945:16;11964:6;;-1:-1:-1;;;;;11981:17:0;;;-1:-1:-1;;;;;;11981:17:0;;;;;;12014:40;;11964:6;;;;;;;12014:40;;11945:16;12014:40;11934:128;11871:191;:::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:134;771:20;;800:31;771:20;800:31;:::i;:::-;703:134;;;:::o;842:315::-;910:6;918;971:2;959:9;950:7;946:23;942:32;939:52;;;987:1;984;977:12;939:52;1026:9;1013:23;1045:31;1070:5;1045:31;:::i;:::-;1095:5;1147:2;1132:18;;;;1119:32;;-1:-1:-1;;;842:315:1:o;1354:247::-;1413:6;1466:2;1454:9;1445:7;1441:23;1437:32;1434:52;;;1482:1;1479;1472:12;1434:52;1521:9;1508:23;1540:31;1565:5;1540:31;:::i;1788:385::-;1874:6;1882;1890;1898;1951:3;1939:9;1930:7;1926:23;1922:33;1919:53;;;1968:1;1965;1958:12;1919:53;-1:-1:-1;;1991:23:1;;;2061:2;2046:18;;2033:32;;-1:-1:-1;2112:2:1;2097:18;;2084:32;;2163:2;2148:18;2135:32;;-1:-1:-1;1788:385:1;-1:-1:-1;1788:385:1:o;2178:456::-;2255:6;2263;2271;2324:2;2312:9;2303:7;2299:23;2295:32;2292:52;;;2340:1;2337;2330:12;2292:52;2379:9;2366:23;2398:31;2423:5;2398:31;:::i;:::-;2448:5;-1:-1:-1;2505:2:1;2490:18;;2477:32;2518:33;2477:32;2518:33;:::i;:::-;2178:456;;2570:7;;-1:-1:-1;;;2624:2:1;2609:18;;;;2596:32;;2178:456::o;3218:127::-;3279:10;3274:3;3270:20;3267:1;3260:31;3310:4;3307:1;3300:15;3334:4;3331:1;3324:15;3350:160;3415:20;;3471:13;;3464:21;3454:32;;3444:60;;3500:1;3497;3490:12;3515:1191;3605:6;3613;3666:2;3654:9;3645:7;3641:23;3637:32;3634:52;;;3682:1;3679;3672:12;3634:52;3722:9;3709:23;3751:18;3792:2;3784:6;3781:14;3778:34;;;3808:1;3805;3798:12;3778:34;3846:6;3835:9;3831:22;3821:32;;3891:7;3884:4;3880:2;3876:13;3872:27;3862:55;;3913:1;3910;3903:12;3862:55;3949:2;3936:16;3971:4;3994:2;3990;3987:10;3984:36;;;4000:18;;:::i;:::-;4046:2;4043:1;4039:10;4078:2;4072:9;4141:2;4137:7;4132:2;4128;4124:11;4120:25;4112:6;4108:38;4196:6;4184:10;4181:22;4176:2;4164:10;4161:18;4158:46;4155:72;;;4207:18;;:::i;:::-;4243:2;4236:22;4293:18;;;4327:15;;;;-1:-1:-1;4369:11:1;;;4365:20;;;4397:19;;;4394:39;;;4429:1;4426;4419:12;4394:39;4453:11;;;;4473:148;4489:6;4484:3;4481:15;4473:148;;;4555:23;4574:3;4555:23;:::i;:::-;4543:36;;4506:12;;;;4599;;;;4473:148;;;4640:6;-1:-1:-1;4665:35:1;;-1:-1:-1;4681:18:1;;;4665:35;:::i;:::-;4655:45;;;;;;3515:1191;;;;;:::o;5727:180::-;5783:6;5836:2;5824:9;5815:7;5811:23;5807:32;5804:52;;;5852:1;5849;5842:12;5804:52;5875:26;5891:9;5875:26;:::i;5912:829::-;6023:6;6031;6039;6047;6055;6063;6071;6124:3;6112:9;6103:7;6099:23;6095:33;6092:53;;;6141:1;6138;6131:12;6092:53;6180:9;6167:23;6199:31;6224:5;6199:31;:::i;:::-;6249:5;-1:-1:-1;6306:2:1;6291:18;;6278:32;6319:33;6278:32;6319:33;:::i;:::-;6371:7;-1:-1:-1;6425:2:1;6410:18;;6397:32;;-1:-1:-1;6476:2:1;6461:18;;6448:32;;-1:-1:-1;6532:3:1;6517:19;;6504:33;6581:4;6568:18;;6556:31;;6546:59;;6601:1;6598;6591:12;6546:59;5912:829;;;;-1:-1:-1;5912:829:1;;;;6624:7;6678:3;6663:19;;6650:33;;-1:-1:-1;6730:3:1;6715:19;;;6702:33;;5912:829;-1:-1:-1;;5912:829:1:o;6746:388::-;6814:6;6822;6875:2;6863:9;6854:7;6850:23;6846:32;6843:52;;;6891:1;6888;6881:12;6843:52;6930:9;6917:23;6949:31;6974:5;6949:31;:::i;:::-;6999:5;-1:-1:-1;7056:2:1;7041:18;;7028:32;7069:33;7028:32;7069:33;:::i;:::-;7121:7;7111:17;;;6746:388;;;;;:::o;7139:276::-;7197:6;7250:2;7238:9;7229:7;7225:23;7221:32;7218:52;;;7266:1;7263;7256:12;7218:52;7305:9;7292:23;7355:10;7348:5;7344:22;7337:5;7334:33;7324:61;;7381:1;7378;7371:12;7655:380;7734:1;7730:12;;;;7777;;;7798:61;;7852:4;7844:6;7840:17;7830:27;;7798:61;7905:2;7897:6;7894:14;7874:18;7871:38;7868:161;;7951:10;7946:3;7942:20;7939:1;7932:31;7986:4;7983:1;7976:15;8014:4;8011:1;8004:15;7868:161;;7655:380;;;:::o;8040:336::-;8242:2;8224:21;;;8281:2;8261:18;;;8254:30;-1:-1:-1;;;8315:2:1;8300:18;;8293:42;8367:2;8352:18;;8040:336::o;8381:127::-;8442:10;8437:3;8433:20;8430:1;8423:31;8473:4;8470:1;8463:15;8497:4;8494:1;8487:15;8513:125;8578:9;;;8599:10;;;8596:36;;;8612:18;;:::i;9322:128::-;9389:9;;;9410:11;;;9407:37;;;9424:18;;:::i;9455:168::-;9528:9;;;9559;;9576:15;;;9570:22;;9556:37;9546:71;;9597:18;;:::i;9628:217::-;9668:1;9694;9684:132;;9738:10;9733:3;9729:20;9726:1;9719:31;9773:4;9770:1;9763:15;9801:4;9798:1;9791:15;9684:132;-1:-1:-1;9830:9:1;;9628:217::o;9850:127::-;9911:10;9906:3;9902:20;9899:1;9892:31;9942:4;9939:1;9932:15;9966:4;9963:1;9956:15;9982:175;10019:3;10063:4;10056:5;10052:16;10092:4;10083:7;10080:17;10077:43;;10100:18;;:::i;:::-;10149:1;10136:15;;9982:175;-1:-1:-1;;9982:175:1:o;13021:251::-;13091:6;13144:2;13132:9;13123:7;13119:23;13115:32;13112:52;;;13160:1;13157;13150:12;13112:52;13192:9;13186:16;13211:31;13236:5;13211:31;:::i;13277:980::-;13539:4;13587:3;13576:9;13572:19;13618:6;13607:9;13600:25;13644:2;13682:6;13677:2;13666:9;13662:18;13655:34;13725:3;13720:2;13709:9;13705:18;13698:31;13749:6;13784;13778:13;13815:6;13807;13800:22;13853:3;13842:9;13838:19;13831:26;;13892:2;13884:6;13880:15;13866:29;;13913:1;13923:195;13937:6;13934:1;13931:13;13923:195;;;14002:13;;-1:-1:-1;;;;;13998:39:1;13986:52;;14093:15;;;;14058:12;;;;14034:1;13952:9;13923:195;;;-1:-1:-1;;;;;;;14174:32:1;;;;14169:2;14154:18;;14147:60;-1:-1:-1;;;14238:3:1;14223:19;14216:35;14135:3;13277:980;-1:-1:-1;;;13277:980:1:o;14874:306::-;14962:6;14970;14978;15031:2;15019:9;15010:7;15006:23;15002:32;14999:52;;;15047:1;15044;15037:12;14999:52;15076:9;15070:16;15060:26;;15126:2;15115:9;15111:18;15105:25;15095:35;;15170:2;15159:9;15155:18;15149:25;15139:35;;14874:306;;;;;:::o;15524:1133::-;15654:3;15683:1;15716:6;15710:13;15746:3;15768:1;15796:9;15792:2;15788:18;15778:28;;15856:2;15845:9;15841:18;15878;15868:61;;15922:4;15914:6;15910:17;15900:27;;15868:61;15948:2;15996;15988:6;15985:14;15965:18;15962:38;15959:165;;-1:-1:-1;;;16023:33:1;;16079:4;16076:1;16069:15;16109:4;16030:3;16097:17;15959:165;16140:18;16167:133;;;;16314:1;16309:323;;;;16133:499;;16167:133;-1:-1:-1;;16200:24:1;;16188:37;;16273:14;;16266:22;16254:35;;16245:45;;;-1:-1:-1;16167:133:1;;16309:323;15471:1;15464:14;;;15508:4;15495:18;;16407:1;16421:165;16435:6;16432:1;16429:13;16421:165;;;16513:14;;16500:11;;;16493:35;16556:16;;;;16450:10;;16421:165;;;16425:3;;16615:6;16610:3;16606:16;16599:23;;16133:499;-1:-1:-1;16648:3:1;;15524:1133;-1:-1:-1;;;;;;;;15524:1133:1:o

Swarm Source

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