ETH Price: $3,813.68 (+0.31%)
Gas: 9 Gwei

Token

ASAP_RewardTracker (ASAP_RewardTracker)
 

Overview

Max Total Supply

877,659,912.300060790740955907 ASAP_RewardTracker

Holders

887

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
25,016.54542896086020835 ASAP_RewardTracker

Value
$0.00
0xc9c3acd71184be854b27282360516929815994eb
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
RewardTracker

Compiler Version
v0.8.10+commit.fc410830

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-06-08
*/

/*
Token Name : ASAP - Auto discord dex sniper BOT
SYMBOL : ASAP
The fastest discord DEX (uniswap, pancakeswap ) sniper bot , Be the first to buy the next 1000X tokens.
Buy/sell Tax 4/4: 
Treasury : 2% 
liquidity Pool : 1%
Holders reward (paid in ether) : 1%
website : https://asapbot.xyz/
twitter : https://twitter.com/MyAsapBot
Telegram :https://t.me/myasapbot

Features
New Token listing
Manual Buy/Sell
Auto-Buying
Degen Vault
Hold & Earn
*/
// SPDX-License-Identifier: MIT
pragma solidity 0.8.10;


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

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

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

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

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

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

    /**
     * @dev 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
    );
}

// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)

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

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

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

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

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

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

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

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

    /**
     * @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);
    }
}

// OpenZeppelin Contracts v4.4.1 (security/Pausable.sol)

/**
 * @dev Contract module which allows children to implement an emergency stop
 * mechanism that can be triggered by an authorized account.
 *
 * This module is used through inheritance. It will make available the
 * modifiers `whenNotPaused` and `whenPaused`, which can be applied to
 * the functions of your contract. Note that they will not be pausable by
 * simply including this module, only once the modifiers are put in place.
 */
abstract contract Pausable is Context {
    /**
     * @dev Emitted when the pause is triggered by `account`.
     */
    event Paused(address account);

    /**
     * @dev Emitted when the pause is lifted by `account`.
     */
    event Unpaused(address account);

    bool private _paused;

    /**
     * @dev Initializes the contract in unpaused state.
     */
    constructor() {
        _paused = false;
    }

    /**
     * @dev Returns true if the contract is paused, and false otherwise.
     */
    function paused() public view virtual returns (bool) {
        return _paused;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is not paused.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    modifier whenNotPaused() {
        require(!paused(), "Pausable: paused");
        _;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is paused.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    modifier whenPaused() {
        require(paused(), "Pausable: not paused");
        _;
    }

    /**
     * @dev Triggers stopped state.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    function _pause() internal virtual whenNotPaused {
        _paused = true;
        emit Paused(_msgSender());
    }

    /**
     * @dev Returns to normal state.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    function _unpause() internal virtual whenPaused {
        _paused = false;
        emit Unpaused(_msgSender());
    }
}

interface IUniswapV2Router01 {
    function factory() external pure returns (address);

    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint256 amountADesired,
        uint256 amountBDesired,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    )
        external
        returns (
            uint256 amountA,
            uint256 amountB,
            uint256 liquidity
        );

    function addLiquidityETH(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    )
        external
        payable
        returns (
            uint256 amountToken,
            uint256 amountETH,
            uint256 liquidity
        );

    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityETH(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountToken, uint256 amountETH);

    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityETHWithPermit(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountToken, uint256 amountETH);

    function swapExactTokensForTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapTokensForExactTokens(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactETHForTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function swapTokensForExactETH(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactTokensForETH(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapETHForExactTokens(
        uint256 amountOut,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function quote(
        uint256 amountA,
        uint256 reserveA,
        uint256 reserveB
    ) external pure returns (uint256 amountB);

    function getAmountOut(
        uint256 amountIn,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountOut);

    function getAmountIn(
        uint256 amountOut,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountIn);

    function getAmountsOut(uint256 amountIn, address[] calldata path)
        external
        view
        returns (uint256[] memory amounts);

    function getAmountsIn(uint256 amountOut, address[] calldata path)
        external
        view
        returns (uint256[] memory amounts);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountETH);

    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;

    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable;

    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;
}

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

    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(uint256) external view returns (address pair);

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

interface IUniswapV2Pair {
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
    event Transfer(address indexed from, address indexed to, uint256 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 (uint256);

    function balanceOf(address owner) external view returns (uint256);

    function allowance(address owner, address spender)
        external
        view
        returns (uint256);

    function approve(address spender, uint256 value) external returns (bool);

    function transfer(address to, uint256 value) external returns (bool);

    function transferFrom(
        address from,
        address to,
        uint256 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 (uint256);

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

    event Mint(address indexed sender, uint256 amount0, uint256 amount1);
    event Burn(
        address indexed sender,
        uint256 amount0,
        uint256 amount1,
        address indexed to
    );
    event Swap(
        address indexed sender,
        uint256 amount0In,
        uint256 amount1In,
        uint256 amount0Out,
        uint256 amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    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 (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

    function mint(address to) external returns (uint256 liquidity);

    function burn(address to)
        external
        returns (uint256 amount0, uint256 amount1);

    function swap(
        uint256 amount0Out,
        uint256 amount1Out,
        address to,
        bytes calldata data
    ) external;

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

contract ASAP is Pausable, Ownable, IERC20 {
    address constant UNISWAPROUTER =
        address(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
    address constant DEAD = 0x000000000000000000000000000000000000dEaD;
    address constant ZERO = 0x0000000000000000000000000000000000000000;

    string private constant _name = "Asap Sniper Bot";
    string private constant _symbol = "ASAP";

    uint256 public buyTreasuryFeeBPS = 200;
    uint256 public buyLiquidityFeeBPS = 100;
    uint256 public buyRewardFeeBPS = 100;
    uint256 public buyTotalFeeBPS = 400;

    uint256 public sellTreasuryFeeBPS = 200;
    uint256 public sellLiquidityFeeBPS = 100;
    uint256 public sellRewardFeeBPS = 100;
    uint256 public sellTotalFeeBPS = 400;

    uint256 public tokensForTreasury;
    uint256 public tokensForLiquidity;
    uint256 public tokensForRewards;

    uint256 public swapTokensAtAmount = 100000 * (10**18);
    uint256 public lastSwapTime;
    bool swapAllToken = true;

    bool public swapEnabled = true;
    bool public taxEnabled = true;
    bool public transferTaxEnabled = false;
    bool public compoundingEnabled = true;

    uint256 private _totalSupply;
    bool private swapping;
    bool private isCompounding;

    address treasuryWallet;
    address liquidityWallet;

    mapping(address => uint256) private _balances;
    mapping(address => mapping(address => uint256)) private _allowances;
    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) public automatedMarketMakerPairs;
    mapping(address => bool) private _whiteList;
    mapping(address => bool) isBlacklisted;

    event SwapAndAddLiquidity(
        uint256 tokensSwapped,
        uint256 nativeReceived,
        uint256 tokensIntoLiquidity
    );
    event SendRewards(uint256 tokensSwapped, uint256 amount);
    event SendTreasury(uint256 tokensSwapped, uint256 amount);
    event ExcludeFromFees(address indexed account, bool isExcluded);
    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
    event UpdateUniswapV2Router(
        address indexed newAddress,
        address indexed oldAddress
    );
    event SwapEnabled(bool enabled);
    event TaxEnabled(bool enabled);
    event TransferTaxEnabled(bool enabled);
    event CompoundingEnabled(bool enabled);
    event BlacklistEnabled(bool enabled);
    event SellFeeUpdated(uint256 treasury, uint256 liquidity, uint256 reward);
    event BuyFeeUpdated(uint256 treasury, uint256 liquidity, uint256 reward);
    event WalletUpdated(address treasury, address liquidity);
    event TradingEnabled();
    event UniswapV2RouterUpdated();
    event RewardSettingsUpdated(
        bool swapEnabled,
        uint256 swapTokensAtAmount,
        bool swapAllToken
    );
    event AccountExcludedFromMaxTx(address account);
    event AccountExcludedFromMaxWallet(address account);
    event MaxWalletBPSUpdated(uint256 bps);
    event TokenRescued(address token, uint256 amount);
    event ETHRescued(uint256 amount);
    event AccountBlacklisted(address account);
    event AccountWhitelisted(address account);
    event LogErrorString(string message);

    RewardTracker public immutable rewardTracker;
    IUniswapV2Router02 public uniswapV2Router;

    address public uniswapV2Pair;

    uint256 public maxTxBPS = 50;
    uint256 public maxWalletBPS = 250;

    bool isOpen = false;

    mapping(address => bool) private _isExcludedFromMaxTx;
    mapping(address => bool) private _isExcludedFromMaxWallet;

    constructor() {
        treasuryWallet = owner();
        liquidityWallet = owner();

        rewardTracker = new RewardTracker(address(this), UNISWAPROUTER);

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(UNISWAPROUTER);

        address _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        uniswapV2Router = _uniswapV2Router;
        uniswapV2Pair = _uniswapV2Pair;

        _setAutomatedMarketMakerPair(_uniswapV2Pair, true);

        rewardTracker.excludeFromRewards(address(rewardTracker), true);
        rewardTracker.excludeFromRewards(address(this), true);
        rewardTracker.excludeFromRewards(owner(), true);
        rewardTracker.excludeFromRewards(address(_uniswapV2Router), true);

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

        excludeFromMaxTx(owner(), true);
        excludeFromMaxTx(address(this), true);
        excludeFromMaxTx(address(rewardTracker), true);

        excludeFromMaxWallet(owner(), true);
        excludeFromMaxWallet(address(this), true);
        excludeFromMaxWallet(address(rewardTracker), true);

        _mint(owner(), 1000000000 * (10**18));
    }

    receive() external payable {}

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

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

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

    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

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

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

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

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

    function decreaseAllowance(address spender, uint256 subtractedValue)
        public
        returns (bool)
    {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(
            currentAllowance >= subtractedValue,
            "ASAP: decreased allowance below zero"
        );
        _approve(_msgSender(), spender, currentAllowance - subtractedValue);
        return true;
    }

    function transfer(address recipient, uint256 amount)
        public
        virtual
        override
        returns (bool)
    {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);
        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(
            currentAllowance >= amount,
            "ASAP: transfer amount exceeds allowance"
        );
        _approve(sender, _msgSender(), currentAllowance - amount);
        return true;
    }

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

    function pause() public onlyOwner {
        _pause();
    }

    function unpause() public onlyOwner {
        _unpause();
    }

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal {
        require(
            isOpen ||
                sender == owner() ||
                recipient == owner() ||
                _whiteList[sender] ||
                _whiteList[recipient],
            "Not Open"
        );

        require(!isBlacklisted[sender], "ASAP: Sender is blacklisted");
        require(!isBlacklisted[recipient], "ASAP: Recipient is blacklisted");

        require(sender != address(0), "ASAP: transfer from the zero address");
        require(recipient != address(0), "ASAP: transfer to the zero address");

        uint256 _maxTxAmount = (totalSupply() * maxTxBPS) / 10000;
        uint256 _maxWallet = (totalSupply() * maxWalletBPS) / 10000;
        require(
            amount <= _maxTxAmount || _isExcludedFromMaxTx[sender],
            "TX Limit Exceeded"
        );

        if (
            sender != owner() &&
            recipient != address(this) &&
            recipient != address(DEAD) &&
            recipient != uniswapV2Pair
        ) {
            uint256 currentBalance = balanceOf(recipient);
            require(
                _isExcludedFromMaxWallet[recipient] ||
                    (currentBalance + amount <= _maxWallet),
                "Wallet hold too large amount of token"
            );
        }

        uint256 senderBalance = _balances[sender];
        require(
            senderBalance >= amount,
            "ASAP: transfer amount exceeds balance"
        );

        uint256 contractTokenBalance = balanceOf(address(this));
        uint256 contractNativeBalance = address(this).balance;

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if (
            swapEnabled && // True
            canSwap && // true
            !swapping && // swapping=false !false true
            !automatedMarketMakerPairs[sender] && // no swap on remove liquidity step 1 or DEX buy
            sender != address(uniswapV2Router) && // no swap on remove liquidity step 2
            sender != owner() &&
            recipient != owner()
        ) {
            swapping = true;

            if (!swapAllToken) {
                contractTokenBalance = swapTokensAtAmount;
            }
            _executeSwap(contractTokenBalance, contractNativeBalance);

            lastSwapTime = block.timestamp;
            swapping = false;
        }

        bool takeFee;

        if (
            sender == address(uniswapV2Pair) ||
            recipient == address(uniswapV2Pair) ||
            automatedMarketMakerPairs[recipient] ||
            automatedMarketMakerPairs[sender] ||
            transferTaxEnabled
        ) {
            takeFee = true;
        }

        if (_isExcludedFromFees[sender] || _isExcludedFromFees[recipient]) {
            takeFee = false;
        }

        if (swapping || isCompounding || !taxEnabled) {
            takeFee = false;
        }

        if (takeFee) {
            uint256 fees;
            // selling
            if (automatedMarketMakerPairs[recipient] && sellTotalFeeBPS > 0) {
                fees = (amount * sellTotalFeeBPS) / 10000;
                tokensForTreasury +=
                    (fees * sellTreasuryFeeBPS) /
                    sellTotalFeeBPS;
                tokensForRewards += (fees * sellRewardFeeBPS) / sellTotalFeeBPS;
                tokensForLiquidity +=
                    (fees * sellLiquidityFeeBPS) /
                    sellTotalFeeBPS;
            } else if (
                automatedMarketMakerPairs[sender] && buyTotalFeeBPS > 0
            ) {
                // buying
                fees = (amount * buyTotalFeeBPS) / 10000;
                tokensForTreasury +=
                    (fees * buyTreasuryFeeBPS) /
                    buyTotalFeeBPS;
                tokensForRewards += (fees * buyRewardFeeBPS) / buyTotalFeeBPS;
                tokensForLiquidity +=
                    (fees * buyLiquidityFeeBPS) /
                    buyTotalFeeBPS;
            }
            amount -= fees;
            _executeTransfer(sender, address(this), fees);
        }

        _executeTransfer(sender, recipient, amount);

        rewardTracker.setBalance(payable(sender), balanceOf(sender));
        rewardTracker.setBalance(payable(recipient), balanceOf(recipient));
    }

    function _executeTransfer(
        address sender,
        address recipient,
        uint256 amount
    ) private {
        require(sender != address(0), "ASAP: transfer from the zero address");
        require(recipient != address(0), "ASAP: transfer to the zero address");
        uint256 senderBalance = _balances[sender];
        require(
            senderBalance >= amount,
            "ASAP: transfer amount exceeds balance"
        );
        _balances[sender] = senderBalance - amount;
        _balances[recipient] += amount;
        emit Transfer(sender, recipient, amount);
    }

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

    function _mint(address account, uint256 amount) private {
        require(account != address(0), "ASAP: mint to the zero address");
        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);
    }

    function _burn(address account, uint256 amount) private {
        require(account != address(0), "ASAP: burn from the zero address");
        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ASAP: burn amount exceeds balance");
        _balances[account] = accountBalance - amount;
        _totalSupply -= amount;
        emit Transfer(account, address(0), amount);
    }

    function swapTokensForNative(uint256 tokens) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
        _approve(address(this), address(uniswapV2Router), tokens);
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokens,
            0, // accept any amount of native
            path,
            address(this),
            block.timestamp
        );
    }

    function addLiquidity(uint256 tokens, uint256 native) private {
        _approve(address(this), address(uniswapV2Router), tokens);
        uniswapV2Router.addLiquidityETH{value: native}(
            address(this),
            tokens,
            0, // slippage unavoidable
            0, // slippage unavoidable
            liquidityWallet,
            block.timestamp
        );
    }

    function includeToWhiteList(address[] memory _users) private {
        for (uint8 i = 0; i < _users.length; i++) {
            _whiteList[_users[i]] = true;
        }
    }

    function _executeSwap(uint256 tokens, uint256 native) private {
        if (tokens <= 0) {
            return;
        }

        uint256 swapTokensTreasury;
        if (address(treasuryWallet) != address(0)) {
            swapTokensTreasury = tokensForTreasury;
        }

        uint256 swapTokensRewards;
        if (rewardTracker.totalSupply() > 0) {
            swapTokensRewards = tokensForRewards;
        }

        uint256 swapTokensLiquidity = tokensForLiquidity / 2;
        uint256 addTokensLiquidity = tokensForLiquidity - swapTokensLiquidity;
        uint256 swapTokensTotal = swapTokensRewards +
            swapTokensTreasury +
            swapTokensLiquidity;

        uint256 initNativeBal = address(this).balance;
        swapTokensForNative(swapTokensTotal);
        uint256 nativeSwapped = (address(this).balance - initNativeBal) +
            native;

        tokensForTreasury = 0;
        tokensForRewards = 0;
        tokensForLiquidity = 0;

        uint256 nativeTreasury = (nativeSwapped * swapTokensTreasury) /
            swapTokensTotal;
        uint256 nativeRewards = (nativeSwapped * swapTokensRewards) /
            swapTokensTotal;
        uint256 nativeLiquidity = nativeSwapped -
            nativeTreasury -
            nativeRewards;

        if (nativeTreasury > 0) {
            (bool success, ) = payable(treasuryWallet).call{
                value: nativeTreasury
            }("");
            if (success) {
                emit SendTreasury(swapTokensTreasury, nativeTreasury);
            } else {
                emit LogErrorString("Wallet failed to receive treasury tokens");
            }
        }

        addLiquidity(addTokensLiquidity, nativeLiquidity);
        emit SwapAndAddLiquidity(
            swapTokensLiquidity,
            nativeLiquidity,
            addTokensLiquidity
        );

        if (nativeRewards > 0) {
            (bool success, ) = address(rewardTracker).call{
                value: nativeRewards
            }("");
            if (success) {
                emit SendRewards(swapTokensRewards, nativeRewards);
            } else {
                emit LogErrorString("Tracker failed to receive tokens");
            }
        }
    }

    function excludeFromFees(address account, bool excluded) public onlyOwner {
        require(
            _isExcludedFromFees[account] != excluded,
            "ASAP: account is already set to requested state"
        );
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }

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

    function manualSendReward(uint256 amount, address holder)
        external
        onlyOwner
    {
        rewardTracker.manualSendReward(amount, holder);
    }

    function excludeFromRewards(address account, bool excluded)
        public
        onlyOwner
    {
        rewardTracker.excludeFromRewards(account, excluded);
    }

    function isExcludedFromRewards(address account) public view returns (bool) {
        return rewardTracker.isExcludedFromRewards(account);
    }

    function setWallet(
        address payable _treasuryWallet,
        address payable _liquidityWallet
    ) external onlyOwner {
        require(
            _liquidityWallet != address(0),
            "_liquidityWallet can not be zero address!"
        );
        require(
            _treasuryWallet != address(0),
            "_treasuryWallet can not be zero address!"
        );

        treasuryWallet = _treasuryWallet;
        liquidityWallet = _liquidityWallet;

        emit WalletUpdated(treasuryWallet, liquidityWallet);
    }

    function setAutomatedMarketMakerPair(address pair, bool value)
        public
        onlyOwner
    {
        require(pair != uniswapV2Pair, "ASAP: DEX pair can not be removed");
        _setAutomatedMarketMakerPair(pair, value);
    }

    function setBuyFee(
        uint256 _treasuryFee,
        uint256 _liquidityFee,
        uint256 _rewardFee
    ) external onlyOwner {
        buyTreasuryFeeBPS = _treasuryFee;
        buyLiquidityFeeBPS = _liquidityFee;
        buyRewardFeeBPS = _rewardFee;
        buyTotalFeeBPS = _treasuryFee + _liquidityFee + _rewardFee;
        require(buyTotalFeeBPS <= 5000, "Total buy fee is too large");
        emit BuyFeeUpdated(_treasuryFee, _liquidityFee, _rewardFee);
    }

    function setSellFee(
        uint256 _treasuryFee,
        uint256 _liquidityFee,
        uint256 _rewardFee
    ) external onlyOwner {
        sellTreasuryFeeBPS = _treasuryFee;
        sellLiquidityFeeBPS = _liquidityFee;
        sellRewardFeeBPS = _rewardFee;
        sellTotalFeeBPS = _treasuryFee + _liquidityFee + _rewardFee;
        require(sellTotalFeeBPS <= 5000, "Total sell fee is too large");
        emit SellFeeUpdated(_treasuryFee, _liquidityFee, _rewardFee);
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        require(
            automatedMarketMakerPairs[pair] != value,
            "ASAP: automated market maker pair is already set to that value"
        );
        automatedMarketMakerPairs[pair] = value;
        if (value) {
            rewardTracker.excludeFromRewards(pair, true);
        }
        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function updateUniswapV2Router(address newAddress) public onlyOwner {
        require(
            newAddress != address(0),
            "uniswapV2Router can not be zero address!"
        );
        require(
            newAddress != address(uniswapV2Router),
            "ASAP: the router is already set to the new address"
        );

        emit UpdateUniswapV2Router(newAddress, address(uniswapV2Router));
        uniswapV2Router = IUniswapV2Router02(newAddress);
        address _uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory())
            .createPair(address(this), uniswapV2Router.WETH());
        uniswapV2Pair = _uniswapV2Pair;

        emit UniswapV2RouterUpdated();
    }

    function claim() public {
        rewardTracker.processAccount(payable(_msgSender()));
    }

    function compound() public {
        require(compoundingEnabled, "ASAP: compounding is not enabled");
        isCompounding = true;
        rewardTracker.compoundAccount(payable(_msgSender()));
        isCompounding = false;
    }

    function withdrawableRewardOf(address account)
        public
        view
        returns (uint256)
    {
        return rewardTracker.withdrawableRewardOf(account);
    }

    function withdrawnRewardOf(address account) public view returns (uint256) {
        return rewardTracker.withdrawnRewardOf(account);
    }

    function accumulativeRewardOf(address account)
        public
        view
        returns (uint256)
    {
        return rewardTracker.accumulativeRewardOf(account);
    }

    function getAccountInfo(address account)
        public
        view
        returns (
            address,
            uint256,
            uint256,
            uint256,
            uint256
        )
    {
        return rewardTracker.getAccountInfo(account);
    }

    function getLastClaimTime(address account) public view returns (uint256) {
        return rewardTracker.getLastClaimTime(account);
    }

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

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

    function setTransferTaxEnabled(bool _enabled) external onlyOwner {
        transferTaxEnabled = _enabled;
        emit TransferTaxEnabled(_enabled);
    }

    function setCompoundingEnabled(bool _enabled) external onlyOwner {
        compoundingEnabled = _enabled;
        emit CompoundingEnabled(_enabled);
    }

    function updateRewardSettings(
        bool _swapEnabled,
        uint256 _swapTokensAtAmount,
        bool _swapAllToken
    ) external onlyOwner {
        swapEnabled = _swapEnabled;
        swapTokensAtAmount = _swapTokensAtAmount;
        swapAllToken = _swapAllToken;

        emit RewardSettingsUpdated(
            swapEnabled,
            swapTokensAtAmount,
            swapAllToken
        );
    }

    function setMaxTxBPS(uint256 bps) external onlyOwner {
        require(bps >= 75 && bps <= 10000, "BPS must be between 75 and 10000");
        maxTxBPS = bps;
    }

    function excludeFromMaxTx(address account, bool excluded) public onlyOwner {
        _isExcludedFromMaxTx[account] = excluded;
        emit AccountExcludedFromMaxTx(account);
    }

    function isExcludedFromMaxTx(address account) public view returns (bool) {
        return _isExcludedFromMaxTx[account];
    }

    function setMaxWalletBPS(uint256 bps) external onlyOwner {
        require(
            bps >= 175 && bps <= 10000,
            "BPS must be between 175 and 10000"
        );
        maxWalletBPS = bps;
        emit MaxWalletBPSUpdated(bps);
    }

    function excludeFromMaxWallet(address account, bool excluded)
        public
        onlyOwner
    {
        _isExcludedFromMaxWallet[account] = excluded;
        emit AccountExcludedFromMaxWallet(account);
    }

    function isExcludedFromMaxWallet(address account)
        public
        view
        returns (bool)
    {
        return _isExcludedFromMaxWallet[account];
    }

    function rescueToken(address _token, uint256 _amount) external onlyOwner {
        IERC20(_token).transfer(msg.sender, _amount);

        emit TokenRescued(_token, _amount);
    }

    function rescueETH(uint256 _amount) external onlyOwner {
        (bool success, ) = payable(msg.sender).call{value: _amount}("");
        require(success, "ETH rescue failed.");
        emit ETHRescued(_amount);
    }

    function blackList(address _user) public onlyOwner {
        require(!isBlacklisted[_user], "user already blacklisted");
        isBlacklisted[_user] = true;
        emit AccountBlacklisted(_user);
    }

    function removeFromBlacklist(address _user) public onlyOwner {
        require(isBlacklisted[_user], "user already whitelisted");
        isBlacklisted[_user] = false;
        emit AccountWhitelisted(_user);
    }

    function blackListMany(address[] memory _users) public onlyOwner {
        for (uint8 i = 0; i < _users.length; i++) {
            blackList(_users[i]);
        }
    }

    function unBlackListMany(address[] memory _users) public onlyOwner {
        for (uint8 i = 0; i < _users.length; i++) {
            removeFromBlacklist(_users[i]);
        }
    }
}

contract RewardTracker is Ownable, IERC20 {
    address immutable UNISWAPROUTER;

    string private constant _name = "ASAP_RewardTracker";
    string private constant _symbol = "ASAP_RewardTracker";

    uint256 public lastProcessedIndex;

    uint256 private _totalSupply;
    mapping(address => uint256) private _balances;

    uint256 private constant magnitude = 2**128;
    uint256 public immutable minTokenBalanceForRewards;
    uint256 private magnifiedRewardPerShare;
    uint256 public totalRewardsDistributed;
    uint256 public totalRewardsWithdrawn;

    address public immutable tokenAddress;

    mapping(address => bool) public excludedFromRewards;
    mapping(address => int256) private magnifiedRewardCorrections;
    mapping(address => uint256) private withdrawnRewards;
    mapping(address => uint256) private lastClaimTimes;

    event RewardsDistributed(address indexed from, uint256 weiAmount);
    event RewardWithdrawn(address indexed to, uint256 weiAmount);
    event ExcludeFromRewards(address indexed account, bool excluded);
    event Claim(address indexed account, uint256 amount);
    event Compound(address indexed account, uint256 amount, uint256 tokens);
    event LogErrorString(string message);

    struct AccountInfo {
        address account;
        uint256 withdrawableRewards;
        uint256 totalRewards;
        uint256 lastClaimTime;
    }

    constructor(address _tokenAddress, address _uniswapRouter) {
        minTokenBalanceForRewards = 1 * (10**18);
        tokenAddress = _tokenAddress;
        UNISWAPROUTER = _uniswapRouter;
    }

    receive() external payable {
        distributeRewards();
    }

    function distributeRewards() public payable {
        require(_totalSupply > 0, "Total supply invalid");
        if (msg.value > 0) {
            magnifiedRewardPerShare =
                magnifiedRewardPerShare +
                ((msg.value * magnitude) / _totalSupply);
            emit RewardsDistributed(msg.sender, msg.value);
            totalRewardsDistributed += msg.value;
        }
    }

    function setBalance(address payable account, uint256 newBalance)
        external
        onlyOwner
    {
        if (excludedFromRewards[account]) {
            return;
        }
        if (newBalance >= minTokenBalanceForRewards) {
            _setBalance(account, newBalance);
        } else {
            _setBalance(account, 0);
        }
    }

    function excludeFromRewards(address account, bool excluded)
        external
        onlyOwner
    {
        require(
            excludedFromRewards[account] != excluded,
            "ASAP_RewardTracker: account already set to requested state"
        );
        excludedFromRewards[account] = excluded;
        if (excluded) {
            _setBalance(account, 0);
        } else {
            uint256 newBalance = IERC20(tokenAddress).balanceOf(account);
            if (newBalance >= minTokenBalanceForRewards) {
                _setBalance(account, newBalance);
            } else {
                _setBalance(account, 0);
            }
        }
        emit ExcludeFromRewards(account, excluded);
    }

    function isExcludedFromRewards(address account) public view returns (bool) {
        return excludedFromRewards[account];
    }

    function manualSendReward(uint256 amount, address holder)
        external
        onlyOwner
    {
        uint256 contractETHBalance = address(this).balance;
        (bool success, ) = payable(holder).call{
            value: amount > 0 ? amount : contractETHBalance
        }("");
        require(success, "Manual send failed.");
    }

    function _setBalance(address account, uint256 newBalance) internal {
        uint256 currentBalance = _balances[account];
        if (newBalance > currentBalance) {
            uint256 addAmount = newBalance - currentBalance;
            _mint(account, addAmount);
        } else if (newBalance < currentBalance) {
            uint256 subAmount = currentBalance - newBalance;
            _burn(account, subAmount);
        }
    }

    function _mint(address account, uint256 amount) private {
        require(
            account != address(0),
            "ASAP_RewardTracker: mint to the zero address"
        );
        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);
        magnifiedRewardCorrections[account] =
            magnifiedRewardCorrections[account] -
            int256(magnifiedRewardPerShare * amount);
    }

    function _burn(address account, uint256 amount) private {
        require(
            account != address(0),
            "ASAP_RewardTracker: burn from the zero address"
        );
        uint256 accountBalance = _balances[account];
        require(
            accountBalance >= amount,
            "ASAP_RewardTracker: burn amount exceeds balance"
        );
        _balances[account] = accountBalance - amount;
        _totalSupply -= amount;
        emit Transfer(account, address(0), amount);
        magnifiedRewardCorrections[account] =
            magnifiedRewardCorrections[account] +
            int256(magnifiedRewardPerShare * amount);
    }

    function processAccount(address payable account)
        public
        onlyOwner
        returns (bool)
    {
        uint256 amount = _withdrawRewardOfUser(account);
        if (amount > 0) {
            lastClaimTimes[account] = block.timestamp;
            emit Claim(account, amount);
            return true;
        }
        return false;
    }

    function _withdrawRewardOfUser(address payable account)
        private
        returns (uint256)
    {
        uint256 _withdrawableReward = withdrawableRewardOf(account);
        if (_withdrawableReward > 0) {
            withdrawnRewards[account] += _withdrawableReward;
            totalRewardsWithdrawn += _withdrawableReward;
            (bool success, ) = account.call{value: _withdrawableReward}("");
            if (!success) {
                withdrawnRewards[account] -= _withdrawableReward;
                totalRewardsWithdrawn -= _withdrawableReward;
                emit LogErrorString("Withdraw failed");
                return 0;
            }
            emit RewardWithdrawn(account, _withdrawableReward);
            return _withdrawableReward;
        }
        return 0;
    }

    function compoundAccount(address payable account)
        public
        onlyOwner
        returns (bool)
    {
        (uint256 amount, uint256 tokens) = _compoundRewardOfUser(account);
        if (amount > 0) {
            lastClaimTimes[account] = block.timestamp;
            emit Compound(account, amount, tokens);
            return true;
        }
        return false;
    }

    function _compoundRewardOfUser(address payable account)
        private
        returns (uint256, uint256)
    {
        uint256 _withdrawableReward = withdrawableRewardOf(account);
        if (_withdrawableReward > 0) {
            withdrawnRewards[account] += _withdrawableReward;
            totalRewardsWithdrawn += _withdrawableReward;

            IUniswapV2Router02 uniswapV2Router = IUniswapV2Router02(
                UNISWAPROUTER
            );

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

            bool success;
            uint256 tokens;

            uint256 initTokenBal = IERC20(tokenAddress).balanceOf(account);
            try
                uniswapV2Router
                    .swapExactETHForTokensSupportingFeeOnTransferTokens{
                    value: _withdrawableReward
                }(0, path, address(account), block.timestamp)
            {
                success = true;
                tokens = IERC20(tokenAddress).balanceOf(account) - initTokenBal;
            } catch Error(
                string memory /*err*/
            ) {
                success = false;
            }

            if (!success) {
                withdrawnRewards[account] -= _withdrawableReward;
                totalRewardsWithdrawn -= _withdrawableReward;
                emit LogErrorString("Withdraw failed");
                return (0, 0);
            }

            emit RewardWithdrawn(account, _withdrawableReward);
            return (_withdrawableReward, tokens);
        }
        return (0, 0);
    }

    function withdrawableRewardOf(address account)
        public
        view
        returns (uint256)
    {
        return accumulativeRewardOf(account) - withdrawnRewards[account];
    }

    function withdrawnRewardOf(address account) public view returns (uint256) {
        return withdrawnRewards[account];
    }

    function accumulativeRewardOf(address account)
        public
        view
        returns (uint256)
    {
        int256 a = int256(magnifiedRewardPerShare * balanceOf(account));
        int256 b = magnifiedRewardCorrections[account]; // this is an explicit int256 (signed)
        return uint256(a + b) / magnitude;
    }

    function getAccountInfo(address account)
        public
        view
        returns (
            address,
            uint256,
            uint256,
            uint256,
            uint256
        )
    {
        AccountInfo memory info;
        info.account = account;
        info.withdrawableRewards = withdrawableRewardOf(account);
        info.totalRewards = accumulativeRewardOf(account);
        info.lastClaimTime = lastClaimTimes[account];
        return (
            info.account,
            info.withdrawableRewards,
            info.totalRewards,
            info.lastClaimTime,
            totalRewardsWithdrawn
        );
    }

    function getLastClaimTime(address account) public view returns (uint256) {
        return lastClaimTimes[account];
    }

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

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

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

    function totalSupply() public view override returns (uint256) {
        return _totalSupply;
    }

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

    function transfer(address, uint256) public pure override returns (bool) {
        revert("ASAP_RewardTracker: method not implemented");
    }

    function allowance(address, address)
        public
        pure
        override
        returns (uint256)
    {
        revert("ASAP_RewardTracker: method not implemented");
    }

    function approve(address, uint256) public pure override returns (bool) {
        revert("ASAP_RewardTracker: method not implemented");
    }

    function transferFrom(
        address,
        address,
        uint256
    ) public pure override returns (bool) {
        revert("ASAP_RewardTracker: method not implemented");
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_tokenAddress","type":"address"},{"internalType":"address","name":"_uniswapRouter","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":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Claim","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"Compound","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"excluded","type":"bool"}],"name":"ExcludeFromRewards","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"message","type":"string"}],"name":"LogErrorString","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":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"weiAmount","type":"uint256"}],"name":"RewardWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"weiAmount","type":"uint256"}],"name":"RewardsDistributed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"accumulativeRewardOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"account","type":"address"}],"name":"compoundAccount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"distributeRewards","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"excludedFromRewards","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getAccountInfo","outputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getLastClaimTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromRewards","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastProcessedIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"holder","type":"address"}],"name":"manualSendReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"minTokenBalanceForRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"account","type":"address"}],"name":"processAccount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"account","type":"address"},{"internalType":"uint256","name":"newBalance","type":"uint256"}],"name":"setBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"tokenAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalRewardsDistributed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalRewardsWithdrawn","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":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"withdrawableRewardOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"withdrawnRewardOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60e06040523480156200001157600080fd5b5060405162001dd238038062001dd28339810160408190526200003491620000d0565b6200003f3362000063565b670de0b6b3a764000060a0526001600160a01b0391821660c0521660805262000108565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b0381168114620000cb57600080fd5b919050565b60008060408385031215620000e457600080fd5b620000ef83620000b3565b9150620000ff60208401620000b3565b90509250929050565b60805160a05160c051611c7062000162600039600081816104ad0152818161090601528181610fbf01528181611025015261115801526000818161054d015281816109770152610d5001526000610ef40152611c706000f3fe6080604052600436106101d15760003560e01c8063807ab4f7116100f7578063ad76d68611610095578063eb53e21411610064578063eb53e214146105aa578063ee172546146105c0578063f2fde38b146105d6578063f82f235f146105f657600080fd5b8063ad76d68614610505578063c25907091461053b578063dd62ed3e1461056f578063e30443bc1461058a57600080fd5b806395d89b41116100d157806395d89b41146102185780639d76ea581461049b578063a680e0bc146104cf578063a9059cbb1461025957600080fd5b8063807ab4f7146104295780638357d0bb146104495780638da5cb5b1461046957600080fd5b80632ad4cab71161016f5780636f4a2cd01161013e5780636f4a2cd01461038457806370a082311461038c578063715018a6146103c25780637b510fe8146103d757600080fd5b80632ad4cab7146103125780633009a60914610332578063313ce567146103485780636de1a5a91461036457600080fd5b80630c70754e116101ab5780630c70754e146102895780630e832273146102a957806318160ddd146102e257806323b872dd146102f757600080fd5b806305b3ccb4146101e557806306fdde0314610218578063095ea7b31461025957600080fd5b366101e0576101de610626565b005b600080fd5b3480156101f157600080fd5b506102056102003660046117f1565b6106f4565b6040519081526020015b60405180910390f35b34801561022457600080fd5b50604080518082018252601281527120a9a0a82fa932bbb0b9322a3930b1b5b2b960711b6020820152905161020f9190611815565b34801561026557600080fd5b5061027961027436600461186a565b610758565b604051901515815260200161020f565b34801561029557600080fd5b506102056102a43660046117f1565b6107b6565b3480156102b557600080fd5b506102796102c43660046117f1565b6001600160a01b031660009081526007602052604090205460ff1690565b3480156102ee57600080fd5b50600254610205565b34801561030357600080fd5b50610279610274366004611896565b34801561031e57600080fd5b506101de61032d3660046118d7565b6107e8565b34801561033e57600080fd5b5061020560015481565b34801561035457600080fd5b506040516012815260200161020f565b34801561037057600080fd5b5061027961037f3660046117f1565b610a01565b6101de610626565b34801561039857600080fd5b506102056103a73660046117f1565b6001600160a01b031660009081526003602052604090205490565b3480156103ce57600080fd5b506101de610aac565b3480156103e357600080fd5b506103f76103f23660046117f1565b610ae0565b604080516001600160a01b0390961686526020860194909452928401919091526060830152608082015260a00161020f565b34801561043557600080fd5b506102796104443660046117f1565b610b88565b34801561045557600080fd5b506101de610464366004611915565b610c2d565b34801561047557600080fd5b506000546001600160a01b03165b6040516001600160a01b03909116815260200161020f565b3480156104a757600080fd5b506104837f000000000000000000000000000000000000000000000000000000000000000081565b3480156104db57600080fd5b506102056104ea3660046117f1565b6001600160a01b03166000908152600a602052604090205490565b34801561051157600080fd5b506102056105203660046117f1565b6001600160a01b031660009081526009602052604090205490565b34801561054757600080fd5b506102057f000000000000000000000000000000000000000000000000000000000000000081565b34801561057b57600080fd5b5061020561027436600461193a565b34801561059657600080fd5b506101de6105a536600461186a565b610cff565b3480156105b657600080fd5b5061020560065481565b3480156105cc57600080fd5b5061020560055481565b3480156105e257600080fd5b506101de6105f13660046117f1565b610d8e565b34801561060257600080fd5b506102796106113660046117f1565b60076020526000908152604090205460ff1681565b6000600254116106745760405162461bcd60e51b8152602060048201526014602482015273151bdd185b081cdd5c1c1b1e481a5b9d985b1a5960621b60448201526064015b60405180910390fd5b34156106f25760025461068b600160801b3461197e565b610695919061199d565b6004546106a291906119bf565b60045560405134815233907fdf29796aad820e4bb192f3a8d631b76519bcd2cbe77cc85af20e9df53cece0869060200160405180910390a234600560008282546106ec91906119bf565b90915550505b565b6001600160a01b038116600090815260036020526040812054600454829161071b9161197e565b6001600160a01b038416600090815260086020526040902054909150600160801b61074682846119d7565b610750919061199d565b949350505050565b60405162461bcd60e51b815260206004820152602a60248201527f415341505f526577617264547261636b65723a206d6574686f64206e6f7420696044820152691b5c1b195b595b9d195960b21b606482015260009060840161066b565b6001600160a01b0381166000908152600960205260408120546107d8836106f4565b6107e29190611a18565b92915050565b6000546001600160a01b031633146108125760405162461bcd60e51b815260040161066b90611a2f565b6001600160a01b03821660009081526007602052604090205460ff16151581151514156108a75760405162461bcd60e51b815260206004820152603a60248201527f415341505f526577617264547261636b65723a206163636f756e7420616c726560448201527f6164792073657420746f20726571756573746564207374617465000000000000606482015260840161066b565b6001600160a01b0382166000908152600760205260409020805460ff191682158015919091179091556108e4576108df826000610e29565b6109b8565b6040516370a0823160e01b81526001600160a01b0383811660048301526000917f0000000000000000000000000000000000000000000000000000000000000000909116906370a0823190602401602060405180830381865afa15801561094f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109739190611a64565b90507f000000000000000000000000000000000000000000000000000000000000000081106109ab576109a68382610e29565b6109b6565b6109b6836000610e29565b505b816001600160a01b03167facf40045c9516ed93201cbb27e9656cc33f8636b026b0e20b4f6ddcfccf404aa826040516109f5911515815260200190565b60405180910390a25050565b600080546001600160a01b03163314610a2c5760405162461bcd60e51b815260040161066b90611a2f565b600080610a3884610e87565b90925090508115610aa2576001600160a01b0384166000818152600a602090815260409182902042905581518581529081018490527f0e311a2c6dbfb0153ec3a8a5bdca09070b3e5f60768fdc10a20453f38d186873910160405180910390a25060019392505050565b5060009392505050565b6000546001600160a01b03163314610ad65760405162461bcd60e51b815260040161066b90611a2f565b6106f260006112e6565b6000806000806000610b1c604051806080016040528060006001600160a01b031681526020016000815260200160008152602001600081525090565b6001600160a01b0387168152610b31876107b6565b6020820152610b3f876106f4565b60408281019182526001600160a01b03989098166000908152600a6020908152989020546060830181905282519890920151905160065498999198909750919550909350915050565b600080546001600160a01b03163314610bb35760405162461bcd60e51b815260040161066b90611a2f565b6000610bbe83611336565b90508015610c24576001600160a01b0383166000818152600a602052604090819020429055517f47cee97cb7acd717b3c0aa1435d004cd5b3c8c57d70dbceb4e4458bbd60e39d490610c139084815260200190565b60405180910390a250600192915050565b50600092915050565b6000546001600160a01b03163314610c575760405162461bcd60e51b815260040161066b90611a2f565b4760006001600160a01b03831684610c6f5782610c71565b845b604051600081818185875af1925050503d8060008114610cad576040519150601f19603f3d011682016040523d82523d6000602084013e610cb2565b606091505b5050905080610cf95760405162461bcd60e51b815260206004820152601360248201527226b0b73ab0b61039b2b732103330b4b632b21760691b604482015260640161066b565b50505050565b6000546001600160a01b03163314610d295760405162461bcd60e51b815260040161066b90611a2f565b6001600160a01b03821660009081526007602052604090205460ff1615610d4e575050565b7f00000000000000000000000000000000000000000000000000000000000000008110610d8357610d7f8282610e29565b5050565b610d7f826000610e29565b6000546001600160a01b03163314610db85760405162461bcd60e51b815260040161066b90611a2f565b6001600160a01b038116610e1d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161066b565b610e26816112e6565b50565b6001600160a01b03821660009081526003602052604090205480821115610e62576000610e568284611a18565b9050610cf984826114dd565b80821015610e82576000610e768383611a18565b9050610cf9848261161e565b505050565b6000806000610e95846107b6565b905080156112da576001600160a01b03841660009081526009602052604081208054839290610ec59084906119bf565b925050819055508060066000828254610ede91906119bf565b90915550506040805160028082526060820183527f0000000000000000000000000000000000000000000000000000000000000000926000929190602083019080368337019050509050816001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f8a9190611a7d565b81600081518110610f9d57610f9d611a9a565b60200260200101906001600160a01b031690816001600160a01b0316815250507f000000000000000000000000000000000000000000000000000000000000000081600181518110610ff157610ff1611a9a565b6001600160a01b0392831660209182029290920101526040516370a0823160e01b81528782166004820152600091829182917f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa15801561106c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110909190611a64565b9050846001600160a01b031663b6f9de95876000878d426040518663ffffffff1660e01b81526004016110c69493929190611ab0565b6000604051808303818588803b1580156110df57600080fd5b505af1935050505080156110f1575060015b611133576110fd611b1a565b806308c379a014156111275750611112611b71565b8061111d5750611129565b60009350506111d2565b505b3d6000803e3d6000fd5b6040516370a0823160e01b81526001600160a01b038a811660048301526001945082917f0000000000000000000000000000000000000000000000000000000000000000909116906370a0823190602401602060405180830381865afa1580156111a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111c59190611a64565b6111cf9190611a18565b91505b82611288576001600160a01b038916600090815260096020526040812080548892906111ff908490611a18565b9250508190555085600660008282546112189190611a18565b90915550506040517f551303dd5f39cbfe6daba6b3e27754b8a7d72f519756a2cde2b92c2bbde159a79061126f906020808252600f908201526e15da5d1a191c985dc819985a5b1959608a1b604082015260600190565b60405180910390a1506000988998509650505050505050565b886001600160a01b03167f1d3eee4ca001cff39eec6ec7615aacf2f2bd61791273830728ba00ccbd6e1337876040516112c391815260200190565b60405180910390a250939793965092945050505050565b50600093849350915050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600080611342836107b6565b90508015610c24576001600160a01b038316600090815260096020526040812080548392906113729084906119bf565b92505081905550806006600082825461138b91906119bf565b90915550506040516000906001600160a01b0385169083908381818185875af1925050503d80600081146113db576040519150601f19603f3d011682016040523d82523d6000602084013e6113e0565b606091505b5050905080611493576001600160a01b03841660009081526009602052604081208054849290611411908490611a18565b92505081905550816006600082825461142a9190611a18565b90915550506040517f551303dd5f39cbfe6daba6b3e27754b8a7d72f519756a2cde2b92c2bbde159a790611481906020808252600f908201526e15da5d1a191c985dc819985a5b1959608a1b604082015260600190565b60405180910390a15060009392505050565b836001600160a01b03167f1d3eee4ca001cff39eec6ec7615aacf2f2bd61791273830728ba00ccbd6e1337836040516114ce91815260200190565b60405180910390a25092915050565b6001600160a01b0382166115485760405162461bcd60e51b815260206004820152602c60248201527f415341505f526577617264547261636b65723a206d696e7420746f207468652060448201526b7a65726f206164647265737360a01b606482015260840161066b565b806002600082825461155a91906119bf565b90915550506001600160a01b038216600090815260036020526040812080548392906115879084906119bf565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3806004546115db919061197e565b6001600160a01b0383166000908152600860205260409020546115fe9190611bfb565b6001600160a01b0390921660009081526008602052604090209190915550565b6001600160a01b03821661168b5760405162461bcd60e51b815260206004820152602e60248201527f415341505f526577617264547261636b65723a206275726e2066726f6d20746860448201526d65207a65726f206164647265737360901b606482015260840161066b565b6001600160a01b0382166000908152600360205260409020548181101561170c5760405162461bcd60e51b815260206004820152602f60248201527f415341505f526577617264547261636b65723a206275726e20616d6f756e742060448201526e657863656564732062616c616e636560881b606482015260840161066b565b6117168282611a18565b6001600160a01b03841660009081526003602052604081209190915560028054849290611744908490611a18565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a381600454611798919061197e565b6001600160a01b0384166000908152600860205260409020546117bb91906119d7565b6001600160a01b039093166000908152600860205260409020929092555050565b6001600160a01b0381168114610e2657600080fd5b60006020828403121561180357600080fd5b813561180e816117dc565b9392505050565b600060208083528351808285015260005b8181101561184257858101830151858201604001528201611826565b81811115611854576000604083870101525b50601f01601f1916929092016040019392505050565b6000806040838503121561187d57600080fd5b8235611888816117dc565b946020939093013593505050565b6000806000606084860312156118ab57600080fd5b83356118b6816117dc565b925060208401356118c6816117dc565b929592945050506040919091013590565b600080604083850312156118ea57600080fd5b82356118f5816117dc565b91506020830135801515811461190a57600080fd5b809150509250929050565b6000806040838503121561192857600080fd5b82359150602083013561190a816117dc565b6000806040838503121561194d57600080fd5b8235611958816117dc565b9150602083013561190a816117dc565b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161561199857611998611968565b500290565b6000826119ba57634e487b7160e01b600052601260045260246000fd5b500490565b600082198211156119d2576119d2611968565b500190565b600080821280156001600160ff1b03849003851316156119f9576119f9611968565b600160ff1b8390038412811615611a1257611a12611968565b50500190565b600082821015611a2a57611a2a611968565b500390565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060208284031215611a7657600080fd5b5051919050565b600060208284031215611a8f57600080fd5b815161180e816117dc565b634e487b7160e01b600052603260045260246000fd5b600060808201868352602060808185015281875180845260a086019150828901935060005b81811015611afa5784516001600160a01b031683529383019391830191600101611ad5565b50506001600160a01b039690961660408501525050506060015292915050565b600060033d1115611b335760046000803e5060005160e01c5b90565b601f8201601f1916810167ffffffffffffffff81118282101715611b6a57634e487b7160e01b600052604160045260246000fd5b6040525050565b600060443d1015611b7f5790565b6040516003193d81016004833e81513d67ffffffffffffffff8160248401118184111715611baf57505050505090565b8285019150815181811115611bc75750505050505090565b843d8701016020828501011115611be15750505050505090565b611bf060208286010187611b36565b509095945050505050565b60008083128015600160ff1b850184121615611c1957611c19611968565b6001600160ff1b0384018313811615611c3457611c34611968565b5050039056fea2646970667358221220a18b13526ddf22c13a701dfc008abbc31ee9150a5c7f87e507f2ff8c0c7a052f64736f6c634300080a0033000000000000000000000000c36ad98e62598ae24d4487d8012209f687c30d450000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d

Deployed Bytecode

0x6080604052600436106101d15760003560e01c8063807ab4f7116100f7578063ad76d68611610095578063eb53e21411610064578063eb53e214146105aa578063ee172546146105c0578063f2fde38b146105d6578063f82f235f146105f657600080fd5b8063ad76d68614610505578063c25907091461053b578063dd62ed3e1461056f578063e30443bc1461058a57600080fd5b806395d89b41116100d157806395d89b41146102185780639d76ea581461049b578063a680e0bc146104cf578063a9059cbb1461025957600080fd5b8063807ab4f7146104295780638357d0bb146104495780638da5cb5b1461046957600080fd5b80632ad4cab71161016f5780636f4a2cd01161013e5780636f4a2cd01461038457806370a082311461038c578063715018a6146103c25780637b510fe8146103d757600080fd5b80632ad4cab7146103125780633009a60914610332578063313ce567146103485780636de1a5a91461036457600080fd5b80630c70754e116101ab5780630c70754e146102895780630e832273146102a957806318160ddd146102e257806323b872dd146102f757600080fd5b806305b3ccb4146101e557806306fdde0314610218578063095ea7b31461025957600080fd5b366101e0576101de610626565b005b600080fd5b3480156101f157600080fd5b506102056102003660046117f1565b6106f4565b6040519081526020015b60405180910390f35b34801561022457600080fd5b50604080518082018252601281527120a9a0a82fa932bbb0b9322a3930b1b5b2b960711b6020820152905161020f9190611815565b34801561026557600080fd5b5061027961027436600461186a565b610758565b604051901515815260200161020f565b34801561029557600080fd5b506102056102a43660046117f1565b6107b6565b3480156102b557600080fd5b506102796102c43660046117f1565b6001600160a01b031660009081526007602052604090205460ff1690565b3480156102ee57600080fd5b50600254610205565b34801561030357600080fd5b50610279610274366004611896565b34801561031e57600080fd5b506101de61032d3660046118d7565b6107e8565b34801561033e57600080fd5b5061020560015481565b34801561035457600080fd5b506040516012815260200161020f565b34801561037057600080fd5b5061027961037f3660046117f1565b610a01565b6101de610626565b34801561039857600080fd5b506102056103a73660046117f1565b6001600160a01b031660009081526003602052604090205490565b3480156103ce57600080fd5b506101de610aac565b3480156103e357600080fd5b506103f76103f23660046117f1565b610ae0565b604080516001600160a01b0390961686526020860194909452928401919091526060830152608082015260a00161020f565b34801561043557600080fd5b506102796104443660046117f1565b610b88565b34801561045557600080fd5b506101de610464366004611915565b610c2d565b34801561047557600080fd5b506000546001600160a01b03165b6040516001600160a01b03909116815260200161020f565b3480156104a757600080fd5b506104837f000000000000000000000000c36ad98e62598ae24d4487d8012209f687c30d4581565b3480156104db57600080fd5b506102056104ea3660046117f1565b6001600160a01b03166000908152600a602052604090205490565b34801561051157600080fd5b506102056105203660046117f1565b6001600160a01b031660009081526009602052604090205490565b34801561054757600080fd5b506102057f0000000000000000000000000000000000000000000000000de0b6b3a764000081565b34801561057b57600080fd5b5061020561027436600461193a565b34801561059657600080fd5b506101de6105a536600461186a565b610cff565b3480156105b657600080fd5b5061020560065481565b3480156105cc57600080fd5b5061020560055481565b3480156105e257600080fd5b506101de6105f13660046117f1565b610d8e565b34801561060257600080fd5b506102796106113660046117f1565b60076020526000908152604090205460ff1681565b6000600254116106745760405162461bcd60e51b8152602060048201526014602482015273151bdd185b081cdd5c1c1b1e481a5b9d985b1a5960621b60448201526064015b60405180910390fd5b34156106f25760025461068b600160801b3461197e565b610695919061199d565b6004546106a291906119bf565b60045560405134815233907fdf29796aad820e4bb192f3a8d631b76519bcd2cbe77cc85af20e9df53cece0869060200160405180910390a234600560008282546106ec91906119bf565b90915550505b565b6001600160a01b038116600090815260036020526040812054600454829161071b9161197e565b6001600160a01b038416600090815260086020526040902054909150600160801b61074682846119d7565b610750919061199d565b949350505050565b60405162461bcd60e51b815260206004820152602a60248201527f415341505f526577617264547261636b65723a206d6574686f64206e6f7420696044820152691b5c1b195b595b9d195960b21b606482015260009060840161066b565b6001600160a01b0381166000908152600960205260408120546107d8836106f4565b6107e29190611a18565b92915050565b6000546001600160a01b031633146108125760405162461bcd60e51b815260040161066b90611a2f565b6001600160a01b03821660009081526007602052604090205460ff16151581151514156108a75760405162461bcd60e51b815260206004820152603a60248201527f415341505f526577617264547261636b65723a206163636f756e7420616c726560448201527f6164792073657420746f20726571756573746564207374617465000000000000606482015260840161066b565b6001600160a01b0382166000908152600760205260409020805460ff191682158015919091179091556108e4576108df826000610e29565b6109b8565b6040516370a0823160e01b81526001600160a01b0383811660048301526000917f000000000000000000000000c36ad98e62598ae24d4487d8012209f687c30d45909116906370a0823190602401602060405180830381865afa15801561094f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109739190611a64565b90507f0000000000000000000000000000000000000000000000000de0b6b3a764000081106109ab576109a68382610e29565b6109b6565b6109b6836000610e29565b505b816001600160a01b03167facf40045c9516ed93201cbb27e9656cc33f8636b026b0e20b4f6ddcfccf404aa826040516109f5911515815260200190565b60405180910390a25050565b600080546001600160a01b03163314610a2c5760405162461bcd60e51b815260040161066b90611a2f565b600080610a3884610e87565b90925090508115610aa2576001600160a01b0384166000818152600a602090815260409182902042905581518581529081018490527f0e311a2c6dbfb0153ec3a8a5bdca09070b3e5f60768fdc10a20453f38d186873910160405180910390a25060019392505050565b5060009392505050565b6000546001600160a01b03163314610ad65760405162461bcd60e51b815260040161066b90611a2f565b6106f260006112e6565b6000806000806000610b1c604051806080016040528060006001600160a01b031681526020016000815260200160008152602001600081525090565b6001600160a01b0387168152610b31876107b6565b6020820152610b3f876106f4565b60408281019182526001600160a01b03989098166000908152600a6020908152989020546060830181905282519890920151905160065498999198909750919550909350915050565b600080546001600160a01b03163314610bb35760405162461bcd60e51b815260040161066b90611a2f565b6000610bbe83611336565b90508015610c24576001600160a01b0383166000818152600a602052604090819020429055517f47cee97cb7acd717b3c0aa1435d004cd5b3c8c57d70dbceb4e4458bbd60e39d490610c139084815260200190565b60405180910390a250600192915050565b50600092915050565b6000546001600160a01b03163314610c575760405162461bcd60e51b815260040161066b90611a2f565b4760006001600160a01b03831684610c6f5782610c71565b845b604051600081818185875af1925050503d8060008114610cad576040519150601f19603f3d011682016040523d82523d6000602084013e610cb2565b606091505b5050905080610cf95760405162461bcd60e51b815260206004820152601360248201527226b0b73ab0b61039b2b732103330b4b632b21760691b604482015260640161066b565b50505050565b6000546001600160a01b03163314610d295760405162461bcd60e51b815260040161066b90611a2f565b6001600160a01b03821660009081526007602052604090205460ff1615610d4e575050565b7f0000000000000000000000000000000000000000000000000de0b6b3a76400008110610d8357610d7f8282610e29565b5050565b610d7f826000610e29565b6000546001600160a01b03163314610db85760405162461bcd60e51b815260040161066b90611a2f565b6001600160a01b038116610e1d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161066b565b610e26816112e6565b50565b6001600160a01b03821660009081526003602052604090205480821115610e62576000610e568284611a18565b9050610cf984826114dd565b80821015610e82576000610e768383611a18565b9050610cf9848261161e565b505050565b6000806000610e95846107b6565b905080156112da576001600160a01b03841660009081526009602052604081208054839290610ec59084906119bf565b925050819055508060066000828254610ede91906119bf565b90915550506040805160028082526060820183527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d926000929190602083019080368337019050509050816001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f8a9190611a7d565b81600081518110610f9d57610f9d611a9a565b60200260200101906001600160a01b031690816001600160a01b0316815250507f000000000000000000000000c36ad98e62598ae24d4487d8012209f687c30d4581600181518110610ff157610ff1611a9a565b6001600160a01b0392831660209182029290920101526040516370a0823160e01b81528782166004820152600091829182917f000000000000000000000000c36ad98e62598ae24d4487d8012209f687c30d4516906370a0823190602401602060405180830381865afa15801561106c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110909190611a64565b9050846001600160a01b031663b6f9de95876000878d426040518663ffffffff1660e01b81526004016110c69493929190611ab0565b6000604051808303818588803b1580156110df57600080fd5b505af1935050505080156110f1575060015b611133576110fd611b1a565b806308c379a014156111275750611112611b71565b8061111d5750611129565b60009350506111d2565b505b3d6000803e3d6000fd5b6040516370a0823160e01b81526001600160a01b038a811660048301526001945082917f000000000000000000000000c36ad98e62598ae24d4487d8012209f687c30d45909116906370a0823190602401602060405180830381865afa1580156111a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111c59190611a64565b6111cf9190611a18565b91505b82611288576001600160a01b038916600090815260096020526040812080548892906111ff908490611a18565b9250508190555085600660008282546112189190611a18565b90915550506040517f551303dd5f39cbfe6daba6b3e27754b8a7d72f519756a2cde2b92c2bbde159a79061126f906020808252600f908201526e15da5d1a191c985dc819985a5b1959608a1b604082015260600190565b60405180910390a1506000988998509650505050505050565b886001600160a01b03167f1d3eee4ca001cff39eec6ec7615aacf2f2bd61791273830728ba00ccbd6e1337876040516112c391815260200190565b60405180910390a250939793965092945050505050565b50600093849350915050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600080611342836107b6565b90508015610c24576001600160a01b038316600090815260096020526040812080548392906113729084906119bf565b92505081905550806006600082825461138b91906119bf565b90915550506040516000906001600160a01b0385169083908381818185875af1925050503d80600081146113db576040519150601f19603f3d011682016040523d82523d6000602084013e6113e0565b606091505b5050905080611493576001600160a01b03841660009081526009602052604081208054849290611411908490611a18565b92505081905550816006600082825461142a9190611a18565b90915550506040517f551303dd5f39cbfe6daba6b3e27754b8a7d72f519756a2cde2b92c2bbde159a790611481906020808252600f908201526e15da5d1a191c985dc819985a5b1959608a1b604082015260600190565b60405180910390a15060009392505050565b836001600160a01b03167f1d3eee4ca001cff39eec6ec7615aacf2f2bd61791273830728ba00ccbd6e1337836040516114ce91815260200190565b60405180910390a25092915050565b6001600160a01b0382166115485760405162461bcd60e51b815260206004820152602c60248201527f415341505f526577617264547261636b65723a206d696e7420746f207468652060448201526b7a65726f206164647265737360a01b606482015260840161066b565b806002600082825461155a91906119bf565b90915550506001600160a01b038216600090815260036020526040812080548392906115879084906119bf565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3806004546115db919061197e565b6001600160a01b0383166000908152600860205260409020546115fe9190611bfb565b6001600160a01b0390921660009081526008602052604090209190915550565b6001600160a01b03821661168b5760405162461bcd60e51b815260206004820152602e60248201527f415341505f526577617264547261636b65723a206275726e2066726f6d20746860448201526d65207a65726f206164647265737360901b606482015260840161066b565b6001600160a01b0382166000908152600360205260409020548181101561170c5760405162461bcd60e51b815260206004820152602f60248201527f415341505f526577617264547261636b65723a206275726e20616d6f756e742060448201526e657863656564732062616c616e636560881b606482015260840161066b565b6117168282611a18565b6001600160a01b03841660009081526003602052604081209190915560028054849290611744908490611a18565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a381600454611798919061197e565b6001600160a01b0384166000908152600860205260409020546117bb91906119d7565b6001600160a01b039093166000908152600860205260409020929092555050565b6001600160a01b0381168114610e2657600080fd5b60006020828403121561180357600080fd5b813561180e816117dc565b9392505050565b600060208083528351808285015260005b8181101561184257858101830151858201604001528201611826565b81811115611854576000604083870101525b50601f01601f1916929092016040019392505050565b6000806040838503121561187d57600080fd5b8235611888816117dc565b946020939093013593505050565b6000806000606084860312156118ab57600080fd5b83356118b6816117dc565b925060208401356118c6816117dc565b929592945050506040919091013590565b600080604083850312156118ea57600080fd5b82356118f5816117dc565b91506020830135801515811461190a57600080fd5b809150509250929050565b6000806040838503121561192857600080fd5b82359150602083013561190a816117dc565b6000806040838503121561194d57600080fd5b8235611958816117dc565b9150602083013561190a816117dc565b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161561199857611998611968565b500290565b6000826119ba57634e487b7160e01b600052601260045260246000fd5b500490565b600082198211156119d2576119d2611968565b500190565b600080821280156001600160ff1b03849003851316156119f9576119f9611968565b600160ff1b8390038412811615611a1257611a12611968565b50500190565b600082821015611a2a57611a2a611968565b500390565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060208284031215611a7657600080fd5b5051919050565b600060208284031215611a8f57600080fd5b815161180e816117dc565b634e487b7160e01b600052603260045260246000fd5b600060808201868352602060808185015281875180845260a086019150828901935060005b81811015611afa5784516001600160a01b031683529383019391830191600101611ad5565b50506001600160a01b039690961660408501525050506060015292915050565b600060033d1115611b335760046000803e5060005160e01c5b90565b601f8201601f1916810167ffffffffffffffff81118282101715611b6a57634e487b7160e01b600052604160045260246000fd5b6040525050565b600060443d1015611b7f5790565b6040516003193d81016004833e81513d67ffffffffffffffff8160248401118184111715611baf57505050505090565b8285019150815181811115611bc75750505050505090565b843d8701016020828501011115611be15750505050505090565b611bf060208286010187611b36565b509095945050505050565b60008083128015600160ff1b850184121615611c1957611c19611968565b6001600160ff1b0384018313811615611c3457611c34611968565b5050039056fea2646970667358221220a18b13526ddf22c13a701dfc008abbc31ee9150a5c7f87e507f2ff8c0c7a052f64736f6c634300080a0033

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

000000000000000000000000C36AD98E62598Ae24d4487d8012209f687c30D450000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d

-----Decoded View---------------
Arg [0] : _tokenAddress (address): 0xC36AD98E62598Ae24d4487d8012209f687c30D45
Arg [1] : _uniswapRouter (address): 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000C36AD98E62598Ae24d4487d8012209f687c30D45
Arg [1] : 0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d


Deployed Bytecode Sourcemap

44092:11279:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45765:19;:17;:19::i;:::-;44092:11279;;;;;53031:331;;;;;;;;;;-1:-1:-1;53031:331:0;;;;;:::i;:::-;;:::i;:::-;;;548:25:1;;;536:2;521:18;53031:331:0;;;;;;;;54176:83;;;;;;;;;;-1:-1:-1;54246:5:0;;;;;;;;;;;-1:-1:-1;;;54246:5:0;;;;54176:83;;;;54246:5;54176:83;:::i;55028:142::-;;;;;;;;;;-1:-1:-1;55028:142:0;;;;;:::i;:::-;;:::i;:::-;;;1671:14:1;;1664:22;1646:41;;1634:2;1619:18;55028:142:0;1506:187:1;52698:192:0;;;;;;;;;;-1:-1:-1;52698:192:0;;;;;:::i;:::-;;:::i;47321:129::-;;;;;;;;;;-1:-1:-1;47321:129:0;;;;;:::i;:::-;-1:-1:-1;;;;;47414:28:0;47390:4;47414:28;;;:19;:28;;;;;;;;;47321:129;54446:100;;;;;;;;;;-1:-1:-1;54526:12:0;;54446:100;;55178:190;;;;;;;;;;-1:-1:-1;55178:190:0;;;;;:::i;46584:729::-;;;;;;;;;;-1:-1:-1;46584:729:0;;;;;:::i;:::-;;:::i;44303:33::-;;;;;;;;;;;;;;;;54362:76;;;;;;;;;;-1:-1:-1;54362:76:0;;54428:2;2722:36:1;;2710:2;2695:18;54362:76:0;2580:184:1;50612:394:0;;;;;;;;;;-1:-1:-1;50612:394:0;;;;;:::i;:::-;;:::i;45800:406::-;;;:::i;54554:119::-;;;;;;;;;;-1:-1:-1;54554:119:0;;;;;:::i;:::-;-1:-1:-1;;;;;54647:18:0;54620:7;54647:18;;;:9;:18;;;;;;;54554:119;5765:103;;;;;;;;;;;;;:::i;53370:668::-;;;;;;;;;;-1:-1:-1;53370:668:0;;;;;:::i;:::-;;:::i;:::-;;;;-1:-1:-1;;;;;3306:32:1;;;3288:51;;3370:2;3355:18;;3348:34;;;;3398:18;;;3391:34;;;;3456:2;3441:18;;3434:34;3499:3;3484:19;;3477:35;3275:3;3260:19;53370:668:0;3029:489:1;49415:364:0;;;;;;;;;;-1:-1:-1;49415:364:0;;;;;:::i;:::-;;:::i;47458:346::-;;;;;;;;;;-1:-1:-1;47458:346:0;;;;;:::i;:::-;;:::i;5114:87::-;;;;;;;;;;-1:-1:-1;5160:7:0;5187:6;-1:-1:-1;;;;;5187:6:0;5114:87;;;-1:-1:-1;;;;;4007:32:1;;;3989:51;;3977:2;3962:18;5114:87:0;3843:203:1;44677:37:0;;;;;;;;;;;;;;;54046:122;;;;;;;;;;-1:-1:-1;54046:122:0;;;;;:::i;:::-;-1:-1:-1;;;;;54137:23:0;54110:7;54137:23;;;:14;:23;;;;;;;54046:122;52898:125;;;;;;;;;;-1:-1:-1;52898:125:0;;;;;:::i;:::-;-1:-1:-1;;;;;52990:25:0;52963:7;52990:25;;;:16;:25;;;;;;;52898:125;44484:50;;;;;;;;;;;;;;;54832:188;;;;;;;;;;-1:-1:-1;54832:188:0;;;;;:::i;46214:362::-;;;;;;;;;;-1:-1:-1;46214:362:0;;;;;:::i;:::-;;:::i;44632:36::-;;;;;;;;;;;;;;;;44587:38;;;;;;;;;;;;;;;;6023:238;;;;;;;;;;-1:-1:-1;6023:238:0;;;;;:::i;:::-;;:::i;44723:51::-;;;;;;;;;;-1:-1:-1;44723:51:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;45800:406;45878:1;45863:12;;:16;45855:49;;;;-1:-1:-1;;;45855:49:0;;4974:2:1;45855:49:0;;;4956:21:1;5013:2;4993:18;;;4986:30;-1:-1:-1;;;5032:18:1;;;5025:50;5092:18;;45855:49:0;;;;;;;;;45919:9;:13;45915:284;;46062:12;;46037:21;-1:-1:-1;;;46037:9:0;:21;:::i;:::-;46036:38;;;;:::i;:::-;45992:23;;:83;;;;:::i;:::-;45949:23;:126;46095:41;;46126:9;548:25:1;;46114:10:0;;46095:41;;536:2:1;521:18;46095:41:0;;;;;;;46178:9;46151:23;;:36;;;;;;;:::i;:::-;;;;-1:-1:-1;;45915:284:0;45800:406::o;53031:331::-;-1:-1:-1;;;;;54647:18:0;;53126:7;54647:18;;;:9;:18;;;;;;53169:23;;53126:7;;53169:44;;;:::i;:::-;-1:-1:-1;;;;;53236:35:0;;53225:8;53236:35;;;:26;:35;;;;;;53151:63;;-1:-1:-1;;;;53336:5:0;53236:35;53151:63;53336:5;:::i;:::-;53328:26;;;;:::i;:::-;53321:33;53031:331;-1:-1:-1;;;;53031:331:0:o;55028:142::-;55110:52;;-1:-1:-1;;;55110:52:0;;6253:2:1;55110:52:0;;;6235:21:1;6292:2;6272:18;;;6265:30;6331:34;6311:18;;;6304:62;-1:-1:-1;;;6382:18:1;;;6375:40;55093:4:0;;6432:19:1;;55110:52:0;6051:406:1;52698:192:0;-1:-1:-1;;;;;52857:25:0;;52793:7;52857:25;;;:16;:25;;;;;;52825:29;52874:7;52825:20;:29::i;:::-;:57;;;;:::i;:::-;52818:64;52698:192;-1:-1:-1;;52698:192:0:o;46584:729::-;5160:7;5187:6;-1:-1:-1;;;;;5187:6:0;4036:10;5334:23;5326:68;;;;-1:-1:-1;;;5326:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;46719:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;::::1;;:40;;::::0;::::1;;;;46697:148;;;::::0;-1:-1:-1;;;46697:148:0;;7155:2:1;46697:148:0::1;::::0;::::1;7137:21:1::0;7194:2;7174:18;;;7167:30;7233:34;7213:18;;;7206:62;7304:28;7284:18;;;7277:56;7350:19;;46697:148:0::1;6953:422:1::0;46697:148:0::1;-1:-1:-1::0;;;;;46856:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;:39;;-1:-1:-1;;46856:39:0::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;;;46906:347:::1;;46935:23;46947:7;46956:1;46935:11;:23::i;:::-;46906:347;;;47012:39;::::0;-1:-1:-1;;;47012:39:0;;-1:-1:-1;;;;;4007:32:1;;;47012:39:0::1;::::0;::::1;3989:51:1::0;46991:18:0::1;::::0;47019:12:::1;47012:30:::0;;::::1;::::0;::::1;::::0;3962:18:1;;47012:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;46991:60;;47084:25;47070:10;:39;47066:176;;47130:32;47142:7;47151:10;47130:11;:32::i;:::-;47066:176;;;47203:23;47215:7;47224:1;47203:11;:23::i;:::-;46976:277;46906:347;47287:7;-1:-1:-1::0;;;;;47268:37:0::1;;47296:8;47268:37;;;;1671:14:1::0;1664:22;1646:41;;1634:2;1619:18;;1506:187;47268:37:0::1;;;;;;;;46584:729:::0;;:::o;50612:394::-;50715:4;5187:6;;-1:-1:-1;;;;;5187:6:0;4036:10;5334:23;5326:68;;;;-1:-1:-1;;;5326:68:0;;;;;;;:::i;:::-;50738:14:::1;50754::::0;50772:30:::1;50794:7;50772:21;:30::i;:::-;50737:65:::0;;-1:-1:-1;50737:65:0;-1:-1:-1;50817:10:0;;50813:163:::1;;-1:-1:-1::0;;;;;50844:23:0;::::1;;::::0;;;:14:::1;:23;::::0;;;;;;;;50870:15:::1;50844:41:::0;;50905:33;;7743:25:1;;;7784:18;;;7777:34;;;50905:33:0::1;::::0;7716:18:1;50905:33:0::1;;;;;;;-1:-1:-1::0;50960:4:0::1;::::0;50612:394;-1:-1:-1;;;50612:394:0:o;50813:163::-:1;-1:-1:-1::0;50993:5:0::1;::::0;50612:394;-1:-1:-1;;;50612:394:0:o;5765:103::-;5160:7;5187:6;-1:-1:-1;;;;;5187:6:0;4036:10;5334:23;5326:68;;;;-1:-1:-1;;;5326:68:0;;;;;;;:::i;:::-;5830:30:::1;5857:1;5830:18;:30::i;53370:668::-:0;53473:7;53495;53517;53539;53561;53596:23;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53596:23:0;-1:-1:-1;;;;;53630:22:0;;;;53690:29;53645:7;53690:20;:29::i;:::-;53663:24;;;:56;53750:29;53771:7;53750:20;:29::i;:::-;53730:17;;;;:49;;;-1:-1:-1;;;;;53811:23:0;;;;;;;;:14;:23;;;;;;;;53790:18;;;:44;;;53867:12;;53894:24;;;;;53933:17;;53998:21;;53867:12;;53894:24;;53933:17;;-1:-1:-1;53811:23:0;;-1:-1:-1;53998:21:0;;-1:-1:-1;53370:668:0;-1:-1:-1;;53370:668:0:o;49415:364::-;49517:4;5187:6;;-1:-1:-1;;;;;5187:6:0;4036:10;5334:23;5326:68;;;;-1:-1:-1;;;5326:68:0;;;;;;;:::i;:::-;49539:14:::1;49556:30;49578:7;49556:21;:30::i;:::-;49539:47:::0;-1:-1:-1;49601:10:0;;49597:152:::1;;-1:-1:-1::0;;;;;49628:23:0;::::1;;::::0;;;:14:::1;:23;::::0;;;;;;49654:15:::1;49628:41:::0;;49689:22;::::1;::::0;::::1;::::0;49704:6;548:25:1;;536:2;521:18;;402:177;49689:22:0::1;;;;;;;;-1:-1:-1::0;49733:4:0::1;::::0;50612:394;-1:-1:-1;;50612:394:0:o;49597:152::-:1;-1:-1:-1::0;49766:5:0::1;::::0;49415:364;-1:-1:-1;;49415:364:0:o;47458:346::-;5160:7;5187:6;-1:-1:-1;;;;;5187:6:0;4036:10;5334:23;5326:68;;;;-1:-1:-1;;;5326:68:0;;;;;;;:::i;:::-;47598:21:::1;47569:26;-1:-1:-1::0;;;;;47649:20:0;::::1;47691:10:::0;:40:::1;;47713:18;47691:40;;;47704:6;47691:40;47649:97;::::0;::::1;::::0;;;;;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47630:116;;;47765:7;47757:39;;;::::0;-1:-1:-1;;;47757:39:0;;8234:2:1;47757:39:0::1;::::0;::::1;8216:21:1::0;8273:2;8253:18;;;8246:30;-1:-1:-1;;;8292:18:1;;;8285:49;8351:18;;47757:39:0::1;8032:343:1::0;47757:39:0::1;47558:246;;47458:346:::0;;:::o;46214:362::-;5160:7;5187:6;-1:-1:-1;;;;;5187:6:0;4036:10;5334:23;5326:68;;;;-1:-1:-1;;;5326:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;46336:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;::::1;;46332:67;;;46214:362:::0;;:::o;46332:67::-:1;46427:25;46413:10;:39;46409:160;;46469:32;46481:7;46490:10;46469:11;:32::i;:::-;46214:362:::0;;:::o;46409:160::-:1;46534:23;46546:7;46555:1;46534:11;:23::i;6023:238::-:0;5160:7;5187:6;-1:-1:-1;;;;;5187:6:0;4036:10;5334:23;5326:68;;;;-1:-1:-1;;;5326:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6126:22:0;::::1;6104:110;;;::::0;-1:-1:-1;;;6104:110:0;;8582:2:1;6104:110:0::1;::::0;::::1;8564:21:1::0;8621:2;8601:18;;;8594:30;8660:34;8640:18;;;8633:62;-1:-1:-1;;;8711:18:1;;;8704:36;8757:19;;6104:110:0::1;8380:402:1::0;6104:110:0::1;6225:28;6244:8;6225:18;:28::i;:::-;6023:238:::0;:::o;47812:439::-;-1:-1:-1;;;;;47915:18:0;;47890:22;47915:18;;;:9;:18;;;;;;47948:27;;;47944:300;;;47992:17;48012:27;48025:14;48012:10;:27;:::i;:::-;47992:47;;48054:25;48060:7;48069:9;48054:5;:25::i;47944:300::-;48114:14;48101:10;:27;48097:147;;;48145:17;48165:27;48182:10;48165:14;:27;:::i;:::-;48145:47;;48207:25;48213:7;48222:9;48207:5;:25::i;48097:147::-;47879:372;47812:439;;:::o;51014:1676::-;51105:7;51114;51139:27;51169:29;51190:7;51169:20;:29::i;:::-;51139:59;-1:-1:-1;51213:23:0;;51209:1450;;-1:-1:-1;;;;;51253:25:0;;;;;;:16;:25;;;;;:48;;51282:19;;51253:25;:48;;51282:19;;51253:48;:::i;:::-;;;;;;;;51341:19;51316:21;;:44;;;;;;;:::i;:::-;;;;-1:-1:-1;;51520:16:0;;;51534:1;51520:16;;;;;;;;51451:13;;51377:34;;51520:16;51534:1;51520:16;;;;;;;;;;-1:-1:-1;51520:16:0;51496:40;;51561:15;-1:-1:-1;;;;;51561:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;51551:4;51556:1;51551:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;51551:32:0;;;-1:-1:-1;;;;;51551:32:0;;;;;51616:12;51598:4;51603:1;51598:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;51598:31:0;;;:7;;;;;;;;;:31;51727:39;;-1:-1:-1;;;51727:39:0;;4007:32:1;;;51727:39:0;;;3989:51:1;51646:12:0;;;;;;51734;51727:30;;;;3962:18:1;;51727:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;51704:62;;51802:15;-1:-1:-1;;;;;51802:88:0;;51920:19;51959:1;51962:4;51976:7;51986:15;51802:200;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51781:484;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;52244:5;52234:15;;52148:117;51781:484;;;;;;;;;;;;;52077:39;;-1:-1:-1;;;52077:39:0;;-1:-1:-1;;;;;4007:32:1;;;52077:39:0;;;3989:51:1;52045:4:0;;-1:-1:-1;52119:12:0;;52084;52077:30;;;;;;3962:18:1;;52077:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:54;;;;:::i;:::-;52068:63;;51781:484;52286:7;52281:249;;-1:-1:-1;;;;;52314:25:0;;;;;;:16;:25;;;;;:48;;52343:19;;52314:25;:48;;52343:19;;52314:48;:::i;:::-;;;;;;;;52406:19;52381:21;;:44;;;;;;;:::i;:::-;;;;-1:-1:-1;;52449:33:0;;;;;;11849:2:1;11831:21;;;11888:2;11868:18;;;11861:30;-1:-1:-1;;;11922:2:1;11907:18;;11900:45;11977:2;11962:18;;11647:339;52449:33:0;;;;;;;;-1:-1:-1;52509:1:0;;;;-1:-1:-1;51014:1676:0;-1:-1:-1;;;;;;;51014:1676:0:o;52281:249::-;52567:7;-1:-1:-1;;;;;52551:45:0;;52576:19;52551:45;;;;548:25:1;;536:2;521:18;;402:177;52551:45:0;;;;;;;;-1:-1:-1;52619:19:0;;52640:6;;-1:-1:-1;51014:1676:0;;-1:-1:-1;;;;;51014:1676:0:o;51209:1450::-;-1:-1:-1;52677:1:0;;;;-1:-1:-1;51014:1676:0;-1:-1:-1;;51014:1676:0:o;6421:191::-;6495:16;6514:6;;-1:-1:-1;;;;;6531:17:0;;;-1:-1:-1;;;;;;6531:17:0;;;;;;6564:40;;6514:6;;;;;;;6564:40;;6495:16;6564:40;6484:128;6421:191;:::o;49787:817::-;49878:7;49903:27;49933:29;49954:7;49933:20;:29::i;:::-;49903:59;-1:-1:-1;49977:23:0;;49973:605;;-1:-1:-1;;;;;50017:25:0;;;;;;:16;:25;;;;;:48;;50046:19;;50017:25;:48;;50046:19;;50017:48;:::i;:::-;;;;;;;;50105:19;50080:21;;:44;;;;;;;:::i;:::-;;;;-1:-1:-1;;50158:44:0;;50140:12;;-1:-1:-1;;;;;50158:12:0;;;50178:19;;50140:12;50158:44;50140:12;50158:44;50178:19;50158:12;:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50139:63;;;50222:7;50217:244;;-1:-1:-1;;;;;50250:25:0;;;;;;:16;:25;;;;;:48;;50279:19;;50250:25;:48;;50279:19;;50250:48;:::i;:::-;;;;;;;;50342:19;50317:21;;:44;;;;;;;:::i;:::-;;;;-1:-1:-1;;50385:33:0;;;;;;11849:2:1;11831:21;;;11888:2;11868:18;;;11861:30;-1:-1:-1;;;11922:2:1;11907:18;;11900:45;11977:2;11962:18;;11647:339;50385:33:0;;;;;;;;-1:-1:-1;50444:1:0;;49787:817;-1:-1:-1;;;49787:817:0:o;50217:244::-;50496:7;-1:-1:-1;;;;;50480:45:0;;50505:19;50480:45;;;;548:25:1;;536:2;521:18;;402:177;50480:45:0;;;;;;;;-1:-1:-1;50547:19:0;49787:817;-1:-1:-1;;49787:817:0:o;48259:468::-;-1:-1:-1;;;;;48348:21:0;;48326:115;;;;-1:-1:-1;;;48326:115:0;;12193:2:1;48326:115:0;;;12175:21:1;12232:2;12212:18;;;12205:30;12271:34;12251:18;;;12244:62;-1:-1:-1;;;12322:18:1;;;12315:42;12374:19;;48326:115:0;11991:408:1;48326:115:0;48468:6;48452:12;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;48485:18:0;;;;;;:9;:18;;;;;:28;;48507:6;;48485:18;:28;;48507:6;;48485:28;:::i;:::-;;;;-1:-1:-1;;48529:37:0;;548:25:1;;;-1:-1:-1;;;;;48529:37:0;;;48546:1;;48529:37;;536:2:1;521:18;48529:37:0;;;;;;;48712:6;48686:23;;:32;;;;:::i;:::-;-1:-1:-1;;;;;48628:35:0;;;;;;:26;:35;;;;;;:91;;;;:::i;:::-;-1:-1:-1;;;;;48577:35:0;;;;;;;:26;:35;;;;;:142;;;;-1:-1:-1;48259:468:0:o;48735:672::-;-1:-1:-1;;;;;48824:21:0;;48802:117;;;;-1:-1:-1;;;48802:117:0;;12878:2:1;48802:117:0;;;12860:21:1;12917:2;12897:18;;;12890:30;12956:34;12936:18;;;12929:62;-1:-1:-1;;;13007:18:1;;;13000:44;13061:19;;48802:117:0;12676:410:1;48802:117:0;-1:-1:-1;;;;;48955:18:0;;48930:22;48955:18;;;:9;:18;;;;;;49006:24;;;;48984:121;;;;-1:-1:-1;;;48984:121:0;;13293:2:1;48984:121:0;;;13275:21:1;13332:2;13312:18;;;13305:30;13371:34;13351:18;;;13344:62;-1:-1:-1;;;13422:18:1;;;13415:45;13477:19;;48984:121:0;13091:411:1;48984:121:0;49137:23;49154:6;49137:14;:23;:::i;:::-;-1:-1:-1;;;;;49116:18:0;;;;;;:9;:18;;;;;:44;;;;49171:12;:22;;49187:6;;49116:18;49171:22;;49187:6;;49171:22;:::i;:::-;;;;-1:-1:-1;;49209:37:0;;548:25:1;;;49235:1:0;;-1:-1:-1;;;;;49209:37:0;;;;;536:2:1;521:18;49209:37:0;;;;;;;49392:6;49366:23;;:32;;;;:::i;:::-;-1:-1:-1;;;;;49308:35:0;;;;;;:26;:35;;;;;;:91;;;;:::i;:::-;-1:-1:-1;;;;;49257:35:0;;;;;;;:26;:35;;;;;:142;;;;-1:-1:-1;;48735:672:0:o;14:131:1:-;-1:-1:-1;;;;;89:31:1;;79:42;;69:70;;135:1;132;125:12;150:247;209:6;262:2;250:9;241:7;237:23;233:32;230:52;;;278:1;275;268:12;230:52;317:9;304:23;336:31;361:5;336:31;:::i;:::-;386:5;150:247;-1:-1:-1;;;150:247:1:o;584:597::-;696:4;725:2;754;743:9;736:21;786:6;780:13;829:6;824:2;813:9;809:18;802:34;854:1;864:140;878:6;875:1;872:13;864:140;;;973:14;;;969:23;;963:30;939:17;;;958:2;935:26;928:66;893:10;;864:140;;;1022:6;1019:1;1016:13;1013:91;;;1092:1;1087:2;1078:6;1067:9;1063:22;1059:31;1052:42;1013:91;-1:-1:-1;1165:2:1;1144:15;-1:-1:-1;;1140:29:1;1125:45;;;;1172:2;1121:54;;584:597;-1:-1:-1;;;584:597:1:o;1186:315::-;1254:6;1262;1315:2;1303:9;1294:7;1290:23;1286:32;1283:52;;;1331:1;1328;1321:12;1283:52;1370:9;1357:23;1389:31;1414:5;1389:31;:::i;:::-;1439:5;1491:2;1476:18;;;;1463:32;;-1:-1:-1;;;1186:315:1:o;1698:456::-;1775:6;1783;1791;1844:2;1832:9;1823:7;1819:23;1815:32;1812:52;;;1860:1;1857;1850:12;1812:52;1899:9;1886:23;1918:31;1943:5;1918:31;:::i;:::-;1968:5;-1:-1:-1;2025:2:1;2010:18;;1997:32;2038:33;1997:32;2038:33;:::i;:::-;1698:456;;2090:7;;-1:-1:-1;;;2144:2:1;2129:18;;;;2116:32;;1698:456::o;2159:416::-;2224:6;2232;2285:2;2273:9;2264:7;2260:23;2256:32;2253:52;;;2301:1;2298;2291:12;2253:52;2340:9;2327:23;2359:31;2384:5;2359:31;:::i;:::-;2409:5;-1:-1:-1;2466:2:1;2451:18;;2438:32;2508:15;;2501:23;2489:36;;2479:64;;2539:1;2536;2529:12;2479:64;2562:7;2552:17;;;2159:416;;;;;:::o;3523:315::-;3591:6;3599;3652:2;3640:9;3631:7;3627:23;3623:32;3620:52;;;3668:1;3665;3658:12;3620:52;3704:9;3691:23;3681:33;;3764:2;3753:9;3749:18;3736:32;3777:31;3802:5;3777:31;:::i;4051:388::-;4119:6;4127;4180:2;4168:9;4159:7;4155:23;4151:32;4148:52;;;4196:1;4193;4186:12;4148:52;4235:9;4222:23;4254:31;4279:5;4254:31;:::i;:::-;4304:5;-1:-1:-1;4361:2:1;4346:18;;4333:32;4374:33;4333:32;4374:33;:::i;5121:127::-;5182:10;5177:3;5173:20;5170:1;5163:31;5213:4;5210:1;5203:15;5237:4;5234:1;5227:15;5253:168;5293:7;5359:1;5355;5351:6;5347:14;5344:1;5341:21;5336:1;5329:9;5322:17;5318:45;5315:71;;;5366:18;;:::i;:::-;-1:-1:-1;5406:9:1;;5253:168::o;5426:217::-;5466:1;5492;5482:132;;5536:10;5531:3;5527:20;5524:1;5517:31;5571:4;5568:1;5561:15;5599:4;5596:1;5589:15;5482:132;-1:-1:-1;5628:9:1;;5426:217::o;5648:128::-;5688:3;5719:1;5715:6;5712:1;5709:13;5706:39;;;5725:18;;:::i;:::-;-1:-1:-1;5761:9:1;;5648:128::o;5781:265::-;5820:3;5848:9;;;5873:10;;-1:-1:-1;;;;;5892:27:1;;;5885:35;;5869:52;5866:78;;;5924:18;;:::i;:::-;-1:-1:-1;;;5971:19:1;;;5964:27;;5956:36;;5953:62;;;5995:18;;:::i;:::-;-1:-1:-1;;6031:9:1;;5781:265::o;6462:125::-;6502:4;6530:1;6527;6524:8;6521:34;;;6535:18;;:::i;:::-;-1:-1:-1;6572:9:1;;6462:125::o;6592:356::-;6794:2;6776:21;;;6813:18;;;6806:30;6872:34;6867:2;6852:18;;6845:62;6939:2;6924:18;;6592:356::o;7380:184::-;7450:6;7503:2;7491:9;7482:7;7478:23;7474:32;7471:52;;;7519:1;7516;7509:12;7471:52;-1:-1:-1;7542:16:1;;7380:184;-1:-1:-1;7380:184:1:o;8919:251::-;8989:6;9042:2;9030:9;9021:7;9017:23;9013:32;9010:52;;;9058:1;9055;9048:12;9010:52;9090:9;9084:16;9109:31;9134:5;9109:31;:::i;9175:127::-;9236:10;9231:3;9227:20;9224:1;9217:31;9267:4;9264:1;9257:15;9291:4;9288:1;9281:15;9523:908;9757:4;9805:3;9794:9;9790:19;9836:6;9825:9;9818:25;9862:2;9900:3;9895:2;9884:9;9880:18;9873:31;9924:6;9959;9953:13;9990:6;9982;9975:22;10028:3;10017:9;10013:19;10006:26;;10067:2;10059:6;10055:15;10041:29;;10088:1;10098:195;10112:6;10109:1;10106:13;10098:195;;;10177:13;;-1:-1:-1;;;;;10173:39:1;10161:52;;10268:15;;;;10233:12;;;;10209:1;10127:9;10098:195;;;-1:-1:-1;;;;;;;10349:32:1;;;;10344:2;10329:18;;10322:60;-1:-1:-1;;;10413:2:1;10398:18;10391:34;10310:3;9523:908;-1:-1:-1;;9523:908:1:o;10436:179::-;10471:3;10513:1;10495:16;10492:23;10489:120;;;10559:1;10556;10553;10538:23;-1:-1:-1;10596:1:1;10590:8;10585:3;10581:18;10489:120;10436:179;:::o;10620:346::-;10730:2;10711:13;;-1:-1:-1;;10707:27:1;10695:40;;10765:18;10750:34;;10786:22;;;10747:62;10744:185;;;10851:10;10846:3;10842:20;10839:1;10832:31;10886:4;10883:1;10876:15;10914:4;10911:1;10904:15;10744:185;10945:2;10938:22;-1:-1:-1;;10620:346:1:o;10971:671::-;11010:3;11052:4;11034:16;11031:26;11028:39;;;10971:671;:::o;11028:39::-;11094:2;11088:9;-1:-1:-1;;11159:16:1;11155:25;;11152:1;11088:9;11131:50;11210:4;11204:11;11234:16;11269:18;11340:2;11333:4;11325:6;11321:17;11318:25;11313:2;11305:6;11302:14;11299:45;11296:58;;;11347:5;;;;;10971:671;:::o;11296:58::-;11384:6;11378:4;11374:17;11363:28;;11420:3;11414:10;11447:2;11439:6;11436:14;11433:27;;;11453:5;;;;;;10971:671;:::o;11433:27::-;11537:2;11518:16;11512:4;11508:27;11504:36;11497:4;11488:6;11483:3;11479:16;11475:27;11472:69;11469:82;;;11544:5;;;;;;10971:671;:::o;11469:82::-;11560:57;11611:4;11602:6;11594;11590:19;11586:30;11580:4;11560:57;:::i;:::-;-1:-1:-1;11633:3:1;;10971:671;-1:-1:-1;;;;;10971:671:1:o;12404:267::-;12443:4;12472:9;;;12497:10;;-1:-1:-1;;;12516:19:1;;12509:27;;12493:44;12490:70;;;12540:18;;:::i;:::-;-1:-1:-1;;;;;12587:27:1;;12580:35;;12572:44;;12569:70;;;12619:18;;:::i;:::-;-1:-1:-1;;12656:9:1;;12404:267::o

Swarm Source

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