BNB Price: $620.02 (+2.73%)
 

Overview

Max Total Supply

1,310,000LAX

Holders

7,063

Market

Price

$0.00 @ 0.000000 BNB

Onchain Market Cap

-

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
200,000 LAX

Value
$0.00
0x3790715d5458397600f524dbe8269b7498f6a9fe
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information

Contract Source Code Verified (Exact Match)

Contract Name:
LAXToken

Compiler Version
v0.8.20+commit.a1b79de6

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion
// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.20;

import {FirstLaunch} from "./abstract/FirstLaunch.sol";
import {ExcludedFromFeeList} from "./abstract/ExcludedFromFeeList.sol";
import {Helper} from "./lib/Helper.sol";
import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import {
    IUniswapV2Pair
} from "@uniswap/v2-core/contracts/interfaces/IUniswapV2Pair.sol";
import {Owned} from "solmate/src/auth/Owned.sol";
import {ERC20} from "./abstract/token/ERC20.sol";
import {BaseUSDTWA, USDT} from "./abstract/dex/BaseUSDTWA.sol";
import {ILAXOToken} from "./interface/ILAXOToken.sol";
import {IProject} from "./interface/IProject.sol";

contract LAXToken is ExcludedFromFeeList, FirstLaunch, BaseUSDTWA, ERC20 {
    uint256 public AmountLaxo;
    uint256 public AmountU;
    uint256 public AmountEcosystem;

    address public immutable STAKING;

    bool public presale;
    uint40 public coldTime = 1 minutes;

    address public PROJECT;
    address public LAXO;

    uint256 public swapAtAmount = 20 ether;
    uint256 public numTokensSellRate = 20;

    mapping(address => uint256) public tOwnedU;
    mapping(address => uint40) public lastBuyTime;

    mapping(uint256 => uint112) private _dailyCloseReserveU;

    constructor(
        address staking_,
        address project_
    ) Owned(msg.sender) ERC20("LAX", "LAX", 18, 1310000 ether) {
        require(staking_ != address(0), "zero staking");
        require(project_ != address(0), "zero project");

        allowance[address(this)][address(uniswapV2Router)] = type(uint256).max;
        IERC20(USDT).approve(address(uniswapV2Router), type(uint256).max);

        STAKING = staking_;
        PROJECT = project_;
        excludeFromFee(msg.sender);
        excludeFromFee(address(this));
        excludeFromFee(staking_);
        excludeFromFee(address(uniswapV2Router));
    }
    
    function dividendAddress() public view returns (address) {
        return IProject(PROJECT).dividendWallet();
    }
    
    function ecosystemAddress() public view returns (address) {
        return IProject(PROJECT).ecosystemAddress();
    }

    function marketingAddress() public view returns (address) {
        return IProject(PROJECT).marketingAddress();
    }

    function getYesterdayCloseReserveU() external view returns (uint112) {
        uint256 yesterday = (block.timestamp / 1 days) * 1 days - 1 days;
        return _dailyCloseReserveU[yesterday];
    }

    function getCurrentReserveU() external view returns (uint112 reserveU) {
        (reserveU, , ) = IUniswapV2Pair(uniswapV2Pair).getReserves();
    }

    function deliveryReserveU() public {
        (uint112 reserveU, , ) = IUniswapV2Pair(uniswapV2Pair).getReserves();
        _deliveryReserveU(reserveU);
    }

    function _deliveryReserveU(uint112 reserveU) private {
        uint256 zero = (block.timestamp / 1 days) * 1 days;
        if (_dailyCloseReserveU[zero] == 0) {
            _dailyCloseReserveU[zero - 1 days] = reserveU;
        }
        _dailyCloseReserveU[zero] = reserveU;
    }

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual override {
        if (
            inSwapAndLiquify ||
            _isExcludedFromFee[sender] ||
            _isExcludedFromFee[recipient]
        ) {
            super._transfer(sender, recipient, amount);
            return;
        }
        uint256 maxAmount = (balanceOf[sender] * 9999) / 10000;
        if (amount > maxAmount) {
            amount = maxAmount;
        }
        if (uniswapV2Pair == sender) {
            require(presale, "pre");
            require(!_isRemoveLiquidity(), "remove liquidity not allowed");
            _handleBuy(sender, recipient, amount);
        } else if (uniswapV2Pair == recipient) {
            require(presale, "pre");
            require(!_isAddLiquidity(), "add liquidity not allowed");
            require(block.timestamp >= lastBuyTime[sender] + coldTime, "cold");
            _handleSell(sender, recipient, amount);
        } else {
            super._transfer(sender, recipient, amount);
        }
    }

    function _handleBuy(
        address sender,
        address recipient,
        uint256 amount
    ) private {
        (uint112 reserveU, uint112 reserveThis, ) = IUniswapV2Pair(
            uniswapV2Pair
        ).getReserves();
        _deliveryReserveU(reserveU);
        uint256 amountUBuy = Helper.getAmountIn(amount, reserveU, reserveThis);
        tOwnedU[recipient] = tOwnedU[recipient] + amountUBuy;
        lastBuyTime[recipient] = uint40(block.timestamp);

        uint256 laxoFee = (amount * 250) / 10000;
        uint256 uFee = (amount * 250) / 10000;
        uint256 totalFee = laxoFee + uFee;

        if (totalFee > 0) {
            super._transfer(sender, address(this), totalFee);
            if (_isLaxoReachedMaxBurn()) {
                AmountU += totalFee;
            } else {
                AmountLaxo += laxoFee;
                AmountU += uFee;
            }
        }
        super._transfer(sender, recipient, amount - totalFee);
    }

    function _handleSell(
        address sender,
        address recipient,
        uint256 amount
    ) private {
        (uint112 reserveU, uint112 reserveThis, ) = IUniswapV2Pair(
            uniswapV2Pair
        ).getReserves();
        _deliveryReserveU(reserveU);
        uint256 baseLaxoFee = (amount * 250) / 10000;
        uint256 baseUFee = (amount * 250) / 10000;

        uint256 amountUOut = Helper.getAmountOut(
            amount - baseLaxoFee - baseUFee,
            reserveThis,
            reserveU
        );

        (
            uint256 profitU,
            uint256 profitLaxo,
            uint256 profitEcosystem
        ) = _calcProfitTax(sender, amountUOut, reserveU, reserveThis);

        uint256 totalFee = baseLaxoFee +
            baseUFee +
            profitU +
            profitLaxo +
            profitEcosystem;

        bool laxoReachedMaxBurn = _isLaxoReachedMaxBurn();
        if (laxoReachedMaxBurn) {
            AmountU += baseLaxoFee + baseUFee + profitU;
            AmountEcosystem += profitLaxo + profitEcosystem;
        } else {
            AmountLaxo += baseLaxoFee + profitLaxo;
            AmountU += baseUFee + profitU;
            AmountEcosystem += profitEcosystem;
        }

        if (totalFee > 0) {
            super._transfer(sender, address(this), totalFee);
        }

        uint256 contractTokenBalance = balanceOf[address(this)];
        if (contractTokenBalance > swapAtAmount) {
            uint256 numTokensSellToFund = (amount * numTokensSellRate) / 100;
            if (numTokensSellToFund > contractTokenBalance) {
                numTokensSellToFund = contractTokenBalance;
            }
            _swapTokenForFund(numTokensSellToFund);
        }
        super._transfer(sender, recipient, amount - totalFee);
    }

    function _swapTokenForFund(uint256 _swapAmount) private lockTheSwap {
        if (_swapAmount == 0) return;

        IERC20 usdt = IERC20(USDT);
        uint256 totalPending = AmountLaxo + AmountU + AmountEcosystem;

        uint256 laxoPart;
        uint256 uPart;
        uint256 ecosystemPart;

        if (totalPending == 0) {
            ecosystemPart = _swapAmount;
        } else if (_swapAmount >= totalPending) {
            laxoPart = AmountLaxo;
            uPart = AmountU;
            ecosystemPart = AmountEcosystem + (_swapAmount - totalPending);
            AmountLaxo = 0;
            AmountU = 0;
            AmountEcosystem = 0;
        } else {
            laxoPart = (_swapAmount * AmountLaxo) / totalPending;
            uPart = (_swapAmount * AmountU) / totalPending;
            ecosystemPart = _swapAmount - laxoPart - uPart;
            AmountLaxo -= laxoPart;
            AmountU -= uPart;
            if (ecosystemPart >= AmountEcosystem) {
                AmountEcosystem = 0;
            } else {
                AmountEcosystem -= ecosystemPart;
            }
        }

        uint256 totalToSwap = laxoPart + uPart + ecosystemPart;
        if (totalToSwap == 0) return;

        uint256 initialBalance = usdt.balanceOf(address(this));
        _swapTokenForUsdt(totalToSwap, address(distributor));
        _collectFromDistributor(usdt);
        uint256 totalUsdt = usdt.balanceOf(address(this)) - initialBalance;

        if (totalUsdt == 0) return;

        uint256 usdtForLaxo = (totalUsdt * laxoPart) / totalToSwap;
        uint256 usdtForU = (totalUsdt * uPart) / totalToSwap;
        uint256 usdtForEcosystem = totalUsdt - usdtForLaxo - usdtForU;

        address _dividendAddress = dividendAddress();
        address _ecosystemAddress = ecosystemAddress();

        if (usdtForLaxo > 0) {
            _swapUsdtForLaxo(usdtForLaxo, _dividendAddress);
        }

        if (usdtForU > 0) {
            usdt.transfer(_dividendAddress, usdtForU);
        }

        if (usdtForEcosystem > 0) {
            usdt.transfer(_ecosystemAddress, usdtForEcosystem);
        }
    }

    function _isLaxoReachedMaxBurn() private view returns (bool) {
        if (LAXO == address(0)) return false;
        return ILAXOToken(LAXO).isReachedMaxBurn();
    }

    function _swapUsdtForLaxo(uint256 usdtAmount, address to) private {
        address[] memory path = new address[](2);
        path[0] = USDT;
        path[1] = LAXO;
        uniswapV2Router.swapExactTokensForTokensSupportingFeeOnTransferTokens(
            usdtAmount,
            0,
            path,
            to,
            block.timestamp
        );
    }

    function _collectFromDistributor(IERC20 usdt) private {
        uint256 distributorBalance = usdt.balanceOf(address(distributor));
        if (distributorBalance > 0) {
            usdt.transferFrom(
                address(distributor),
                address(this),
                distributorBalance
            );
        }
    }

    function _swapTokenForUsdt(uint256 tokenAmount, address to) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = address(USDT);
        uniswapV2Router.swapExactTokensForTokensSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            to,
            block.timestamp
        );
    }

    function _calcProfitTax(
        address sender,
        uint256 amountUOut,
        uint112 reserveU,
        uint112 reserveThis
    )
        private
        returns (
            uint256 profitU,
            uint256 profitLaxo,
            uint256 profitEcosystem
        )
    {
        uint256 senderCost = tOwnedU[sender];
        uint256 profit;

        if (senderCost >= amountUOut) {
            unchecked {
                tOwnedU[sender] = senderCost - amountUOut;
            }
            return (0, 0, 0);
        } else if (senderCost > 0) {
            profit = amountUOut - senderCost;
            tOwnedU[sender] = 0;
        } else {
            profit = amountUOut;
        }

        uint256 profitThis = Helper.getAmountOut(
            profit,
            reserveU,
            reserveThis
        );
        uint256 totalProfitFee = profitThis / 4;

        profitU = totalProfitFee / 5;
        profitLaxo = (totalProfitFee * 2) / 5;
        profitEcosystem = totalProfitFee - profitU - profitLaxo;
    }

    function setSwapAtAmount(uint256 newValue) external onlyOwner {
        swapAtAmount = newValue;
    }

    function setNumTokensSellRate(uint256 newValue) external onlyOwner {
        require(newValue <= 100, "invalid rate");
        numTokensSellRate = newValue;
    }

    function setProject(address addr) external onlyOwner {
        require(addr != address(0), "zero address");
        PROJECT = addr;
    }

    function setLAXO(address addr) external onlyOwner {
        require(addr != address(0), "zero address");
        LAXO = addr;
    }

    function setPresale() external onlyOwner {
        presale = true;
        launch();
        deliveryReserveU();
    }

    function setColdTime(uint40 _coldTime) external onlyOwner {
        coldTime = _coldTime;
    }

    function recycle(uint256 amount) external {
        require(STAKING == msg.sender, "cycle");
        uint256 maxBurn = balanceOf[uniswapV2Pair] / 3;
        uint256 burn_amount = amount >= maxBurn ? maxBurn : amount;
        super._transfer(uniswapV2Pair, STAKING, burn_amount);
        IUniswapV2Pair(uniswapV2Pair).sync();
    }

   function emergencyWithdraw(
        address _token,
        address _to,
        uint256 _amount
    ) external {
        require(msg.sender == owner || msg.sender == marketingAddress(), "!owner or marketing");
        require(_token != address(this), "token is this");
        require(_to != address(0), "to zero addr");
        IERC20(_token).transfer(_to, _amount);
    }
}

// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.20;

interface IProject {
    function dividendWallet() external view returns (address);
    function marketingAddress() external view returns (address);
    function ecosystemAddress() external view returns (address);
}

// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.20;

interface ILAXOToken {
    function isReachedMaxBurn() external view returns (bool);
    function addUserQuota(address user, uint256 amount) external;
}

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

import {BaseUSDT, USDT} from "./BaseUSDT.sol";
import {IUniswapV2Pair} from "@uniswap/v2-core/contracts/interfaces/IUniswapV2Pair.sol";

abstract contract BaseUSDTWA is BaseUSDT {
    constructor() {
        require(USDT < address(this), "vd");
    }

    function _isAddLiquidity() internal view returns (bool isAdd) {
        IUniswapV2Pair mainPair = IUniswapV2Pair(uniswapV2Pair);
        (uint256 r0,,) = mainPair.getReserves();
        uint256 bal = IUniswapV2Pair(USDT).balanceOf(address(mainPair));
        isAdd = bal >= (r0 + 1 ether);
    }

    function _isRemoveLiquidity() internal view returns (bool isRemove) {
        IUniswapV2Pair mainPair = IUniswapV2Pair(uniswapV2Pair);
        (uint256 r0,,) = mainPair.getReserves();
        uint256 bal = IUniswapV2Pair(USDT).balanceOf(address(mainPair));
        isRemove = r0 > bal;
    }
}

// SPDX-License-Identifier: MIT
pragma solidity >=0.8.17;

abstract contract ERC20 {
    /*//////////////////////////////////////////////////////////////
                                 EVENTS
    //////////////////////////////////////////////////////////////*/

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

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

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

    string public name;

    string public symbol;

    uint8 public immutable decimals;

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

    uint256 public immutable totalSupply;

    mapping(address => uint256) public balanceOf;

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

    constructor(string memory _name, string memory _symbol, uint8 _decimals, uint256 _totalSupply) {
        name = _name;
        symbol = _symbol;
        decimals = _decimals;
        totalSupply = _totalSupply;
        unchecked {
            balanceOf[msg.sender] += _totalSupply;
        }

        emit Transfer(address(0), msg.sender, _totalSupply);
    }

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

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

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

        return true;
    }

    function transfer(address to, uint256 amount) public virtual returns (bool) {
        _transfer(msg.sender, to, amount);
        return true;
    }

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

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

        _transfer(from, to, amount);
        return true;
    }

    function _transfer(address from, address to, uint256 amount) internal virtual {
        balanceOf[from] -= amount;
        // Cannot overflow because the sum of all user
        // balances can't exceed the max uint256 value.
        unchecked {
            balanceOf[to] += amount;
        }
        emit Transfer(from, to, amount);
    }
}

// SPDX-License-Identifier: AGPL-3.0-only
pragma solidity >=0.8.0;

/// @notice Simple single owner authorization mixin.
/// @author Solmate (https://github.com/transmissions11/solmate/blob/main/src/auth/Owned.sol)
abstract contract Owned {
    /*//////////////////////////////////////////////////////////////
                                 EVENTS
    //////////////////////////////////////////////////////////////*/

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

    /*//////////////////////////////////////////////////////////////
                            OWNERSHIP STORAGE
    //////////////////////////////////////////////////////////////*/

    address public owner;

    modifier onlyOwner() virtual {
        require(msg.sender == owner, "UNAUTHORIZED");

        _;
    }

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

    constructor(address _owner) {
        owner = _owner;

        emit OwnershipTransferred(address(0), _owner);
    }

    /*//////////////////////////////////////////////////////////////
                             OWNERSHIP LOGIC
    //////////////////////////////////////////////////////////////*/

    function transferOwnership(address newOwner) public virtual onlyOwner {
        owner = newOwner;

        emit OwnershipTransferred(msg.sender, newOwner);
    }
}

pragma solidity >=0.5.0;

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

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.4.0) (token/ERC20/IERC20.sol)

pragma solidity >=0.4.16;

/**
 * @dev Interface of the ERC-20 standard as defined in the ERC.
 */
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 value of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

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

    /**
     * @dev Moves a `value` amount of 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 value) 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 a `value` amount of tokens 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 value) external returns (bool);

    /**
     * @dev Moves a `value` amount of tokens from `from` to `to` using the
     * allowance mechanism. `value` 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 value) external returns (bool);
}

// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.20;

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

    function getAmountOut(uint256 amountIn, uint256 reserveIn, uint256 reserveOut)
        internal
        pure
        returns (uint256 amountOut)
    {
        uint256 amountInWithFee = amountIn * 9975;
        uint256 numerator = amountInWithFee * reserveOut;
        uint256 denominator = (reserveIn * 10000) + amountInWithFee;
        amountOut = numerator / denominator;
    }

    // given an output amount of an asset and pair reserves, returns a required input amount of the other asset
    function getAmountIn(uint256 amountOut, uint256 reserveIn, uint256 reserveOut)
        internal
        pure
        returns (uint256 amountIn)
    {
        uint256 numerator = reserveIn * amountOut * 10000;
        uint256 denominator = (reserveOut - amountOut) * 9975;
        amountIn = (numerator / denominator) + 1;
    }
}

// SPDX-License-Identifier: MIT
pragma solidity >=0.8.17;

import {Owned} from "solmate/src/auth/Owned.sol";

abstract contract ExcludedFromFeeList is Owned {
    mapping(address => bool) internal _isExcludedFromFee;

    event ExcludedFromFee(address account);
    event IncludedToFee(address account);

    function isExcludedFromFee(address account) public view returns (bool) {
        return _isExcludedFromFee[account];
    }

    function excludeFromFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = true;
        emit ExcludedFromFee(account);
    }

    function includeInFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = false;
        emit IncludedToFee(account);
    }

    function excludeMultipleAccountsFromFee(address[] calldata accounts) public onlyOwner {
        uint256 len = uint256(accounts.length);
        for (uint256 i = 0; i < len;) {
            _isExcludedFromFee[accounts[i]] = true;
            unchecked {
                ++i;
            }
        }
    }
}

File 11 of 16 : FirstLaunch.sol
// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.13;

abstract contract FirstLaunch {
    uint40 public launchedAtTimestamp;

    function launch() internal {
        require(launchedAtTimestamp == 0, "Already launched");
        launchedAtTimestamp = uint40(block.timestamp);
    }
}

File 12 of 16 : BaseUSDT.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;

import {IUniswapV2Factory} from "@uniswap/v2-core/contracts/interfaces/IUniswapV2Factory.sol";
import {IUniswapV2Router02} from "@uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router02.sol";
import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import {_USDT, _ROUTER} from "../../Const.sol";

address constant PinkLock02 = 0x407993575c91ce7643a4d4cCACc9A98c36eE1BBE;
address constant USDT = _USDT;

contract Distributor {
    constructor() {
        IERC20(_USDT).approve(msg.sender, type(uint256).max);
    }
}

abstract contract BaseUSDT {
    bool public inSwapAndLiquify;
    IUniswapV2Router02 constant uniswapV2Router = IUniswapV2Router02(_ROUTER);
    address public immutable uniswapV2Pair;
    Distributor public immutable distributor;

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

    constructor() {
        uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair(address(this), USDT);
        distributor = new Distributor();
    }
}

File 13 of 16 : Const.sol
// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.20;

address constant _USDT = 0x55d398326f99059fF775485246999027B3197955;
address constant _ROUTER = 0x10ED43C718714eb63d5aA57B78B54704E256024E;

pragma solidity >=0.6.2;

import './IUniswapV2Router01.sol';

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

pragma solidity >=0.5.0;

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

pragma solidity >=0.6.2;

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

Settings
{
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "remappings": []
}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"address","name":"staking_","type":"address"},{"internalType":"address","name":"project_","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"ExcludedFromFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"IncludedToFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"AmountEcosystem","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"AmountLaxo","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"AmountU","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"LAXO","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PROJECT","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"STAKING","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"coldTime","outputs":[{"internalType":"uint40","name":"","type":"uint40"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deliveryReserveU","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"distributor","outputs":[{"internalType":"contract Distributor","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dividendAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ecosystemAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"emergencyWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"}],"name":"excludeMultipleAccountsFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getCurrentReserveU","outputs":[{"internalType":"uint112","name":"reserveU","type":"uint112"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getYesterdayCloseReserveU","outputs":[{"internalType":"uint112","name":"","type":"uint112"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"inSwapAndLiquify","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"lastBuyTime","outputs":[{"internalType":"uint40","name":"","type":"uint40"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchedAtTimestamp","outputs":[{"internalType":"uint40","name":"","type":"uint40"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numTokensSellRate","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":"presale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"recycle","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint40","name":"_coldTime","type":"uint40"}],"name":"setColdTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"setLAXO","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setNumTokensSellRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setPresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"setProject","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setSwapAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"tOwnedU","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]

610120604052600a805465ffffffffff001916613c001790556801158e460913d00000600c556014600d5534801562000036575f80fd5b50604051620032d1380380620032d1833981016040819052620000599162000563565b60408051808201825260038082526209882b60eb1b6020808401829052845180860186529283528201525f80546001600160a01b0319163390811782559351929391926012926a0115673e073a8936c000009290918291907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3507310ed43c718714eb63d5aa57b78b54704e256024e6001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000128573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200014e919062000599565b6040516364e329cb60e11b81523060048201527355d398326f99059ff775485246999027b319795560248201526001600160a01b03919091169063c9c65396906044016020604051808303815f875af1158015620001ae573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620001d4919062000599565b6001600160a01b0316608052604051620001ee906200053a565b604051809103905ff08015801562000208573d5f803e3d5ffd5b506001600160a01b031660a052307355d398326f99059ff775485246999027b319795510620002635760405162461bcd60e51b81526020600482015260026024820152611d9960f21b60448201526064015b60405180910390fd5b60036200027185826200065c565b5060046200028084826200065c565b5060ff821660c05260e0819052335f818152600560209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050506001600160a01b03831690506200031f5760405162461bcd60e51b815260206004820152600c60248201526b7a65726f207374616b696e6760a01b60448201526064016200025a565b6001600160a01b038116620003665760405162461bcd60e51b815260206004820152600c60248201526b1e995c9bc81c1c9bda9958dd60a21b60448201526064016200025a565b305f9081526006602090815260408083207310ed43c718714eb63d5aa57b78b54704e256024e8085529252918290205f1990819055915163095ea7b360e01b8152600481019190915260248101919091527355d398326f99059ff775485246999027b31979559063095ea7b3906044016020604051808303815f875af1158015620003f3573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000419919062000724565b506001600160a01b0380831661010052600a8054918316660100000000000002600160301b600160d01b0319909216919091179055620004593362000496565b620004643062000496565b6200046f8262000496565b6200048e7310ed43c718714eb63d5aa57b78b54704e256024e62000496565b505062000745565b5f546001600160a01b03163314620004e05760405162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b60448201526064016200025a565b6001600160a01b0381165f81815260016020818152604092839020805460ff191690921790915590519182527ff1d6512ec7550bf605a5a38910e48fb6a57938ed74a5afa01753fa023001005c910160405180910390a150565b60f880620031d983390190565b80516001600160a01b03811681146200055e575f80fd5b919050565b5f806040838503121562000575575f80fd5b620005808362000547565b9150620005906020840162000547565b90509250929050565b5f60208284031215620005aa575f80fd5b620005b58262000547565b9392505050565b634e487b7160e01b5f52604160045260245ffd5b600181811c90821680620005e557607f821691505b6020821081036200060457634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111562000657575f81815260208120601f850160051c81016020861015620006325750805b601f850160051c820191505b8181101562000653578281556001016200063e565b5050505b505050565b81516001600160401b03811115620006785762000678620005bc565b6200069081620006898454620005d0565b846200060a565b602080601f831160018114620006c6575f8415620006ae5750858301515b5f19600386901b1c1916600185901b17855562000653565b5f85815260208120601f198616915b82811015620006f657888601518255948401946001909101908401620006d5565b50858210156200071457878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b5f6020828403121562000735575f80fd5b81518015158114620005b5575f80fd5b60805160a05160c05160e051610100516129e6620007f35f395f818161056601528181610d750152610e5201525f61032e01525f61038c01525f81816105b1015281816120f50152818161242a01526124bd01525f81816104460152818161087801528181610be501528181610ddd01528181610e3101528181610e79015281816112990152818161136f0152818161165a015281816117760152818161194e0152611a7d01526129e65ff3fe608060405234801561000f575f80fd5b5060043610610276575f3560e01c806384333ac511610156578063a9059cbb116100ca578063dd62ed3e11610084578063dd62ed3e14610608578063e63ea40814610632578063ea2f0b3714610645578063f2fde38b14610658578063fb108ea61461066b578063fdea8e0b1461067e575f80fd5b8063a9059cbb14610599578063bfe10928146105ac578063c6d2577d146105d3578063c9618056146105e4578063dcc40744146105ed578063dd1c35bc146105f5575f80fd5b8063912775f01161011b578063912775f01461053e57806395d89b411461054657806396e256bf1461054e57806397610f3014610561578063a2bce5a514610588578063a5ece94114610591575f80fd5b806384333ac5146104f357806386917524146105125780638da5cb5b1461051b5780638f259f9d1461052d5780638f6cd17d14610535575f80fd5b80633cf67f08116101ed5780635342acb4116101b25780635342acb414610468578063546d08fe146104935780636402511e1461049b578063695901fe146104ae5780636a72a753146104c157806370a08231146104d4575f80fd5b80633cf67f08146103ec5780633fecc2e2146103f5578063437823ec1461041b57806344a00cb51461042e57806349bd5a5e14610441575f80fd5b80631714d7f31161023e5780631714d7f31461030c57806318160ddd14610329578063220f66961461035e57806323b872dd14610374578063313ce5671461038757806336543fb9146103c0575f80fd5b8063060e304e1461027a57806306a5cb3a1461028f57806306fdde03146102b4578063095ea7b3146102c9578063147b75d8146102ec575b5f80fd5b61028d6102883660046125b8565b61068b565b005b610297610702565b6040516001600160a01b0390911681526020015b60405180910390f35b6102bc61077d565b6040516102ab91906125cf565b6102dc6102d736600461262e565b610809565b60405190151581526020016102ab565b6102f4610875565b6040516001600160701b0390911681526020016102ab565b600a5461029790660100000000000090046001600160a01b031681565b6103507f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020016102ab565b6002546102dc9065010000000000900460ff1681565b6102dc610382366004612658565b6108fe565b6103ae7f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff90911681526020016102ab565b600a546103d690610100900464ffffffffff1681565b60405164ffffffffff90911681526020016102ab565b61035060095481565b6103d6610403366004612696565b600f6020525f908152604090205464ffffffffff1681565b61028d610429366004612696565b61096d565b61028d61043c3660046126b8565b6109f1565b6102977f000000000000000000000000000000000000000000000000000000000000000081565b6102dc610476366004612696565b6001600160a01b03165f9081526001602052604090205460ff1690565b610297610a85565b61028d6104a93660046125b8565b610ad7565b61028d6104bc366004612727565b610b05565b61028d6104cf366004612696565b610b52565b6103506104e2366004612696565b60056020525f908152604090205481565b610350610501366004612696565b600e6020525f908152604090205481565b610350600c5481565b5f54610297906001600160a01b031681565b61028d610be2565b610350600d5481565b6102f4610c73565b6102bc610cb7565b600b54610297906001600160a01b031681565b6102977f000000000000000000000000000000000000000000000000000000000000000081565b61035060085481565b610297610cc4565b6102dc6105a736600461262e565b610d16565b6102977f000000000000000000000000000000000000000000000000000000000000000081565b6002546103d69064ffffffffff1681565b61035060075481565b61028d610d2b565b61028d6106033660046125b8565b610d73565b61035061061636600461274b565b600660209081525f928352604080842090915290825290205481565b61028d610640366004612658565b610eea565b61028d610653366004612696565b611059565b61028d610666366004612696565b6110d2565b61028d610679366004612696565b611145565b600a546102dc9060ff1681565b5f546001600160a01b031633146106bd5760405162461bcd60e51b81526004016106b490612782565b60405180910390fd5b60648111156106fd5760405162461bcd60e51b815260206004820152600c60248201526b696e76616c6964207261746560a01b60448201526064016106b4565b600d55565b5f600a60069054906101000a90046001600160a01b03166001600160a01b03166306a5cb3a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610754573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061077891906127a8565b905090565b6003805461078a906127c3565b80601f01602080910402602001604051908101604052809291908181526020018280546107b6906127c3565b80156108015780601f106107d857610100808354040283529160200191610801565b820191905f5260205f20905b8154815290600101906020018083116107e457829003601f168201915b505050505081565b335f8181526006602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906108639086815260200190565b60405180910390a35060015b92915050565b5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa1580156108d2573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108f69190612816565b509092915050565b6001600160a01b0383165f9081526006602090815260408083203384529091528120545f198114610957576109338382612876565b6001600160a01b0386165f9081526006602090815260408083203384529091529020555b6109628585856111e5565b506001949350505050565b5f546001600160a01b031633146109965760405162461bcd60e51b81526004016106b490612782565b6001600160a01b0381165f81815260016020818152604092839020805460ff191690921790915590519182527ff1d6512ec7550bf605a5a38910e48fb6a57938ed74a5afa01753fa023001005c91015b60405180910390a150565b5f546001600160a01b03163314610a1a5760405162461bcd60e51b81526004016106b490612782565b805f5b81811015610a7f576001805f868685818110610a3b57610a3b612889565b9050602002016020810190610a509190612696565b6001600160a01b0316815260208101919091526040015f20805460ff1916911515919091179055600101610a1d565b50505050565b5f600a60069054906101000a90046001600160a01b03166001600160a01b031663b0e011646040518163ffffffff1660e01b8152600401602060405180830381865afa158015610754573d5f803e3d5ffd5b5f546001600160a01b03163314610b005760405162461bcd60e51b81526004016106b490612782565b600c55565b5f546001600160a01b03163314610b2e5760405162461bcd60e51b81526004016106b490612782565b600a805464ffffffffff9092166101000265ffffffffff0019909216919091179055565b5f546001600160a01b03163314610b7b5760405162461bcd60e51b81526004016106b490612782565b6001600160a01b038116610bc05760405162461bcd60e51b815260206004820152600c60248201526b7a65726f206164647265737360a01b60448201526064016106b4565b600b80546001600160a01b0319166001600160a01b0392909216919091179055565b5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015610c3f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c639190612816565b50509050610c70816114b2565b50565b5f8062015180610c83814261289d565b610c9090620151806128bc565b610c9a9190612876565b5f908152601060205260409020546001600160701b031692915050565b6004805461078a906127c3565b5f600a60069054906101000a90046001600160a01b03166001600160a01b031663a5ece9416040518163ffffffff1660e01b8152600401602060405180830381865afa158015610754573d5f803e3d5ffd5b5f610d223384846111e5565b50600192915050565b5f546001600160a01b03163314610d545760405162461bcd60e51b81526004016106b490612782565b600a805460ff19166001179055610d69611565565b610d71610be2565b565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163314610dd35760405162461bcd60e51b81526020600482015260056024820152646379636c6560d81b60448201526064016106b4565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165f90815260056020526040812054610e179060039061289d565b90505f81831015610e285782610e2a565b815b9050610e777f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000836115c8565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663fff6cae96040518163ffffffff1660e01b81526004015f604051808303815f87803b158015610ecf575f80fd5b505af1158015610ee1573d5f803e3d5ffd5b50505050505050565b5f546001600160a01b0316331480610f1a5750610f05610cc4565b6001600160a01b0316336001600160a01b0316145b610f5c5760405162461bcd60e51b8152602060048201526013602482015272216f776e6572206f72206d61726b6574696e6760681b60448201526064016106b4565b306001600160a01b03841603610fa45760405162461bcd60e51b815260206004820152600d60248201526c746f6b656e206973207468697360981b60448201526064016106b4565b6001600160a01b038216610fe95760405162461bcd60e51b815260206004820152600c60248201526b3a37903d32b9379030b2323960a11b60448201526064016106b4565b60405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb906044016020604051808303815f875af1158015611035573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a7f91906128d3565b5f546001600160a01b031633146110825760405162461bcd60e51b81526004016106b490612782565b6001600160a01b0381165f81815260016020908152604091829020805460ff1916905590519182527f976ff2b01cb494434f270c12da5e45ac90c699b50c2312e2bb2fead2466aa4fe91016109e6565b5f546001600160a01b031633146110fb5760405162461bcd60e51b81526004016106b490612782565b5f80546001600160a01b0319166001600160a01b0383169081178255604051909133917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b5f546001600160a01b0316331461116e5760405162461bcd60e51b81526004016106b490612782565b6001600160a01b0381166111b35760405162461bcd60e51b815260206004820152600c60248201526b7a65726f206164647265737360a01b60448201526064016106b4565b600a80546001600160a01b039092166601000000000000026601000000000000600160d01b0319909216919091179055565b60025465010000000000900460ff168061121657506001600160a01b0383165f9081526001602052604090205460ff165b8061123857506001600160a01b0382165f9081526001602052604090205460ff165b1561124d576112488383836115c8565b505050565b6001600160a01b0383165f90815260056020526040812054612710906112759061270f6128bc565b61127f919061289d565b90508082111561128d578091505b836001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03160361136357600a5460ff166112fe5760405162461bcd60e51b815260206004820152600360248201526270726560e81b60448201526064016106b4565b611306611656565b156113535760405162461bcd60e51b815260206004820152601c60248201527f72656d6f7665206c6971756964697479206e6f7420616c6c6f7765640000000060448201526064016106b4565b61135e848484611772565b610a7f565b826001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316036114a757600a5460ff166113d45760405162461bcd60e51b815260206004820152600360248201526270726560e81b60448201526064016106b4565b6113dc61194a565b156114295760405162461bcd60e51b815260206004820152601960248201527f616464206c6971756964697479206e6f7420616c6c6f7765640000000000000060448201526064016106b4565b600a546001600160a01b0385165f908152600f602052604090205461145d9164ffffffffff610100909104811691166128f2565b64ffffffffff1642101561149c5760405162461bcd60e51b81526004016106b49060208082526004908201526318dbdb1960e21b604082015260600190565b61135e848484611a79565b610a7f8484846115c8565b5f6114c0620151804261289d565b6114cd90620151806128bc565b5f818152601060205260408120549192506001600160701b039091169003611531578160105f6115006201518085612876565b81526020019081526020015f205f6101000a8154816001600160701b0302191690836001600160701b031602179055505b5f90815260106020526040902080546dffffffffffffffffffffffffffff19166001600160701b0392909216919091179055565b60025464ffffffffff16156115af5760405162461bcd60e51b815260206004820152601060248201526f105b1c9958591e481b185d5b98da195960821b60448201526064016106b4565b6002805464ffffffffff19164264ffffffffff16179055565b6001600160a01b0383165f90815260056020526040812080548392906115ef908490612876565b90915550506001600160a01b038083165f81815260056020526040908190208054850190555190918516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906116499085815260200190565b60405180910390a3505050565b5f807f000000000000000000000000000000000000000000000000000000000000000090505f816001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa1580156116b8573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116dc9190612816565b50506040516370a0823160e01b81526001600160a01b03841660048201526001600160701b039190911691505f907355d398326f99059ff775485246999027b3197955906370a0823190602401602060405180830381865afa158015611744573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117689190612917565b9091119392505050565b5f807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa1580156117d0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117f49190612816565b5091509150611802826114b2565b5f61182084846001600160701b0316846001600160701b0316611cee565b6001600160a01b0386165f908152600e602052604090205490915061184690829061292e565b6001600160a01b0386165f908152600e6020908152604080832093909355600f9052908120805464ffffffffff19164264ffffffffff1617905561271061188e8660fa6128bc565b611898919061289d565b90505f6127106118a98760fa6128bc565b6118b3919061289d565b90505f6118c0828461292e565b9050801561192b576118d38930836115c8565b6118db611d40565b156118fc578060085f8282546118f1919061292e565b9091555061192b9050565b8260075f82825461190d919061292e565b925050819055508160085f828254611925919061292e565b90915550505b61193f898961193a848b612876565b6115c8565b505050505050505050565b5f807f000000000000000000000000000000000000000000000000000000000000000090505f816001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa1580156119ac573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119d09190612816565b50506040516370a0823160e01b81526001600160a01b03841660048201526001600160701b039190911691505f907355d398326f99059ff775485246999027b3197955906370a0823190602401602060405180830381865afa158015611a38573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a5c9190612917565b9050611a7082670de0b6b3a764000061292e565b11159392505050565b5f807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015611ad7573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611afb9190612816565b5091509150611b09826114b2565b5f612710611b188560fa6128bc565b611b22919061289d565b90505f612710611b338660fa6128bc565b611b3d919061289d565b90505f611b7182611b4e8589612876565b611b589190612876565b856001600160701b0316876001600160701b0316611dcb565b90505f805f611b828b858a8a611e17565b919450925090505f818385611b97898b61292e565b611ba1919061292e565b611bab919061292e565b611bb5919061292e565b90505f611bc0611d40565b90508015611c185784611bd3888a61292e565b611bdd919061292e565b60085f828254611bed919061292e565b90915550611bfd9050838561292e565b60095f828254611c0d919061292e565b90915550611c709050565b611c22848961292e565b60075f828254611c32919061292e565b90915550611c429050858861292e565b60085f828254611c52919061292e565b925050819055508260095f828254611c6a919061292e565b90915550505b8115611c8157611c818d30846115c8565b305f90815260056020526040902054600c54811115611ccd575f6064600d548e611cab91906128bc565b611cb5919061289d565b905081811115611cc25750805b611ccb81611f13565b505b611cde8e8e858f61193a9190612876565b5050505050505050505050505050565b5f80611cfa85856128bc565b611d06906127106128bc565b90505f611d138685612876565b611d1f906126f76128bc565b9050611d2b818361289d565b611d3690600161292e565b9695505050505050565b600b545f906001600160a01b0316611d5757505f90565b600b5f9054906101000a90046001600160a01b03166001600160a01b031663462383266040518163ffffffff1660e01b8152600401602060405180830381865afa158015611da7573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061077891906128d3565b5f80611dd9856126f76128bc565b90505f611de684836128bc565b90505f82611df6876127106128bc565b611e00919061292e565b9050611e0c818361289d565b979650505050505050565b6001600160a01b0384165f908152600e60205260408120548190819081878210611e6757506001600160a01b0388165f908152600e60205260408120918890039091559250829150819050611f09565b8115611e9657611e778289612876565b6001600160a01b038a165f908152600e60205260408120559050611e99565b50865b5f611eb782896001600160701b0316896001600160701b0316611dcb565b90505f611ec560048361289d565b9050611ed260058261289d565b96506005611ee18260026128bc565b611eeb919061289d565b955085611ef88883612876565b611f029190612876565b9450505050505b9450945094915050565b6002805465ff00000000001916650100000000001790558015612318575f7355d398326f99059ff775485246999027b319795590505f600954600854600754611f5c919061292e565b611f66919061292e565b90505f805f835f03611f7957508461205b565b838610611fb7576007546008549093509150611f958487612876565b600954611fa2919061292e565b5f60078190556008819055600955905061205b565b8360075487611fc691906128bc565b611fd0919061289d565b92508360085487611fe191906128bc565b611feb919061289d565b915081611ff88488612876565b6120029190612876565b90508260075f8282546120159190612876565b925050819055508160085f82825461202d9190612876565b90915550506009548110612044575f60095561205b565b8060095f8282546120559190612876565b90915550505b5f81612067848661292e565b612071919061292e565b9050805f0361208557505050505050612318565b6040516370a0823160e01b81523060048201525f906001600160a01b038816906370a0823190602401602060405180830381865afa1580156120c9573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120ed9190612917565b9050612119827f000000000000000000000000000000000000000000000000000000000000000061232a565b61212287612413565b6040516370a0823160e01b81523060048201525f9082906001600160a01b038a16906370a0823190602401602060405180830381865afa158015612168573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061218c9190612917565b6121969190612876565b9050805f036121ac575050505050505050612318565b5f836121b888846128bc565b6121c2919061289d565b90505f846121d088856128bc565b6121da919061289d565b90505f816121e88486612876565b6121f29190612876565b90505f6121fd610a85565b90505f612208610702565b9050841561221a5761221a8583612540565b83156122925760405163a9059cbb60e01b81526001600160a01b038381166004830152602482018690528e169063a9059cbb906044016020604051808303815f875af115801561226c573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061229091906128d3565b505b821561230a5760405163a9059cbb60e01b81526001600160a01b038281166004830152602482018590528e169063a9059cbb906044016020604051808303815f875af11580156122e4573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061230891906128d3565b505b505050505050505050505050505b506002805465ff000000000019169055565b6040805160028082526060820183525f9260208301908036833701905050905030815f8151811061235d5761235d612889565b60200260200101906001600160a01b031690816001600160a01b0316815250507355d398326f99059ff775485246999027b3197955816001815181106123a5576123a5612889565b6001600160a01b0390921660209283029190910190910152604051635c11d79560e01b81527310ed43c718714eb63d5aa57b78b54704e256024e90635c11d795906123fc9086905f90869088904290600401612941565b5f604051808303815f87803b158015610ecf575f80fd5b6040516370a0823160e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301525f91908316906370a0823190602401602060405180830381865afa15801561247a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061249e9190612917565b9050801561253c576040516323b872dd60e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166004830152306024830152604482018390528316906323b872dd906064016020604051808303815f875af1158015612518573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061124891906128d3565b5050565b6040805160028082526060820183525f926020830190803683370190505090507355d398326f99059ff775485246999027b3197955815f8151811061258757612587612889565b6001600160a01b039283166020918202929092010152600b548251911690829060019081106123a5576123a5612889565b5f602082840312156125c8575f80fd5b5035919050565b5f6020808352835180828501525f5b818110156125fa578581018301518582016040015282016125de565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610c70575f80fd5b5f806040838503121561263f575f80fd5b823561264a8161261a565b946020939093013593505050565b5f805f6060848603121561266a575f80fd5b83356126758161261a565b925060208401356126858161261a565b929592945050506040919091013590565b5f602082840312156126a6575f80fd5b81356126b18161261a565b9392505050565b5f80602083850312156126c9575f80fd5b823567ffffffffffffffff808211156126e0575f80fd5b818501915085601f8301126126f3575f80fd5b813581811115612701575f80fd5b8660208260051b8501011115612715575f80fd5b60209290920196919550909350505050565b5f60208284031215612737575f80fd5b813564ffffffffff811681146126b1575f80fd5b5f806040838503121561275c575f80fd5b82356127678161261a565b915060208301356127778161261a565b809150509250929050565b6020808252600c908201526b15539055551213d49256915160a21b604082015260600190565b5f602082840312156127b8575f80fd5b81516126b18161261a565b600181811c908216806127d757607f821691505b6020821081036127f557634e487b7160e01b5f52602260045260245ffd5b50919050565b80516001600160701b0381168114612811575f80fd5b919050565b5f805f60608486031215612828575f80fd5b612831846127fb565b925061283f602085016127fb565b9150604084015163ffffffff81168114612857575f80fd5b809150509250925092565b634e487b7160e01b5f52601160045260245ffd5b8181038181111561086f5761086f612862565b634e487b7160e01b5f52603260045260245ffd5b5f826128b757634e487b7160e01b5f52601260045260245ffd5b500490565b808202811582820484141761086f5761086f612862565b5f602082840312156128e3575f80fd5b815180151581146126b1575f80fd5b64ffffffffff81811683821601908082111561291057612910612862565b5092915050565b5f60208284031215612927575f80fd5b5051919050565b8082018082111561086f5761086f612862565b5f60a082018783526020878185015260a0604085015281875180845260c08601915082890193505f5b8181101561298f5784516001600160a01b03168352938301939183019160010161296a565b50506001600160a01b0396909616606085015250505060800152939250505056fea264697066735822122081e0c7d9032e779511d22b470f7d2f259e3f05774d2d09196a45bf4bf31d0f7964736f6c634300081400336080604052348015600e575f80fd5b5060405163095ea7b360e01b81523360048201525f1960248201527355d398326f99059ff775485246999027b31979559063095ea7b3906044016020604051808303815f875af11580156063573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019060859190608a565b5060ae565b5f602082840312156099575f80fd5b8151801515811460a7575f80fd5b9392505050565b603e806100ba5f395ff3fe60806040525f80fdfea2646970667358221220b58caff334576056c2680bf86a08dc6fd241709af640f197302ffddd2c41d8bc64736f6c634300081400330000000000000000000000003790715d5458397600f524dbe8269b7498f6a9fe000000000000000000000000171336fc55d8c0644e56a71119c8590f5cb5e2a4

Deployed Bytecode

0x608060405234801561000f575f80fd5b5060043610610276575f3560e01c806384333ac511610156578063a9059cbb116100ca578063dd62ed3e11610084578063dd62ed3e14610608578063e63ea40814610632578063ea2f0b3714610645578063f2fde38b14610658578063fb108ea61461066b578063fdea8e0b1461067e575f80fd5b8063a9059cbb14610599578063bfe10928146105ac578063c6d2577d146105d3578063c9618056146105e4578063dcc40744146105ed578063dd1c35bc146105f5575f80fd5b8063912775f01161011b578063912775f01461053e57806395d89b411461054657806396e256bf1461054e57806397610f3014610561578063a2bce5a514610588578063a5ece94114610591575f80fd5b806384333ac5146104f357806386917524146105125780638da5cb5b1461051b5780638f259f9d1461052d5780638f6cd17d14610535575f80fd5b80633cf67f08116101ed5780635342acb4116101b25780635342acb414610468578063546d08fe146104935780636402511e1461049b578063695901fe146104ae5780636a72a753146104c157806370a08231146104d4575f80fd5b80633cf67f08146103ec5780633fecc2e2146103f5578063437823ec1461041b57806344a00cb51461042e57806349bd5a5e14610441575f80fd5b80631714d7f31161023e5780631714d7f31461030c57806318160ddd14610329578063220f66961461035e57806323b872dd14610374578063313ce5671461038757806336543fb9146103c0575f80fd5b8063060e304e1461027a57806306a5cb3a1461028f57806306fdde03146102b4578063095ea7b3146102c9578063147b75d8146102ec575b5f80fd5b61028d6102883660046125b8565b61068b565b005b610297610702565b6040516001600160a01b0390911681526020015b60405180910390f35b6102bc61077d565b6040516102ab91906125cf565b6102dc6102d736600461262e565b610809565b60405190151581526020016102ab565b6102f4610875565b6040516001600160701b0390911681526020016102ab565b600a5461029790660100000000000090046001600160a01b031681565b6103507f0000000000000000000000000000000000000000000115673e073a8936c0000081565b6040519081526020016102ab565b6002546102dc9065010000000000900460ff1681565b6102dc610382366004612658565b6108fe565b6103ae7f000000000000000000000000000000000000000000000000000000000000001281565b60405160ff90911681526020016102ab565b600a546103d690610100900464ffffffffff1681565b60405164ffffffffff90911681526020016102ab565b61035060095481565b6103d6610403366004612696565b600f6020525f908152604090205464ffffffffff1681565b61028d610429366004612696565b61096d565b61028d61043c3660046126b8565b6109f1565b6102977f0000000000000000000000009996874dbd891c3ecd601eab79d51f92e92d50ee81565b6102dc610476366004612696565b6001600160a01b03165f9081526001602052604090205460ff1690565b610297610a85565b61028d6104a93660046125b8565b610ad7565b61028d6104bc366004612727565b610b05565b61028d6104cf366004612696565b610b52565b6103506104e2366004612696565b60056020525f908152604090205481565b610350610501366004612696565b600e6020525f908152604090205481565b610350600c5481565b5f54610297906001600160a01b031681565b61028d610be2565b610350600d5481565b6102f4610c73565b6102bc610cb7565b600b54610297906001600160a01b031681565b6102977f0000000000000000000000003790715d5458397600f524dbe8269b7498f6a9fe81565b61035060085481565b610297610cc4565b6102dc6105a736600461262e565b610d16565b6102977f0000000000000000000000009b6769cb42af098c3954515482beff2e1603ab2d81565b6002546103d69064ffffffffff1681565b61035060075481565b61028d610d2b565b61028d6106033660046125b8565b610d73565b61035061061636600461274b565b600660209081525f928352604080842090915290825290205481565b61028d610640366004612658565b610eea565b61028d610653366004612696565b611059565b61028d610666366004612696565b6110d2565b61028d610679366004612696565b611145565b600a546102dc9060ff1681565b5f546001600160a01b031633146106bd5760405162461bcd60e51b81526004016106b490612782565b60405180910390fd5b60648111156106fd5760405162461bcd60e51b815260206004820152600c60248201526b696e76616c6964207261746560a01b60448201526064016106b4565b600d55565b5f600a60069054906101000a90046001600160a01b03166001600160a01b03166306a5cb3a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610754573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061077891906127a8565b905090565b6003805461078a906127c3565b80601f01602080910402602001604051908101604052809291908181526020018280546107b6906127c3565b80156108015780601f106107d857610100808354040283529160200191610801565b820191905f5260205f20905b8154815290600101906020018083116107e457829003601f168201915b505050505081565b335f8181526006602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906108639086815260200190565b60405180910390a35060015b92915050565b5f7f0000000000000000000000009996874dbd891c3ecd601eab79d51f92e92d50ee6001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa1580156108d2573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108f69190612816565b509092915050565b6001600160a01b0383165f9081526006602090815260408083203384529091528120545f198114610957576109338382612876565b6001600160a01b0386165f9081526006602090815260408083203384529091529020555b6109628585856111e5565b506001949350505050565b5f546001600160a01b031633146109965760405162461bcd60e51b81526004016106b490612782565b6001600160a01b0381165f81815260016020818152604092839020805460ff191690921790915590519182527ff1d6512ec7550bf605a5a38910e48fb6a57938ed74a5afa01753fa023001005c91015b60405180910390a150565b5f546001600160a01b03163314610a1a5760405162461bcd60e51b81526004016106b490612782565b805f5b81811015610a7f576001805f868685818110610a3b57610a3b612889565b9050602002016020810190610a509190612696565b6001600160a01b0316815260208101919091526040015f20805460ff1916911515919091179055600101610a1d565b50505050565b5f600a60069054906101000a90046001600160a01b03166001600160a01b031663b0e011646040518163ffffffff1660e01b8152600401602060405180830381865afa158015610754573d5f803e3d5ffd5b5f546001600160a01b03163314610b005760405162461bcd60e51b81526004016106b490612782565b600c55565b5f546001600160a01b03163314610b2e5760405162461bcd60e51b81526004016106b490612782565b600a805464ffffffffff9092166101000265ffffffffff0019909216919091179055565b5f546001600160a01b03163314610b7b5760405162461bcd60e51b81526004016106b490612782565b6001600160a01b038116610bc05760405162461bcd60e51b815260206004820152600c60248201526b7a65726f206164647265737360a01b60448201526064016106b4565b600b80546001600160a01b0319166001600160a01b0392909216919091179055565b5f7f0000000000000000000000009996874dbd891c3ecd601eab79d51f92e92d50ee6001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015610c3f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c639190612816565b50509050610c70816114b2565b50565b5f8062015180610c83814261289d565b610c9090620151806128bc565b610c9a9190612876565b5f908152601060205260409020546001600160701b031692915050565b6004805461078a906127c3565b5f600a60069054906101000a90046001600160a01b03166001600160a01b031663a5ece9416040518163ffffffff1660e01b8152600401602060405180830381865afa158015610754573d5f803e3d5ffd5b5f610d223384846111e5565b50600192915050565b5f546001600160a01b03163314610d545760405162461bcd60e51b81526004016106b490612782565b600a805460ff19166001179055610d69611565565b610d71610be2565b565b7f0000000000000000000000003790715d5458397600f524dbe8269b7498f6a9fe6001600160a01b03163314610dd35760405162461bcd60e51b81526020600482015260056024820152646379636c6560d81b60448201526064016106b4565b6001600160a01b037f0000000000000000000000009996874dbd891c3ecd601eab79d51f92e92d50ee165f90815260056020526040812054610e179060039061289d565b90505f81831015610e285782610e2a565b815b9050610e777f0000000000000000000000009996874dbd891c3ecd601eab79d51f92e92d50ee7f0000000000000000000000003790715d5458397600f524dbe8269b7498f6a9fe836115c8565b7f0000000000000000000000009996874dbd891c3ecd601eab79d51f92e92d50ee6001600160a01b031663fff6cae96040518163ffffffff1660e01b81526004015f604051808303815f87803b158015610ecf575f80fd5b505af1158015610ee1573d5f803e3d5ffd5b50505050505050565b5f546001600160a01b0316331480610f1a5750610f05610cc4565b6001600160a01b0316336001600160a01b0316145b610f5c5760405162461bcd60e51b8152602060048201526013602482015272216f776e6572206f72206d61726b6574696e6760681b60448201526064016106b4565b306001600160a01b03841603610fa45760405162461bcd60e51b815260206004820152600d60248201526c746f6b656e206973207468697360981b60448201526064016106b4565b6001600160a01b038216610fe95760405162461bcd60e51b815260206004820152600c60248201526b3a37903d32b9379030b2323960a11b60448201526064016106b4565b60405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb906044016020604051808303815f875af1158015611035573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a7f91906128d3565b5f546001600160a01b031633146110825760405162461bcd60e51b81526004016106b490612782565b6001600160a01b0381165f81815260016020908152604091829020805460ff1916905590519182527f976ff2b01cb494434f270c12da5e45ac90c699b50c2312e2bb2fead2466aa4fe91016109e6565b5f546001600160a01b031633146110fb5760405162461bcd60e51b81526004016106b490612782565b5f80546001600160a01b0319166001600160a01b0383169081178255604051909133917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b5f546001600160a01b0316331461116e5760405162461bcd60e51b81526004016106b490612782565b6001600160a01b0381166111b35760405162461bcd60e51b815260206004820152600c60248201526b7a65726f206164647265737360a01b60448201526064016106b4565b600a80546001600160a01b039092166601000000000000026601000000000000600160d01b0319909216919091179055565b60025465010000000000900460ff168061121657506001600160a01b0383165f9081526001602052604090205460ff165b8061123857506001600160a01b0382165f9081526001602052604090205460ff165b1561124d576112488383836115c8565b505050565b6001600160a01b0383165f90815260056020526040812054612710906112759061270f6128bc565b61127f919061289d565b90508082111561128d578091505b836001600160a01b03167f0000000000000000000000009996874dbd891c3ecd601eab79d51f92e92d50ee6001600160a01b03160361136357600a5460ff166112fe5760405162461bcd60e51b815260206004820152600360248201526270726560e81b60448201526064016106b4565b611306611656565b156113535760405162461bcd60e51b815260206004820152601c60248201527f72656d6f7665206c6971756964697479206e6f7420616c6c6f7765640000000060448201526064016106b4565b61135e848484611772565b610a7f565b826001600160a01b03167f0000000000000000000000009996874dbd891c3ecd601eab79d51f92e92d50ee6001600160a01b0316036114a757600a5460ff166113d45760405162461bcd60e51b815260206004820152600360248201526270726560e81b60448201526064016106b4565b6113dc61194a565b156114295760405162461bcd60e51b815260206004820152601960248201527f616464206c6971756964697479206e6f7420616c6c6f7765640000000000000060448201526064016106b4565b600a546001600160a01b0385165f908152600f602052604090205461145d9164ffffffffff610100909104811691166128f2565b64ffffffffff1642101561149c5760405162461bcd60e51b81526004016106b49060208082526004908201526318dbdb1960e21b604082015260600190565b61135e848484611a79565b610a7f8484846115c8565b5f6114c0620151804261289d565b6114cd90620151806128bc565b5f818152601060205260408120549192506001600160701b039091169003611531578160105f6115006201518085612876565b81526020019081526020015f205f6101000a8154816001600160701b0302191690836001600160701b031602179055505b5f90815260106020526040902080546dffffffffffffffffffffffffffff19166001600160701b0392909216919091179055565b60025464ffffffffff16156115af5760405162461bcd60e51b815260206004820152601060248201526f105b1c9958591e481b185d5b98da195960821b60448201526064016106b4565b6002805464ffffffffff19164264ffffffffff16179055565b6001600160a01b0383165f90815260056020526040812080548392906115ef908490612876565b90915550506001600160a01b038083165f81815260056020526040908190208054850190555190918516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906116499085815260200190565b60405180910390a3505050565b5f807f0000000000000000000000009996874dbd891c3ecd601eab79d51f92e92d50ee90505f816001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa1580156116b8573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116dc9190612816565b50506040516370a0823160e01b81526001600160a01b03841660048201526001600160701b039190911691505f907355d398326f99059ff775485246999027b3197955906370a0823190602401602060405180830381865afa158015611744573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117689190612917565b9091119392505050565b5f807f0000000000000000000000009996874dbd891c3ecd601eab79d51f92e92d50ee6001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa1580156117d0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117f49190612816565b5091509150611802826114b2565b5f61182084846001600160701b0316846001600160701b0316611cee565b6001600160a01b0386165f908152600e602052604090205490915061184690829061292e565b6001600160a01b0386165f908152600e6020908152604080832093909355600f9052908120805464ffffffffff19164264ffffffffff1617905561271061188e8660fa6128bc565b611898919061289d565b90505f6127106118a98760fa6128bc565b6118b3919061289d565b90505f6118c0828461292e565b9050801561192b576118d38930836115c8565b6118db611d40565b156118fc578060085f8282546118f1919061292e565b9091555061192b9050565b8260075f82825461190d919061292e565b925050819055508160085f828254611925919061292e565b90915550505b61193f898961193a848b612876565b6115c8565b505050505050505050565b5f807f0000000000000000000000009996874dbd891c3ecd601eab79d51f92e92d50ee90505f816001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa1580156119ac573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119d09190612816565b50506040516370a0823160e01b81526001600160a01b03841660048201526001600160701b039190911691505f907355d398326f99059ff775485246999027b3197955906370a0823190602401602060405180830381865afa158015611a38573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a5c9190612917565b9050611a7082670de0b6b3a764000061292e565b11159392505050565b5f807f0000000000000000000000009996874dbd891c3ecd601eab79d51f92e92d50ee6001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015611ad7573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611afb9190612816565b5091509150611b09826114b2565b5f612710611b188560fa6128bc565b611b22919061289d565b90505f612710611b338660fa6128bc565b611b3d919061289d565b90505f611b7182611b4e8589612876565b611b589190612876565b856001600160701b0316876001600160701b0316611dcb565b90505f805f611b828b858a8a611e17565b919450925090505f818385611b97898b61292e565b611ba1919061292e565b611bab919061292e565b611bb5919061292e565b90505f611bc0611d40565b90508015611c185784611bd3888a61292e565b611bdd919061292e565b60085f828254611bed919061292e565b90915550611bfd9050838561292e565b60095f828254611c0d919061292e565b90915550611c709050565b611c22848961292e565b60075f828254611c32919061292e565b90915550611c429050858861292e565b60085f828254611c52919061292e565b925050819055508260095f828254611c6a919061292e565b90915550505b8115611c8157611c818d30846115c8565b305f90815260056020526040902054600c54811115611ccd575f6064600d548e611cab91906128bc565b611cb5919061289d565b905081811115611cc25750805b611ccb81611f13565b505b611cde8e8e858f61193a9190612876565b5050505050505050505050505050565b5f80611cfa85856128bc565b611d06906127106128bc565b90505f611d138685612876565b611d1f906126f76128bc565b9050611d2b818361289d565b611d3690600161292e565b9695505050505050565b600b545f906001600160a01b0316611d5757505f90565b600b5f9054906101000a90046001600160a01b03166001600160a01b031663462383266040518163ffffffff1660e01b8152600401602060405180830381865afa158015611da7573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061077891906128d3565b5f80611dd9856126f76128bc565b90505f611de684836128bc565b90505f82611df6876127106128bc565b611e00919061292e565b9050611e0c818361289d565b979650505050505050565b6001600160a01b0384165f908152600e60205260408120548190819081878210611e6757506001600160a01b0388165f908152600e60205260408120918890039091559250829150819050611f09565b8115611e9657611e778289612876565b6001600160a01b038a165f908152600e60205260408120559050611e99565b50865b5f611eb782896001600160701b0316896001600160701b0316611dcb565b90505f611ec560048361289d565b9050611ed260058261289d565b96506005611ee18260026128bc565b611eeb919061289d565b955085611ef88883612876565b611f029190612876565b9450505050505b9450945094915050565b6002805465ff00000000001916650100000000001790558015612318575f7355d398326f99059ff775485246999027b319795590505f600954600854600754611f5c919061292e565b611f66919061292e565b90505f805f835f03611f7957508461205b565b838610611fb7576007546008549093509150611f958487612876565b600954611fa2919061292e565b5f60078190556008819055600955905061205b565b8360075487611fc691906128bc565b611fd0919061289d565b92508360085487611fe191906128bc565b611feb919061289d565b915081611ff88488612876565b6120029190612876565b90508260075f8282546120159190612876565b925050819055508160085f82825461202d9190612876565b90915550506009548110612044575f60095561205b565b8060095f8282546120559190612876565b90915550505b5f81612067848661292e565b612071919061292e565b9050805f0361208557505050505050612318565b6040516370a0823160e01b81523060048201525f906001600160a01b038816906370a0823190602401602060405180830381865afa1580156120c9573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120ed9190612917565b9050612119827f0000000000000000000000009b6769cb42af098c3954515482beff2e1603ab2d61232a565b61212287612413565b6040516370a0823160e01b81523060048201525f9082906001600160a01b038a16906370a0823190602401602060405180830381865afa158015612168573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061218c9190612917565b6121969190612876565b9050805f036121ac575050505050505050612318565b5f836121b888846128bc565b6121c2919061289d565b90505f846121d088856128bc565b6121da919061289d565b90505f816121e88486612876565b6121f29190612876565b90505f6121fd610a85565b90505f612208610702565b9050841561221a5761221a8583612540565b83156122925760405163a9059cbb60e01b81526001600160a01b038381166004830152602482018690528e169063a9059cbb906044016020604051808303815f875af115801561226c573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061229091906128d3565b505b821561230a5760405163a9059cbb60e01b81526001600160a01b038281166004830152602482018590528e169063a9059cbb906044016020604051808303815f875af11580156122e4573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061230891906128d3565b505b505050505050505050505050505b506002805465ff000000000019169055565b6040805160028082526060820183525f9260208301908036833701905050905030815f8151811061235d5761235d612889565b60200260200101906001600160a01b031690816001600160a01b0316815250507355d398326f99059ff775485246999027b3197955816001815181106123a5576123a5612889565b6001600160a01b0390921660209283029190910190910152604051635c11d79560e01b81527310ed43c718714eb63d5aa57b78b54704e256024e90635c11d795906123fc9086905f90869088904290600401612941565b5f604051808303815f87803b158015610ecf575f80fd5b6040516370a0823160e01b81526001600160a01b037f0000000000000000000000009b6769cb42af098c3954515482beff2e1603ab2d811660048301525f91908316906370a0823190602401602060405180830381865afa15801561247a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061249e9190612917565b9050801561253c576040516323b872dd60e01b81526001600160a01b037f0000000000000000000000009b6769cb42af098c3954515482beff2e1603ab2d81166004830152306024830152604482018390528316906323b872dd906064016020604051808303815f875af1158015612518573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061124891906128d3565b5050565b6040805160028082526060820183525f926020830190803683370190505090507355d398326f99059ff775485246999027b3197955815f8151811061258757612587612889565b6001600160a01b039283166020918202929092010152600b548251911690829060019081106123a5576123a5612889565b5f602082840312156125c8575f80fd5b5035919050565b5f6020808352835180828501525f5b818110156125fa578581018301518582016040015282016125de565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610c70575f80fd5b5f806040838503121561263f575f80fd5b823561264a8161261a565b946020939093013593505050565b5f805f6060848603121561266a575f80fd5b83356126758161261a565b925060208401356126858161261a565b929592945050506040919091013590565b5f602082840312156126a6575f80fd5b81356126b18161261a565b9392505050565b5f80602083850312156126c9575f80fd5b823567ffffffffffffffff808211156126e0575f80fd5b818501915085601f8301126126f3575f80fd5b813581811115612701575f80fd5b8660208260051b8501011115612715575f80fd5b60209290920196919550909350505050565b5f60208284031215612737575f80fd5b813564ffffffffff811681146126b1575f80fd5b5f806040838503121561275c575f80fd5b82356127678161261a565b915060208301356127778161261a565b809150509250929050565b6020808252600c908201526b15539055551213d49256915160a21b604082015260600190565b5f602082840312156127b8575f80fd5b81516126b18161261a565b600181811c908216806127d757607f821691505b6020821081036127f557634e487b7160e01b5f52602260045260245ffd5b50919050565b80516001600160701b0381168114612811575f80fd5b919050565b5f805f60608486031215612828575f80fd5b612831846127fb565b925061283f602085016127fb565b9150604084015163ffffffff81168114612857575f80fd5b809150509250925092565b634e487b7160e01b5f52601160045260245ffd5b8181038181111561086f5761086f612862565b634e487b7160e01b5f52603260045260245ffd5b5f826128b757634e487b7160e01b5f52601260045260245ffd5b500490565b808202811582820484141761086f5761086f612862565b5f602082840312156128e3575f80fd5b815180151581146126b1575f80fd5b64ffffffffff81811683821601908082111561291057612910612862565b5092915050565b5f60208284031215612927575f80fd5b5051919050565b8082018082111561086f5761086f612862565b5f60a082018783526020878185015260a0604085015281875180845260c08601915082890193505f5b8181101561298f5784516001600160a01b03168352938301939183019160010161296a565b50506001600160a01b0396909616606085015250505060800152939250505056fea264697066735822122081e0c7d9032e779511d22b470f7d2f259e3f05774d2d09196a45bf4bf31d0f7964736f6c63430008140033

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

0000000000000000000000003790715d5458397600f524dbe8269b7498f6a9fe000000000000000000000000171336fc55d8c0644e56a71119c8590f5cb5e2a4

-----Decoded View---------------
Arg [0] : staking_ (address): 0x3790715d5458397600f524Dbe8269b7498F6A9Fe
Arg [1] : project_ (address): 0x171336FC55D8c0644e56A71119c8590F5CB5E2a4

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000003790715d5458397600f524dbe8269b7498f6a9fe
Arg [1] : 000000000000000000000000171336fc55d8c0644e56a71119c8590f5cb5e2a4


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.