ETH Price: $2,622.09 (-4.44%)

Token

Otcom (OTOM)
 

Overview

Max Total Supply

10,000,000 OTOM

Holders

146 (0.00%)

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
169,337.953367834694408224 OTOM

Value
$0.00
0x569b4514d0dca0a903f720448235a286a31846c7
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Otcom, codename for an online service platform—connecting people on both sides of the equation. More details about Otcom will come to light.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
OTOMToken

Compiler Version
v0.8.26+commit.8a97fa7a

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

/*
                           
         ██████╗ ████████╗ ██████╗ ███╗   ███╗    ████████╗ ██████╗ ██╗  ██╗███████╗███╗   ██╗
        ██╔═══██╗╚══██╔══╝██╔═══██╗████╗ ████║    ╚══██╔══╝██╔═══██╗██║ ██╔╝██╔════╝████╗  ██║
        ██║   ██║   ██║   ██║   ██║██╔████╔██║       ██║   ██║   ██║█████╔╝ █████╗  ██╔██╗ ██║
        ██║   ██║   ██║   ██║   ██║██║╚██╔╝██║       ██║   ██║   ██║██╔═██╗ ██╔══╝  ██║╚██╗██║
        ╚██████╔╝   ██║   ╚██████╔╝██║ ╚═╝ ██║       ██║   ╚██████╔╝██║  ██╗███████╗██║ ╚████║
         ╚═════╝    ╚═╝    ╚═════╝ ╚═╝     ╚═╝       ╚═╝    ╚═════╝ ╚═╝  ╚═╝╚══════╝╚═╝  ╚═══╝
*/

// SPDX-License-Identifier: MIT
pragma solidity 0.8.26;
 
/**
 * @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 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 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);
}

interface IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address lpPair, uint);
    function getPair(address tokenA, address tokenB) external view returns (address lpPair);
    function createPair(address tokenA, address tokenB) external returns (address lpPair);
}
 
interface IRouter01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    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 removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
        ) external returns (uint amountToken, uint amountETH);
    function swapExactETHForTokens(
        uint amountOutMin, 
        address[] calldata path, 
        address to, uint deadline
    ) external payable returns (uint[] memory amounts);
    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 IRouter01 {
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        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 swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
}

contract OTOMToken is Ownable , IERC20 {
 
    string private constant _name = "Otcom";
    string private constant _symbol = "OTOM";
    uint8  private constant _decimals = 18;
    uint256 private _totalSupply = 10 * 10**6 *10**uint256(_decimals);
 
    mapping(address => uint256) internal _balances;
    mapping(address => mapping(address => uint256)) private _allowances;
    mapping(address => bool) public blacklisted;
   
    address public devWallet;
    address constant public DEAD = 0x000000000000000000000000000000000000dEaD;
   
    uint256 public  liquidityTaxPercentage = 1000; //1000=1%
    uint256 public  devTaxPercentage=1000; // 1000 = 1%
    uint256 public  taxThreshold = 10000 * 10**uint256(_decimals); // Threshold for performing swapandliquify
    uint256 public  maxAmount = 20000 * 10 ** uint256(_decimals); // Max Buy/Sell Limit
    uint256 public  numBlocksForBlacklist = 50;  

    uint256 private liquidityTaxShare =50000;    
    uint256 private devTaxShare = 67000;      
    uint256 private currentBlockNumber;

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapPair;

    bool private swapping;
    bool public  tradeOpen = false;
 
    //-------------events------------------ 
    event UpdatedDevWallet(address updatedDevWallet);
    event UpdatedTaxPercentage(uint256 updatedLiquidityTax,uint256 updatedDevTax);
    event UpatedTaxThreshold(uint256 updateTaxThreshold);
    event UpdatedMaxAmount(uint256 updatedMaxAmount);
    event UpdatedBlock(uint256 updatedBlocks); 
    event Burn(address indexed burner, uint256 amount);
    
    /**
    * @dev Constructor function that initializes the token contract.
    * - Assigns the total supply to the contract deployer (msg.sender).
    * - Sets up the UniswapV2 router on Etherum mainnet and creates a liquidity pair between this token and WETH.
    * - Approves the maximum possible allowance for both the sender and the contract to interact with the UniswapV2 router.
    * - Initializes the dev wallet.
    * - Emits a Transfer event indicating that tokens have been transferred from the zero address to the deployer.
    * @param _devWallet The address of the development wallet.
    */
    constructor(address _devWallet) {
        require(_devWallet != address(0),"Dev wallet cannot be zero address");
        _balances[msg.sender] = _totalSupply;
 
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D // Etherum mainnet
        );
        uniswapV2Router = _uniswapV2Router;
        uniswapPair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(
            address(this),
            _uniswapV2Router.WETH()
        );
 
        _approve(msg.sender, address(uniswapV2Router), type(uint256).max);
        _approve(address(this), address(uniswapV2Router), type(uint256).max);

        devWallet = _devWallet;
        emit Transfer(address(0), msg.sender, _totalSupply);
    }
 
    /**
    * @notice Retrieves the name of the token.
    * @dev This function returns the name of the token, which is often used for identification.
    * It is commonly displayed in user interfaces and provides a human-readable name for the token.
    * @return The name of the token.
    */
    function name() public view virtual  returns (string memory) {
        return _name;
    }
     
    /**
    * @notice Retrieves the symbol or ticker of the token.
    * @dev This function returns the symbol or ticker that represents the token.
    * It is commonly used for identifying the token in user interfaces and exchanges.
    * @return The symbol or ticker of the token.
    */
    function symbol() public view virtual  returns (string memory) {
        return _symbol;
    }
     
    /**
    * @notice Retrieves the number of decimal places used in the token representation.
    * @dev This function returns the number of decimal places used to represent the token balances.
    * It is commonly used to interpret the token amounts correctly in user interfaces.
    * @return The number of decimal places used in the token representation.
    */
    function decimals() public view virtual  returns (uint8) {
        return _decimals;
    }
    
    /**
    * @notice Retrieves the total supply of tokens.
    * @dev This function returns the total supply of tokens in circulation.
    * @return The total supply of tokens.
    */
    function totalSupply() public view virtual  returns (uint256) {
        return _totalSupply;
    }
 
    /**
    * @notice Returns the balance of the specified account.
    * @param account The address for which the balance is being queried.
    * @return The balance of the specified account.
    */
    function balanceOf(
        address account
    ) public view virtual  returns (uint256) {
        return _balances[account];
    }

    /**
    * @dev Burns a specific amount of tokens from the caller's address.
    * @param amount The amount of tokens to be burned.
    */
    function burn(uint256 amount) public onlyOwner {
        _burn(msg.sender, amount);
    }

    /**
    * @dev Burns a specified amount of tokens from an account by transferring them to the dead address.
    * This does not decrease the total supply. Requirements: 
    * - `account` cannot be the zero address.
    * - `amount` must not exceed the balance of `account`.
    * Emits a {Transfer} event for the dead address and a {Burn} event.
    *
    * @param account The address from which to burn tokens.
    * @param amount The number of tokens to burn.
    */
    function _burn(address account, uint256 amount) internal {
       require(account != address(0), "ERC20: burn from the zero address");
   
       uint256 accountBalance = _balances[account];
       require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
       unchecked {
           _balances[account] = accountBalance - amount;
           _balances[DEAD] += amount;
       }
   
       emit Transfer(account, DEAD, amount);
       emit Burn(account, amount);
    }

    /**
    * @notice Transfers tokens from the sender's account to the specified recipient.
    * @dev This function is used to transfer tokens from the sender's account to the specified recipient.
    * @param to The address of the recipient to which tokens will be transferred.
    * @param amount The amount of tokens to be transferred.
    * @return A boolean indicating whether the transfer was successful or not.
    */
    function transfer(
        address to,
        uint256 amount
    ) public virtual  returns (bool) {
        address owner = msg.sender;
        _transfer(owner, to, amount);
        return true;
    }
    
    /**
    * @notice Transfers tokens from one account to another on behalf of a spender.
    * @dev This function is used to transfer tokens from one account to another on behalf of a spender.
    * @param from The address from which tokens will be transferred.
    * @param to The address to which tokens will be transferred.
    * @param amount The amount of tokens to be transferred.
    * @return A boolean indicating whether the transfer was successful or not.
    */
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) public virtual  returns (bool) {
        address spender = msg.sender;
        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        return true;
    }
 
    /**
    * @notice Returns the amount of tokens that the spender is allowed to spend on behalf of the owner.
    * @param owner The address of the owner of the tokens.
    * @param spender The address of the spender.
    * @return The allowance amount.
    */
    function allowance(
        address owner,
        address spender
    ) public view virtual  returns (uint256) {
        return _allowances[owner][spender];
    }
 
    /**
    * @notice Approves the spender to spend a specified amount of tokens on behalf of the sender.
    * @param spender The address of the spender to be approved.
    * @param amount The amount of tokens to be approved for spending.
    * @return A boolean indicating whether the approval was successful or not.
    */
    function approve(address spender, uint256 amount) public  returns (bool) {
        _approve(msg.sender, spender, amount);
        return true;
    }
 
    /**
    * @notice Internal function to set allowance for a spender.
    * @dev This function sets the allowance for a spender to spend tokens on behalf of the owner.
    * @param sender The address of the owner of the tokens.
    * @param spender The address of the spender.
    * @param amount The amount of tokens to be approved for spending.
    */
    function _approve(address sender, address spender, uint256 amount) internal {
        require(sender != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");
 
        _allowances[sender][spender] = amount;
        emit Approval(sender, spender, amount);
    }
 
    /**
    * @notice Internal function to spend tokens from the allowance of a spender.
    * @dev This function checks if the spender has sufficient allowance from the owner
    * to spend the specified amount of tokens. If the spender's allowance is not
    * unlimited, it is decreased by the spent amount.
    * @param owner The address of the owner of the tokens.
    * @param spender The address of the spender.
    * @param amount The amount of tokens to be spent.
    */
    function _spendAllowance(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(
                currentAllowance >= amount,
                "ERC20: insufficient allowance"
            );
            unchecked {
                _approve(owner, spender, currentAllowance - amount);
            }
        }
    }
    
    /**
    * @notice Internal function to transfer tokens from one address to another.
    * @dev This function transfers a specified amount of tokens from one address to another.
    * @param from The address from which tokens will be transferred.
    * @param to The address to which tokens will be transferred.
    * @param amount The amount of tokens to be transferred.
    */
    function _transferTokens(
        address from,
        address to,
        uint256 amount
    ) internal virtual {
        uint256 fromBalance = _balances[from];
        require(
            fromBalance >= amount,
            "ERC20: transfer amount exceeds balance"
        );
        unchecked {
            _balances[from] = fromBalance - amount;
            // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by
            // decrementing then incrementing.
            _balances[to] += amount;
        }
 
        emit Transfer(from, to, amount);
    }
  
    /* 
    * @dev Enables trading by setting the `tradeOpen` flag to true.
    * The function checks whether trading is already open using the `require` statement.
    * If trading is already enabled, it will revert with the message "Trade is already open".
    * The `currentBlockNumber` is also set to the current block number when the trade is enabled.
    * Only the contract owner can call this function.
    */
    function enableTrade() public onlyOwner {
        require(!tradeOpen, "Trade is already open");
        currentBlockNumber = block.number;
        tradeOpen = true; 
    }
  
    /**
    * @dev Sets the number of blocks during which sniper bot protection is active. 
    * Only callable by the contract owner.
    * 
    * @param numBlocks The number of blocks for which addresses will be blacklisted after liquidity is added.
    * Emits an {UpdatedBlock} event indicating the new block count.
    */
    function setNumberOfBlocksForBlacklist(uint256 numBlocks) external onlyOwner {
        require(numBlocks > 0,"number of block should be more than 0");
        numBlocksForBlacklist = numBlocks;
        emit UpdatedBlock(numBlocksForBlacklist);
    }
 
    /**
    * @dev Sets the maximum transaction amount. Can only be called by the contract owner.
    * 
    * @param amount The new maximum amount allowed per transaction.
    * Requires that the amount does not exceed (200,000tokens) you need to pass amount with 18 decimal like you want pass 50k(50000000000000000000000) .
    * Emits an {UpdatedMaxAmount} event indicating the new maximum amount.
    */
    function setMaxAmount(uint256 amount) external onlyOwner {
        require(amount <= 200000 * 10 ** 18, "Amount exceeds the maximum limit of 200,000 tokens");
        maxAmount = amount;
        emit UpdatedMaxAmount(maxAmount);
    }
   
    /**
    * @dev Sets a new development wallet address.
    * - Only callable by the contract owner.
    * - Ensures that the provided address is not the zero address.
    * - Updates the `devWallet` state variable with the new address.
    * - Emits an `UpdatedDevWallet` event to log the change.
    * @param wallet The new development wallet address.
    */
    function setDevWallet(address wallet) external onlyOwner {
        require(wallet != address(0),"Dev wallet cannot be zero address");
        devWallet = wallet;
        emit UpdatedDevWallet(devWallet);
    }
 
    /**
    * @notice Sets the tax percentage, dividing it equally between liquidity and dev taxes.
    * @param _taxPercentage Total tax percentage (max 25%, i.e., 25000). 
    * -note: you need to pass percentage like you want  pass 3%(3000) 
    */
    function setTaxPercentage(uint256 _taxPercentage) external onlyOwner {
        require(_taxPercentage <= 25000, "Tax percentage cannot exceed 25%");
        
        // Split the total tax percentage equally between liquidityTax and devTax
        liquidityTaxPercentage = _taxPercentage / 2;
        devTaxPercentage = _taxPercentage / 2;
        
        emit UpdatedTaxPercentage(liquidityTaxPercentage,devTaxPercentage);
    }

    /**
    * @dev Sets the minimum token threshold for tax collection.
    * - Only callable by the contract owner.
    * - Ensures that the threshold is greater than zero to prevent invalid values.
    * - Updates the `taxThreshold` state variable with the new threshold.
    * - Emits an `UpdatedTaxThreshold` event to log the new threshold value.
    * @param _threshold The new tax threshold amount.
    */
    function setTaxThreshold(uint256 _threshold) external onlyOwner {
        require(_threshold > 0 , "Amount should be more than zero");
        taxThreshold = _threshold;
        emit UpatedTaxThreshold(taxThreshold);
    }
    
    /**
    * @dev Swaps a specified amount of tokens for ETH using the Uniswap V2 router.
    * - The swap follows the token -> WETH path, converting tokens held by the contract into ETH.
    * - Approves the Uniswap router to spend the specified token amount.
    * - Uses `swapExactTokensForETHSupportingFeeOnTransferTokens` to execute the swap, which ensures fee-on-transfer tokens are supported.
    * - Accepts any amount of ETH in return for the swap.
    * - Sends the swapped ETH to the contract's address.
    * @param tokenAmount The amount of tokens to be swapped for ETH.
    */
    function swapTokensForEth(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
 
        _approve(address(this), address(uniswapV2Router), tokenAmount);
 
        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }
    
    /**
    * @dev Swaps tokens for ETH and adds liquidity.
    * A 1% of ETH is sent to the dev wallet, and the 1% is used for liquidity.
    */
    function swapAndLiquify() internal {
        uint256 contractTokenBalance = balanceOf(address(this));
        uint256 swapToken;
        if (contractTokenBalance >= taxThreshold) {
            uint totalLiquidity=(contractTokenBalance * liquidityTaxShare)/100000;
            uint256 liqHalf =  totalLiquidity/ 2;
            uint256 otherLiqHalf =totalLiquidity-liqHalf;
            uint256 tokensToSwap = contractTokenBalance - liqHalf; 
 
            uint256 initialBalance = address(this).balance;
 
            swapTokensForEth(tokensToSwap);

            uint256 newBalance = address(this).balance - (initialBalance);
            swapToken= newBalance;

            bool transferSuccess;

            uint256 devAmount = (swapToken * devTaxShare)/100000;
            newBalance = newBalance - devAmount;
            (transferSuccess,) = devWallet.call{value: devAmount, gas: 35000}("");
 
            if (newBalance > 0) {
                addLiquidity(otherLiqHalf, newBalance);
            }
        }
    }
 
    /**
    * @dev Adds liquidity to the Uniswap pool by pairing tokens with ETH.
    * - Approves the Uniswap router to spend the specified amount of tokens.
    * - Uses the `addLiquidityETH` function to add liquidity, which pairs the specified token amount with the provided ETH amount.
    * - Accepts the token amount and ETH amount as parameters, ensuring that liquidity can be added effectively.
    * - Sets slippage to zero, acknowledging that slippage may occur.
    * @param tokenAmount The amount of tokens to add to the liquidity pool.
    * @param ethAmount The amount of ETH to pair with the tokens for liquidity.
    */
    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);
 
        // add the liquidity
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            address(this),
            block.timestamp
        );
    }

    /**
    * @dev Handles token transfers between addresses with additional checks and tax handling.
    * 
    * - Prevents transfers from/to the zero address.
    * - Enforces that sender and recipient are not blacklisted.
    * - Ensures trading is enabled unless the sender or recipient is the contract owner.
    * - Automatically blacklists recipients who buy during the sniper bot protection period (early blocks after liquidity is added).
    * - Implements buy/sell taxes for liquidity and development, and transfers these to the contract for handling.
    * - Limits transaction amounts based on a defined max amount.
    * 
    * @param sender The address sending the tokens.
    * @param recipient The address receiving the tokens.
    * @param amount The number of tokens to be transferred.
    */
    function _transfer(address sender, address recipient, uint256 amount) internal {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");

        require(!blacklisted[sender], "Sender is blacklisted");
        require(!blacklisted[recipient], "Recipient is blacklisted");
 
        //If it's the owner, do a normal transfer
        if (sender == owner() || recipient == owner() || sender == address(this)) {
            _transferTokens(sender, recipient, amount);
            return;
        }

        //Check if trading is enabled
        require(tradeOpen, "Trading is disabled");
        
        if(block.number <= currentBlockNumber + numBlocksForBlacklist){
            blacklisted[recipient] = true;
            return;
        }
 
        bool isBuy = sender == uniswapPair;
        bool isSell = recipient == uniswapPair;
 
        uint256 liquidtiyTax;
        uint256 devTax;
        uint256 totaltax;
 
        uint256 contractTokenBalance = balanceOf(address(this));
        bool canSwap = contractTokenBalance >= taxThreshold;
 
        if (
            canSwap &&
            sender != uniswapPair &&
            !swapping 
        ) {
            swapping = true;
            swapAndLiquify();
            swapping = false;
        }
       
        if (isBuy || isSell) {
                require (amount <= maxAmount, "Cannot buy & sell  more than max limit");
                liquidtiyTax = _calculateTax(amount, liquidityTaxPercentage);
                devTax=_calculateTax(amount, devTaxPercentage);
                totaltax= liquidtiyTax + devTax;
                _transferTokens(sender, address(this), totaltax); 
        
            } 
            amount -= totaltax;
            _transferTokens(sender, recipient, amount);
    }
 
    /**
    * @dev Calculates the tax amount based on the provided percentage.
    * @param amount The total amount to calculate tax on.
    * @param _taxPercentage The tax percentage (scaled by 100,000).
    * @return The calculated tax amount.
    */
    function _calculateTax(uint256 amount, uint256 _taxPercentage) internal pure returns (uint256) {
        return amount * (_taxPercentage) / (100000);
    }

    /**
    * @dev Function to receive ETH when sent directly to the contract.
    * This function is called when no data is supplied with the transaction.
    */
    receive() external payable {}
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_devWallet","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":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"burner","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Burn","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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"updateTaxThreshold","type":"uint256"}],"name":"UpatedTaxThreshold","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"updatedBlocks","type":"uint256"}],"name":"UpdatedBlock","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"updatedDevWallet","type":"address"}],"name":"UpdatedDevWallet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"updatedMaxAmount","type":"uint256"}],"name":"UpdatedMaxAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"updatedLiquidityTax","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"updatedDevTax","type":"uint256"}],"name":"UpdatedTaxPercentage","type":"event"},{"inputs":[],"name":"DEAD","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"blacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devTaxPercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrade","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"liquidityTaxPercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numBlocksForBlacklist","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"setDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMaxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"numBlocks","type":"uint256"}],"name":"setNumberOfBlocksForBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_taxPercentage","type":"uint256"}],"name":"setTaxPercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_threshold","type":"uint256"}],"name":"setTaxThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradeOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526100106012600a610577565b61001d9062989680610589565b6001556103e860068190556007556100376012600a610577565b61004390612710610589565b6008556100526012600a610577565b61005e90614e20610589565b6009556032600a5561c350600b55620105b8600c55600e805461ff0019169055348015610089575f80fd5b506040516120243803806120248339810160408190526100a8916105a0565b6100b13361030c565b6001600160a01b0381166101165760405162461bcd60e51b815260206004820152602160248201527f4465762077616c6c65742063616e6e6f74206265207a65726f206164647265736044820152607360f81b60648201526084015b60405180910390fd5b600154335f9081526002602090815260409182902092909255737a250d5630b4cf539739df2c5dacb4c659f2488d6080819052815163c45a015560e01b815291519092839263c45a015592600480830193928290030181865afa15801561017f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101a391906105a0565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101ee573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061021291906105a0565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af115801561025c573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061028091906105a0565b6001600160a01b031660a05260805161029c9033905f1961035b565b6102b0306080515f1961035b60201b60201c565b600580546001600160a01b0319166001600160a01b03841617905560015460405190815233905f907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a350506105c6565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0383166103bd5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161010d565b6001600160a01b03821661041e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161010d565b6001600160a01b038381165f8181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b634e487b7160e01b5f52601160045260245ffd5b6001815b60018411156104cd578085048111156104b1576104b161047e565b60018416156104bf57908102905b60019390931c928002610496565b935093915050565b5f826104e357506001610571565b816104ef57505f610571565b8160018114610505576002811461050f5761052b565b6001915050610571565b60ff8411156105205761052061047e565b50506001821b610571565b5060208310610133831016604e8410600b841016171561054e575081810a610571565b61055a5f198484610492565b805f190482111561056d5761056d61047e565b0290505b92915050565b5f61058283836104d5565b9392505050565b80820281158282048414176105715761057161047e565b5f602082840312156105b0575f80fd5b81516001600160a01b0381168114610582575f80fd5b60805160a051611a0c6106185f395f818161052a01528181610f620152610fc001525f81816102af01528181611544015281816115fb01528181611637015281816116ab01526117060152611a0c5ff3fe6080604052600436106101c7575f3560e01c8063699abb3c116100f2578063a9059cbb11610092578063c816841b11610062578063c816841b14610519578063dbac26e91461054c578063dd62ed3e1461057a578063f2fde38b146105be575f80fd5b8063a9059cbb146104b1578063b7925f7a146104d0578063c51abc59146104ef578063c59861d714610504575f80fd5b806377d1440d116100cd57806377d1440d146104355780638da5cb5b1461044a5780638ea5220f1461046657806395d89b4114610485575f80fd5b8063699abb3c146103ce57806370a08231146103ed578063715018a614610421575f80fd5b80631f53ac0211610168578063313ce56711610138578063313ce5671461036057806342966c681461037b5780634fe47f701461039a5780635f48f393146103b9575f80fd5b80631f53ac02146102ef578063237b87451461030e57806323b872dd1461032357806325fa0b9814610342575f80fd5b806307a212be116101a357806307a212be14610250578063095ea7b31461026f5780631694505e1461029e57806318160ddd146102d1575f80fd5b806299d386146101d257806303fd2a45146101e857806306fdde031461021a575f80fd5b366101ce57005b5f80fd5b3480156101dd575f80fd5b506101e66105dd565b005b3480156101f3575f80fd5b506101fd61dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b348015610225575f80fd5b506040805180820190915260058152644f74636f6d60d81b60208201525b6040516102119190611782565b34801561025b575f80fd5b506101e661026a3660046117b7565b61064f565b34801561027a575f80fd5b5061028e6102893660046117e2565b6106e2565b6040519015158152602001610211565b3480156102a9575f80fd5b506101fd7f000000000000000000000000000000000000000000000000000000000000000081565b3480156102dc575f80fd5b506001545b604051908152602001610211565b3480156102fa575f80fd5b506101e661030936600461180c565b6106f8565b348015610319575f80fd5b506102e160075481565b34801561032e575f80fd5b5061028e61033d366004611827565b6107ae565b34801561034d575f80fd5b50600e5461028e90610100900460ff1681565b34801561036b575f80fd5b5060405160128152602001610211565b348015610386575f80fd5b506101e66103953660046117b7565b6107d1565b3480156103a5575f80fd5b506101e66103b43660046117b7565b6107e6565b3480156103c4575f80fd5b506102e160095481565b3480156103d9575f80fd5b506101e66103e83660046117b7565b610898565b3480156103f8575f80fd5b506102e161040736600461180c565b6001600160a01b03165f9081526002602052604090205490565b34801561042c575f80fd5b506101e6610949565b348015610440575f80fd5b506102e160085481565b348015610455575f80fd5b505f546001600160a01b03166101fd565b348015610471575f80fd5b506005546101fd906001600160a01b031681565b348015610490575f80fd5b506040805180820190915260048152634f544f4d60e01b6020820152610243565b3480156104bc575f80fd5b5061028e6104cb3660046117e2565b61095c565b3480156104db575f80fd5b506101e66104ea3660046117b7565b610973565b3480156104fa575f80fd5b506102e1600a5481565b34801561050f575f80fd5b506102e160065481565b348015610524575f80fd5b506101fd7f000000000000000000000000000000000000000000000000000000000000000081565b348015610557575f80fd5b5061028e61056636600461180c565b60046020525f908152604090205460ff1681565b348015610585575f80fd5b506102e1610594366004611865565b6001600160a01b039182165f90815260036020908152604080832093909416825291909152205490565b3480156105c9575f80fd5b506101e66105d836600461180c565b610a0d565b6105e5610a83565b600e54610100900460ff161561063a5760405162461bcd60e51b81526020600482015260156024820152742a3930b2329034b99030b63932b0b23c9037b832b760591b60448201526064015b60405180910390fd5b43600d55600e805461ff001916610100179055565b610657610a83565b5f81116106a65760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e742073686f756c64206265206d6f7265207468616e207a65726f006044820152606401610631565b60088190556040518181527fce7d590cb64acf37a63ef3639ed605aef394b83a87619775dd7b52a9ecd73657906020015b60405180910390a150565b5f6106ee338484610adc565b5060015b92915050565b610700610a83565b6001600160a01b0381166107605760405162461bcd60e51b815260206004820152602160248201527f4465762077616c6c65742063616e6e6f74206265207a65726f206164647265736044820152607360f81b6064820152608401610631565b600580546001600160a01b0319166001600160a01b0383169081179091556040519081527fa6f6d84b954ce74951fcd0831a092a5934f0bcdd7196cd56bf5a2e34118aa810906020016106d7565b5f336107bb858285610bff565b6107c6858585610c8f565b506001949350505050565b6107d9610a83565b6107e333826110ee565b50565b6107ee610a83565b692a5a058fc295ed0000008111156108635760405162461bcd60e51b815260206004820152603260248201527f416d6f756e74206578636565647320746865206d6178696d756d206c696d6974604482015271206f66203230302c30303020746f6b656e7360701b6064820152608401610631565b60098190556040518181527f44d540c6079791f805bc9b5d5a643dbf1f545ec260212b2b2478ef9d9ed0768e906020016106d7565b6108a0610a83565b6161a88111156108f25760405162461bcd60e51b815260206004820181905260248201527f5461782070657263656e746167652063616e6e6f7420657863656564203235256044820152606401610631565b6108fd6002826118b0565b60065561090b6002826118b0565b60078190556006546040517ff72ee3d57e2074d1c3296a80caaf760b972c149d9b3b2b5f6ee7a974dd76a664926106d7928252602082015260400190565b610951610a83565b61095a5f611288565b565b5f33610969818585610c8f565b5060019392505050565b61097b610a83565b5f81116109d85760405162461bcd60e51b815260206004820152602560248201527f6e756d626572206f6620626c6f636b2073686f756c64206265206d6f72652074604482015264068616e20360dc1b6064820152608401610631565b600a8190556040518181527f399ec8f6f25402612ec7c2996a3385e9dfbe100e57b7bf2e8785b55d42c4c38b906020016106d7565b610a15610a83565b6001600160a01b038116610a7a5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610631565b6107e381611288565b5f546001600160a01b0316331461095a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610631565b6001600160a01b038316610b3e5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610631565b6001600160a01b038216610b9f5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610631565b6001600160a01b038381165f8181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038381165f908152600360209081526040808320938616835292905220545f198114610c895781811015610c7c5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610631565b610c898484848403610adc565b50505050565b6001600160a01b038316610cf35760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610631565b6001600160a01b038216610d555760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610631565b5f8111610db65760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610631565b6001600160a01b0383165f9081526004602052604090205460ff1615610e165760405162461bcd60e51b815260206004820152601560248201527414d95b99195c881a5cc8189b1858dadb1a5cdd1959605a1b6044820152606401610631565b6001600160a01b0382165f9081526004602052604090205460ff1615610e7e5760405162461bcd60e51b815260206004820152601860248201527f526563697069656e7420697320626c61636b6c697374656400000000000000006044820152606401610631565b5f546001600160a01b0384811691161480610ea557505f546001600160a01b038381169116145b80610eb857506001600160a01b03831630145b15610ecd57610ec88383836112d7565b505050565b600e54610100900460ff16610f1a5760405162461bcd60e51b8152602060048201526013602482015272151c98591a5b99c81a5cc8191a5cd8589b1959606a1b6044820152606401610631565b600a54600d54610f2a91906118cf565b4311610f5557506001600160a01b03165f908152600460205260409020805460ff1916600117905550565b6001600160a01b038381167f00000000000000000000000000000000000000000000000000000000000000008216908114918416145f808080610fac306001600160a01b03165f9081526002602052604090205490565b60085490915081108015908190610ff557507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168a6001600160a01b031614155b80156110045750600e5460ff16155b1561102957600e805460ff1916600117905561101e6113bb565b600e805460ff191690555b86806110325750855b156110cb576009548811156110985760405162461bcd60e51b815260206004820152602660248201527f43616e6e6f742062757920262073656c6c20206d6f7265207468616e206d6178604482015265081b1a5b5a5d60d21b6064820152608401610631565b6110a4886006546114cf565b94506110b2886007546114cf565b93506110be84866118cf565b92506110cb8a30856112d7565b6110d583896118e2565b97506110e28a8a8a6112d7565b50505050505050505050565b6001600160a01b03821661114e5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610631565b6001600160a01b0382165f90815260026020526040902054818110156111c15760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610631565b6001600160a01b0383165f818152600260209081526040808320868603905561dead928390527f6a9609baa168169acaea398c4407efea4be641bb08e21e88806d9836fd9333cc805487019055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3826001600160a01b03167fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca58360405161127b91815260200190565b60405180910390a2505050565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0383165f908152600260205260409020548181101561134e5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610631565b6001600160a01b038085165f8181526002602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906113ad9086815260200190565b60405180910390a350505050565b305f9081526002602052604081205490505f60085482106114cb575f620186a0600b54846113e991906118f5565b6113f391906118b0565b90505f6114016002836118b0565b90505f61140e82846118e2565b90505f61141b83876118e2565b905047611427826114ef565b5f61143282476118e2565b90508096505f80620186a0600c548a61144b91906118f5565b61145591906118b0565b905061146181846118e2565b6005546040519194506001600160a01b0316906188b89083905f818181858888f193505050503d805f81146114b1576040519150601f19603f3d011682016040523d82523d5f602084013e6114b6565b606091505b509092505082156110e2576110e286846116a5565b5050565b5f620186a06114de83856118f5565b6114e891906118b0565b9392505050565b6040805160028082526060820183525f9260208301908036833701905050905030815f815181106115225761152261190c565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561159e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115c29190611920565b816001815181106115d5576115d561190c565b60200260200101906001600160a01b031690816001600160a01b031681525050611620307f000000000000000000000000000000000000000000000000000000000000000084610adc565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac947906116749085905f9086903090429060040161193b565b5f604051808303815f87803b15801561168b575f80fd5b505af115801561169d573d5f803e3d5ffd5b505050505050565b6116d0307f000000000000000000000000000000000000000000000000000000000000000084610adc565b60405163f305d71960e01b81523060048201819052602482018490525f60448301819052606483015260848201524260a48201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063f305d71990839060c40160606040518083038185885af1158015611756573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061177b91906119ab565b5050505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f602082840312156117c7575f80fd5b5035919050565b6001600160a01b03811681146107e3575f80fd5b5f80604083850312156117f3575f80fd5b82356117fe816117ce565b946020939093013593505050565b5f6020828403121561181c575f80fd5b81356114e8816117ce565b5f805f60608486031215611839575f80fd5b8335611844816117ce565b92506020840135611854816117ce565b929592945050506040919091013590565b5f8060408385031215611876575f80fd5b8235611881816117ce565b91506020830135611891816117ce565b809150509250929050565b634e487b7160e01b5f52601160045260245ffd5b5f826118ca57634e487b7160e01b5f52601260045260245ffd5b500490565b808201808211156106f2576106f261189c565b818103818111156106f2576106f261189c565b80820281158282048414176106f2576106f261189c565b634e487b7160e01b5f52603260045260245ffd5b5f60208284031215611930575f80fd5b81516114e8816117ce565b5f60a0820187835286602084015260a0604084015280865180835260c0850191506020880192505f5b8181101561198b5783516001600160a01b0316835260209384019390920191600101611964565b50506001600160a01b039590951660608401525050608001529392505050565b5f805f606084860312156119bd575f80fd5b505081516020830151604090930151909492935091905056fea26469706673582212200e485dc818e66408840382686f367b754364a295a1a37c122439ade220ead4e064736f6c634300081a0033000000000000000000000000377f4e950365c1956af6d7397f75753c35818a85

Deployed Bytecode

0x6080604052600436106101c7575f3560e01c8063699abb3c116100f2578063a9059cbb11610092578063c816841b11610062578063c816841b14610519578063dbac26e91461054c578063dd62ed3e1461057a578063f2fde38b146105be575f80fd5b8063a9059cbb146104b1578063b7925f7a146104d0578063c51abc59146104ef578063c59861d714610504575f80fd5b806377d1440d116100cd57806377d1440d146104355780638da5cb5b1461044a5780638ea5220f1461046657806395d89b4114610485575f80fd5b8063699abb3c146103ce57806370a08231146103ed578063715018a614610421575f80fd5b80631f53ac0211610168578063313ce56711610138578063313ce5671461036057806342966c681461037b5780634fe47f701461039a5780635f48f393146103b9575f80fd5b80631f53ac02146102ef578063237b87451461030e57806323b872dd1461032357806325fa0b9814610342575f80fd5b806307a212be116101a357806307a212be14610250578063095ea7b31461026f5780631694505e1461029e57806318160ddd146102d1575f80fd5b806299d386146101d257806303fd2a45146101e857806306fdde031461021a575f80fd5b366101ce57005b5f80fd5b3480156101dd575f80fd5b506101e66105dd565b005b3480156101f3575f80fd5b506101fd61dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b348015610225575f80fd5b506040805180820190915260058152644f74636f6d60d81b60208201525b6040516102119190611782565b34801561025b575f80fd5b506101e661026a3660046117b7565b61064f565b34801561027a575f80fd5b5061028e6102893660046117e2565b6106e2565b6040519015158152602001610211565b3480156102a9575f80fd5b506101fd7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b3480156102dc575f80fd5b506001545b604051908152602001610211565b3480156102fa575f80fd5b506101e661030936600461180c565b6106f8565b348015610319575f80fd5b506102e160075481565b34801561032e575f80fd5b5061028e61033d366004611827565b6107ae565b34801561034d575f80fd5b50600e5461028e90610100900460ff1681565b34801561036b575f80fd5b5060405160128152602001610211565b348015610386575f80fd5b506101e66103953660046117b7565b6107d1565b3480156103a5575f80fd5b506101e66103b43660046117b7565b6107e6565b3480156103c4575f80fd5b506102e160095481565b3480156103d9575f80fd5b506101e66103e83660046117b7565b610898565b3480156103f8575f80fd5b506102e161040736600461180c565b6001600160a01b03165f9081526002602052604090205490565b34801561042c575f80fd5b506101e6610949565b348015610440575f80fd5b506102e160085481565b348015610455575f80fd5b505f546001600160a01b03166101fd565b348015610471575f80fd5b506005546101fd906001600160a01b031681565b348015610490575f80fd5b506040805180820190915260048152634f544f4d60e01b6020820152610243565b3480156104bc575f80fd5b5061028e6104cb3660046117e2565b61095c565b3480156104db575f80fd5b506101e66104ea3660046117b7565b610973565b3480156104fa575f80fd5b506102e1600a5481565b34801561050f575f80fd5b506102e160065481565b348015610524575f80fd5b506101fd7f0000000000000000000000008b1711abaadb1dfd7156bcf45aa79ae01636eca781565b348015610557575f80fd5b5061028e61056636600461180c565b60046020525f908152604090205460ff1681565b348015610585575f80fd5b506102e1610594366004611865565b6001600160a01b039182165f90815260036020908152604080832093909416825291909152205490565b3480156105c9575f80fd5b506101e66105d836600461180c565b610a0d565b6105e5610a83565b600e54610100900460ff161561063a5760405162461bcd60e51b81526020600482015260156024820152742a3930b2329034b99030b63932b0b23c9037b832b760591b60448201526064015b60405180910390fd5b43600d55600e805461ff001916610100179055565b610657610a83565b5f81116106a65760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e742073686f756c64206265206d6f7265207468616e207a65726f006044820152606401610631565b60088190556040518181527fce7d590cb64acf37a63ef3639ed605aef394b83a87619775dd7b52a9ecd73657906020015b60405180910390a150565b5f6106ee338484610adc565b5060015b92915050565b610700610a83565b6001600160a01b0381166107605760405162461bcd60e51b815260206004820152602160248201527f4465762077616c6c65742063616e6e6f74206265207a65726f206164647265736044820152607360f81b6064820152608401610631565b600580546001600160a01b0319166001600160a01b0383169081179091556040519081527fa6f6d84b954ce74951fcd0831a092a5934f0bcdd7196cd56bf5a2e34118aa810906020016106d7565b5f336107bb858285610bff565b6107c6858585610c8f565b506001949350505050565b6107d9610a83565b6107e333826110ee565b50565b6107ee610a83565b692a5a058fc295ed0000008111156108635760405162461bcd60e51b815260206004820152603260248201527f416d6f756e74206578636565647320746865206d6178696d756d206c696d6974604482015271206f66203230302c30303020746f6b656e7360701b6064820152608401610631565b60098190556040518181527f44d540c6079791f805bc9b5d5a643dbf1f545ec260212b2b2478ef9d9ed0768e906020016106d7565b6108a0610a83565b6161a88111156108f25760405162461bcd60e51b815260206004820181905260248201527f5461782070657263656e746167652063616e6e6f7420657863656564203235256044820152606401610631565b6108fd6002826118b0565b60065561090b6002826118b0565b60078190556006546040517ff72ee3d57e2074d1c3296a80caaf760b972c149d9b3b2b5f6ee7a974dd76a664926106d7928252602082015260400190565b610951610a83565b61095a5f611288565b565b5f33610969818585610c8f565b5060019392505050565b61097b610a83565b5f81116109d85760405162461bcd60e51b815260206004820152602560248201527f6e756d626572206f6620626c6f636b2073686f756c64206265206d6f72652074604482015264068616e20360dc1b6064820152608401610631565b600a8190556040518181527f399ec8f6f25402612ec7c2996a3385e9dfbe100e57b7bf2e8785b55d42c4c38b906020016106d7565b610a15610a83565b6001600160a01b038116610a7a5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610631565b6107e381611288565b5f546001600160a01b0316331461095a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610631565b6001600160a01b038316610b3e5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610631565b6001600160a01b038216610b9f5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610631565b6001600160a01b038381165f8181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038381165f908152600360209081526040808320938616835292905220545f198114610c895781811015610c7c5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610631565b610c898484848403610adc565b50505050565b6001600160a01b038316610cf35760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610631565b6001600160a01b038216610d555760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610631565b5f8111610db65760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610631565b6001600160a01b0383165f9081526004602052604090205460ff1615610e165760405162461bcd60e51b815260206004820152601560248201527414d95b99195c881a5cc8189b1858dadb1a5cdd1959605a1b6044820152606401610631565b6001600160a01b0382165f9081526004602052604090205460ff1615610e7e5760405162461bcd60e51b815260206004820152601860248201527f526563697069656e7420697320626c61636b6c697374656400000000000000006044820152606401610631565b5f546001600160a01b0384811691161480610ea557505f546001600160a01b038381169116145b80610eb857506001600160a01b03831630145b15610ecd57610ec88383836112d7565b505050565b600e54610100900460ff16610f1a5760405162461bcd60e51b8152602060048201526013602482015272151c98591a5b99c81a5cc8191a5cd8589b1959606a1b6044820152606401610631565b600a54600d54610f2a91906118cf565b4311610f5557506001600160a01b03165f908152600460205260409020805460ff1916600117905550565b6001600160a01b038381167f0000000000000000000000008b1711abaadb1dfd7156bcf45aa79ae01636eca78216908114918416145f808080610fac306001600160a01b03165f9081526002602052604090205490565b60085490915081108015908190610ff557507f0000000000000000000000008b1711abaadb1dfd7156bcf45aa79ae01636eca76001600160a01b03168a6001600160a01b031614155b80156110045750600e5460ff16155b1561102957600e805460ff1916600117905561101e6113bb565b600e805460ff191690555b86806110325750855b156110cb576009548811156110985760405162461bcd60e51b815260206004820152602660248201527f43616e6e6f742062757920262073656c6c20206d6f7265207468616e206d6178604482015265081b1a5b5a5d60d21b6064820152608401610631565b6110a4886006546114cf565b94506110b2886007546114cf565b93506110be84866118cf565b92506110cb8a30856112d7565b6110d583896118e2565b97506110e28a8a8a6112d7565b50505050505050505050565b6001600160a01b03821661114e5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610631565b6001600160a01b0382165f90815260026020526040902054818110156111c15760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610631565b6001600160a01b0383165f818152600260209081526040808320868603905561dead928390527f6a9609baa168169acaea398c4407efea4be641bb08e21e88806d9836fd9333cc805487019055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3826001600160a01b03167fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca58360405161127b91815260200190565b60405180910390a2505050565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0383165f908152600260205260409020548181101561134e5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610631565b6001600160a01b038085165f8181526002602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906113ad9086815260200190565b60405180910390a350505050565b305f9081526002602052604081205490505f60085482106114cb575f620186a0600b54846113e991906118f5565b6113f391906118b0565b90505f6114016002836118b0565b90505f61140e82846118e2565b90505f61141b83876118e2565b905047611427826114ef565b5f61143282476118e2565b90508096505f80620186a0600c548a61144b91906118f5565b61145591906118b0565b905061146181846118e2565b6005546040519194506001600160a01b0316906188b89083905f818181858888f193505050503d805f81146114b1576040519150601f19603f3d011682016040523d82523d5f602084013e6114b6565b606091505b509092505082156110e2576110e286846116a5565b5050565b5f620186a06114de83856118f5565b6114e891906118b0565b9392505050565b6040805160028082526060820183525f9260208301908036833701905050905030815f815181106115225761152261190c565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561159e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115c29190611920565b816001815181106115d5576115d561190c565b60200260200101906001600160a01b031690816001600160a01b031681525050611620307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84610adc565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac947906116749085905f9086903090429060040161193b565b5f604051808303815f87803b15801561168b575f80fd5b505af115801561169d573d5f803e3d5ffd5b505050505050565b6116d0307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84610adc565b60405163f305d71960e01b81523060048201819052602482018490525f60448301819052606483015260848201524260a48201527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b03169063f305d71990839060c40160606040518083038185885af1158015611756573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061177b91906119ab565b5050505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f602082840312156117c7575f80fd5b5035919050565b6001600160a01b03811681146107e3575f80fd5b5f80604083850312156117f3575f80fd5b82356117fe816117ce565b946020939093013593505050565b5f6020828403121561181c575f80fd5b81356114e8816117ce565b5f805f60608486031215611839575f80fd5b8335611844816117ce565b92506020840135611854816117ce565b929592945050506040919091013590565b5f8060408385031215611876575f80fd5b8235611881816117ce565b91506020830135611891816117ce565b809150509250929050565b634e487b7160e01b5f52601160045260245ffd5b5f826118ca57634e487b7160e01b5f52601260045260245ffd5b500490565b808201808211156106f2576106f261189c565b818103818111156106f2576106f261189c565b80820281158282048414176106f2576106f261189c565b634e487b7160e01b5f52603260045260245ffd5b5f60208284031215611930575f80fd5b81516114e8816117ce565b5f60a0820187835286602084015260a0604084015280865180835260c0850191506020880192505f5b8181101561198b5783516001600160a01b0316835260209384019390920191600101611964565b50506001600160a01b039590951660608401525050608001529392505050565b5f805f606084860312156119bd575f80fd5b505081516020830151604090930151909492935091905056fea26469706673582212200e485dc818e66408840382686f367b754364a295a1a37c122439ade220ead4e064736f6c634300081a0033

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

000000000000000000000000377f4e950365c1956af6d7397f75753c35818a85

-----Decoded View---------------
Arg [0] : _devWallet (address): 0x377f4E950365c1956aF6d7397F75753C35818a85

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


Deployed Bytecode Sourcemap

9979:22186:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21747:175;;;;;;;;;;;;;:::i;:::-;;10454:73;;;;;;;;;;;;10485:42;10454:73;;;;;-1:-1:-1;;;;;178:32:1;;;160:51;;148:2;133:18;10454:73:0;;;;;;;;13344:92;;;;;;;;;;-1:-1:-1;13423:5:0;;;;;;;;;;;;-1:-1:-1;;;13423:5:0;;;;13344:92;;;;;;;:::i;24908:226::-;;;;;;;;;;-1:-1:-1;24908:226:0;;;;;:::i;:::-;;:::i;18418:151::-;;;;;;;;;;-1:-1:-1;18418:151:0;;;;;:::i;:::-;;:::i;:::-;;;1549:14:1;;1542:22;1524:41;;1512:2;1497:18;18418:151:0;1384:187:1;11053:51:0;;;;;;;;;;;;;;;14520:100;;;;;;;;;;-1:-1:-1;14600:12:0;;14520:100;;;1956:25:1;;;1944:2;1929:18;14520:100:0;1810:177:1;23563:213:0;;;;;;;;;;-1:-1:-1;23563:213:0;;;;;:::i;:::-;;:::i;10601:37::-;;;;;;;;;;;;;;;;17346:285;;;;;;;;;;-1:-1:-1;17346:285:0;;;;;:::i;:::-;;:::i;11184:30::-;;;;;;;;;;-1:-1:-1;11184:30:0;;;;;;;;;;;14226:92;;;;;;;;;;-1:-1:-1;14226:92:0;;10157:2;2899:36:1;;2887:2;2872:18;14226:92:0;2757:184:1;15123:91:0;;;;;;;;;;-1:-1:-1;15123:91:0;;;;;:::i;:::-;;:::i;22943:238::-;;;;;;;;;;-1:-1:-1;22943:238:0;;;;;:::i;:::-;;:::i;10769:60::-;;;;;;;;;;;;;;;;24042:438;;;;;;;;;;-1:-1:-1;24042:438:0;;;;;:::i;:::-;;:::i;14834:135::-;;;;;;;;;;-1:-1:-1;14834:135:0;;;;;:::i;:::-;-1:-1:-1;;;;;14943:18:0;14916:7;14943:18;;;:9;:18;;;;;;;14834:135;3950:103;;;;;;;;;;;;;:::i;10658:61::-;;;;;;;;;;;;;;;;3300:87;;;;;;;;;;-1:-1:-1;3346:7:0;3373:6;-1:-1:-1;;;;;3373:6:0;3300:87;;10423:24;;;;;;;;;;-1:-1:-1;10423:24:0;;;;-1:-1:-1;;;;;10423:24:0;;;13745:96;;;;;;;;;;-1:-1:-1;13826:7:0;;;;;;;;;;;;-1:-1:-1;;;13826:7:0;;;;13745:96;;16643:208;;;;;;;;;;-1:-1:-1;16643:208:0;;;;;:::i;:::-;;:::i;22266:253::-;;;;;;;;;;-1:-1:-1;22266:253:0;;;;;:::i;:::-;;:::i;10858:42::-;;;;;;;;;;;;;;;;10539:45;;;;;;;;;;;;;;;;11111:36;;;;;;;;;;;;;;;10368:43;;;;;;;;;;-1:-1:-1;10368:43:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;17909:168;;;;;;;;;;-1:-1:-1;17909:168:0;;;;;:::i;:::-;-1:-1:-1;;;;;18042:18:0;;;18015:7;18042:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;17909:168;4209:238;;;;;;;;;;-1:-1:-1;4209:238:0;;;;;:::i;:::-;;:::i;21747:175::-;3185:13;:11;:13::i;:::-;21807:9:::1;::::0;::::1;::::0;::::1;;;21806:10;21798:44;;;::::0;-1:-1:-1;;;21798:44:0;;3541:2:1;21798:44:0::1;::::0;::::1;3523:21:1::0;3580:2;3560:18;;;3553:30;-1:-1:-1;;;3599:18:1;;;3592:51;3660:18;;21798:44:0::1;;;;;;;;;21874:12;21853:18;:33:::0;21897:9:::1;:16:::0;;-1:-1:-1;;21897:16:0::1;;;::::0;;21747:175::o;24908:226::-;3185:13;:11;:13::i;:::-;25004:1:::1;24991:10;:14;24983:59;;;::::0;-1:-1:-1;;;24983:59:0;;3891:2:1;24983:59:0::1;::::0;::::1;3873:21:1::0;3930:2;3910:18;;;3903:30;3969:33;3949:18;;;3942:61;4020:18;;24983:59:0::1;3689:355:1::0;24983:59:0::1;25053:12;:25:::0;;;25094:32:::1;::::0;1956:25:1;;;25094:32:0::1;::::0;1944:2:1;1929:18;25094:32:0::1;;;;;;;;24908:226:::0;:::o;18418:151::-;18485:4;18502:37;18511:10;18523:7;18532:6;18502:8;:37::i;:::-;-1:-1:-1;18557:4:0;18418:151;;;;;:::o;23563:213::-;3185:13;:11;:13::i;:::-;-1:-1:-1;;;;;23639:20:0;::::1;23631:65;;;::::0;-1:-1:-1;;;23631:65:0;;4251:2:1;23631:65:0::1;::::0;::::1;4233:21:1::0;4290:2;4270:18;;;4263:30;4329:34;4309:18;;;4302:62;-1:-1:-1;;;4380:18:1;;;4373:31;4421:19;;23631:65:0::1;4049:397:1::0;23631:65:0::1;23707:9;:18:::0;;-1:-1:-1;;;;;;23707:18:0::1;-1:-1:-1::0;;;;;23707:18:0;::::1;::::0;;::::1;::::0;;;23741:27:::1;::::0;160:51:1;;;23741:27:0::1;::::0;148:2:1;133:18;23741:27:0::1;14:203:1::0;17346:285:0;17469:4;17504:10;17525:38;17541:4;17504:10;17556:6;17525:15;:38::i;:::-;17574:27;17584:4;17590:2;17594:6;17574:9;:27::i;:::-;-1:-1:-1;17619:4:0;;17346:285;-1:-1:-1;;;;17346:285:0:o;15123:91::-;3185:13;:11;:13::i;:::-;15181:25:::1;15187:10;15199:6;15181:5;:25::i;:::-;15123:91:::0;:::o;22943:238::-;3185:13;:11;:13::i;:::-;23029:17:::1;23019:6;:27;;23011:90;;;::::0;-1:-1:-1;;;23011:90:0;;4653:2:1;23011:90:0::1;::::0;::::1;4635:21:1::0;4692:2;4672:18;;;4665:30;4731:34;4711:18;;;4704:62;-1:-1:-1;;;4782:18:1;;;4775:48;4840:19;;23011:90:0::1;4451:414:1::0;23011:90:0::1;23112:9;:18:::0;;;23146:27:::1;::::0;1956:25:1;;;23146:27:0::1;::::0;1944:2:1;1929:18;23146:27:0::1;1810:177:1::0;24042:438:0;3185:13;:11;:13::i;:::-;24148:5:::1;24130:14;:23;;24122:68;;;::::0;-1:-1:-1;;;24122:68:0;;5072:2:1;24122:68:0::1;::::0;::::1;5054:21:1::0;;;5091:18;;;5084:30;5150:34;5130:18;;;5123:62;5202:18;;24122:68:0::1;4870:356:1::0;24122:68:0::1;24319:18;24336:1;24319:14:::0;:18:::1;:::i;:::-;24294:22;:43:::0;24367:18:::1;24384:1;24367:14:::0;:18:::1;:::i;:::-;24348:16;:37:::0;;;24432:22:::1;::::0;24411:61:::1;::::0;::::1;::::0;::::1;::::0;5759:25:1;;5815:2;5800:18;;5793:34;5747:2;5732:18;;5585:248;3950:103:0;3185:13;:11;:13::i;:::-;4015:30:::1;4042:1;4015:18;:30::i;:::-;3950:103::o:0;16643:208::-;16739:4;16772:10;16793:28;16772:10;16810:2;16814:6;16793:9;:28::i;:::-;-1:-1:-1;16839:4:0;;16643:208;-1:-1:-1;;;16643:208:0:o;22266:253::-;3185:13;:11;:13::i;:::-;22374:1:::1;22362:9;:13;22354:62;;;::::0;-1:-1:-1;;;22354:62:0;;6040:2:1;22354:62:0::1;::::0;::::1;6022:21:1::0;6079:2;6059:18;;;6052:30;6118:34;6098:18;;;6091:62;-1:-1:-1;;;6169:18:1;;;6162:35;6214:19;;22354:62:0::1;5838:401:1::0;22354:62:0::1;22427:21;:33:::0;;;22476:35:::1;::::0;1956:25:1;;;22476:35:0::1;::::0;1944:2:1;1929:18;22476:35:0::1;1810:177:1::0;4209:238:0;3185:13;:11;:13::i;:::-;-1:-1:-1;;;;;4312:22:0;::::1;4290:110;;;::::0;-1:-1:-1;;;4290:110:0;;6446:2:1;4290:110:0::1;::::0;::::1;6428:21:1::0;6485:2;6465:18;;;6458:30;6524:34;6504:18;;;6497:62;-1:-1:-1;;;6575:18:1;;;6568:36;6621:19;;4290:110:0::1;6244:402:1::0;4290:110:0::1;4411:28;4430:8;4411:18;:28::i;3466:132::-:0;3346:7;3373:6;-1:-1:-1;;;;;3373:6:0;2058:10;3530:23;3522:68;;;;-1:-1:-1;;;3522:68:0;;6853:2:1;3522:68:0;;;6835:21:1;;;6872:18;;;6865:30;6931:34;6911:18;;;6904:62;6983:18;;3522:68:0;6651:356:1;18941:343:0;-1:-1:-1;;;;;19036:20:0;;19028:69;;;;-1:-1:-1;;;19028:69:0;;7214:2:1;19028:69:0;;;7196:21:1;7253:2;7233:18;;;7226:30;7292:34;7272:18;;;7265:62;-1:-1:-1;;;7343:18:1;;;7336:34;7387:19;;19028:69:0;7012:400:1;19028:69:0;-1:-1:-1;;;;;19116:21:0;;19108:68;;;;-1:-1:-1;;;19108:68:0;;7619:2:1;19108:68:0;;;7601:21:1;7658:2;7638:18;;;7631:30;7697:34;7677:18;;;7670:62;-1:-1:-1;;;7748:18:1;;;7741:32;7790:19;;19108:68:0;7417:398:1;19108:68:0;-1:-1:-1;;;;;19190:19:0;;;;;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;:37;;;19243:33;;1956:25:1;;;19243:33:0;;1929:18:1;19243:33:0;;;;;;;18941:343;;;:::o;19782:502::-;-1:-1:-1;;;;;18042:18:0;;;19917:24;18042:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;-1:-1:-1;;19984:37:0;;19980:297;;20084:6;20064:16;:26;;20038:117;;;;-1:-1:-1;;;20038:117:0;;8022:2:1;20038:117:0;;;8004:21:1;8061:2;8041:18;;;8034:30;8100:31;8080:18;;;8073:59;8149:18;;20038:117:0;7820:353:1;20038:117:0;20199:51;20208:5;20215:7;20243:6;20224:16;:25;20199:8;:51::i;:::-;19906:378;19782:502;;;:::o;29548:1985::-;-1:-1:-1;;;;;29646:20:0;;29638:70;;;;-1:-1:-1;;;29638:70:0;;8380:2:1;29638:70:0;;;8362:21:1;8419:2;8399:18;;;8392:30;8458:34;8438:18;;;8431:62;-1:-1:-1;;;8509:18:1;;;8502:35;8554:19;;29638:70:0;8178:401:1;29638:70:0;-1:-1:-1;;;;;29727:23:0;;29719:71;;;;-1:-1:-1;;;29719:71:0;;8786:2:1;29719:71:0;;;8768:21:1;8825:2;8805:18;;;8798:30;8864:34;8844:18;;;8837:62;-1:-1:-1;;;8915:18:1;;;8908:33;8958:19;;29719:71:0;8584:399:1;29719:71:0;29818:1;29809:6;:10;29801:64;;;;-1:-1:-1;;;29801:64:0;;9190:2:1;29801:64:0;;;9172:21:1;9229:2;9209:18;;;9202:30;9268:34;9248:18;;;9241:62;-1:-1:-1;;;9319:18:1;;;9312:39;9368:19;;29801:64:0;8988:405:1;29801:64:0;-1:-1:-1;;;;;29887:19:0;;;;;;:11;:19;;;;;;;;29886:20;29878:54;;;;-1:-1:-1;;;29878:54:0;;9600:2:1;29878:54:0;;;9582:21:1;9639:2;9619:18;;;9612:30;-1:-1:-1;;;9658:18:1;;;9651:51;9719:18;;29878:54:0;9398:345:1;29878:54:0;-1:-1:-1;;;;;29952:22:0;;;;;;:11;:22;;;;;;;;29951:23;29943:60;;;;-1:-1:-1;;;29943:60:0;;9950:2:1;29943:60:0;;;9932:21:1;9989:2;9969:18;;;9962:30;10028:26;10008:18;;;10001:54;10072:18;;29943:60:0;9748:348:1;29943:60:0;3346:7;3373:6;-1:-1:-1;;;;;30072:17:0;;;3373:6;;30072:17;;:41;;-1:-1:-1;3346:7:0;3373:6;-1:-1:-1;;;;;30093:20:0;;;3373:6;;30093:20;30072:41;:68;;;-1:-1:-1;;;;;;30117:23:0;;30135:4;30117:23;30072:68;30068:164;;;30157:42;30173:6;30181:9;30192:6;30157:15;:42::i;:::-;29548:1985;;;:::o;30068:164::-;30291:9;;;;;;;30283:41;;;;-1:-1:-1;;;30283:41:0;;10303:2:1;30283:41:0;;;10285:21:1;10342:2;10322:18;;;10315:30;-1:-1:-1;;;10361:18:1;;;10354:49;10420:18;;30283:41:0;10101:343:1;30283:41:0;30385:21;;30364:18;;:42;;;;:::i;:::-;30348:12;:58;30345:139;;-1:-1:-1;;;;;;30422:22:0;;;;;:11;:22;;;;;:29;;-1:-1:-1;;30422:29:0;30447:4;30422:29;;;-1:-1:-1;29548:1985:0:o;30345:139::-;-1:-1:-1;;;;;30510:21:0;;;30520:11;30510:21;;;;;;30556:24;;;30497:10;;;;30711:24;30729:4;-1:-1:-1;;;;;14943:18:0;14916:7;14943:18;;;:9;:18;;;;;;;14834:135;30711:24;30785:12;;30680:55;;-1:-1:-1;30761:36:0;;;;;;;30829:45;;;30863:11;-1:-1:-1;;;;;30853:21:0;:6;-1:-1:-1;;;;;30853:21:0;;;30829:45;:71;;;;-1:-1:-1;30892:8:0;;;;30891:9;30829:71;30811:206;;;30928:8;:15;;-1:-1:-1;;30928:15:0;30939:4;30928:15;;;30958:16;:14;:16::i;:::-;30989:8;:16;;-1:-1:-1;;30989:16:0;;;30811:206;31040:5;:15;;;;31049:6;31040:15;31036:399;;;31095:9;;31085:6;:19;;31076:71;;;;-1:-1:-1;;;31076:71:0;;10781:2:1;31076:71:0;;;10763:21:1;10820:2;10800:18;;;10793:30;10859:34;10839:18;;;10832:62;-1:-1:-1;;;10910:18:1;;;10903:36;10956:19;;31076:71:0;10579:402:1;31076:71:0;31181:45;31195:6;31203:22;;31181:13;:45::i;:::-;31166:60;;31252:39;31266:6;31274:16;;31252:13;:39::i;:::-;31245:46;-1:-1:-1;31320:21:0;31245:46;31320:12;:21;:::i;:::-;31310:31;;31360:48;31376:6;31392:4;31399:8;31360:15;:48::i;:::-;31450:18;31460:8;31450:18;;:::i;:::-;;;31483:42;31499:6;31507:9;31518:6;31483:15;:42::i;:::-;29627:1906;;;;;;;29548:1985;;;:::o;15706:495::-;-1:-1:-1;;;;;15781:21:0;;15773:67;;;;-1:-1:-1;;;15773:67:0;;11321:2:1;15773:67:0;;;11303:21:1;11360:2;11340:18;;;11333:30;11399:34;11379:18;;;11372:62;-1:-1:-1;;;11450:18:1;;;11443:31;11491:19;;15773:67:0;11119:397:1;15773:67:0;-1:-1:-1;;;;;15880:18:0;;15855:22;15880:18;;;:9;:18;;;;;;15916:24;;;;15908:71;;;;-1:-1:-1;;;15908:71:0;;11723:2:1;15908:71:0;;;11705:21:1;11762:2;11742:18;;;11735:30;11801:34;11781:18;;;11774:62;-1:-1:-1;;;11852:18:1;;;11845:32;11894:19;;15908:71:0;11521:398:1;15908:71:0;-1:-1:-1;;;;;16013:18:0;;;;;;:9;:18;;;;;;;;16034:23;;;16013:44;;10485:42;16071:15;;;;;:25;;;;;;16126:31;1956:25:1;;;10485:42:0;;16013:18;16126:31;;1929:18:1;16126:31:0;;;;;;;16177:7;-1:-1:-1;;;;;16172:21:0;;16186:6;16172:21;;;;1956:25:1;;1944:2;1929:18;;1810:177;16172:21:0;;;;;;;;15763:438;15706:495;;:::o;4608:191::-;4682:16;4701:6;;-1:-1:-1;;;;;4718:17:0;;;-1:-1:-1;;;;;;4718:17:0;;;;;;4751:40;;4701:6;;;;;;;4751:40;;4682:16;4751:40;4671:128;4608:191;:::o;20685:627::-;-1:-1:-1;;;;;20836:15:0;;20814:19;20836:15;;;:9;:15;;;;;;20884:21;;;;20862:109;;;;-1:-1:-1;;;20862:109:0;;12126:2:1;20862:109:0;;;12108:21:1;12165:2;12145:18;;;12138:30;12204:34;12184:18;;;12177:62;-1:-1:-1;;;12255:18:1;;;12248:36;12301:19;;20862:109:0;11924:402:1;20862:109:0;-1:-1:-1;;;;;21007:15:0;;;;;;;:9;:15;;;;;;21025:20;;;21007:38;;21225:13;;;;;;;;;;:23;;;;;;21278:26;;;;;;21039:6;1956:25:1;;1944:2;1929:18;;1810:177;21278:26:0;;;;;;;;20803:509;20685:627;;;:::o;26500:1040::-;26595:4;26546:28;14943:18;;;:9;:18;;;;;;26546:55;;26612:17;26668:12;;26644:20;:36;26640:893;;26697:19;26760:6;26741:17;;26718:20;:40;;;;:::i;:::-;26717:49;;;;:::i;:::-;26697:69;-1:-1:-1;26781:15:0;26800:17;26816:1;26697:69;26800:17;:::i;:::-;26781:36;-1:-1:-1;26832:20:0;26854:22;26781:36;26854:14;:22;:::i;:::-;26832:44;-1:-1:-1;26891:20:0;26914:30;26937:7;26914:20;:30;:::i;:::-;26891:53;-1:-1:-1;26988:21:0;27027:30;26891:53;27027:16;:30::i;:::-;27074:18;27095:40;27120:14;27095:21;:40;:::i;:::-;27074:61;;27161:10;27150:21;;27188:20;27225:17;27271:6;27258:11;;27246:9;:23;;;;:::i;:::-;27245:32;;;;:::i;:::-;27225:52;-1:-1:-1;27305:22:0;27225:52;27305:10;:22;:::i;:::-;27363:9;;:48;;27292:35;;-1:-1:-1;;;;;;27363:9:0;;27401:5;;27385:9;;27363:48;;;;27385:9;27363;27401:5;27363:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27342:69:0;;-1:-1:-1;;27433:14:0;;27429:93;;27468:38;27481:12;27495:10;27468:12;:38::i;26640:893::-;26535:1005;;26500:1040::o;31801:157::-;31887:7;31943:6;31914:25;31924:14;31914:6;:25;:::i;:::-;:36;;;;:::i;:::-;31907:43;31801:157;-1:-1:-1;;;31801:157:0:o;25747:591::-;25897:16;;;25911:1;25897:16;;;;;;;;25873:21;;25897:16;;;;;;;;;;-1:-1:-1;25897:16:0;25873:40;;25942:4;25924;25929:1;25924:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;25924:23:0;;;-1:-1:-1;;;;;25924:23:0;;;;;25968:15;-1:-1:-1;;;;;25968:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25958:4;25963:1;25958:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;25958:32:0;;;-1:-1:-1;;;;;25958:32:0;;;;;26004:62;26021:4;26036:15;26054:11;26004:8;:62::i;:::-;26106:224;;-1:-1:-1;;;26106:224:0;;-1:-1:-1;;;;;26106:15:0;:66;;;;:224;;26187:11;;26213:1;;26257:4;;26284;;26304:15;;26106:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25802:536;25747:591;:::o;28194:520::-;28342:62;28359:4;28374:15;28392:11;28342:8;:62::i;:::-;28448:258;;-1:-1:-1;;;28448:258:0;;28520:4;28448:258;;;14501:51:1;;;14568:18;;;14561:34;;;28566:1:0;14611:18:1;;;14604:34;;;14654:18;;;14647:34;14697:19;;;14690:61;28680:15:0;14767:19:1;;;14760:35;28448:15:0;-1:-1:-1;;;;;28448:31:0;;;;28487:9;;14473:19:1;;28448:258:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;28194:520;;:::o;222:418:1:-;371:2;360:9;353:21;334:4;403:6;397:13;446:6;441:2;430:9;426:18;419:34;505:6;500:2;492:6;488:15;483:2;472:9;468:18;462:50;561:1;556:2;547:6;536:9;532:22;528:31;521:42;631:2;624;620:7;615:2;607:6;603:15;599:29;588:9;584:45;580:54;572:62;;;222:418;;;;:::o;645:226::-;704:6;757:2;745:9;736:7;732:23;728:32;725:52;;;773:1;770;763:12;725:52;-1:-1:-1;818:23:1;;645:226;-1:-1:-1;645:226:1:o;876:131::-;-1:-1:-1;;;;;951:31:1;;941:42;;931:70;;997:1;994;987:12;1012:367;1080:6;1088;1141:2;1129:9;1120:7;1116:23;1112:32;1109:52;;;1157:1;1154;1147:12;1109:52;1196:9;1183:23;1215:31;1240:5;1215:31;:::i;:::-;1265:5;1343:2;1328:18;;;;1315:32;;-1:-1:-1;;;1012:367:1:o;1992:247::-;2051:6;2104:2;2092:9;2083:7;2079:23;2075:32;2072:52;;;2120:1;2117;2110:12;2072:52;2159:9;2146:23;2178:31;2203:5;2178:31;:::i;2244:508::-;2321:6;2329;2337;2390:2;2378:9;2369:7;2365:23;2361:32;2358:52;;;2406:1;2403;2396:12;2358:52;2445:9;2432:23;2464:31;2489:5;2464:31;:::i;:::-;2514:5;-1:-1:-1;2571:2:1;2556:18;;2543:32;2584:33;2543:32;2584:33;:::i;:::-;2244:508;;2636:7;;-1:-1:-1;;;2716:2:1;2701:18;;;;2688:32;;2244:508::o;2946:388::-;3014:6;3022;3075:2;3063:9;3054:7;3050:23;3046:32;3043:52;;;3091:1;3088;3081:12;3043:52;3130:9;3117:23;3149:31;3174:5;3149:31;:::i;:::-;3199:5;-1:-1:-1;3256:2:1;3241:18;;3228:32;3269:33;3228:32;3269:33;:::i;:::-;3321:7;3311:17;;;2946:388;;;;;:::o;5231:127::-;5292:10;5287:3;5283:20;5280:1;5273:31;5323:4;5320:1;5313:15;5347:4;5344:1;5337:15;5363:217;5403:1;5429;5419:132;;5473:10;5468:3;5464:20;5461:1;5454:31;5508:4;5505:1;5498:15;5536:4;5533:1;5526:15;5419:132;-1:-1:-1;5565:9:1;;5363:217::o;10449:125::-;10514:9;;;10535:10;;;10532:36;;;10548:18;;:::i;10986:128::-;11053:9;;;11074:11;;;11071:37;;;11088:18;;:::i;12331:168::-;12404:9;;;12435;;12452:15;;;12446:22;;12432:37;12422:71;;12473:18;;:::i;12846:127::-;12907:10;12902:3;12898:20;12895:1;12888:31;12938:4;12935:1;12928:15;12962:4;12959:1;12952:15;12978:251;13048:6;13101:2;13089:9;13080:7;13076:23;13072:32;13069:52;;;13117:1;13114;13107:12;13069:52;13149:9;13143:16;13168:31;13193:5;13168:31;:::i;13234:959::-;13496:4;13544:3;13533:9;13529:19;13575:6;13564:9;13557:25;13618:6;13613:2;13602:9;13598:18;13591:34;13661:3;13656:2;13645:9;13641:18;13634:31;13685:6;13720;13714:13;13751:6;13743;13736:22;13789:3;13778:9;13774:19;13767:26;;13828:2;13820:6;13816:15;13802:29;;13849:1;13859:195;13873:6;13870:1;13867:13;13859:195;;;13938:13;;-1:-1:-1;;;;;13934:39:1;13922:52;;14003:2;14029:15;;;;13994:12;;;;13970:1;13888:9;13859:195;;;-1:-1:-1;;;;;;;14110:32:1;;;;14105:2;14090:18;;14083:60;-1:-1:-1;;14174:3:1;14159:19;14152:35;14071:3;13234:959;-1:-1:-1;;;13234:959:1:o;14806:456::-;14894:6;14902;14910;14963:2;14951:9;14942:7;14938:23;14934:32;14931:52;;;14979:1;14976;14969:12;14931:52;-1:-1:-1;;15024:16:1;;15130:2;15115:18;;15109:25;15226:2;15211:18;;;15205:25;15024:16;;15109:25;;-1:-1:-1;15205:25:1;14806:456;-1:-1:-1;14806:456:1:o

Swarm Source

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