ETH Price: $1,866.06 (-13.04%)
 

Overview

Max Total Supply

100,000,000 DOGAT

Holders

38

Transfers

-
0

Market

Onchain Market Cap

-

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
DOGAT

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license
/**
 *Submitted for verification at Etherscan.io on 2023-11-14
*/

// SPDX-License-Identifier: MIT

/**

Website:   https://www.dogatcoin.xyz

Telegram:  https://t.me/dogat_erc

Twitter:   https://x.com/dogat_erc

*/

pragma solidity >=0.6.0 <0.9.0;

library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(
        uint256 a,
        uint256 b
    ) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(
        uint256 a,
        uint256 b
    ) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(
        uint256 a,
        uint256 b
    ) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(
        uint256 a,
        uint256 b
    ) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(
        uint256 a,
        uint256 b
    ) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator.
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

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

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

/**
 * @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. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby disabling 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);
    }
}

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

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

    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `to`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address to, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(
        address owner,
        address spender
    ) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

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

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

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

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

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

contract DOGAT is Context, IERC20, Ownable {
    using SafeMath for uint256;

    mapping(address => uint256) private _balances;
    mapping(address => mapping(address => uint256)) private _allowances;
    mapping(address => bool) private _isExcludedFromFee;
    mapping(address => bool) private _automatedMarketMakerPairs;
    mapping(address => bool) internal _isAdmin;

    address payable private devWallet =
        payable(0xe53064e227122fC6Cc2Ed7F4a83fB8C82eBE4d6B);
    address private constant DEAD = 0x000000000000000000000000000000000000dEaD;

    uint256 private _buyTax = 1;
    uint256 private _sellTax = 1;
    uint256 private _initialTax = 1;

    uint8 private constant _decimals = 18;
    uint256 private constant _tTotal = 100_000_000 * 10 ** _decimals;
    string private constant _name = unicode"Dogat";
    string private constant _symbol = unicode"DOGAT";
    uint256 public _maxWalletSize = (_tTotal * 20) / 1000; // 2% of total supply
    uint256 private swapThreshold = (_tTotal * 10) / 10000; // 1% of total supply

    IUniswapV2Router02 private uniswapV2Router;
    address public uniswapV2Pair;
    bool public tradingOpen = false;
    bool private inSwap = false;
    bool private swapEnabled = false;

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

    constructor() {
        _isAdmin[owner()] = true;

        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(devWallet, true);

        _mint(_msgSender(), _tTotal);
    }

    function launchLP() external payable onlyOwner {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );

        // Create a uniswap pair for this new token
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        uniswapV2Router = _uniswapV2Router;
        _approve(address(this), address(uniswapV2Router), ~uint256(0));

        uniswapV2Router.addLiquidityETH{value: msg.value}(
            address(this),
            balanceOf(address(this)),
            0,
            0,
            owner(),
            block.timestamp
        );

        _setAutomatedMarketMakerPair(uniswapV2Pair, true);
    }

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

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

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

    function totalSupply() public pure override returns (uint256) {
        return _tTotal;
    }

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

    function _mint(address account, uint256 amount) private {
        _balances[account] = amount;
        emit Transfer(address(0), account, amount);
    }

    // Launch limits functions

    /** @dev Remove wallet cap.
     * @notice Can only be called by the current owner.
     */
    function removeLimits() external onlyOwner {
        _maxWalletSize = ~uint256(0);
    }

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

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

        _setAutomatedMarketMakerPair(pair, value);
    }

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

    /** @dev Enable trading.
     * @notice Can only be called by the current owner.
     * @notice Can only be called once.
     */
    function openTrading() external onlyOwner {
        require(!tradingOpen, "trading is already open");
        tradingOpen = true;
        swapEnabled = true;
    }

    // Transfer functions

    function transfer(
        address recipient,
        uint256 amount
    ) external override returns (bool) {
        return _transferFrom(msg.sender, recipient, amount);
    }

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

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

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external override returns (bool) {
        require(
            _allowances[sender][_msgSender()] >= amount,
            "ERC20: transfer amount exceeds allowance"
        );
        _transferFrom(sender, recipient, amount);
        _approve(
            sender,
            _msgSender(),
            _allowances[sender][_msgSender()] - amount
        );

        return true;
    }

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

    function _transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) internal returns (bool) {
        require(
            _isExcludedFromFee[sender] ||
                _isExcludedFromFee[recipient] ||
                _isAdmin[sender] ||
                _isAdmin[recipient] ||
                tradingOpen,
            "Not authorized to trade yet"
        );

        uint256 _limit = _maxWalletSize;

        if (sender != owner() && recipient != owner() && recipient != DEAD) {
            if (!_automatedMarketMakerPairs[recipient]) {
                require(
                    _isExcludedFromFee[recipient] ||
                        _isExcludedFromFee[sender] ||
                        (_balances[recipient] + amount <= _limit),
                    "Transfer amount exceeds the MaxWallet size."
                );
            }
        }

        if (shouldSwapBack() && _automatedMarketMakerPairs[recipient] && !_isExcludedFromFee[sender]) {
            swapBack();
        }

        if (inSwap) {
            _basicTransfer(sender, recipient, amount);
        } else {
            uint256 feeAmount = 0;

            if (!shouldTakeFee(sender) && amount < _maxWalletSize) {
                feeAmount = 0;
            } else {
                feeAmount = takeFee(sender, recipient, amount);
            }

            if (feeAmount > 0 || !swapEnabled) {
                _balances[sender] = _balances[sender] - amount;
                _balances[address(this)] += feeAmount;
                emit Transfer(sender, address(this), feeAmount);
            }

            _balances[recipient] = _balances[recipient] + (amount - feeAmount);
            emit Transfer(sender, recipient, amount - feeAmount);
        }

        return true;
    }

    function _basicTransfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal returns (bool) {
        _balances[sender] = _balances[sender] - amount;
        _balances[recipient] = _balances[recipient] + (amount);
        emit Transfer(sender, recipient, amount);
        return true;
    }

    function shouldTakeFee(address sender) internal view returns (bool) {
        return !_isExcludedFromFee[sender];
    }

    function takeFee(
        address sender,
        address recipient,
        uint256 amount
    ) private view returns (uint256) {
        uint256 feeAmount = 0;
        uint256 tax = swapEnabled ? _initialTax : 0;
        if (
            _automatedMarketMakerPairs[sender] &&
            !_automatedMarketMakerPairs[recipient]
        ) {
            tax = _buyTax;
        } else if (
            !_automatedMarketMakerPairs[sender] &&
            _automatedMarketMakerPairs[recipient]
        ) {
            tax = _sellTax;
        }

        feeAmount = (amount * tax) / 100;

        return feeAmount;
    }

    function sendETHToFee(uint256 amount) private {
        devWallet.transfer(amount);
    }

    receive() external payable {}

    function min(uint256 a, uint256 b) private pure returns (uint256) {
        return (a > b) ? b : a;
    }

    function isContract(address account) private view returns (bool) {
        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }

    function shouldSwapBack() internal view returns (bool) {
        return
            !_automatedMarketMakerPairs[msg.sender] &&
            !inSwap &&
            swapEnabled &&
            balanceOf(address(this)) > 0 ;
    }

    function setSwapThreshold(uint256 newTax) external onlyOwner {
        swapThreshold = newTax;
    }

    function swapBack() internal lockTheSwap {
        uint256 amountToSwap = balanceOf(address(this));

        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

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

        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            amountToSwap,
            0,
            path,
            address(this),
            block.timestamp
        );

        payable(devWallet).transfer(address(this).balance);
    }
}

Contract Security Audit

Contract ABI

API
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_maxWalletSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"launchLP","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","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":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newTax","type":"uint256"}],"name":"setSwapThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"tradingOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052600680546001600160a01b03191673e53064e227122fc6cc2ed7f4a83fb8c82ebe4d6b1790556001600781905560088190556009556103e86200004a6012600a620003de565b6200005a906305f5e100620003f6565b62000067906014620003f6565b62000073919062000410565b600a556127106012600a620000899190620003de565b62000099906305f5e100620003f6565b620000a690600a620003f6565b620000b2919062000410565b600b55600d805462ffffff60a01b19169055348015620000d157600080fd5b50620000dd3362000192565b600160056000620000f66000546001600160a01b031690565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790556200013d620001356000546001600160a01b031690565b6001620001e2565b6200014a306001620001e2565b60065462000163906001600160a01b03166001620001e2565b6200018c33620001766012600a620003de565b62000186906305f5e100620003f6565b62000217565b62000433565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b620001ec62000268565b6001600160a01b03919091166000908152600360205260409020805460ff1916911515919091179055565b6001600160a01b0382166000818152600160209081526040808320859055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6000546001600160a01b03163314620002c75760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640160405180910390fd5b565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111562000320578160001904821115620003045762000304620002c9565b808516156200031257918102915b93841c9390800290620002e4565b509250929050565b6000826200033957506001620003d8565b816200034857506000620003d8565b81600181146200036157600281146200036c576200038c565b6001915050620003d8565b60ff841115620003805762000380620002c9565b50506001821b620003d8565b5060208310610133831016604e8410600b8410161715620003b1575081810a620003d8565b620003bd8383620002df565b8060001904821115620003d457620003d4620002c9565b0290505b92915050565b6000620003ef60ff84168362000328565b9392505050565b8082028115828204841417620003d857620003d8620002c9565b6000826200042e57634e487b7160e01b600052601260045260246000fd5b500490565b6117a380620004436000396000f3fe60806040526004361061012e5760003560e01c80638da5cb5b116100ab578063a9059cbb1161006f578063a9059cbb1461034d578063c02466681461036d578063c9567bf91461038d578063dd62ed3e146103a2578063f2fde38b146103e8578063ffb54a991461040857600080fd5b80638da5cb5b146102ab5780638f9a55c0146102c957806395d89b41146102df5780639a7a23d61461030d5780639d0014b11461032d57600080fd5b80633788045b116100f25780633788045b1461020957806349bd5a5e1461021357806370a082311461024b578063715018a614610281578063751039fc1461029657600080fd5b806306fdde031461013a578063095ea7b31461017a57806318160ddd146101aa57806323b872dd146101cd578063313ce567146101ed57600080fd5b3661013557005b600080fd5b34801561014657600080fd5b50604080518082019091526005815264111bd9d85d60da1b60208201525b60405161017191906113c1565b60405180910390f35b34801561018657600080fd5b5061019a610195366004611424565b610429565b6040519015158152602001610171565b3480156101b657600080fd5b506101bf610440565b604051908152602001610171565b3480156101d957600080fd5b5061019a6101e8366004611450565b610461565b3480156101f957600080fd5b5060405160128152602001610171565b61021161053b565b005b34801561021f57600080fd5b50600d54610233906001600160a01b031681565b6040516001600160a01b039091168152602001610171565b34801561025757600080fd5b506101bf610266366004611491565b6001600160a01b031660009081526001602052604090205490565b34801561028d57600080fd5b506102116107cd565b3480156102a257600080fd5b506102116107e1565b3480156102b757600080fd5b506000546001600160a01b0316610233565b3480156102d557600080fd5b506101bf600a5481565b3480156102eb57600080fd5b506040805180820190915260058152641113d1d05560da1b6020820152610164565b34801561031957600080fd5b506102116103283660046114ae565b6107f1565b34801561033957600080fd5b506102116103483660046114ec565b61088b565b34801561035957600080fd5b5061019a610368366004611424565b610898565b34801561037957600080fd5b506102116103883660046114ae565b6108ac565b34801561039957600080fd5b506102116108df565b3480156103ae57600080fd5b506101bf6103bd366004611505565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b3480156103f457600080fd5b50610211610403366004611491565b61095a565b34801561041457600080fd5b50600d5461019a90600160a01b900460ff1681565b60006104363384846109d0565b5060015b92915050565b600061044e6012600a61162d565b61045c906305f5e10061163c565b905090565b6001600160a01b03831660009081526002602090815260408083203384529091528120548211156104ea5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084015b60405180910390fd5b6104f5848484610af4565b506001600160a01b03841660009081526002602090815260408083203380855292529091205461053191869161052c908690611653565b6109d0565b5060019392505050565b610543610f29565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d9050806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561059a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105be9190611666565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561060b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061062f9190611666565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801561067c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106a09190611666565b600d80546001600160a01b039283166001600160a01b031991821617909155600c805492841692909116821790556106dc9030906000196109d0565b600c546001600160a01b031663f305d719343061070e816001600160a01b031660009081526001602052604090205490565b6000806107236000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af115801561078b573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906107b09190611683565b5050600d546107ca91506001600160a01b03166001610f83565b50565b6107d5610f29565b6107df6000610fae565b565b6107e9610f29565b600019600a55565b6107f9610f29565b600d546001600160a01b039081169083160361087d5760405162461bcd60e51b815260206004820152603a60248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f5f6175746f6d617465644d61726b65744d616b6572506169727300000000000060648201526084016104e1565b6108878282610f83565b5050565b610893610f29565b600b55565b60006108a5338484610af4565b9392505050565b6108b4610f29565b6001600160a01b03919091166000908152600360205260409020805460ff1916911515919091179055565b6108e7610f29565b600d54600160a01b900460ff16156109415760405162461bcd60e51b815260206004820152601760248201527f74726164696e6720697320616c7265616479206f70656e00000000000000000060448201526064016104e1565b600d805462ff00ff60a01b19166201000160a01b179055565b610962610f29565b6001600160a01b0381166109c75760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016104e1565b6107ca81610fae565b6001600160a01b038316610a325760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104e1565b6001600160a01b038216610a935760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104e1565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831660009081526003602052604081205460ff1680610b3357506001600160a01b03831660009081526003602052604090205460ff165b80610b5657506001600160a01b03841660009081526005602052604090205460ff165b80610b7957506001600160a01b03831660009081526005602052604090205460ff165b80610b8d5750600d54600160a01b900460ff165b610bd95760405162461bcd60e51b815260206004820152601b60248201527f4e6f7420617574686f72697a656420746f20747261646520796574000000000060448201526064016104e1565b600a546000546001600160a01b03868116911614801590610c0857506000546001600160a01b03858116911614155b8015610c1f57506001600160a01b03841661dead14155b15610d12576001600160a01b03841660009081526004602052604090205460ff16610d12576001600160a01b03841660009081526003602052604090205460ff1680610c8357506001600160a01b03851660009081526003602052604090205460ff165b80610cb257506001600160a01b0384166000908152600160205260409020548190610caf9085906116b1565b11155b610d125760405162461bcd60e51b815260206004820152602b60248201527f5472616e7366657220616d6f756e74206578636565647320746865204d61785760448201526a30b63632ba1039b4bd329760a91b60648201526084016104e1565b610d1a610ffe565b8015610d3e57506001600160a01b03841660009081526004602052604090205460ff165b8015610d6357506001600160a01b03851660009081526003602052604090205460ff16155b15610d7057610d7061105a565b600d54600160a81b900460ff1615610d9357610d8d858585611227565b50610f1e565b6001600160a01b03851660009081526003602052604081205460ff1615158015610dbe5750600a5484105b15610dcb57506000610dd9565b610dd68686866112e1565b90505b6000811180610df25750600d54600160b01b900460ff16155b15610e94576001600160a01b038616600090815260016020526040902054610e1b908590611653565b6001600160a01b038716600090815260016020526040808220929092553081529081208054839290610e4e9084906116b1565b909155505060405181815230906001600160a01b038816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b610e9e8185611653565b6001600160a01b038616600090815260016020526040902054610ec191906116b1565b6001600160a01b0380871660008181526001602052604090209290925587167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef610f0b8488611653565b60405190815260200160405180910390a3505b506001949350505050565b6000546001600160a01b031633146107df5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104e1565b6001600160a01b03919091166000908152600460205260409020805460ff1916911515919091179055565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b3360009081526004602052604081205460ff161580156110285750600d54600160a81b900460ff16155b801561103d5750600d54600160b01b900460ff165b801561045c57503060009081526001602052604081205411905090565b600d805460ff60a81b1916600160a81b17905530600090815260016020526040812054604080516002808252606082019092529192506000919081602001602082028036833701905050905030816000815181106110ba576110ba6116c4565b6001600160a01b03928316602091820292909201810191909152600c54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611113573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111379190611666565b8160018151811061114a5761114a6116c4565b6001600160a01b039283166020918202929092010152600c5461117091309116846109d0565b600c5460405163791ac94760e01b81526001600160a01b039091169063791ac947906111a99085906000908690309042906004016116da565b600060405180830381600087803b1580156111c357600080fd5b505af11580156111d7573d6000803e3d6000fd5b50506006546040516001600160a01b0390911692504780156108fc029250906000818181858888f19350505050158015611215573d6000803e3d6000fd5b5050600d805460ff60a81b1916905550565b6001600160a01b03831660009081526001602052604081205461124b908390611653565b6001600160a01b03808616600090815260016020526040808220939093559085168152205461127b9083906116b1565b6001600160a01b0380851660008181526001602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906112cf9086815260200190565b60405180910390a35060019392505050565b600d5460009081908190600160b01b900460ff16611300576000611304565b6009545b6001600160a01b03871660009081526004602052604090205490915060ff16801561134857506001600160a01b03851660009081526004602052604090205460ff16155b1561135657506007546113a1565b6001600160a01b03861660009081526004602052604090205460ff1615801561139757506001600160a01b03851660009081526004602052604090205460ff165b156113a157506008545b60646113ad828661163c565b6113b7919061174b565b9695505050505050565b600060208083528351808285015260005b818110156113ee578581018301518582016040015282016113d2565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146107ca57600080fd5b6000806040838503121561143757600080fd5b82356114428161140f565b946020939093013593505050565b60008060006060848603121561146557600080fd5b83356114708161140f565b925060208401356114808161140f565b929592945050506040919091013590565b6000602082840312156114a357600080fd5b81356108a58161140f565b600080604083850312156114c157600080fd5b82356114cc8161140f565b9150602083013580151581146114e157600080fd5b809150509250929050565b6000602082840312156114fe57600080fd5b5035919050565b6000806040838503121561151857600080fd5b82356115238161140f565b915060208301356114e18161140f565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111561158457816000190482111561156a5761156a611533565b8085161561157757918102915b93841c939080029061154e565b509250929050565b60008261159b5750600161043a565b816115a85750600061043a565b81600181146115be57600281146115c8576115e4565b600191505061043a565b60ff8411156115d9576115d9611533565b50506001821b61043a565b5060208310610133831016604e8410600b8410161715611607575081810a61043a565b6116118383611549565b806000190482111561162557611625611533565b029392505050565b60006108a560ff84168361158c565b808202811582820484141761043a5761043a611533565b8181038181111561043a5761043a611533565b60006020828403121561167857600080fd5b81516108a58161140f565b60008060006060848603121561169857600080fd5b8351925060208401519150604084015190509250925092565b8082018082111561043a5761043a611533565b634e487b7160e01b600052603260045260246000fd5b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561172a5784516001600160a01b031683529383019391830191600101611705565b50506001600160a01b03969096166060850152505050608001529392505050565b60008261176857634e487b7160e01b600052601260045260246000fd5b50049056fea2646970667358221220bbc0d7e1b4a593b9eb08c8433d14899f234b34c5127f1a089aacad1d5588180c64736f6c63430008130033

Deployed Bytecode

0x60806040526004361061012e5760003560e01c80638da5cb5b116100ab578063a9059cbb1161006f578063a9059cbb1461034d578063c02466681461036d578063c9567bf91461038d578063dd62ed3e146103a2578063f2fde38b146103e8578063ffb54a991461040857600080fd5b80638da5cb5b146102ab5780638f9a55c0146102c957806395d89b41146102df5780639a7a23d61461030d5780639d0014b11461032d57600080fd5b80633788045b116100f25780633788045b1461020957806349bd5a5e1461021357806370a082311461024b578063715018a614610281578063751039fc1461029657600080fd5b806306fdde031461013a578063095ea7b31461017a57806318160ddd146101aa57806323b872dd146101cd578063313ce567146101ed57600080fd5b3661013557005b600080fd5b34801561014657600080fd5b50604080518082019091526005815264111bd9d85d60da1b60208201525b60405161017191906113c1565b60405180910390f35b34801561018657600080fd5b5061019a610195366004611424565b610429565b6040519015158152602001610171565b3480156101b657600080fd5b506101bf610440565b604051908152602001610171565b3480156101d957600080fd5b5061019a6101e8366004611450565b610461565b3480156101f957600080fd5b5060405160128152602001610171565b61021161053b565b005b34801561021f57600080fd5b50600d54610233906001600160a01b031681565b6040516001600160a01b039091168152602001610171565b34801561025757600080fd5b506101bf610266366004611491565b6001600160a01b031660009081526001602052604090205490565b34801561028d57600080fd5b506102116107cd565b3480156102a257600080fd5b506102116107e1565b3480156102b757600080fd5b506000546001600160a01b0316610233565b3480156102d557600080fd5b506101bf600a5481565b3480156102eb57600080fd5b506040805180820190915260058152641113d1d05560da1b6020820152610164565b34801561031957600080fd5b506102116103283660046114ae565b6107f1565b34801561033957600080fd5b506102116103483660046114ec565b61088b565b34801561035957600080fd5b5061019a610368366004611424565b610898565b34801561037957600080fd5b506102116103883660046114ae565b6108ac565b34801561039957600080fd5b506102116108df565b3480156103ae57600080fd5b506101bf6103bd366004611505565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b3480156103f457600080fd5b50610211610403366004611491565b61095a565b34801561041457600080fd5b50600d5461019a90600160a01b900460ff1681565b60006104363384846109d0565b5060015b92915050565b600061044e6012600a61162d565b61045c906305f5e10061163c565b905090565b6001600160a01b03831660009081526002602090815260408083203384529091528120548211156104ea5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084015b60405180910390fd5b6104f5848484610af4565b506001600160a01b03841660009081526002602090815260408083203380855292529091205461053191869161052c908690611653565b6109d0565b5060019392505050565b610543610f29565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d9050806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561059a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105be9190611666565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561060b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061062f9190611666565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801561067c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106a09190611666565b600d80546001600160a01b039283166001600160a01b031991821617909155600c805492841692909116821790556106dc9030906000196109d0565b600c546001600160a01b031663f305d719343061070e816001600160a01b031660009081526001602052604090205490565b6000806107236000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af115801561078b573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906107b09190611683565b5050600d546107ca91506001600160a01b03166001610f83565b50565b6107d5610f29565b6107df6000610fae565b565b6107e9610f29565b600019600a55565b6107f9610f29565b600d546001600160a01b039081169083160361087d5760405162461bcd60e51b815260206004820152603a60248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f5f6175746f6d617465644d61726b65744d616b6572506169727300000000000060648201526084016104e1565b6108878282610f83565b5050565b610893610f29565b600b55565b60006108a5338484610af4565b9392505050565b6108b4610f29565b6001600160a01b03919091166000908152600360205260409020805460ff1916911515919091179055565b6108e7610f29565b600d54600160a01b900460ff16156109415760405162461bcd60e51b815260206004820152601760248201527f74726164696e6720697320616c7265616479206f70656e00000000000000000060448201526064016104e1565b600d805462ff00ff60a01b19166201000160a01b179055565b610962610f29565b6001600160a01b0381166109c75760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016104e1565b6107ca81610fae565b6001600160a01b038316610a325760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104e1565b6001600160a01b038216610a935760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104e1565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831660009081526003602052604081205460ff1680610b3357506001600160a01b03831660009081526003602052604090205460ff165b80610b5657506001600160a01b03841660009081526005602052604090205460ff165b80610b7957506001600160a01b03831660009081526005602052604090205460ff165b80610b8d5750600d54600160a01b900460ff165b610bd95760405162461bcd60e51b815260206004820152601b60248201527f4e6f7420617574686f72697a656420746f20747261646520796574000000000060448201526064016104e1565b600a546000546001600160a01b03868116911614801590610c0857506000546001600160a01b03858116911614155b8015610c1f57506001600160a01b03841661dead14155b15610d12576001600160a01b03841660009081526004602052604090205460ff16610d12576001600160a01b03841660009081526003602052604090205460ff1680610c8357506001600160a01b03851660009081526003602052604090205460ff165b80610cb257506001600160a01b0384166000908152600160205260409020548190610caf9085906116b1565b11155b610d125760405162461bcd60e51b815260206004820152602b60248201527f5472616e7366657220616d6f756e74206578636565647320746865204d61785760448201526a30b63632ba1039b4bd329760a91b60648201526084016104e1565b610d1a610ffe565b8015610d3e57506001600160a01b03841660009081526004602052604090205460ff165b8015610d6357506001600160a01b03851660009081526003602052604090205460ff16155b15610d7057610d7061105a565b600d54600160a81b900460ff1615610d9357610d8d858585611227565b50610f1e565b6001600160a01b03851660009081526003602052604081205460ff1615158015610dbe5750600a5484105b15610dcb57506000610dd9565b610dd68686866112e1565b90505b6000811180610df25750600d54600160b01b900460ff16155b15610e94576001600160a01b038616600090815260016020526040902054610e1b908590611653565b6001600160a01b038716600090815260016020526040808220929092553081529081208054839290610e4e9084906116b1565b909155505060405181815230906001600160a01b038816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b610e9e8185611653565b6001600160a01b038616600090815260016020526040902054610ec191906116b1565b6001600160a01b0380871660008181526001602052604090209290925587167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef610f0b8488611653565b60405190815260200160405180910390a3505b506001949350505050565b6000546001600160a01b031633146107df5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104e1565b6001600160a01b03919091166000908152600460205260409020805460ff1916911515919091179055565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b3360009081526004602052604081205460ff161580156110285750600d54600160a81b900460ff16155b801561103d5750600d54600160b01b900460ff165b801561045c57503060009081526001602052604081205411905090565b600d805460ff60a81b1916600160a81b17905530600090815260016020526040812054604080516002808252606082019092529192506000919081602001602082028036833701905050905030816000815181106110ba576110ba6116c4565b6001600160a01b03928316602091820292909201810191909152600c54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611113573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111379190611666565b8160018151811061114a5761114a6116c4565b6001600160a01b039283166020918202929092010152600c5461117091309116846109d0565b600c5460405163791ac94760e01b81526001600160a01b039091169063791ac947906111a99085906000908690309042906004016116da565b600060405180830381600087803b1580156111c357600080fd5b505af11580156111d7573d6000803e3d6000fd5b50506006546040516001600160a01b0390911692504780156108fc029250906000818181858888f19350505050158015611215573d6000803e3d6000fd5b5050600d805460ff60a81b1916905550565b6001600160a01b03831660009081526001602052604081205461124b908390611653565b6001600160a01b03808616600090815260016020526040808220939093559085168152205461127b9083906116b1565b6001600160a01b0380851660008181526001602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906112cf9086815260200190565b60405180910390a35060019392505050565b600d5460009081908190600160b01b900460ff16611300576000611304565b6009545b6001600160a01b03871660009081526004602052604090205490915060ff16801561134857506001600160a01b03851660009081526004602052604090205460ff16155b1561135657506007546113a1565b6001600160a01b03861660009081526004602052604090205460ff1615801561139757506001600160a01b03851660009081526004602052604090205460ff165b156113a157506008545b60646113ad828661163c565b6113b7919061174b565b9695505050505050565b600060208083528351808285015260005b818110156113ee578581018301518582016040015282016113d2565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146107ca57600080fd5b6000806040838503121561143757600080fd5b82356114428161140f565b946020939093013593505050565b60008060006060848603121561146557600080fd5b83356114708161140f565b925060208401356114808161140f565b929592945050506040919091013590565b6000602082840312156114a357600080fd5b81356108a58161140f565b600080604083850312156114c157600080fd5b82356114cc8161140f565b9150602083013580151581146114e157600080fd5b809150509250929050565b6000602082840312156114fe57600080fd5b5035919050565b6000806040838503121561151857600080fd5b82356115238161140f565b915060208301356114e18161140f565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111561158457816000190482111561156a5761156a611533565b8085161561157757918102915b93841c939080029061154e565b509250929050565b60008261159b5750600161043a565b816115a85750600061043a565b81600181146115be57600281146115c8576115e4565b600191505061043a565b60ff8411156115d9576115d9611533565b50506001821b61043a565b5060208310610133831016604e8410600b8410161715611607575081810a61043a565b6116118383611549565b806000190482111561162557611625611533565b029392505050565b60006108a560ff84168361158c565b808202811582820484141761043a5761043a611533565b8181038181111561043a5761043a611533565b60006020828403121561167857600080fd5b81516108a58161140f565b60008060006060848603121561169857600080fd5b8351925060208401519150604084015190509250925092565b8082018082111561043a5761043a611533565b634e487b7160e01b600052603260045260246000fd5b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561172a5784516001600160a01b031683529383019391830191600101611705565b50506001600160a01b03969096166060850152505050608001529392505050565b60008261176857634e487b7160e01b600052601260045260246000fd5b50049056fea2646970667358221220bbc0d7e1b4a593b9eb08c8433d14899f234b34c5127f1a089aacad1d5588180c64736f6c63430008130033

Deployed Bytecode Sourcemap

21746:10003:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24149:83;;;;;;;;;;-1:-1:-1;24219:5:0;;;;;;;;;;;;-1:-1:-1;;;24219:5:0;;;;24149:83;;;;;;;:::i;:::-;;;;;;;;26349:186;;;;;;;;;;-1:-1:-1;26349:186:0;;;;;:::i;:::-;;:::i;:::-;;;1188:14:1;;1181:22;1163:41;;1151:2;1136:18;26349:186:0;1023:187:1;24426:95:0;;;;;;;;;;;;;:::i;:::-;;;1361:25:1;;;1349:2;1334:18;24426:95:0;1215:177:1;26543:502:0;;;;;;;;;;-1:-1:-1;26543:502:0;;;;;:::i;:::-;;:::i;24335:83::-;;;;;;;;;;-1:-1:-1;24335:83:0;;22462:2;2000:36:1;;1988:2;1973:18;24335:83:0;1858:184:1;23353:788:0;;;:::i;:::-;;22866:28;;;;;;;;;;-1:-1:-1;22866:28:0;;;;-1:-1:-1;;;;;22866:28:0;;;;;;-1:-1:-1;;;;;2211:32:1;;;2193:51;;2181:2;2166:18;22866:28:0;2047:203:1;24529:119:0;;;;;;;;;;-1:-1:-1;24529:119:0;;;;;:::i;:::-;-1:-1:-1;;;;;24622:18:0;24595:7;24622:18;;;:9;:18;;;;;;;24529:119;8828:103;;;;;;;;;;;;;:::i;24952:90::-;;;;;;;;;;;;;:::i;8187:87::-;;;;;;;;;;-1:-1:-1;8233:7:0;8260:6;-1:-1:-1;;;;;8260:6:0;8187:87;;22650:53;;;;;;;;;;;;;;;;24240:87;;;;;;;;;;-1:-1:-1;24312:7:0;;;;;;;;;;;;-1:-1:-1;;;24312:7:0;;;;24240:87;;25189:307;;;;;;;;;;-1:-1:-1;25189:307:0;;;;;:::i;:::-;;:::i;31050:102::-;;;;;;;;;;-1:-1:-1;31050:102:0;;;;;:::i;:::-;;:::i;25984:181::-;;;;;;;;;;-1:-1:-1;25984:181:0;;;;;:::i;:::-;;:::i;25050:131::-;;;;;;;;;;-1:-1:-1;25050:131:0;;;;;:::i;:::-;;:::i;25780:167::-;;;;;;;;;;;;;:::i;26173:168::-;;;;;;;;;;-1:-1:-1;26173:168:0;;;;;:::i;:::-;-1:-1:-1;;;;;26306:18:0;;;26279:7;26306:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;26173:168;9086:238;;;;;;;;;;-1:-1:-1;9086:238:0;;;;;:::i;:::-;;:::i;22901:31::-;;;;;;;;;;-1:-1:-1;22901:31:0;;;;-1:-1:-1;;;22901:31:0;;;;;;26349:186;26449:4;26466:39;6951:10;26489:7;26498:6;26466:8;:39::i;:::-;-1:-1:-1;26523:4:0;26349:186;;;;;:::o;24426:95::-;24479:7;22520:15;22462:2;22520;:15;:::i;:::-;22506:29;;:11;:29;:::i;:::-;24499:14;;24426:95;:::o;26543:502::-;-1:-1:-1;;;;;26716:19:0;;26677:4;26716:19;;;:11;:19;;;;;;;;6951:10;26716:33;;;;;;;;:43;-1:-1:-1;26716:43:0;26694:133;;;;-1:-1:-1;;;26694:133:0;;5396:2:1;26694:133:0;;;5378:21:1;5435:2;5415:18;;;5408:30;5474:34;5454:18;;;5447:62;-1:-1:-1;;;5525:18:1;;;5518:38;5573:19;;26694:133:0;;;;;;;;;26838:40;26852:6;26860:9;26871:6;26838:13;:40::i;:::-;-1:-1:-1;;;;;;26960:19:0;;;;;;:11;:19;;;;;;;;6951:10;26960:33;;;;;;;;;26889:124;;26912:6;;26960:42;;26996:6;;26960:42;:::i;:::-;26889:8;:124::i;:::-;-1:-1:-1;27033:4:0;26543:502;;;;;:::o;23353:788::-;8073:13;:11;:13::i;:::-;23411:35:::1;23482:42;23411:124;;23635:16;-1:-1:-1::0;;;;;23635:24:0::1;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;23617:70:0::1;;23696:4;23703:16;-1:-1:-1::0;;;;;23703:21:0::1;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23617:110;::::0;-1:-1:-1;;;;;;23617:110:0::1;::::0;;;;;;-1:-1:-1;;;;;6222:15:1;;;23617:110:0::1;::::0;::::1;6204:34:1::0;6274:15;;6254:18;;;6247:43;6139:18;;23617:110:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23601:13;:126:::0;;-1:-1:-1;;;;;23601:126:0;;::::1;-1:-1:-1::0;;;;;;23601:126:0;;::::1;;::::0;;;23740:15:::1;:34:::0;;;;::::1;::::0;;;::::1;::::0;::::1;::::0;;23785:62:::1;::::0;23802:4:::1;::::0;-1:-1:-1;;23785:8:0::1;:62::i;:::-;23860:15;::::0;-1:-1:-1;;;;;23860:15:0::1;:31;23899:9;23932:4;23952:24;23932:4:::0;-1:-1:-1;;;;;24622:18:0;24595:7;24622:18;;;:9;:18;;;;;;;24529:119;23952:24:::1;23991:1;24007::::0;24023:7:::1;8233::::0;8260:6;-1:-1:-1;;;;;8260:6:0;;8187:87;24023:7:::1;23860:211;::::0;::::1;::::0;;;-1:-1:-1;;;;;;23860:211:0;;;-1:-1:-1;;;;;6660:15:1;;;23860:211:0::1;::::0;::::1;6642:34:1::0;6692:18;;;6685:34;;;;6735:18;;;6728:34;;;;6778:18;;;6771:34;6842:15;;;6821:19;;;6814:44;24045:15:0::1;6874:19:1::0;;;6867:35;6576:19;;23860:211:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;24113:13:0::1;::::0;24084:49:::1;::::0;-1:-1:-1;;;;;;24113:13:0::1;::::0;24084:28:::1;:49::i;:::-;23400:741;23353:788::o:0;8828:103::-;8073:13;:11;:13::i;:::-;8893:30:::1;8920:1;8893:18;:30::i;:::-;8828:103::o:0;24952:90::-;8073:13;:11;:13::i;:::-;-1:-1:-1;;25006:14:0::1;:28:::0;24952:90::o;25189:307::-;8073:13;:11;:13::i;:::-;25335::::1;::::0;-1:-1:-1;;;;;25335:13:0;;::::1;25327:21:::0;;::::1;::::0;25305:129:::1;;;::::0;-1:-1:-1;;;25305:129:0;;7426:2:1;25305:129:0::1;::::0;::::1;7408:21:1::0;7465:2;7445:18;;;7438:30;7504:34;7484:18;;;7477:62;7575:28;7555:18;;;7548:56;7621:19;;25305:129:0::1;7224:422:1::0;25305:129:0::1;25447:41;25476:4;25482:5;25447:28;:41::i;:::-;25189:307:::0;;:::o;31050:102::-;8073:13;:11;:13::i;:::-;31122::::1;:22:::0;31050:102::o;25984:181::-;26089:4;26113:44;26127:10;26139:9;26150:6;26113:13;:44::i;:::-;26106:51;25984:181;-1:-1:-1;;;25984:181:0:o;25050:131::-;8073:13;:11;:13::i;:::-;-1:-1:-1;;;;;25135:27:0;;;::::1;;::::0;;;:18:::1;:27;::::0;;;;:38;;-1:-1:-1;;25135:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;25050:131::o;25780:167::-;8073:13;:11;:13::i;:::-;25842:11:::1;::::0;-1:-1:-1;;;25842:11:0;::::1;;;25841:12;25833:48;;;::::0;-1:-1:-1;;;25833:48:0;;7853:2:1;25833:48:0::1;::::0;::::1;7835:21:1::0;7892:2;7872:18;;;7865:30;7931:25;7911:18;;;7904:53;7974:18;;25833:48:0::1;7651:347:1::0;25833:48:0::1;25892:11;:18:::0;;-1:-1:-1;;;;25921:18:0;-1:-1:-1;;;25921:18:0;;;25780:167::o;9086:238::-;8073:13;:11;:13::i;:::-;-1:-1:-1;;;;;9189:22:0;::::1;9167:110;;;::::0;-1:-1:-1;;;9167:110:0;;8205:2:1;9167:110:0::1;::::0;::::1;8187:21:1::0;8244:2;8224:18;;;8217:30;8283:34;8263:18;;;8256:62;-1:-1:-1;;;8334:18:1;;;8327:36;8380:19;;9167:110:0::1;8003:402:1::0;9167:110:0::1;9288:28;9307:8;9288:18;:28::i;27053:335::-:0;-1:-1:-1;;;;;27146:19:0;;27138:68;;;;-1:-1:-1;;;27138:68:0;;8612:2:1;27138:68:0;;;8594:21:1;8651:2;8631:18;;;8624:30;8690:34;8670:18;;;8663:62;-1:-1:-1;;;8741:18:1;;;8734:34;8785:19;;27138:68:0;8410:400:1;27138:68:0;-1:-1:-1;;;;;27225:21:0;;27217:68;;;;-1:-1:-1;;;27217:68:0;;9017:2:1;27217:68:0;;;8999:21:1;9056:2;9036:18;;;9029:30;9095:34;9075:18;;;9068:62;-1:-1:-1;;;9146:18:1;;;9139:32;9188:19;;27217:68:0;8815:398:1;27217:68:0;-1:-1:-1;;;;;27296:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;27348:32;;1361:25:1;;;27348:32:0;;1334:18:1;27348:32:0;;;;;;;27053:335;;;:::o;27396:1836::-;-1:-1:-1;;;;;27561:26:0;;27522:4;27561:26;;;:18;:26;;;;;;;;;:76;;-1:-1:-1;;;;;;27608:29:0;;;;;;:18;:29;;;;;;;;27561:76;:113;;;-1:-1:-1;;;;;;27658:16:0;;;;;;:8;:16;;;;;;;;27561:113;:153;;;-1:-1:-1;;;;;;27695:19:0;;;;;;:8;:19;;;;;;;;27561:153;:185;;;-1:-1:-1;27735:11:0;;-1:-1:-1;;;27735:11:0;;;;27561:185;27539:262;;;;-1:-1:-1;;;27539:262:0;;9420:2:1;27539:262:0;;;9402:21:1;9459:2;9439:18;;;9432:30;9498:29;9478:18;;;9471:57;9545:18;;27539:262:0;9218:351:1;27539:262:0;27831:14;;8233:7;8260:6;-1:-1:-1;;;;;27862:17:0;;;8260:6;;27862:17;;;;:41;;-1:-1:-1;8233:7:0;8260:6;-1:-1:-1;;;;;27883:20:0;;;8260:6;;27883:20;;27862:41;:62;;;;-1:-1:-1;;;;;;27907:17:0;;22267:42;27907:17;;27862:62;27858:444;;;-1:-1:-1;;;;;27946:37:0;;;;;;:26;:37;;;;;;;;27941:350;;-1:-1:-1;;;;;28034:29:0;;;;;;:18;:29;;;;;;;;;:84;;-1:-1:-1;;;;;;28092:26:0;;;;;;:18;:26;;;;;;;;28034:84;:154;;;-1:-1:-1;;;;;;28148:20:0;;;;;;:9;:20;;;;;;28181:6;;28148:29;;28171:6;;28148:29;:::i;:::-;:39;;28034:154;28004:271;;;;-1:-1:-1;;;28004:271:0;;9906:2:1;28004:271:0;;;9888:21:1;9945:2;9925:18;;;9918:30;9984:34;9964:18;;;9957:62;-1:-1:-1;;;10035:18:1;;;10028:41;10086:19;;28004:271:0;9704:407:1;28004:271:0;28318:16;:14;:16::i;:::-;:57;;;;-1:-1:-1;;;;;;28338:37:0;;;;;;:26;:37;;;;;;;;28318:57;:88;;;;-1:-1:-1;;;;;;28380:26:0;;;;;;:18;:26;;;;;;;;28379:27;28318:88;28314:131;;;28423:10;:8;:10::i;:::-;28461:6;;-1:-1:-1;;;28461:6:0;;;;28457:744;;;28484:41;28499:6;28507:9;28518:6;28484:14;:41::i;:::-;;28457:744;;;-1:-1:-1;;;;;29671:26:0;;28558:17;29671:26;;;:18;:26;;;;;;;;29670:27;28600:22;:49;;;;;28635:14;;28626:6;:23;28600:49;28596:190;;;-1:-1:-1;28682:1:0;28596:190;;;28736:34;28744:6;28752:9;28763:6;28736:7;:34::i;:::-;28724:46;;28596:190;28818:1;28806:9;:13;:29;;;-1:-1:-1;28824:11:0;;-1:-1:-1;;;28824:11:0;;;;28823:12;28806:29;28802:238;;;-1:-1:-1;;;;;28876:17:0;;;;;;:9;:17;;;;;;:26;;28896:6;;28876:26;:::i;:::-;-1:-1:-1;;;;;28856:17:0;;;;;;:9;:17;;;;;;:46;;;;28939:4;28921:24;;;;;:37;;28949:9;;28856:17;28921:37;;28949:9;;28921:37;:::i;:::-;;;;-1:-1:-1;;28982:42:0;;1361:25:1;;;29007:4:0;;-1:-1:-1;;;;;28982:42:0;;;;;1349:2:1;1334:18;28982:42:0;;;;;;;28802:238;29103:18;29112:9;29103:6;:18;:::i;:::-;-1:-1:-1;;;;;29079:20:0;;;;;;:9;:20;;;;;;:43;;;;:::i;:::-;-1:-1:-1;;;;;29056:20:0;;;;;;;:9;:20;;;;;:66;;;;29142:47;;;29170:18;29179:9;29170:6;:18;:::i;:::-;29142:47;;1361:25:1;;;1349:2;1334:18;29142:47:0;;;;;;;28543:658;28457:744;-1:-1:-1;29220:4:0;;27396:1836;-1:-1:-1;;;;27396:1836:0:o;8352:132::-;8233:7;8260:6;-1:-1:-1;;;;;8260:6:0;6951:10;8416:23;8408:68;;;;-1:-1:-1;;;8408:68:0;;10318:2:1;8408:68:0;;;10300:21:1;;;10337:18;;;10330:30;10396:34;10376:18;;;10369:62;10448:18;;8408:68:0;10116:356:1;25504:131:0;-1:-1:-1;;;;;25587:32:0;;;;;;;;:26;:32;;;;;:40;;-1:-1:-1;;25587:40:0;;;;;;;;;;25504:131::o;9484:191::-;9558:16;9577:6;;-1:-1:-1;;;;;9594:17:0;;;-1:-1:-1;;;;;;9594:17:0;;;;;;9627:40;;9577:6;;;;;;;9627:40;;9558:16;9627:40;9547:128;9484:191;:::o;30811:231::-;30925:10;30860:4;30898:38;;;:26;:38;;;;;;;;30897:39;:63;;;;-1:-1:-1;30954:6:0;;-1:-1:-1;;;30954:6:0;;;;30953:7;30897:63;:91;;;;-1:-1:-1;30977:11:0;;-1:-1:-1;;;30977:11:0;;;;30897:91;:136;;;;-1:-1:-1;31023:4:0;31032:1;24622:18;;;:9;:18;;;;;;31005:28;30877:156;;30811:231;:::o;31160:586::-;23048:6;:13;;-1:-1:-1;;;;23048:13:0;-1:-1:-1;;;23048:13:0;;;31253:4:::1;-1:-1:-1::0;24622:18:0;;;-1:-1:-1;24622:18:0;;;;;;31296:16:::1;::::0;;31310:1:::1;31296:16:::0;;;;;::::1;::::0;;;31212:47;;-1:-1:-1;31272:21:0::1;::::0;31296:16;::::1;;;;;;;;;;;::::0;-1:-1:-1;31296:16:0::1;31272:40;;31341:4;31323;31328:1;31323:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;31323:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;31367:15:::1;::::0;:22:::1;::::0;;-1:-1:-1;;;31367:22:0;;;;:15;;;::::1;::::0;:20:::1;::::0;:22:::1;::::0;;::::1;::::0;31323:7;;31367:22;;;;;:15;:22:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31357:4;31362:1;31357:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;31357:32:0;;::::1;:7;::::0;;::::1;::::0;;;;;:32;31434:15:::1;::::0;31402:63:::1;::::0;31419:4:::1;::::0;31434:15:::1;31452:12:::0;31402:8:::1;:63::i;:::-;31478:15;::::0;:197:::1;::::0;-1:-1:-1;;;31478:197:0;;-1:-1:-1;;;;;31478:15:0;;::::1;::::0;:66:::1;::::0;:197:::1;::::0;31559:12;;31478:15:::1;::::0;31602:4;;31629::::1;::::0;31649:15:::1;::::0;31478:197:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;31696:9:0::1;::::0;31688:50:::1;::::0;-1:-1:-1;;;;;31696:9:0;;::::1;::::0;-1:-1:-1;31716:21:0::1;31688:50:::0;::::1;;;::::0;-1:-1:-1;31716:21:0;31696:9:::1;31688:50:::0;31696:9;31688:50;31716:21;31696:9;31688:50;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;23084:6:0;:14;;-1:-1:-1;;;;23084:14:0;;;-1:-1:-1;31160:586:0:o;29240:336::-;-1:-1:-1;;;;;29404:17:0;;29367:4;29404:17;;;:9;:17;;;;;;:26;;29424:6;;29404:26;:::i;:::-;-1:-1:-1;;;;;29384:17:0;;;;;;;:9;:17;;;;;;:46;;;;29464:20;;;;;;;:31;;29488:6;;29464:31;:::i;:::-;-1:-1:-1;;;;;29441:20:0;;;;;;;:9;:20;;;;;;;:54;;;;29511:35;;;;;;;;;;29539:6;1361:25:1;;1349:2;1334:18;;1215:177;29511:35:0;;;;;;;;-1:-1:-1;29564:4:0;29240:336;;;;;:::o;29713:636::-;29903:11;;29837:7;;;;;;-1:-1:-1;;;29903:11:0;;;;:29;;29931:1;29903:29;;;29917:11;;29903:29;-1:-1:-1;;;;;29961:34:0;;;;;;:26;:34;;;;;;29889:43;;-1:-1:-1;29961:34:0;;:89;;;;-1:-1:-1;;;;;;30013:37:0;;;;;;:26;:37;;;;;;;;30012:38;29961:89;29943:325;;;-1:-1:-1;30083:7:0;;29943:325;;;-1:-1:-1;;;;;30127:34:0;;;;;;:26;:34;;;;;;;;30126:35;:89;;;;-1:-1:-1;;;;;;30178:37:0;;;;;;:26;:37;;;;;;;;30126:89;30108:160;;;-1:-1:-1;30248:8:0;;30108:160;30309:3;30293:12;30302:3;30293:6;:12;:::i;:::-;30292:20;;;;:::i;:::-;30280:32;29713:636;-1:-1:-1;;;;;;29713:636:0:o;14:548:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;567:131::-;-1:-1:-1;;;;;642:31:1;;632:42;;622:70;;688:1;685;678:12;703:315;771:6;779;832:2;820:9;811:7;807:23;803:32;800:52;;;848:1;845;838:12;800:52;887:9;874:23;906:31;931:5;906:31;:::i;:::-;956:5;1008:2;993:18;;;;980:32;;-1:-1:-1;;;703:315:1:o;1397:456::-;1474:6;1482;1490;1543:2;1531:9;1522:7;1518:23;1514:32;1511:52;;;1559:1;1556;1549:12;1511:52;1598:9;1585:23;1617:31;1642:5;1617:31;:::i;:::-;1667:5;-1:-1:-1;1724:2:1;1709:18;;1696:32;1737:33;1696:32;1737:33;:::i;:::-;1397:456;;1789:7;;-1:-1:-1;;;1843:2:1;1828:18;;;;1815:32;;1397:456::o;2255:247::-;2314:6;2367:2;2355:9;2346:7;2342:23;2338:32;2335:52;;;2383:1;2380;2373:12;2335:52;2422:9;2409:23;2441:31;2466:5;2441:31;:::i;2507:416::-;2572:6;2580;2633:2;2621:9;2612:7;2608:23;2604:32;2601:52;;;2649:1;2646;2639:12;2601:52;2688:9;2675:23;2707:31;2732:5;2707:31;:::i;:::-;2757:5;-1:-1:-1;2814:2:1;2799:18;;2786:32;2856:15;;2849:23;2837:36;;2827:64;;2887:1;2884;2877:12;2827:64;2910:7;2900:17;;;2507:416;;;;;:::o;2928:180::-;2987:6;3040:2;3028:9;3019:7;3015:23;3011:32;3008:52;;;3056:1;3053;3046:12;3008:52;-1:-1:-1;3079:23:1;;2928:180;-1:-1:-1;2928:180:1:o;3113:388::-;3181:6;3189;3242:2;3230:9;3221:7;3217:23;3213:32;3210:52;;;3258:1;3255;3248:12;3210:52;3297:9;3284:23;3316:31;3341:5;3316:31;:::i;:::-;3366:5;-1:-1:-1;3423:2:1;3408:18;;3395:32;3436:33;3395:32;3436:33;:::i;3506:127::-;3567:10;3562:3;3558:20;3555:1;3548:31;3598:4;3595:1;3588:15;3622:4;3619:1;3612:15;3638:422;3727:1;3770:5;3727:1;3784:270;3805:7;3795:8;3792:21;3784:270;;;3864:4;3860:1;3856:6;3852:17;3846:4;3843:27;3840:53;;;3873:18;;:::i;:::-;3923:7;3913:8;3909:22;3906:55;;;3943:16;;;;3906:55;4022:22;;;;3982:15;;;;3784:270;;;3788:3;3638:422;;;;;:::o;4065:806::-;4114:5;4144:8;4134:80;;-1:-1:-1;4185:1:1;4199:5;;4134:80;4233:4;4223:76;;-1:-1:-1;4270:1:1;4284:5;;4223:76;4315:4;4333:1;4328:59;;;;4401:1;4396:130;;;;4308:218;;4328:59;4358:1;4349:10;;4372:5;;;4396:130;4433:3;4423:8;4420:17;4417:43;;;4440:18;;:::i;:::-;-1:-1:-1;;4496:1:1;4482:16;;4511:5;;4308:218;;4610:2;4600:8;4597:16;4591:3;4585:4;4582:13;4578:36;4572:2;4562:8;4559:16;4554:2;4548:4;4545:12;4541:35;4538:77;4535:159;;;-1:-1:-1;4647:19:1;;;4679:5;;4535:159;4726:34;4751:8;4745:4;4726:34;:::i;:::-;4796:6;4792:1;4788:6;4784:19;4775:7;4772:32;4769:58;;;4807:18;;:::i;:::-;4845:20;;4065:806;-1:-1:-1;;;4065:806:1:o;4876:140::-;4934:5;4963:47;5004:4;4994:8;4990:19;4984:4;4963:47;:::i;5021:168::-;5094:9;;;5125;;5142:15;;;5136:22;;5122:37;5112:71;;5163:18;;:::i;5603:128::-;5670:9;;;5691:11;;;5688:37;;;5705:18;;:::i;5736:251::-;5806:6;5859:2;5847:9;5838:7;5834:23;5830:32;5827:52;;;5875:1;5872;5865:12;5827:52;5907:9;5901:16;5926:31;5951:5;5926:31;:::i;6913:306::-;7001:6;7009;7017;7070:2;7058:9;7049:7;7045:23;7041:32;7038:52;;;7086:1;7083;7076:12;7038:52;7115:9;7109:16;7099:26;;7165:2;7154:9;7150:18;7144:25;7134:35;;7209:2;7198:9;7194:18;7188:25;7178:35;;6913:306;;;;;:::o;9574:125::-;9639:9;;;9660:10;;;9657:36;;;9673:18;;:::i;10609:127::-;10670:10;10665:3;10661:20;10658:1;10651:31;10701:4;10698:1;10691:15;10725:4;10722:1;10715:15;10741:980;11003:4;11051:3;11040:9;11036:19;11082:6;11071:9;11064:25;11108:2;11146:6;11141:2;11130:9;11126:18;11119:34;11189:3;11184:2;11173:9;11169:18;11162:31;11213:6;11248;11242:13;11279:6;11271;11264:22;11317:3;11306:9;11302:19;11295:26;;11356:2;11348:6;11344:15;11330:29;;11377:1;11387:195;11401:6;11398:1;11395:13;11387:195;;;11466:13;;-1:-1:-1;;;;;11462:39:1;11450:52;;11557:15;;;;11522:12;;;;11498:1;11416:9;11387:195;;;-1:-1:-1;;;;;;;11638:32:1;;;;11633:2;11618:18;;11611:60;-1:-1:-1;;;11702:3:1;11687:19;11680:35;11599:3;10741:980;-1:-1:-1;;;10741:980:1:o;11726:217::-;11766:1;11792;11782:132;;11836:10;11831:3;11827:20;11824:1;11817:31;11871:4;11868:1;11861:15;11899:4;11896:1;11889:15;11782:132;-1:-1:-1;11928:9:1;;11726:217::o

Swarm Source

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