ETH Price: $1,890.18 (+2.60%)

Contract

0x2a6da97233D798504008C57a66B6d0a05191Ad76
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Approve182727942023-10-03 21:50:47545 days ago1696369847IN
0x2a6da972...05191Ad76
0 ETH0.0005380411.58413069
Approve182700682023-10-03 12:39:47546 days ago1696336787IN
0x2a6da972...05191Ad76
0 ETH0.0004655710.02372186
Approve182678512023-10-03 5:14:11546 days ago1696310051IN
0x2a6da972...05191Ad76
0 ETH0.000424229.13346543
Approve182677182023-10-03 4:47:23546 days ago1696308443IN
0x2a6da972...05191Ad76
0 ETH0.000304446.55459446
Approve182674342023-10-03 3:49:35546 days ago1696304975IN
0x2a6da972...05191Ad76
0 ETH0.000340847.33835448
Approve182673352023-10-03 3:29:47546 days ago1696303787IN
0x2a6da972...05191Ad76
0 ETH0.000449659.66852389
Approve182670942023-10-03 2:41:23546 days ago1696300883IN
0x2a6da972...05191Ad76
0 ETH0.0005718412.29591457
Approve182658422023-10-02 22:29:35546 days ago1696285775IN
0x2a6da972...05191Ad76
0 ETH0.0006941815.03125189
Approve182658072023-10-02 22:22:35546 days ago1696285355IN
0x2a6da972...05191Ad76
0 ETH0.0005192317.66394336
Approve182657842023-10-02 22:17:59546 days ago1696285079IN
0x2a6da972...05191Ad76
0 ETH0.0009996921.50107494
Approve182657842023-10-02 22:17:59546 days ago1696285079IN
0x2a6da972...05191Ad76
0 ETH0.0009069319.50107494
Approve182657752023-10-02 22:16:11546 days ago1696284971IN
0x2a6da972...05191Ad76
0 ETH0.000911519.62467061
Approve182657722023-10-02 22:15:35546 days ago1696284935IN
0x2a6da972...05191Ad76
0 ETH0.0009165319.73290501
Approve182657642023-10-02 22:13:59546 days ago1696284839IN
0x2a6da972...05191Ad76
0 ETH0.0005732821.59505753
Approve182657622023-10-02 22:13:35546 days ago1696284815IN
0x2a6da972...05191Ad76
0 ETH0.0010342622.2675331
Approve182657532023-10-02 22:11:47546 days ago1696284707IN
0x2a6da972...05191Ad76
0 ETH0.0007018223.87548993
Approve182657472023-10-02 22:10:35546 days ago1696284635IN
0x2a6da972...05191Ad76
0 ETH0.0006411221.8106109
Approve182656802023-10-02 21:56:59546 days ago1696283819IN
0x2a6da972...05191Ad76
0 ETH0.0005999322.87810387
Approve182656792023-10-02 21:56:47546 days ago1696283807IN
0x2a6da972...05191Ad76
0 ETH0.000561621.41636156
Approve182656762023-10-02 21:56:11546 days ago1696283771IN
0x2a6da972...05191Ad76
0 ETH0.0006372224.30038556
Approve182656382023-10-02 21:48:35546 days ago1696283315IN
0x2a6da972...05191Ad76
0 ETH0.0011395124.53368866
Approve182656232023-10-02 21:45:35546 days ago1696283135IN
0x2a6da972...05191Ad76
0 ETH0.0012758527.43364554
Approve182656212023-10-02 21:45:11546 days ago1696283111IN
0x2a6da972...05191Ad76
0 ETH0.0012946927.8386685
Approve182655832023-10-02 21:37:35546 days ago1696282655IN
0x2a6da972...05191Ad76
0 ETH0.0007145115.45542573
Approve182655692023-10-02 21:34:47546 days ago1696282487IN
0x2a6da972...05191Ad76
0 ETH0.0007414816.05526824
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Method Block
From
To
Deposit182858442023-10-05 17:36:35543 days ago1696527395
0x2a6da972...05191Ad76
0.01745376 ETH
Transfer182858442023-10-05 17:36:35543 days ago1696527395
0x2a6da972...05191Ad76
0.00875369 ETH
Transfer182858442023-10-05 17:36:35543 days ago1696527395
0x2a6da972...05191Ad76
0.02620745 ETH
Add Liquidity ET...182858442023-10-05 17:36:35543 days ago1696527395
0x2a6da972...05191Ad76
0.00440365 ETH
Transfer182858442023-10-05 17:36:35543 days ago1696527395
0x2a6da972...05191Ad76
0.00440365 ETH
Deposit182736502023-10-04 0:43:11545 days ago1696380191
0x2a6da972...05191Ad76
0.00135728 ETH
Transfer182736502023-10-04 0:43:11545 days ago1696380191
0x2a6da972...05191Ad76
0.00067879 ETH
Transfer182736502023-10-04 0:43:11545 days ago1696380191
0x2a6da972...05191Ad76
0.00203607 ETH
Add Liquidity ET...182736502023-10-04 0:43:11545 days ago1696380191
0x2a6da972...05191Ad76
0.00033955 ETH
Transfer182736502023-10-04 0:43:11545 days ago1696380191
0x2a6da972...05191Ad76
0.00033955 ETH
Deposit182727962023-10-03 21:51:11545 days ago1696369871
0x2a6da972...05191Ad76
0.00690342 ETH
Transfer182727962023-10-03 21:51:11545 days ago1696369871
0x2a6da972...05191Ad76
0.00345567 ETH
Transfer182727962023-10-03 21:51:11545 days ago1696369871
0x2a6da972...05191Ad76
0.0103591 ETH
Add Liquidity ET...182727962023-10-03 21:51:11545 days ago1696369871
0x2a6da972...05191Ad76
0.0017318 ETH
Transfer182727962023-10-03 21:51:11545 days ago1696369871
0x2a6da972...05191Ad76
0.0017318 ETH
Deposit182686342023-10-03 7:50:59546 days ago1696319459
0x2a6da972...05191Ad76
0.00159543 ETH
Transfer182686342023-10-03 7:50:59546 days ago1696319459
0x2a6da972...05191Ad76
0.00079792 ETH
Transfer182686342023-10-03 7:50:59546 days ago1696319459
0x2a6da972...05191Ad76
0.00239336 ETH
Add Liquidity ET...182686342023-10-03 7:50:59546 days ago1696319459
0x2a6da972...05191Ad76
0.00039916 ETH
Transfer182686342023-10-03 7:50:59546 days ago1696319459
0x2a6da972...05191Ad76
0.00039916 ETH
Deposit182686342023-10-03 7:50:59546 days ago1696319459
0x2a6da972...05191Ad76
0.00164699 ETH
Transfer182686342023-10-03 7:50:59546 days ago1696319459
0x2a6da972...05191Ad76
0.00082371 ETH
Transfer182686342023-10-03 7:50:59546 days ago1696319459
0x2a6da972...05191Ad76
0.00247071 ETH
Add Liquidity ET...182686342023-10-03 7:50:59546 days ago1696319459
0x2a6da972...05191Ad76
0.00041207 ETH
Transfer182686342023-10-03 7:50:59546 days ago1696319459
0x2a6da972...05191Ad76
0.00041207 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Zeus

Compiler Version
v0.8.20+commit.a1b79de6

Optimization Enabled:
Yes with 200 runs

Other Settings:
paris EvmVersion
File 1 of 7 : Zeus.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.13;

// Website: https://stakezeus.com
// Docs: https://docs.stakezeus.com
// Telegram: https://t.me/ZeusTokenPortal
// Twitter: https://twitter.com/StakeZeusToken

import {ERC20} from "solmate/tokens/ERC20.sol";
import {WETH} from "solmate/tokens/WETH.sol";
import {Owned} from "solmate/auth/Owned.sol";
import {SafeTransferLib} from "solmate/utils/SafeTransferLib.sol";
import {IUniswapV2Factory} from "./interfaces/IUniswapV2Factory.sol";
import {IUniswapV2Router} from "./interfaces/IUniswapV2Router.sol";

contract Zeus is ERC20, Owned {
    using SafeTransferLib for ERC20;
    struct User {
        bool isBlacklisted;
        bool isAutomatedMarketMaker;
        bool isExcludedFromFees;
        bool isExcludedFromMaxTransactionAmount;
    }

    struct Fees {
        uint8 buy;
        uint8 sell;
        uint8 liquidity;
        uint8 development;
        uint8 staking;
    }

    struct Settings {
        bool limitsInEffect;
        bool swapEnabled;
        bool blacklistRenounced;
        bool feeChangeRenounced;
        bool tradingActive;
        /// @dev Upon enabling trading, record the end block for bot protection fee
        /// @dev This fee is a 90% fee that is reduced by 5% every block for 18 blocks.
        uint216 endBlock;
    }

    uint256 public constant MAX_SUPPLY = 10_000_000 * 1e18;
    uint256 public constant MIN_SWAP_AMOUNT = MAX_SUPPLY / 100_000; // 0.001%
    uint256 public constant MAX_SWAP_AMOUNT = (MAX_SUPPLY * 5) / 1_000; // 0.5%
    uint256 public exitTaxRate;

    IUniswapV2Router public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    address public immutable developmentWallet;
    address public stakingAddress;

    uint256 public maxTransactionAmount;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;
    uint256 public tokensForBotProtection;

    Fees public feeAmounts;

    bool private _swapping;

    Settings private settings =
        Settings({
            limitsInEffect: true,
            swapEnabled: true,
            blacklistRenounced: false,
            feeChangeRenounced: false,
            tradingActive: false,
            endBlock: uint216(0)
        });

    mapping(address => User) private _users;
    mapping(address => uint256) private _lastBuyTimestamp;
    address private wethAddress;

    event ExcludeFromFees(address indexed account, bool isExcluded);
    event ExcludeFromMaxTransaction(address indexed account, bool isExcluded);
    event FailedSwapBackTransfer(address indexed destination, uint256 amount);
    event MaxTransactionAmountUpdated(uint256 newAmount, uint256 oldAmount);
    event SetAutomatedMarketMakerPair(address indexed pair, bool value);
    event SwapAndLiquify(uint256 tokensSwapped, uint256 ethReceived);
    event TransferToStaking(uint256 amount);
    event SwapTokensAtAmountUpdated(uint256 newAmount, uint256 oldAmount);

    error Zeus__BlacklistModificationDisabled();
    error Zeus__BuyAmountGreaterThanMax();
    error Zeus__CannotBlacklistLPPair();
    error Zeus__CannotBlacklistRouter();
    error Zeus__CannotRemovePairFromAMMs();
    error Zeus__CannotTransferFromAddressZero();
    error Zeus__CannotTransferToAddressZero();
    error Zeus__ErrorWithdrawingEth();
    error Zeus__FeeChangeRenounced();
    error Zeus__MaxFeeFivePercent();
    error Zeus__MaxTransactionTooLow();
    error Zeus__MaxWalletAmountExceeded();
    error Zeus__MaxWalletAmountTooLow();
    error Zeus__OnlyOwner();
    error Zeus__ReceiverBlacklisted();
    error Zeus__ReceiverCannotBeAddressZero();
    error Zeus__SellAmountGreaterThanMax();
    error Zeus__SenderBlacklisted();
    error Zeus__StuckEthWithdrawError();
    error Zeus__SwapAmountGreaterThanMaximum();
    error Zeus__SwapAmountLowerThanMinimum();
    error Zeus__TokenAddressCannotBeAddressZero();
    error Zeus__TradingNotActive();

    constructor(
        address routerAddress,
        address devWallet,
        uint256 _exitTaxRate
    ) ERC20("Zeus", "Zeus", 18) Owned(msg.sender) {
        developmentWallet = devWallet;
        exitTaxRate = _exitTaxRate;
        IUniswapV2Router _uniswapV2Router = IUniswapV2Router(routerAddress);
        uniswapV2Router = _uniswapV2Router;
        wethAddress = uniswapV2Router.WETH();
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        maxTransactionAmount = MAX_SUPPLY / 200; // 0.5%
        maxWallet = MAX_SUPPLY / 100; // 1%
        swapTokensAtAmount = (MAX_SUPPLY * 5) / 10_000; // 0.05%
        feeAmounts = Fees({
            buy: 5,
            sell: 5,
            liquidity: 25,
            development: 25,
            staking: 50
        });

        _users[msg.sender] = User({
            isExcludedFromFees: true,
            isExcludedFromMaxTransactionAmount: true,
            isAutomatedMarketMaker: false,
            isBlacklisted: false
        });

        _users[address(this)] = User({
            isExcludedFromFees: true,
            isExcludedFromMaxTransactionAmount: true,
            isAutomatedMarketMaker: false,
            isBlacklisted: false
        });

        _users[address(uniswapV2Router)] = User({
            isExcludedFromMaxTransactionAmount: true,
            isAutomatedMarketMaker: false,
            isExcludedFromFees: false,
            isBlacklisted: false
        });

        _users[address(uniswapV2Pair)] = User({
            isExcludedFromMaxTransactionAmount: true,
            isAutomatedMarketMaker: true,
            isExcludedFromFees: false,
            isBlacklisted: false
        });

        _mint(msg.sender, MAX_SUPPLY);
        _approve(address(uniswapV2Router), type(uint256).max);
        _lastBuyTimestamp[devWallet] = block.timestamp;
    }

    receive() external payable {}

    function _requireIsOwner() internal view {
        require(msg.sender == owner, "!owner");
    }

    function setStakingAddress(address _staking) external {
        _requireIsOwner();
        stakingAddress = _staking;
    }

    function updateExitTaxRate(uint256 _exitTaxRate) external {
        _requireIsOwner();
        exitTaxRate = _exitTaxRate;
    }

    function updateFees(Fees memory newFees) external {
        _requireIsOwner();
        feeAmounts = newFees;
    }

    function enableTrading() external {
        _requireIsOwner();
        settings.endBlock = uint216(block.number) + 20;
        settings.tradingActive = true;
    }

    function removeLimits() external {
        _requireIsOwner();
        settings.limitsInEffect = false;
    }

    // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(uint256 newAmount) external {
        _requireIsOwner();
        if (newAmount < MIN_SWAP_AMOUNT) {
            revert Zeus__SwapAmountLowerThanMinimum();
        }
        if (newAmount > MAX_SWAP_AMOUNT) {
            revert Zeus__SwapAmountGreaterThanMaximum();
        }
        uint256 oldSwapAmount = swapTokensAtAmount;
        swapTokensAtAmount = newAmount;
        emit SwapTokensAtAmountUpdated(newAmount, oldSwapAmount);
    }

    function updateMaxTransactionAmount(uint256 newAmount) external {
        _requireIsOwner();
        if (newAmount < (MAX_SUPPLY * 5) / 1000) {
            revert Zeus__MaxTransactionTooLow();
        }
        uint256 oldMaxTransactionAmount = maxTransactionAmount;
        maxTransactionAmount = newAmount;
        emit MaxTransactionAmountUpdated(newAmount, oldMaxTransactionAmount);
    }

    function excludeFromFees(address account, bool excluded) external {
        _requireIsOwner();
        _users[account].isExcludedFromFees = excluded;
        emit ExcludeFromFees(account, excluded);
    }

    function excludeFromMaxTransaction(
        address account,
        bool isExcluded
    ) external {
        _requireIsOwner();
        _users[account].isExcludedFromMaxTransactionAmount = isExcluded;
        emit ExcludeFromMaxTransaction(account, isExcluded);
    }

    function setAutomatedMarketMakerPair(address pair, bool value) external {
        _requireIsOwner();
        if (pair == uniswapV2Pair) {
            revert Zeus__CannotRemovePairFromAMMs();
        }

        _users[pair].isAutomatedMarketMaker = value;
        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function renounceBlacklist() external {
        _requireIsOwner();
        settings.blacklistRenounced = true;
    }

    function blacklist(address account) external {
        _requireIsOwner();
        if (settings.blacklistRenounced) {
            revert Zeus__BlacklistModificationDisabled();
        }
        if (account == uniswapV2Pair) {
            revert Zeus__CannotBlacklistLPPair();
        }
        if (account == address(uniswapV2Router)) {
            revert Zeus__CannotBlacklistRouter();
        }
        _users[account].isBlacklisted = true;
    }

    // @dev unblacklist address; not affected by blacklistRenounced incase team wants to unblacklist v3 pools down the
    function unblacklist(address account) external {
        _requireIsOwner();
        _users[account].isBlacklisted = false;
    }

    function isExcludedFromFees(address account) external view returns (bool) {
        return _users[account].isExcludedFromFees;
    }

    function isExcludedFromMaxTransactionAmount(
        address account
    ) external view returns (bool) {
        return _users[account].isExcludedFromMaxTransactionAmount;
    }

    function isAutomatedMarketMakerPair(
        address pair
    ) external view returns (bool) {
        return _users[pair].isAutomatedMarketMaker;
    }

    function isBlacklisted(address account) external view returns (bool) {
        return _users[account].isBlacklisted;
    }

    function isSwapEnabled() external view returns (bool) {
        return settings.swapEnabled;
    }

    function isBlacklistRenounced() external view returns (bool) {
        return settings.blacklistRenounced;
    }

    function isFeeChangeRenounced() external view returns (bool) {
        return settings.feeChangeRenounced;
    }

    function isTradingActive() external view returns (bool) {
        return settings.tradingActive;
    }

    function isLimitInEffect() external view returns (bool) {
        return settings.limitsInEffect;
    }

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

    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) public override returns (bool) {
        uint256 allowed = allowance[from][msg.sender]; // Saves gas for limited approvals.
        if (allowed != type(uint256).max) {
            allowance[from][msg.sender] = allowed - amount;
        }
        _transfer(from, to, amount);
        return true;
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal returns (bool) {
        User memory fromData = _users[from];
        User memory toData = _users[to];
        Settings memory settingCache = settings;

        if (!settingCache.tradingActive) {
            if (!fromData.isExcludedFromFees) {
                if (!toData.isExcludedFromFees) {
                    revert Zeus__TradingNotActive();
                }
            }
        }

        // Apply blacklist protection
        if (fromData.isBlacklisted) {
            revert Zeus__SenderBlacklisted();
        }
        if (toData.isBlacklisted) {
            revert Zeus__ReceiverBlacklisted();
        }

        // If zero amount, continue
        if (amount == 0) {
            return true;
        }

        bool excludedFromFees = fromData.isExcludedFromFees ||
            toData.isExcludedFromFees;

        // Cache transaction type for reference.
        // 1 = Buy
        // 2 = Sell
        // 3 = Transfer
        uint8 txType = 3;

        if (fromData.isAutomatedMarketMaker) {
            // Buys originate from the AMM pair
            txType = 1;
        } else if (toData.isAutomatedMarketMaker) {
            // Sells send funds to AMM pair
            txType = 2;
        }

        if (!_swapping) {
            if (settingCache.limitsInEffect) {
                //when buy
                if (txType == 1 && !toData.isExcludedFromMaxTransactionAmount) {
                    if (amount > maxTransactionAmount) {
                        revert Zeus__BuyAmountGreaterThanMax();
                    }
                    if (amount + this.balanceOf(to) > maxWallet) {
                        revert Zeus__MaxWalletAmountExceeded();
                    }
                }
                //when sell
                else if (
                    txType == 2 && !fromData.isExcludedFromMaxTransactionAmount
                ) {
                    if (amount > maxTransactionAmount) {
                        revert Zeus__SellAmountGreaterThanMax();
                    }
                } else if (!toData.isExcludedFromMaxTransactionAmount) {
                    if (amount + this.balanceOf(to) > maxWallet) {
                        revert Zeus__MaxWalletAmountExceeded();
                    }
                }
            }

            if (settingCache.swapEnabled) {
                // Only sells will trigger the fee swap
                if (txType == 2) {
                    if (this.balanceOf(address(this)) >= swapTokensAtAmount) {
                        _swapping = true;
                        _swapBack();
                        _swapping = false;
                    }
                }
            }
        }

        if (txType < 3) {
            bool takeFee = !_swapping;

            // if any account belongs to _isExcludedFromFee account then remove the fee
            if (excludedFromFees) {
                takeFee = false;
            }
            uint256 fees = 0;
            // only take fees on buys/sells, do not take on wallet transfers
            if (takeFee) {
                Fees memory feeCache = feeAmounts;
                // on sell

                if (block.number < settingCache.endBlock) {
                    uint256 blocksLeft = settingCache.endBlock - block.number;
                    uint256 botFeeMultiplier = 95;

                    // Apply sniper protection - first 18 blocks have a fee reduced 5% each block.
                    if (blocksLeft < 19) {
                        botFeeMultiplier -= (5 * (19 - blocksLeft));
                    }
                    if (txType == 1) {
                        _lastBuyTimestamp[to] = block.timestamp;
                    }
                    uint256 botFee = (amount * botFeeMultiplier) / 100;
                    _doTransfer(from, owner, fees);
                    amount -= botFee;
                    tokensForBotProtection += botFee;
                } else {
                    if (txType == 2) {
                        // from is seller
                        // to is amm
                        if (feeCache.sell > 0) {
                            uint256 feePercentage = getZeusTax(from);
                            fees = (amount * feePercentage) / 100;
                        }
                    } else if (txType == 1) {
                        // from is amm,
                        // to is buyer
                        if (feeCache.buy > 0) {
                            fees = (amount * feeCache.buy) / 100;
                            _lastBuyTimestamp[to] = block.timestamp;
                        }
                    }
                }

                amount -= fees;

                if (fees > 0) {
                    _doTransfer(from, address(this), fees);
                }
            }
        } else {
            // If not a buy or sell, then it's a transfer.
            // If the sender is not excluded from fees, then apply the exit tax.
            if (!fromData.isExcludedFromFees) {
                uint256 exitTax = (amount * getZeusTax(from)) / 100;

                amount -= exitTax;
                _doTransfer(from, address(this), exitTax);
                // update to address
                _lastBuyTimestamp[to] = block.timestamp;
            }
        }

        _doTransfer(from, to, amount);

        return true;
    }

    function getZeusTax(address from) public view returns (uint256) {
        uint256 lastBuy = _lastBuyTimestamp[from];
        if (lastBuy == 0) {
            return exitTaxRate;
        }
        uint256 timeSinceLastBuy = block.timestamp - lastBuy;
        uint256 percentageOfDay = (timeSinceLastBuy * 1000) / 8 hours;
        if (percentageOfDay >= 1000) {
            return 5;
        }
        uint256 exitTax = exitTaxRate -
            ((exitTaxRate * percentageOfDay) / 1000);
        return exitTax;
    }

    function getLastBuyTimestamp(address from) public view returns (uint256) {
        return _lastBuyTimestamp[from];
    }

    function _swapTokensForEth(uint256 tokenAmount) internal {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

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

    function _addLiquidity(uint256 tokenAmount, uint256 ethAmount) internal {
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            developmentWallet,
            block.timestamp
        );
    }

    function _doTransfer(
        address from,
        address to,
        uint256 amount
    ) internal returns (bool) {
        balanceOf[from] -= amount;

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

        emit Transfer(from, to, amount);

        return true;
    }

    function _swapBack() internal {
        // Cache values
        uint256 contractBalance = this.balanceOf(address(this));
        Fees memory feeCache = feeAmounts;

        if (contractBalance == 0) {
            return;
        }

        // Prevent too many tokens from being swapped
        uint256 maxAmount = swapTokensAtAmount * 20;
        if (contractBalance > maxAmount) {
            contractBalance = maxAmount;
        }

        uint256 liquidityAmount = (contractBalance * feeCache.liquidity) / 100;

        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = liquidityAmount - (liquidityAmount / 2);

        uint256 initialETHBalance = address(this).balance;
        _swapTokensForEth(liquidityTokens);
        uint256 ethForLiquidity = address(this).balance - initialETHBalance;

        if (liquidityTokens > 0 && ethForLiquidity > 0) {
            _addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(liquidityTokens, ethForLiquidity);
        }

        uint256 amountToSwapForETH = contractBalance - liquidityAmount;
        _swapTokensForEth(amountToSwapForETH);

        uint256 contractEthAmount = address(this).balance;
        uint256 initialTotalEth = contractEthAmount + (ethForLiquidity * 2);

        uint256 developmentEthAmount = (initialTotalEth *
            feeCache.development) / 100;
        (bool success, ) = address(developmentWallet).call{
            value: developmentEthAmount
        }("");
        require(success);

        uint256 stakingAmount = contractEthAmount - developmentEthAmount;
        WETH(payable(wethAddress)).deposit{value: stakingAmount}();
        ERC20(wethAddress).safeTransfer(
            stakingAddress,
            WETH(payable(wethAddress)).balanceOf(address(this))
        );
    }

    function _approve(address spender, uint256 amount) internal onlyOwner {
        allowance[address(this)][spender] = amount;
        emit Approval(address(this), spender, amount);
    }
}

File 2 of 7 : ERC20.sol
// SPDX-License-Identifier: AGPL-3.0-only
pragma solidity >=0.8.0;

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

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

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

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

    string public name;

    string public symbol;

    uint8 public immutable decimals;

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

    uint256 public totalSupply;

    mapping(address => uint256) public balanceOf;

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

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

    uint256 internal immutable INITIAL_CHAIN_ID;

    bytes32 internal immutable INITIAL_DOMAIN_SEPARATOR;

    mapping(address => uint256) public nonces;

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

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

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

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

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

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

        return true;
    }

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

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

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

        return true;
    }

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

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

        balanceOf[from] -= amount;

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

        emit Transfer(from, to, amount);

        return true;
    }

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

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

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

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

            allowance[recoveredAddress][spender] = value;
        }

        emit Approval(owner, spender, value);
    }

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

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

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

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

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

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

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

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

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

File 3 of 7 : WETH.sol
// SPDX-License-Identifier: AGPL-3.0-only
pragma solidity >=0.8.0;

import {ERC20} from "./ERC20.sol";

import {SafeTransferLib} from "../utils/SafeTransferLib.sol";

/// @notice Minimalist and modern Wrapped Ether implementation.
/// @author Solmate (https://github.com/transmissions11/solmate/blob/main/src/tokens/WETH.sol)
/// @author Inspired by WETH9 (https://github.com/dapphub/ds-weth/blob/master/src/weth9.sol)
contract WETH is ERC20("Wrapped Ether", "WETH", 18) {
    using SafeTransferLib for address;

    event Deposit(address indexed from, uint256 amount);

    event Withdrawal(address indexed to, uint256 amount);

    function deposit() public payable virtual {
        _mint(msg.sender, msg.value);

        emit Deposit(msg.sender, msg.value);
    }

    function withdraw(uint256 amount) public virtual {
        _burn(msg.sender, amount);

        emit Withdrawal(msg.sender, amount);

        msg.sender.safeTransferETH(amount);
    }

    receive() external payable virtual {
        deposit();
    }
}

File 4 of 7 : Owned.sol
// SPDX-License-Identifier: AGPL-3.0-only
pragma solidity >=0.8.0;

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

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

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

    address public owner;

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

        _;
    }

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

    constructor(address _owner) {
        owner = _owner;

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

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

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

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

File 5 of 7 : SafeTransferLib.sol
// SPDX-License-Identifier: AGPL-3.0-only
pragma solidity >=0.8.0;

import {ERC20} from "../tokens/ERC20.sol";

/// @notice Safe ETH and ERC20 transfer library that gracefully handles missing return values.
/// @author Solmate (https://github.com/transmissions11/solmate/blob/main/src/utils/SafeTransferLib.sol)
/// @dev Use with caution! Some functions in this library knowingly create dirty bits at the destination of the free memory pointer.
/// @dev Note that none of the functions in this library check that a token has code at all! That responsibility is delegated to the caller.
library SafeTransferLib {
    /*//////////////////////////////////////////////////////////////
                             ETH OPERATIONS
    //////////////////////////////////////////////////////////////*/

    function safeTransferETH(address to, uint256 amount) internal {
        bool success;

        /// @solidity memory-safe-assembly
        assembly {
            // Transfer the ETH and store if it succeeded or not.
            success := call(gas(), to, amount, 0, 0, 0, 0)
        }

        require(success, "ETH_TRANSFER_FAILED");
    }

    /*//////////////////////////////////////////////////////////////
                            ERC20 OPERATIONS
    //////////////////////////////////////////////////////////////*/

    function safeTransferFrom(
        ERC20 token,
        address from,
        address to,
        uint256 amount
    ) internal {
        bool success;

        /// @solidity memory-safe-assembly
        assembly {
            // Get a pointer to some free memory.
            let freeMemoryPointer := mload(0x40)

            // Write the abi-encoded calldata into memory, beginning with the function selector.
            mstore(freeMemoryPointer, 0x23b872dd00000000000000000000000000000000000000000000000000000000)
            mstore(add(freeMemoryPointer, 4), and(from, 0xffffffffffffffffffffffffffffffffffffffff)) // Append and mask the "from" argument.
            mstore(add(freeMemoryPointer, 36), and(to, 0xffffffffffffffffffffffffffffffffffffffff)) // Append and mask the "to" argument.
            mstore(add(freeMemoryPointer, 68), amount) // Append the "amount" argument. Masking not required as it's a full 32 byte type.

            success := and(
                // Set success to whether the call reverted, if not we check it either
                // returned exactly 1 (can't just be non-zero data), or had no return data.
                or(and(eq(mload(0), 1), gt(returndatasize(), 31)), iszero(returndatasize())),
                // We use 100 because the length of our calldata totals up like so: 4 + 32 * 3.
                // We use 0 and 32 to copy up to 32 bytes of return data into the scratch space.
                // Counterintuitively, this call must be positioned second to the or() call in the
                // surrounding and() call or else returndatasize() will be zero during the computation.
                call(gas(), token, 0, freeMemoryPointer, 100, 0, 32)
            )
        }

        require(success, "TRANSFER_FROM_FAILED");
    }

    function safeTransfer(
        ERC20 token,
        address to,
        uint256 amount
    ) internal {
        bool success;

        /// @solidity memory-safe-assembly
        assembly {
            // Get a pointer to some free memory.
            let freeMemoryPointer := mload(0x40)

            // Write the abi-encoded calldata into memory, beginning with the function selector.
            mstore(freeMemoryPointer, 0xa9059cbb00000000000000000000000000000000000000000000000000000000)
            mstore(add(freeMemoryPointer, 4), and(to, 0xffffffffffffffffffffffffffffffffffffffff)) // Append and mask the "to" argument.
            mstore(add(freeMemoryPointer, 36), amount) // Append the "amount" argument. Masking not required as it's a full 32 byte type.

            success := and(
                // Set success to whether the call reverted, if not we check it either
                // returned exactly 1 (can't just be non-zero data), or had no return data.
                or(and(eq(mload(0), 1), gt(returndatasize(), 31)), iszero(returndatasize())),
                // We use 68 because the length of our calldata totals up like so: 4 + 32 * 2.
                // We use 0 and 32 to copy up to 32 bytes of return data into the scratch space.
                // Counterintuitively, this call must be positioned second to the or() call in the
                // surrounding and() call or else returndatasize() will be zero during the computation.
                call(gas(), token, 0, freeMemoryPointer, 68, 0, 32)
            )
        }

        require(success, "TRANSFER_FAILED");
    }

    function safeApprove(
        ERC20 token,
        address to,
        uint256 amount
    ) internal {
        bool success;

        /// @solidity memory-safe-assembly
        assembly {
            // Get a pointer to some free memory.
            let freeMemoryPointer := mload(0x40)

            // Write the abi-encoded calldata into memory, beginning with the function selector.
            mstore(freeMemoryPointer, 0x095ea7b300000000000000000000000000000000000000000000000000000000)
            mstore(add(freeMemoryPointer, 4), and(to, 0xffffffffffffffffffffffffffffffffffffffff)) // Append and mask the "to" argument.
            mstore(add(freeMemoryPointer, 36), amount) // Append the "amount" argument. Masking not required as it's a full 32 byte type.

            success := and(
                // Set success to whether the call reverted, if not we check it either
                // returned exactly 1 (can't just be non-zero data), or had no return data.
                or(and(eq(mload(0), 1), gt(returndatasize(), 31)), iszero(returndatasize())),
                // We use 68 because the length of our calldata totals up like so: 4 + 32 * 2.
                // We use 0 and 32 to copy up to 32 bytes of return data into the scratch space.
                // Counterintuitively, this call must be positioned second to the or() call in the
                // surrounding and() call or else returndatasize() will be zero during the computation.
                call(gas(), token, 0, freeMemoryPointer, 68, 0, 32)
            )
        }

        require(success, "APPROVE_FAILED");
    }
}

File 6 of 7 : IUniswapV2Factory.sol
pragma solidity >=0.5.0;

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

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

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

    function allPairs(uint) external view returns (address pair);

    function allPairsLength() external view returns (uint);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

File 7 of 7 : IUniswapV2Router.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.13;

interface IUniswapV2Router {
    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 removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);

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

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

Settings
{
  "remappings": [
    "ds-test/=lib/forge-std/lib/ds-test/src/",
    "forge-std/=lib/forge-std/src/",
    "solmate/=lib/solmate/src/"
  ],
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "metadata": {
    "useLiteralContent": false,
    "bytecodeHash": "ipfs",
    "appendCBOR": true
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "evmVersion": "paris",
  "libraries": {}
}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"address","name":"routerAddress","type":"address"},{"internalType":"address","name":"devWallet","type":"address"},{"internalType":"uint256","name":"_exitTaxRate","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"Zeus__BlacklistModificationDisabled","type":"error"},{"inputs":[],"name":"Zeus__BuyAmountGreaterThanMax","type":"error"},{"inputs":[],"name":"Zeus__CannotBlacklistLPPair","type":"error"},{"inputs":[],"name":"Zeus__CannotBlacklistRouter","type":"error"},{"inputs":[],"name":"Zeus__CannotRemovePairFromAMMs","type":"error"},{"inputs":[],"name":"Zeus__CannotTransferFromAddressZero","type":"error"},{"inputs":[],"name":"Zeus__CannotTransferToAddressZero","type":"error"},{"inputs":[],"name":"Zeus__ErrorWithdrawingEth","type":"error"},{"inputs":[],"name":"Zeus__FeeChangeRenounced","type":"error"},{"inputs":[],"name":"Zeus__MaxFeeFivePercent","type":"error"},{"inputs":[],"name":"Zeus__MaxTransactionTooLow","type":"error"},{"inputs":[],"name":"Zeus__MaxWalletAmountExceeded","type":"error"},{"inputs":[],"name":"Zeus__MaxWalletAmountTooLow","type":"error"},{"inputs":[],"name":"Zeus__OnlyOwner","type":"error"},{"inputs":[],"name":"Zeus__ReceiverBlacklisted","type":"error"},{"inputs":[],"name":"Zeus__ReceiverCannotBeAddressZero","type":"error"},{"inputs":[],"name":"Zeus__SellAmountGreaterThanMax","type":"error"},{"inputs":[],"name":"Zeus__SenderBlacklisted","type":"error"},{"inputs":[],"name":"Zeus__StuckEthWithdrawError","type":"error"},{"inputs":[],"name":"Zeus__SwapAmountGreaterThanMaximum","type":"error"},{"inputs":[],"name":"Zeus__SwapAmountLowerThanMinimum","type":"error"},{"inputs":[],"name":"Zeus__TokenAddressCannotBeAddressZero","type":"error"},{"inputs":[],"name":"Zeus__TradingNotActive","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromMaxTransaction","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"destination","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"FailedSwapBackTransfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"oldAmount","type":"uint256"}],"name":"MaxTransactionAmountUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":false,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"oldAmount","type":"uint256"}],"name":"SwapTokensAtAmountUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TransferToStaking","type":"event"},{"inputs":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_SWAP_AMOUNT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MIN_SWAP_AMOUNT","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":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"blacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"developmentWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"exitTaxRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeAmounts","outputs":[{"internalType":"uint8","name":"buy","type":"uint8"},{"internalType":"uint8","name":"sell","type":"uint8"},{"internalType":"uint8","name":"liquidity","type":"uint8"},{"internalType":"uint8","name":"development","type":"uint8"},{"internalType":"uint8","name":"staking","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"}],"name":"getLastBuyTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"}],"name":"getZeusTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"}],"name":"isAutomatedMarketMakerPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isBlacklistRenounced","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isFeeChangeRenounced","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isLimitInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isSwapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isTradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"permit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_staking","type":"address"}],"name":"setStakingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stakingAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForBotProtection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"unblacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_exitTaxRate","type":"uint256"}],"name":"updateExitTaxRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"uint8","name":"buy","type":"uint8"},{"internalType":"uint8","name":"sell","type":"uint8"},{"internalType":"uint8","name":"liquidity","type":"uint8"},{"internalType":"uint8","name":"development","type":"uint8"},{"internalType":"uint8","name":"staking","type":"uint8"}],"internalType":"struct Zeus.Fees","name":"newFees","type":"tuple"}],"name":"updateFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateMaxTransactionAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

61020060405260016101408190526101605260006101808190526101a08190526101c08190526101e052610101600f553480156200003c57600080fd5b5060405162003628380380620036288339810160408190526200005f91620009d4565b6040805180820182526004808252635a65757360e01b60208084018290528451808601909552918452908301523391601260006200009e848262000aba565b506001620000ad838262000aba565b5060ff81166080524660a052620000c362000806565b60c0525050600680546001600160a01b0319166001600160a01b0384169081179091556040519091506000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506001600160a01b03808316610120526007829055831660e0819052604080516315ab88c960e31b8152905185929163ad5c46489160048083019260209291908290030181865afa1580156200016e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000194919062000b86565b601260006101000a8154816001600160a01b0302191690836001600160a01b03160217905550806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001f9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200021f919062000b86565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200026d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000293919062000b86565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015620002e1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000307919062000b86565b6001600160a01b0316610100526200032c60c86a084595161401484a00000062000bc1565b6009556200034760646a084595161401484a00000062000bc1565b600b55612710620003656a084595161401484a000000600562000be4565b62000371919062000bc1565b600a819055506040518060a00160405280600560ff168152602001600560ff168152602001601960ff168152602001601960ff168152602001603260ff16815250600d60008201518160000160006101000a81548160ff021916908360ff16021790555060208201518160000160016101000a81548160ff021916908360ff16021790555060408201518160000160026101000a81548160ff021916908360ff16021790555060608201518160000160036101000a81548160ff021916908360ff16021790555060808201518160000160046101000a81548160ff021916908360ff16021790555090505060405180608001604052806000151581526020016000151581526020016001151581526020016001151581525060106000336001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548160ff02191690831515021790555060208201518160000160016101000a81548160ff02191690831515021790555060408201518160000160026101000a81548160ff02191690831515021790555060608201518160000160036101000a81548160ff02191690831515021790555090505060405180608001604052806000151581526020016000151581526020016001151581526020016001151581525060106000306001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548160ff02191690831515021790555060208201518160000160016101000a81548160ff02191690831515021790555060408201518160000160026101000a81548160ff02191690831515021790555060608201518160000160036101000a81548160ff0219169083151502179055509050506040518060800160405280600015158152602001600015158152602001600015158152602001600115158152506010600060e0516001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548160ff02191690831515021790555060208201518160000160016101000a81548160ff02191690831515021790555060408201518160000160026101000a81548160ff02191690831515021790555060608201518160000160036101000a81548160ff02191690831515021790555090505060405180608001604052806000151581526020016001151581526020016000151581526020016001151581525060106000610100516001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548160ff02191690831515021790555060208201518160000160016101000a81548160ff02191690831515021790555060408201518160000160026101000a81548160ff02191690831515021790555060608201518160000160036101000a81548160ff021916908315150217905550905050620007d2336a084595161401484a000000620008a260201b60201c565b60e051620007e39060001962000910565b50506001600160a01b031660009081526011602052604090204290555062000c98565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60006040516200083a919062000c04565b6040805191829003822060208301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b8060026000828254620008b6919062000c82565b90915550506001600160a01b0382166000818152600360209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91015b60405180910390a35050565b6006546001600160a01b031633146200095e5760405162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b604482015260640160405180910390fd5b3060008181526004602090815260408083206001600160a01b03871680855290835292819020859055518481529192917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910162000904565b80516001600160a01b0381168114620009cf57600080fd5b919050565b600080600060608486031215620009ea57600080fd5b620009f584620009b7565b925062000a0560208501620009b7565b9150604084015190509250925092565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168062000a4057607f821691505b60208210810362000a6157634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111562000ab557600081815260208120601f850160051c8101602086101562000a905750805b601f850160051c820191505b8181101562000ab15782815560010162000a9c565b5050505b505050565b81516001600160401b0381111562000ad65762000ad662000a15565b62000aee8162000ae7845462000a2b565b8462000a67565b602080601f83116001811462000b26576000841562000b0d5750858301515b600019600386901b1c1916600185901b17855562000ab1565b600085815260208120601f198616915b8281101562000b575788860151825594840194600190910190840162000b36565b508582101562000b765787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006020828403121562000b9957600080fd5b62000ba482620009b7565b9392505050565b634e487b7160e01b600052601160045260246000fd5b60008262000bdf57634e487b7160e01b600052601260045260246000fd5b500490565b808202811582820484141762000bfe5762000bfe62000bab565b92915050565b600080835462000c148162000a2b565b6001828116801562000c2f576001811462000c455762000c76565b60ff198416875282151583028701945062000c76565b8760005260208060002060005b8581101562000c6d5781548a82015290840190820162000c52565b50505082870194505b50929695505050505050565b8082018082111562000bfe5762000bfe62000bab565b60805160a05160c05160e051610100516101205161290862000d206000396000818161082a01528181611ed901526122b201526000818161055501528181610e40015261149a015260008181610361015281816114ec015281816121520152818161220a01526122e001526000610ca101526000610c6c0152600061042901526129086000f3fe6080604052600436106102e85760003560e01c806395d89b4111610190578063d257b34f116100dc578063e9481eee11610095578063f77ccc681161006f578063f77ccc68146109ee578063f8b45b0514610a04578063f9f92be414610a1a578063fe575a8714610a3a57600080fd5b8063e9481eee1461096e578063f2fde38b146109ae578063f4e0d9ac146109ce57600080fd5b8063d257b34f146108a0578063d505accf146108c0578063d7b4be24146108e0578063dd62ed3e14610900578063defdd5f614610938578063e2f456051461095857600080fd5b8063ba1618d511610149578063c04a541411610123578063c04a541414610818578063c53d4d531461084c578063c8c8ebe41461086b578063cc10a1791461088157600080fd5b8063ba1618d5146107c2578063be1ded87146107da578063c0246668146107f857600080fd5b806395d89b41146107235780639759f76e1461073857806399f34c121461074d5780639a7a23d614610762578063a9059cbb14610782578063aa498023146107a257600080fd5b80633f17b1611161024f5780637571336a116102085780637c4b55c7116101e25780637c4b55c71461068b5780637ecebe00146106c15780638a8c523c146106ee5780638da5cb5b1461070357600080fd5b80637571336a1461060d57806375e3661e1461062d5780637949a4031461064d57600080fd5b80633f17b161146104ce57806349bd5a5e146105435780634fbee193146105775780635f189361146105b657806370a08231146105cb578063751039fc146105f857600080fd5b806323b872dd116102a157806323b872dd146103f7578063313ce5671461041757806332cb6b0c1461045d578063351a964d1461047c5780633644e515146104995780633e47c7cd146104ae57600080fd5b806306fdde03146102f4578063095ea7b31461031f5780631694505e1461034f57806317ee89511461039b57806318160ddd146103bd5780631b624ecb146103e157600080fd5b366102ef57005b600080fd5b34801561030057600080fd5b50610309610a73565b60405161031691906123dd565b60405180910390f35b34801561032b57600080fd5b5061033f61033a366004612443565b610b01565b6040519015158152602001610316565b34801561035b57600080fd5b506103837f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610316565b3480156103a757600080fd5b506103bb6103b6366004612485565b610b6e565b005b3480156103c957600080fd5b506103d360025481565b604051908152602001610316565b3480156103ed57600080fd5b506103d3600c5481565b34801561040357600080fd5b5061033f610412366004612521565b610bf3565b34801561042357600080fd5b5061044b7f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff9091168152602001610316565b34801561046957600080fd5b506103d36a084595161401484a00000081565b34801561048857600080fd5b50600f54610100900460ff1661033f565b3480156104a557600080fd5b506103d3610c68565b3480156104ba57600080fd5b506103bb6104c9366004612562565b610cc3565b3480156104da57600080fd5b50600d5461050f9060ff80821691610100810482169162010000820481169163010000008104821691600160201b9091041685565b6040805160ff968716815294861660208601529285169284019290925283166060830152909116608082015260a001610316565b34801561054f57600080fd5b506103837f000000000000000000000000000000000000000000000000000000000000000081565b34801561058357600080fd5b5061033f61059236600461257b565b6001600160a01b031660009081526010602052604090205462010000900460ff1690565b3480156105c257600080fd5b506103bb610cd0565b3480156105d757600080fd5b506103d36105e636600461257b565b60036020526000908152604090205481565b34801561060457600080fd5b506103bb610ceb565b34801561061957600080fd5b506103bb610628366004612598565b610cff565b34801561063957600080fd5b506103bb61064836600461257b565b610d76565b34801561065957600080fd5b5061033f61066836600461257b565b6001600160a01b0316600090815260106020526040902054610100900460ff1690565b34801561069757600080fd5b506103d36106a636600461257b565b6001600160a01b031660009081526011602052604090205490565b3480156106cd57600080fd5b506103d36106dc36600461257b565b60056020526000908152604090205481565b3480156106fa57600080fd5b506103bb610d9f565b34801561070f57600080fd5b50600654610383906001600160a01b031681565b34801561072f57600080fd5b50610309610deb565b34801561074457600080fd5b506103d3610df8565b34801561075957600080fd5b506103d3610e1e565b34801561076e57600080fd5b506103bb61077d366004612598565b610e36565b34801561078e57600080fd5b5061033f61079d366004612443565b610eef565b3480156107ae57600080fd5b506103bb6107bd366004612562565b610f06565b3480156107ce57600080fd5b50600f5460ff1661033f565b3480156107e657600080fd5b50600f5462010000900460ff1661033f565b34801561080457600080fd5b506103bb610813366004612598565b610f97565b34801561082457600080fd5b506103837f000000000000000000000000000000000000000000000000000000000000000081565b34801561085857600080fd5b50600f54600160201b900460ff1661033f565b34801561087757600080fd5b506103d360095481565b34801561088d57600080fd5b50600f546301000000900460ff1661033f565b3480156108ac57600080fd5b506103bb6108bb366004612562565b611000565b3480156108cc57600080fd5b506103bb6108db3660046125d6565b6110c1565b3480156108ec57600080fd5b50600854610383906001600160a01b031681565b34801561090c57600080fd5b506103d361091b366004612644565b600460209081526000928352604080842090915290825290205481565b34801561094457600080fd5b506103d361095336600461257b565b61130a565b34801561096457600080fd5b506103d3600a5481565b34801561097a57600080fd5b5061033f61098936600461257b565b6001600160a01b03166000908152601060205260409020546301000000900460ff1690565b3480156109ba57600080fd5b506103bb6109c936600461257b565b6113a7565b3480156109da57600080fd5b506103bb6109e936600461257b565b61143c565b3480156109fa57600080fd5b506103d360075481565b348015610a1057600080fd5b506103d3600b5481565b348015610a2657600080fd5b506103bb610a3536600461257b565b611466565b348015610a4657600080fd5b5061033f610a5536600461257b565b6001600160a01b031660009081526010602052604090205460ff1690565b60008054610a8090612672565b80601f0160208091040260200160405190810160405280929190818152602001828054610aac90612672565b8015610af95780601f10610ace57610100808354040283529160200191610af9565b820191906000526020600020905b815481529060010190602001808311610adc57829003601f168201915b505050505081565b3360008181526004602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610b5c9086815260200190565b60405180910390a35060015b92915050565b610b76611560565b8051600d805460208401516040850151606086015160809096015160ff908116600160201b0264ff000000001997821663010000000263ff0000001993831662010000029390931663ffff0000199483166101000261ffff1990961692909716919091179390931791909116939093179290921792909216179055565b6001600160a01b03831660009081526004602090815260408083203384529091528120546000198114610c4f57610c2a83826126c2565b6001600160a01b03861660009081526004602090815260408083203384529091529020555b610c5a8585856115a5565b5060019150505b9392505050565b60007f00000000000000000000000000000000000000000000000000000000000000004614610c9e57610c99611c5d565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b610ccb611560565b600755565b610cd8611560565b600f805462ff0000191662010000179055565b610cf3611560565b600f805460ff19169055565b610d07611560565b6001600160a01b03821660008181526010602052604090819020805484151563010000000263ff00000019909116179055517fe0a7c1f8826ab3d62a6e242681ccca3828462e5c87816004b9f8d655b22d5f0890610d6a90841515815260200190565b60405180910390a25050565b610d7e611560565b6001600160a01b03166000908152601060205260409020805460ff19169055565b610da7611560565b610db24360146126d5565b600f805464ff00000000196001600160d81b039390931665010000000000029290921663ffffffff90921691909117600160201b179055565b60018054610a8090612672565b6103e8610e116a084595161401484a00000060056126fc565b610e1b9190612713565b81565b610e1b620186a06a084595161401484a000000612713565b610e3e611560565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031603610e9057604051634c3299a360e11b815260040160405180910390fd5b6001600160a01b0382166000818152601060205260409081902080548415156101000261ff0019909116179055517fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90610d6a90841515815260200190565b6000610efc3384846115a5565b5060019392505050565b610f0e611560565b6103e8610f276a084595161401484a00000060056126fc565b610f319190612713565b811015610f515760405163065ced4360e41b815260040160405180910390fd5b600980549082905560408051838152602081018390527fd40d861b6c61fb22040b4eb8de22cc4c267673593fef5c5880e2f55e75ef454891015b60405180910390a15050565b610f9f611560565b6001600160a01b038216600081815260106020526040908190208054841515620100000262ff000019909116179055517f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df790610d6a90841515815260200190565b611008611560565b611020620186a06a084595161401484a000000612713565b8110156110405760405163041c974960e11b815260040160405180910390fd5b6103e86110596a084595161401484a00000060056126fc565b6110639190612713565b811115611083576040516317589a5d60e31b815260040160405180910390fd5b600a80549082905560408051838152602081018390527febb96427ceba6a46f9f71146db5c30bc7e2fe31285e9bf34b38bbdede7cd5ea19101610f8b565b428410156111165760405162461bcd60e51b815260206004820152601760248201527f5045524d49545f444541444c494e455f4558504952454400000000000000000060448201526064015b60405180910390fd5b60006001611122610c68565b6001600160a01b038a811660008181526005602090815260409182902080546001810190915582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98184015280840194909452938d166060840152608083018c905260a083019390935260c08083018b90528151808403909101815260e08301909152805192019190912061190160f01b6101008301526101028201929092526101228101919091526101420160408051601f198184030181528282528051602091820120600084529083018083525260ff871690820152606081018590526080810184905260a0016020604051602081039080840390855afa15801561122e573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906112645750876001600160a01b0316816001600160a01b0316145b6112a15760405162461bcd60e51b815260206004820152600e60248201526d24a72b20a624a22fa9a4a3a722a960911b604482015260640161110d565b6001600160a01b0390811660009081526004602090815260408083208a8516808552908352928190208990555188815291928a16917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a350505050505050565b6001600160a01b038116600090815260116020526040812054808203611334575050600754919050565b600061134082426126c2565b90506000617080611353836103e86126fc565b61135d9190612713565b90506103e8811061137357506005949350505050565b60006103e88260075461138691906126fc565b6113909190612713565b60075461139d91906126c2565b9695505050505050565b6006546001600160a01b031633146113f05760405162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b604482015260640161110d565b600680546001600160a01b0319166001600160a01b03831690811790915560405133907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a350565b611444611560565b600880546001600160a01b0319166001600160a01b0392909216919091179055565b61146e611560565b600f5462010000900460ff16156114985760405163756a524b60e01b815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b0316036114ea5760405163116c4f0d60e11b815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b03160361153c5760405163566c1a0f60e11b815260040160405180910390fd5b6001600160a01b03166000908152601060205260409020805460ff19166001179055565b6006546001600160a01b031633146115a35760405162461bcd60e51b815260206004820152600660248201526510b7bbb732b960d11b604482015260640161110d565b565b6001600160a01b038381166000908152601060208181526040808420815160808082018452915460ff808216151583526101008083048216151584880152620100008084048316151585880152630100000093849004831615156060808701919091529a8d168a529787528589208651808701885290548084161515825282810484161515828a0152898104841615158289015284900483161515818c0152865160c081018852600f5480851615158252928304841615159881019890985297810482161515958701959095529084048116151597850197909752600160201b83049096161515908301819052650100000000009091046001600160d81b031660a08301529293926116dc5782604001516116dc5781604001516116dc576040516308929fe960e11b815260040160405180910390fd5b8251156116fc576040516326cb498b60e21b815260040160405180910390fd5b81511561171c576040516384e10b6760e01b815260040160405180910390fd5b846000036117305760019350505050610c61565b6000836040015180611743575082604001515b60208501519091506003901561175b57506001611769565b836020015115611769575060025b600e5460ff166119c75782511561192a578060ff16600114801561178f57508360600151155b15611850576009548711156117b7576040516340bc519d60e11b815260040160405180910390fd5b600b546040516370a0823160e01b81526001600160a01b038a16600482015230906370a0823190602401602060405180830381865afa1580156117fe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118229190612735565b61182c908961274e565b111561184b576040516301068b8160e61b815260040160405180910390fd5b61192a565b8060ff16600214801561186557508460600151155b1561188d5760095487111561184b57604051634f693e5d60e11b815260040160405180910390fd5b836060015161192a57600b546040516370a0823160e01b81526001600160a01b038a16600482015230906370a0823190602401602060405180830381865afa1580156118dd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119019190612735565b61190b908961274e565b111561192a576040516301068b8160e61b815260040160405180910390fd5b8260200151156119c7578060ff166002036119c757600a546040516370a0823160e01b81523060048201819052906370a0823190602401602060405180830381865afa15801561197e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119a29190612735565b106119c757600e805460ff191660011790556119bc611cf7565b600e805460ff191690555b60038160ff161015611be157600e5460ff161582156119e4575060005b60008115611bda576040805160a08082018352600d5460ff80821684526101008204811660208501526201000082048116948401949094526301000000810484166060840152600160201b90049092166080820152908601516001600160d81b0316431015611b26576000438760a001516001600160d81b0316611a6891906126c2565b9050605f6013821015611a9857611a808260136126c2565b611a8b9060056126fc565b611a9590826126c2565b90505b8560ff16600103611abf576001600160a01b038d1660009081526011602052604090204290555b60006064611acd838f6126fc565b611ad79190612713565b9050611af98f600660009054906101000a90046001600160a01b031687612064565b50611b04818e6126c2565b9c5080600c6000828254611b18919061274e565b90915550611bb99350505050565b8360ff16600203611b6a57602081015160ff1615611b65576000611b498d61130a565b90506064611b57828d6126fc565b611b619190612713565b9250505b611bb9565b8360ff16600103611bb957805160ff1615611bb9578051606490611b919060ff168c6126fc565b611b9b9190612713565b6001600160a01b038c16600090815260116020526040902042905591505b611bc3828b6126c2565b99508115611bd857611bd68c3084612064565b505b505b5050611c42565b8460400151611c425760006064611bf78b61130a565b611c01908a6126fc565b611c0b9190612713565b9050611c1781896126c2565b9750611c248a3083612064565b50506001600160a01b03881660009081526011602052604090204290555b611c4d898989612064565b5060019998505050505050505050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6000604051611c8f9190612761565b6040805191829003822060208301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b6040516370a0823160e01b815230600482018190526000916370a0823190602401602060405180830381865afa158015611d35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d599190612735565b6040805160a081018252600d5460ff80821683526101008204811660208401526201000082048116938301939093526301000000810483166060830152600160201b900490911660808201529091506000829003611db5575050565b6000600a546014611dc691906126fc565b905080831115611dd4578092505b60006064836040015160ff1685611deb91906126fc565b611df59190612713565b90506000611e04600283612713565b611e0e90836126c2565b905047611e1a826120fb565b6000611e2682476126c2565b9050600083118015611e385750600081115b15611e8157611e478382612280565b60408051848152602081018390527f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f8381486910160405180910390a15b6000611e8d85896126c2565b9050611e98816120fb565b476000611ea68460026126fc565b611eb0908361274e565b9050600060648a6060015160ff1683611ec991906126fc565b611ed39190612713565b905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168260405160006040518083038185875af1925050503d8060008114611f42576040519150601f19603f3d011682016040523d82523d6000602084013e611f47565b606091505b5050905080611f5557600080fd5b6000611f6183866126c2565b9050601260009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015611fb357600080fd5b505af1158015611fc7573d6000803e3d6000fd5b50506008546012546040516370a0823160e01b815230600482015261205595506001600160a01b039283169450911691506370a0823190602401602060405180830381865afa15801561201e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120429190612735565b6012546001600160a01b03169190612356565b50505050505050505050505050565b6001600160a01b03831660009081526003602052604081208054839190839061208e9084906126c2565b90915550506001600160a01b03808416600081815260036020526040908190208054860190555190918616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906120e99086815260200190565b60405180910390a35060019392505050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061213057612130612800565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156121ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121d29190612816565b816001815181106121e5576121e5612800565b6001600160a01b03928316602091820292909201015260405163791ac94760e01b81527f00000000000000000000000000000000000000000000000000000000000000009091169063791ac9479061224a908590600090869030904290600401612833565b600060405180830381600087803b15801561226457600080fd5b505af1158015612278573d6000803e3d6000fd5b505050505050565b60405163f305d71960e01b81523060048201526024810183905260006044820181905260648201526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660848301524260a48301527f0000000000000000000000000000000000000000000000000000000000000000169063f305d71990839060c40160606040518083038185885af115801561232a573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061234f91906128a4565b5050505050565b600060405163a9059cbb60e01b81526001600160a01b0384166004820152826024820152602060006044836000895af13d15601f3d11600160005114161716915050806123d75760405162461bcd60e51b815260206004820152600f60248201526e1514905394d1915497d19052531151608a1b604482015260640161110d565b50505050565b600060208083528351808285015260005b8181101561240a578581018301518582016040015282016123ee565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461244057600080fd5b50565b6000806040838503121561245657600080fd5b82356124618161242b565b946020939093013593505050565b803560ff8116811461248057600080fd5b919050565b600060a0828403121561249757600080fd5b60405160a0810181811067ffffffffffffffff821117156124c857634e487b7160e01b600052604160045260246000fd5b6040526124d48361246f565b81526124e26020840161246f565b60208201526124f36040840161246f565b60408201526125046060840161246f565b60608201526125156080840161246f565b60808201529392505050565b60008060006060848603121561253657600080fd5b83356125418161242b565b925060208401356125518161242b565b929592945050506040919091013590565b60006020828403121561257457600080fd5b5035919050565b60006020828403121561258d57600080fd5b8135610c618161242b565b600080604083850312156125ab57600080fd5b82356125b68161242b565b9150602083013580151581146125cb57600080fd5b809150509250929050565b600080600080600080600060e0888a0312156125f157600080fd5b87356125fc8161242b565b9650602088013561260c8161242b565b955060408801359450606088013593506126286080890161246f565b925060a0880135915060c0880135905092959891949750929550565b6000806040838503121561265757600080fd5b82356126628161242b565b915060208301356125cb8161242b565b600181811c9082168061268657607f821691505b6020821081036126a657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b81810381811115610b6857610b686126ac565b6001600160d81b038181168382160190808211156126f5576126f56126ac565b5092915050565b8082028115828204841417610b6857610b686126ac565b60008261273057634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561274757600080fd5b5051919050565b80820180821115610b6857610b686126ac565b600080835481600182811c91508083168061277d57607f831692505b6020808410820361279c57634e487b7160e01b86526022600452602486fd5b8180156127b057600181146127c5576127f2565b60ff19861689528415158502890196506127f2565b60008a81526020902060005b868110156127ea5781548b8201529085019083016127d1565b505084890196505b509498975050505050505050565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561282857600080fd5b8151610c618161242b565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156128835784516001600160a01b03168352938301939183019160010161285e565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156128b957600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220480cc29cd80df9efe7724de94d457435175d392e0e154cfefdf12d5988d62f5e64736f6c634300081400330000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d0000000000000000000000000ff1fe45f78c8e92192fcf2d9a1d5aa1d03675f30000000000000000000000000000000000000000000000000000000000000023

Deployed Bytecode

0x6080604052600436106102e85760003560e01c806395d89b4111610190578063d257b34f116100dc578063e9481eee11610095578063f77ccc681161006f578063f77ccc68146109ee578063f8b45b0514610a04578063f9f92be414610a1a578063fe575a8714610a3a57600080fd5b8063e9481eee1461096e578063f2fde38b146109ae578063f4e0d9ac146109ce57600080fd5b8063d257b34f146108a0578063d505accf146108c0578063d7b4be24146108e0578063dd62ed3e14610900578063defdd5f614610938578063e2f456051461095857600080fd5b8063ba1618d511610149578063c04a541411610123578063c04a541414610818578063c53d4d531461084c578063c8c8ebe41461086b578063cc10a1791461088157600080fd5b8063ba1618d5146107c2578063be1ded87146107da578063c0246668146107f857600080fd5b806395d89b41146107235780639759f76e1461073857806399f34c121461074d5780639a7a23d614610762578063a9059cbb14610782578063aa498023146107a257600080fd5b80633f17b1611161024f5780637571336a116102085780637c4b55c7116101e25780637c4b55c71461068b5780637ecebe00146106c15780638a8c523c146106ee5780638da5cb5b1461070357600080fd5b80637571336a1461060d57806375e3661e1461062d5780637949a4031461064d57600080fd5b80633f17b161146104ce57806349bd5a5e146105435780634fbee193146105775780635f189361146105b657806370a08231146105cb578063751039fc146105f857600080fd5b806323b872dd116102a157806323b872dd146103f7578063313ce5671461041757806332cb6b0c1461045d578063351a964d1461047c5780633644e515146104995780633e47c7cd146104ae57600080fd5b806306fdde03146102f4578063095ea7b31461031f5780631694505e1461034f57806317ee89511461039b57806318160ddd146103bd5780631b624ecb146103e157600080fd5b366102ef57005b600080fd5b34801561030057600080fd5b50610309610a73565b60405161031691906123dd565b60405180910390f35b34801561032b57600080fd5b5061033f61033a366004612443565b610b01565b6040519015158152602001610316565b34801561035b57600080fd5b506103837f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b039091168152602001610316565b3480156103a757600080fd5b506103bb6103b6366004612485565b610b6e565b005b3480156103c957600080fd5b506103d360025481565b604051908152602001610316565b3480156103ed57600080fd5b506103d3600c5481565b34801561040357600080fd5b5061033f610412366004612521565b610bf3565b34801561042357600080fd5b5061044b7f000000000000000000000000000000000000000000000000000000000000001281565b60405160ff9091168152602001610316565b34801561046957600080fd5b506103d36a084595161401484a00000081565b34801561048857600080fd5b50600f54610100900460ff1661033f565b3480156104a557600080fd5b506103d3610c68565b3480156104ba57600080fd5b506103bb6104c9366004612562565b610cc3565b3480156104da57600080fd5b50600d5461050f9060ff80821691610100810482169162010000820481169163010000008104821691600160201b9091041685565b6040805160ff968716815294861660208601529285169284019290925283166060830152909116608082015260a001610316565b34801561054f57600080fd5b506103837f00000000000000000000000059d681826c07e1911380513f4e57bb70f6ec8af181565b34801561058357600080fd5b5061033f61059236600461257b565b6001600160a01b031660009081526010602052604090205462010000900460ff1690565b3480156105c257600080fd5b506103bb610cd0565b3480156105d757600080fd5b506103d36105e636600461257b565b60036020526000908152604090205481565b34801561060457600080fd5b506103bb610ceb565b34801561061957600080fd5b506103bb610628366004612598565b610cff565b34801561063957600080fd5b506103bb61064836600461257b565b610d76565b34801561065957600080fd5b5061033f61066836600461257b565b6001600160a01b0316600090815260106020526040902054610100900460ff1690565b34801561069757600080fd5b506103d36106a636600461257b565b6001600160a01b031660009081526011602052604090205490565b3480156106cd57600080fd5b506103d36106dc36600461257b565b60056020526000908152604090205481565b3480156106fa57600080fd5b506103bb610d9f565b34801561070f57600080fd5b50600654610383906001600160a01b031681565b34801561072f57600080fd5b50610309610deb565b34801561074457600080fd5b506103d3610df8565b34801561075957600080fd5b506103d3610e1e565b34801561076e57600080fd5b506103bb61077d366004612598565b610e36565b34801561078e57600080fd5b5061033f61079d366004612443565b610eef565b3480156107ae57600080fd5b506103bb6107bd366004612562565b610f06565b3480156107ce57600080fd5b50600f5460ff1661033f565b3480156107e657600080fd5b50600f5462010000900460ff1661033f565b34801561080457600080fd5b506103bb610813366004612598565b610f97565b34801561082457600080fd5b506103837f0000000000000000000000000ff1fe45f78c8e92192fcf2d9a1d5aa1d03675f381565b34801561085857600080fd5b50600f54600160201b900460ff1661033f565b34801561087757600080fd5b506103d360095481565b34801561088d57600080fd5b50600f546301000000900460ff1661033f565b3480156108ac57600080fd5b506103bb6108bb366004612562565b611000565b3480156108cc57600080fd5b506103bb6108db3660046125d6565b6110c1565b3480156108ec57600080fd5b50600854610383906001600160a01b031681565b34801561090c57600080fd5b506103d361091b366004612644565b600460209081526000928352604080842090915290825290205481565b34801561094457600080fd5b506103d361095336600461257b565b61130a565b34801561096457600080fd5b506103d3600a5481565b34801561097a57600080fd5b5061033f61098936600461257b565b6001600160a01b03166000908152601060205260409020546301000000900460ff1690565b3480156109ba57600080fd5b506103bb6109c936600461257b565b6113a7565b3480156109da57600080fd5b506103bb6109e936600461257b565b61143c565b3480156109fa57600080fd5b506103d360075481565b348015610a1057600080fd5b506103d3600b5481565b348015610a2657600080fd5b506103bb610a3536600461257b565b611466565b348015610a4657600080fd5b5061033f610a5536600461257b565b6001600160a01b031660009081526010602052604090205460ff1690565b60008054610a8090612672565b80601f0160208091040260200160405190810160405280929190818152602001828054610aac90612672565b8015610af95780601f10610ace57610100808354040283529160200191610af9565b820191906000526020600020905b815481529060010190602001808311610adc57829003601f168201915b505050505081565b3360008181526004602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610b5c9086815260200190565b60405180910390a35060015b92915050565b610b76611560565b8051600d805460208401516040850151606086015160809096015160ff908116600160201b0264ff000000001997821663010000000263ff0000001993831662010000029390931663ffff0000199483166101000261ffff1990961692909716919091179390931791909116939093179290921792909216179055565b6001600160a01b03831660009081526004602090815260408083203384529091528120546000198114610c4f57610c2a83826126c2565b6001600160a01b03861660009081526004602090815260408083203384529091529020555b610c5a8585856115a5565b5060019150505b9392505050565b60007f00000000000000000000000000000000000000000000000000000000000000014614610c9e57610c99611c5d565b905090565b507faa25f0d2a49ca135702de0f3aea6c6e81720b41d87f67676680eb69dfb470c1590565b610ccb611560565b600755565b610cd8611560565b600f805462ff0000191662010000179055565b610cf3611560565b600f805460ff19169055565b610d07611560565b6001600160a01b03821660008181526010602052604090819020805484151563010000000263ff00000019909116179055517fe0a7c1f8826ab3d62a6e242681ccca3828462e5c87816004b9f8d655b22d5f0890610d6a90841515815260200190565b60405180910390a25050565b610d7e611560565b6001600160a01b03166000908152601060205260409020805460ff19169055565b610da7611560565b610db24360146126d5565b600f805464ff00000000196001600160d81b039390931665010000000000029290921663ffffffff90921691909117600160201b179055565b60018054610a8090612672565b6103e8610e116a084595161401484a00000060056126fc565b610e1b9190612713565b81565b610e1b620186a06a084595161401484a000000612713565b610e3e611560565b7f00000000000000000000000059d681826c07e1911380513f4e57bb70f6ec8af16001600160a01b0316826001600160a01b031603610e9057604051634c3299a360e11b815260040160405180910390fd5b6001600160a01b0382166000818152601060205260409081902080548415156101000261ff0019909116179055517fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90610d6a90841515815260200190565b6000610efc3384846115a5565b5060019392505050565b610f0e611560565b6103e8610f276a084595161401484a00000060056126fc565b610f319190612713565b811015610f515760405163065ced4360e41b815260040160405180910390fd5b600980549082905560408051838152602081018390527fd40d861b6c61fb22040b4eb8de22cc4c267673593fef5c5880e2f55e75ef454891015b60405180910390a15050565b610f9f611560565b6001600160a01b038216600081815260106020526040908190208054841515620100000262ff000019909116179055517f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df790610d6a90841515815260200190565b611008611560565b611020620186a06a084595161401484a000000612713565b8110156110405760405163041c974960e11b815260040160405180910390fd5b6103e86110596a084595161401484a00000060056126fc565b6110639190612713565b811115611083576040516317589a5d60e31b815260040160405180910390fd5b600a80549082905560408051838152602081018390527febb96427ceba6a46f9f71146db5c30bc7e2fe31285e9bf34b38bbdede7cd5ea19101610f8b565b428410156111165760405162461bcd60e51b815260206004820152601760248201527f5045524d49545f444541444c494e455f4558504952454400000000000000000060448201526064015b60405180910390fd5b60006001611122610c68565b6001600160a01b038a811660008181526005602090815260409182902080546001810190915582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98184015280840194909452938d166060840152608083018c905260a083019390935260c08083018b90528151808403909101815260e08301909152805192019190912061190160f01b6101008301526101028201929092526101228101919091526101420160408051601f198184030181528282528051602091820120600084529083018083525260ff871690820152606081018590526080810184905260a0016020604051602081039080840390855afa15801561122e573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906112645750876001600160a01b0316816001600160a01b0316145b6112a15760405162461bcd60e51b815260206004820152600e60248201526d24a72b20a624a22fa9a4a3a722a960911b604482015260640161110d565b6001600160a01b0390811660009081526004602090815260408083208a8516808552908352928190208990555188815291928a16917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a350505050505050565b6001600160a01b038116600090815260116020526040812054808203611334575050600754919050565b600061134082426126c2565b90506000617080611353836103e86126fc565b61135d9190612713565b90506103e8811061137357506005949350505050565b60006103e88260075461138691906126fc565b6113909190612713565b60075461139d91906126c2565b9695505050505050565b6006546001600160a01b031633146113f05760405162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b604482015260640161110d565b600680546001600160a01b0319166001600160a01b03831690811790915560405133907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a350565b611444611560565b600880546001600160a01b0319166001600160a01b0392909216919091179055565b61146e611560565b600f5462010000900460ff16156114985760405163756a524b60e01b815260040160405180910390fd5b7f00000000000000000000000059d681826c07e1911380513f4e57bb70f6ec8af16001600160a01b0316816001600160a01b0316036114ea5760405163116c4f0d60e11b815260040160405180910390fd5b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0316816001600160a01b03160361153c5760405163566c1a0f60e11b815260040160405180910390fd5b6001600160a01b03166000908152601060205260409020805460ff19166001179055565b6006546001600160a01b031633146115a35760405162461bcd60e51b815260206004820152600660248201526510b7bbb732b960d11b604482015260640161110d565b565b6001600160a01b038381166000908152601060208181526040808420815160808082018452915460ff808216151583526101008083048216151584880152620100008084048316151585880152630100000093849004831615156060808701919091529a8d168a529787528589208651808701885290548084161515825282810484161515828a0152898104841615158289015284900483161515818c0152865160c081018852600f5480851615158252928304841615159881019890985297810482161515958701959095529084048116151597850197909752600160201b83049096161515908301819052650100000000009091046001600160d81b031660a08301529293926116dc5782604001516116dc5781604001516116dc576040516308929fe960e11b815260040160405180910390fd5b8251156116fc576040516326cb498b60e21b815260040160405180910390fd5b81511561171c576040516384e10b6760e01b815260040160405180910390fd5b846000036117305760019350505050610c61565b6000836040015180611743575082604001515b60208501519091506003901561175b57506001611769565b836020015115611769575060025b600e5460ff166119c75782511561192a578060ff16600114801561178f57508360600151155b15611850576009548711156117b7576040516340bc519d60e11b815260040160405180910390fd5b600b546040516370a0823160e01b81526001600160a01b038a16600482015230906370a0823190602401602060405180830381865afa1580156117fe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118229190612735565b61182c908961274e565b111561184b576040516301068b8160e61b815260040160405180910390fd5b61192a565b8060ff16600214801561186557508460600151155b1561188d5760095487111561184b57604051634f693e5d60e11b815260040160405180910390fd5b836060015161192a57600b546040516370a0823160e01b81526001600160a01b038a16600482015230906370a0823190602401602060405180830381865afa1580156118dd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119019190612735565b61190b908961274e565b111561192a576040516301068b8160e61b815260040160405180910390fd5b8260200151156119c7578060ff166002036119c757600a546040516370a0823160e01b81523060048201819052906370a0823190602401602060405180830381865afa15801561197e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119a29190612735565b106119c757600e805460ff191660011790556119bc611cf7565b600e805460ff191690555b60038160ff161015611be157600e5460ff161582156119e4575060005b60008115611bda576040805160a08082018352600d5460ff80821684526101008204811660208501526201000082048116948401949094526301000000810484166060840152600160201b90049092166080820152908601516001600160d81b0316431015611b26576000438760a001516001600160d81b0316611a6891906126c2565b9050605f6013821015611a9857611a808260136126c2565b611a8b9060056126fc565b611a9590826126c2565b90505b8560ff16600103611abf576001600160a01b038d1660009081526011602052604090204290555b60006064611acd838f6126fc565b611ad79190612713565b9050611af98f600660009054906101000a90046001600160a01b031687612064565b50611b04818e6126c2565b9c5080600c6000828254611b18919061274e565b90915550611bb99350505050565b8360ff16600203611b6a57602081015160ff1615611b65576000611b498d61130a565b90506064611b57828d6126fc565b611b619190612713565b9250505b611bb9565b8360ff16600103611bb957805160ff1615611bb9578051606490611b919060ff168c6126fc565b611b9b9190612713565b6001600160a01b038c16600090815260116020526040902042905591505b611bc3828b6126c2565b99508115611bd857611bd68c3084612064565b505b505b5050611c42565b8460400151611c425760006064611bf78b61130a565b611c01908a6126fc565b611c0b9190612713565b9050611c1781896126c2565b9750611c248a3083612064565b50506001600160a01b03881660009081526011602052604090204290555b611c4d898989612064565b5060019998505050505050505050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6000604051611c8f9190612761565b6040805191829003822060208301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b6040516370a0823160e01b815230600482018190526000916370a0823190602401602060405180830381865afa158015611d35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d599190612735565b6040805160a081018252600d5460ff80821683526101008204811660208401526201000082048116938301939093526301000000810483166060830152600160201b900490911660808201529091506000829003611db5575050565b6000600a546014611dc691906126fc565b905080831115611dd4578092505b60006064836040015160ff1685611deb91906126fc565b611df59190612713565b90506000611e04600283612713565b611e0e90836126c2565b905047611e1a826120fb565b6000611e2682476126c2565b9050600083118015611e385750600081115b15611e8157611e478382612280565b60408051848152602081018390527f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f8381486910160405180910390a15b6000611e8d85896126c2565b9050611e98816120fb565b476000611ea68460026126fc565b611eb0908361274e565b9050600060648a6060015160ff1683611ec991906126fc565b611ed39190612713565b905060007f0000000000000000000000000ff1fe45f78c8e92192fcf2d9a1d5aa1d03675f36001600160a01b03168260405160006040518083038185875af1925050503d8060008114611f42576040519150601f19603f3d011682016040523d82523d6000602084013e611f47565b606091505b5050905080611f5557600080fd5b6000611f6183866126c2565b9050601260009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015611fb357600080fd5b505af1158015611fc7573d6000803e3d6000fd5b50506008546012546040516370a0823160e01b815230600482015261205595506001600160a01b039283169450911691506370a0823190602401602060405180830381865afa15801561201e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120429190612735565b6012546001600160a01b03169190612356565b50505050505050505050505050565b6001600160a01b03831660009081526003602052604081208054839190839061208e9084906126c2565b90915550506001600160a01b03808416600081815260036020526040908190208054860190555190918616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906120e99086815260200190565b60405180910390a35060019392505050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061213057612130612800565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156121ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121d29190612816565b816001815181106121e5576121e5612800565b6001600160a01b03928316602091820292909201015260405163791ac94760e01b81527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d9091169063791ac9479061224a908590600090869030904290600401612833565b600060405180830381600087803b15801561226457600080fd5b505af1158015612278573d6000803e3d6000fd5b505050505050565b60405163f305d71960e01b81523060048201526024810183905260006044820181905260648201526001600160a01b037f0000000000000000000000000ff1fe45f78c8e92192fcf2d9a1d5aa1d03675f3811660848301524260a48301527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063f305d71990839060c40160606040518083038185885af115801561232a573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061234f91906128a4565b5050505050565b600060405163a9059cbb60e01b81526001600160a01b0384166004820152826024820152602060006044836000895af13d15601f3d11600160005114161716915050806123d75760405162461bcd60e51b815260206004820152600f60248201526e1514905394d1915497d19052531151608a1b604482015260640161110d565b50505050565b600060208083528351808285015260005b8181101561240a578581018301518582016040015282016123ee565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461244057600080fd5b50565b6000806040838503121561245657600080fd5b82356124618161242b565b946020939093013593505050565b803560ff8116811461248057600080fd5b919050565b600060a0828403121561249757600080fd5b60405160a0810181811067ffffffffffffffff821117156124c857634e487b7160e01b600052604160045260246000fd5b6040526124d48361246f565b81526124e26020840161246f565b60208201526124f36040840161246f565b60408201526125046060840161246f565b60608201526125156080840161246f565b60808201529392505050565b60008060006060848603121561253657600080fd5b83356125418161242b565b925060208401356125518161242b565b929592945050506040919091013590565b60006020828403121561257457600080fd5b5035919050565b60006020828403121561258d57600080fd5b8135610c618161242b565b600080604083850312156125ab57600080fd5b82356125b68161242b565b9150602083013580151581146125cb57600080fd5b809150509250929050565b600080600080600080600060e0888a0312156125f157600080fd5b87356125fc8161242b565b9650602088013561260c8161242b565b955060408801359450606088013593506126286080890161246f565b925060a0880135915060c0880135905092959891949750929550565b6000806040838503121561265757600080fd5b82356126628161242b565b915060208301356125cb8161242b565b600181811c9082168061268657607f821691505b6020821081036126a657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b81810381811115610b6857610b686126ac565b6001600160d81b038181168382160190808211156126f5576126f56126ac565b5092915050565b8082028115828204841417610b6857610b686126ac565b60008261273057634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561274757600080fd5b5051919050565b80820180821115610b6857610b686126ac565b600080835481600182811c91508083168061277d57607f831692505b6020808410820361279c57634e487b7160e01b86526022600452602486fd5b8180156127b057600181146127c5576127f2565b60ff19861689528415158502890196506127f2565b60008a81526020902060005b868110156127ea5781548b8201529085019083016127d1565b505084890196505b509498975050505050505050565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561282857600080fd5b8151610c618161242b565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156128835784516001600160a01b03168352938301939183019160010161285e565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156128b957600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220480cc29cd80df9efe7724de94d457435175d392e0e154cfefdf12d5988d62f5e64736f6c63430008140033

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

0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d0000000000000000000000000ff1fe45f78c8e92192fcf2d9a1d5aa1d03675f30000000000000000000000000000000000000000000000000000000000000023

-----Decoded View---------------
Arg [0] : routerAddress (address): 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
Arg [1] : devWallet (address): 0x0Ff1FE45f78C8E92192FCF2D9A1d5aA1D03675f3
Arg [2] : _exitTaxRate (uint256): 35

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d
Arg [1] : 0000000000000000000000000ff1fe45f78c8e92192fcf2d9a1d5aa1d03675f3
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000023


Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.