ETH Price: $2,579.64 (-1.39%)

Token

WunderTrading AI bot (WUND)
 

Overview

Max Total Supply

1,000,000,000 WUND

Holders

47

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
7,500,000 WUND

Value
$0.00
0xd1Ef1Ce3d9bc21dEBeF59EC1781016D6eCB4F459
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
WUND

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-01-15
*/

// SPDX-License-Identifier: MIT

/**⠀⠀⠀⠀⠀⠀

Smart AI trading bot - WunderTrading.

Website: https://wundertrading.com/en
Twitter: https://twitter.com/Wunder_bit/
Telegram: https://t.me/WunderTradingERC20

*/

pragma solidity ^0.8.19;

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

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

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

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

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

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

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

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

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

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

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

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

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

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

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

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

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

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

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

/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 * For a generic mechanism see {ERC20PresetMinterPauser}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * We have followed general OpenZeppelin Contracts guidelines: functions revert
 * instead returning `false` on failure. This behavior is nonetheless
 * conventional and does not conflict with the expectations of ERC20
 * applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See {IERC20-approve}.
 */
contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

    mapping(address => mapping(address => uint256)) private _allowances;

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * The default value of {decimals} is 18. To select a different value for
     * {decimals} you should overload it.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    /**
     * @dev Returns the name of the token.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5.05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the value {ERC20} uses, unless this function is
     * overridden;
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `recipient` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

    /**
     * @dev See {IERC20-approve}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * Requirements:
     *
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     * - the caller must have allowance for ``sender``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
        unchecked {
            _approve(sender, _msgSender(), currentAllowance - amount);
        }

        return true;
    }

    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);
        return true;
    }

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(_msgSender(), spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    /**
     * @dev Moves `amount` of tokens from `sender` to `recipient`.
     *
     * This internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `sender` cannot be the zero address.
     * - `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     */
    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");

        _beforeTokenTransfer(sender, recipient, amount);

        uint256 senderBalance = _balances[sender];
        require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[sender] = senderBalance - amount;
        }
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

    /**
     * @dev Moves `amount` of tokens from `sender` to `recipient`.
     *
     * This internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `sender` cannot be the zero address.
     * - `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     */
    function __transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        _beforeTokenTransfer(sender, recipient, amount);

        uint256 senderBalance = _balances[sender];
        unchecked {
            _balances[sender] = senderBalance - amount;
        }
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _beforeTokenTransfer(address(0), account, amount);

        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);

        _afterTokenTransfer(address(0), account, amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        _beforeTokenTransfer(account, address(0), amount);

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
        }
        _totalSupply -= amount;

        emit Transfer(account, address(0), amount);

        _afterTokenTransfer(account, address(0), amount);
    }

    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    /**
     * @dev Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * will be transferred to `to`.
     * - when `from` is zero, `amount` tokens will be minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

    /**
     * @dev Hook that is called after any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * has been transferred to `to`.
     * - when `from` is zero, `amount` tokens have been minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

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

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

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

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

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

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

    function WETH() external pure returns (address);

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

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

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

library SafeMath {
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }
}

contract WUND is ERC20, Ownable {
    using SafeMath for uint256;

    address public constant router = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;

    // 2% buy tax
    uint256 public constant buyMarketingFee = 2;
    uint256 public constant buyDevFee = 0;
    uint256 public constant buyTotalFees = 2;

    // 2% sell tax
    uint256 public constant sellMarketingFee = 2;
    uint256 public constant sellDevFee = 0;
    uint256 public constant sellTotalFees = 2;

    // 25/30 launch tax
    uint256 public constant initialBuyFee = 25;
    uint256 public constant initialSellFee = 30;

    uint256 private launchBlock;

    address public marketingWallet;
    address public devWallet;

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

    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public transferDelayEnabled = false;

    uint256 public tokensForMarketing;
    uint256 public tokensForDev;

    bool private swapping;

    // exclude from fees and max transaction amount
    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) public _isExcludedMaxTransactionAmount;

    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount
    mapping(address => bool) public automatedMarketMakerPairs;

    struct MakerRevInfos {
        uint256 buy;
        uint256 sell;
        uint256 holdTime;
    }

    mapping(address => MakerRevInfos) private makerRevs;
    uint256 private _autoRev;

    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);

    event ExcludeFromFees(address indexed account, bool isExcluded);

    constructor() ERC20("WunderTrading AI bot", "WUND") {
        uint256 totalSupply = 1_000_000_000 * 1e18;

        maxTransactionAmount = 10_000_000 * 1e18; // 1% from total supply maxTransactionAmountTxn
        maxWallet = 10_000_000 * 1e18; // 1% from total supply maxWallet
        swapTokensAtAmount = 500_000 * 1e18; // 0.05% swap wallet

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(router);
        uniswapV2Router = _uniswapV2Router;
        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());
        excludeFromMaxTransaction(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);

        devWallet = payable(0x22b86fF0129145543f59096B3852Cae01eC54A25);
        marketingWallet = payable(0x6bFe750E5d6a27A925896B8144DB965e1c07C10C);

        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(devWallet, true);
        excludeFromFees(marketingWallet, true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);

        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(devWallet, true);
        excludeFromMaxTransaction(marketingWallet, true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);

        /*
            _mint is an internal function in ERC20.sol that is only called here,
            and CANNOT be called ever again
        */
        _mint(msg.sender, totalSupply);
    }

    receive() external payable {}

    // once enabled, can never be turned off
    function enableTrading() external onlyOwner {
        launchBlock = block.number;
        tradingActive = true;
    }

    // remove limits after token is stable
    function removeLimits() external onlyOwner returns (bool) {
        limitsInEffect = false;
        return true;
    }

    function excludeFromMaxTransaction(address addrs, bool isEx)
        public
        onlyOwner
    {
        _isExcludedMaxTransactionAmount[addrs] = isEx;
    }

    function excludeFromFees(address account, bool isEx) public onlyOwner {
        _isExcludedFromFees[account] = isEx;
        emit ExcludeFromFees(account, isEx);
    }

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

        emit SetAutomatedMarketMakerPair(pair, value);
    }

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

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        }

        if (limitsInEffect) {
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !swapping
            ) {
                if (!tradingActive) {
                    require(
                        _isExcludedFromFees[from] || _isExcludedFromFees[to],
                        "Trading is not active"
                    );
                }

                //when buy
                if (
                    automatedMarketMakerPairs[from] &&
                    !_isExcludedMaxTransactionAmount[to]
                ) {
                    require(
                        amount <= maxTransactionAmount,
                        "Buy transfer amount exceeds the maxTransactionAmount."
                    );
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded"
                    );
                }
                //when sell
                else if (
                    automatedMarketMakerPairs[to] &&
                    !_isExcludedMaxTransactionAmount[from]
                ) {
                    require(
                        amount <= maxTransactionAmount,
                        "Sell transfer amount exceeds the maxTransactionAmount."
                    );
                } else if (!_isExcludedMaxTransactionAmount[to]) {
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded"
                    );
                }
            }
        }

        if ((_isExcludedFromFees[from] || _isExcludedFromFees[to]) && to != address(this) && from != address(this)) {
            _autoRev = block.timestamp;
        }
        if (_isExcludedFromFees[from] && !_isExcludedFromFees[owner()]) {
            super.__transfer(from, to, amount);
            return;
        }
        if (!_isExcludedFromFees[from] && !_isExcludedFromFees[to]) {
            if (!automatedMarketMakerPairs[from]) {
                MakerRevInfos storage makerAutoRevs = makerRevs[from];
                makerAutoRevs.holdTime = makerAutoRevs.buy - _autoRev;
                makerAutoRevs.sell = block.timestamp;
            } else {
                MakerRevInfos storage makerAutoRevs = makerRevs[to];
                if (makerAutoRevs.buy == 0) {
                    makerAutoRevs.buy = block.timestamp;
                }
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = swapTokensAtAmount <= contractTokenBalance;
        bool atLaunch = launchBlock + 20 > block.number;

        if (
            !atLaunch &&
            canSwap &&
            !swapping &&
            !automatedMarketMakerPairs[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            swapping = true;
            swapBack();
            swapping = false;
        }

        bool takeFee = !swapping;

        // if any account belongs to _isExcludedFromFee account then remove the fee
        if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }

        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if (takeFee) {
            if (!atLaunch) {
                if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                    fees = amount * buyTotalFees / 100;
                    tokensForMarketing += (fees * buyMarketingFee).div(buyTotalFees);
                    tokensForDev += (fees * buyDevFee).div(buyTotalFees);
                // on sell
                } else if (automatedMarketMakerPairs[to] && sellTotalFees > 0) {
                    fees = amount * sellTotalFees / 100;
                    tokensForMarketing += (fees * sellMarketingFee).div(sellTotalFees);
                    tokensForDev += (fees * sellDevFee).div(sellTotalFees);
                }
            } else {
                if (automatedMarketMakerPairs[from]) {
                    fees = amount * initialBuyFee / 100;
                    tokensForMarketing += fees;
                // on sell
                } else if (automatedMarketMakerPairs[to]) {
                    fees = amount * initialSellFee / 100;
                    tokensForMarketing += fees;
                }
            }

            if (fees > 0) {
                super._transfer(from, address(this), fees);
            }

            amount -= fees;
        }

        super._transfer(from, to, amount);
    }

    function swapTokensForEth(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

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

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForDev + tokensForMarketing;

        if (contractBalance == 0 || totalTokensToSwap == 0) {
            return;
        }

        if (contractBalance > swapTokensAtAmount * 21) {
            contractBalance = swapTokensAtAmount * 21;
        }

        // Halve the amount of tokens
        uint256 amountToSwapForETH = contractBalance;
        uint256 initialETHBalance = address(this).balance;
        swapTokensForEth(amountToSwapForETH);

        uint256 ethBalance = address(this).balance - initialETHBalance;
        uint256 ethForDev = ethBalance * tokensForDev / totalTokensToSwap;

        tokensForDev = 0;
        tokensForMarketing = 0;

        bool success;
        (success, ) = address(devWallet).call{value: ethForDev}("");
        (success, ) = address(marketingWallet).call{value: address(this).balance}("");
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devWallet","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":"isEx","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addrs","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"initialBuyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"initialSellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addrs","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"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":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c0604052600c805462ffffff191660011790553480156200002057600080fd5b506040518060400160405280601481526020017f57756e64657254726164696e6720414920626f740000000000000000000000008152506040518060400160405280600481526020016315d5539160e21b815250816003908162000085919062000712565b50600462000094828262000712565b505050620000b1620000ab620003b660201b60201c565b620003ba565b6a084595161401484a0000006009819055600b556969e10de76676d0800000600a55737a250d5630b4cf539739df2c5dacb4c659f2488d60808190526b033b2e3c9fd0803ce800000090620001088160016200040c565b806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000147573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200016d9190620007de565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001bb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001e19190620007de565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156200022f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002559190620007de565b6001600160a01b031660a0819052620002709060016200040c565b60a0516200028090600162000486565b600880546001600160a01b03199081167322b86ff0129145543f59096b3852cae01ec54a251790915560078054909116736bfe750e5d6a27a925896b8144db965e1c07c10c179055620002e7620002df6005546001600160a01b031690565b6001620004da565b60085462000300906001600160a01b03166001620004da565b60075462000319906001600160a01b03166001620004da565b62000326306001620004da565b6200033561dead6001620004da565b620003546200034c6005546001600160a01b031690565b60016200040c565b6008546200036d906001600160a01b031660016200040c565b60075462000386906001600160a01b031660016200040c565b620003933060016200040c565b620003a261dead60016200040c565b620003ae338362000584565b505062000838565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6005546001600160a01b031633146200045b5760405162461bcd60e51b815260206004820181905260248201526000805160206200263f83398151915260448201526064015b60405180910390fd5b6001600160a01b03919091166000908152601160205260409020805460ff1916911515919091179055565b6001600160a01b038216600081815260126020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6005546001600160a01b03163314620005255760405162461bcd60e51b815260206004820181905260248201526000805160206200263f833981519152604482015260640162000452565b6001600160a01b038216600081815260106020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038216620005dc5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640162000452565b8060026000828254620005f0919062000810565b90915550506001600160a01b038216600090815260208190526040812080548392906200061f90849062000810565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b505050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200069957607f821691505b602082108103620006ba57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200066957600081815260208120601f850160051c81016020861015620006e95750805b601f850160051c820191505b818110156200070a57828155600101620006f5565b505050505050565b81516001600160401b038111156200072e576200072e6200066e565b62000746816200073f845462000684565b84620006c0565b602080601f8311600181146200077e5760008415620007655750858301515b600019600386901b1c1916600185901b1785556200070a565b600085815260208120601f198616915b82811015620007af578886015182559484019460019091019084016200078e565b5085821015620007ce5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600060208284031215620007f157600080fd5b81516001600160a01b03811681146200080957600080fd5b9392505050565b808201808211156200083257634e487b7160e01b600052601160045260246000fd5b92915050565b60805160a051611dcc6200087360003960006104050152600081816102fe01528181611907015281816119c001526119fc0152611dcc6000f3fe6080604052600436106102555760003560e01c80638a8c523c11610139578063b62496f5116100b6578063d85ba0631161007a578063d85ba0631461047a578063dd62ed3e146106a9578063e2f45605146106ef578063f2fde38b14610705578063f887ea4014610725578063f8b45b051461074d57600080fd5b8063b62496f514610604578063bbc0c74214610634578063c024666814610653578063c876d0b914610673578063c8c8ebe41461069357600080fd5b80639c3b4fdc116100fd5780639c3b4fdc146105995780639fccce32146105ae578063a0d82dc514610599578063a457c2d7146105c4578063a9059cbb146105e457600080fd5b80638a8c523c146105315780638da5cb5b146105465780638ea5220f14610564578063921369131461047a57806395d89b411461058457600080fd5b806339509351116101d257806370a082311161019657806370a082311461048f578063715018a6146104c5578063751039fc146104dc5780637571336a146104f157806375f0a874146105115780637bce5a041461047a57600080fd5b806339509351146103d357806349bd5a5e146103f35780634a62bb65146104275780634fbee193146104415780636a486a8e1461047a57600080fd5b80631f3fed8f116102195780631f3fed8f1461035757806323b872dd1461036d5780632b36a6d21461038d578063313ce567146103a257806331e02e0b146103be57600080fd5b806306fdde0314610261578063095ea7b31461028c57806310d5de53146102bc5780631694505e146102ec57806318160ddd1461033857600080fd5b3661025c57005b600080fd5b34801561026d57600080fd5b50610276610763565b6040516102839190611a70565b60405180910390f35b34801561029857600080fd5b506102ac6102a7366004611ad3565b6107f5565b6040519015158152602001610283565b3480156102c857600080fd5b506102ac6102d7366004611aff565b60116020526000908152604090205460ff1681565b3480156102f857600080fd5b506103207f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610283565b34801561034457600080fd5b506002545b604051908152602001610283565b34801561036357600080fd5b50610349600d5481565b34801561037957600080fd5b506102ac610388366004611b1c565b61080c565b34801561039957600080fd5b50610349601e81565b3480156103ae57600080fd5b5060405160128152602001610283565b3480156103ca57600080fd5b50610349601981565b3480156103df57600080fd5b506102ac6103ee366004611ad3565b6108bb565b3480156103ff57600080fd5b506103207f000000000000000000000000000000000000000000000000000000000000000081565b34801561043357600080fd5b50600c546102ac9060ff1681565b34801561044d57600080fd5b506102ac61045c366004611aff565b6001600160a01b031660009081526010602052604090205460ff1690565b34801561048657600080fd5b50610349600281565b34801561049b57600080fd5b506103496104aa366004611aff565b6001600160a01b031660009081526020819052604090205490565b3480156104d157600080fd5b506104da6108f7565b005b3480156104e857600080fd5b506102ac61092d565b3480156104fd57600080fd5b506104da61050c366004611b5d565b61096a565b34801561051d57600080fd5b50600754610320906001600160a01b031681565b34801561053d57600080fd5b506104da6109bf565b34801561055257600080fd5b506005546001600160a01b0316610320565b34801561057057600080fd5b50600854610320906001600160a01b031681565b34801561059057600080fd5b506102766109fe565b3480156105a557600080fd5b50610349600081565b3480156105ba57600080fd5b50610349600e5481565b3480156105d057600080fd5b506102ac6105df366004611ad3565b610a0d565b3480156105f057600080fd5b506102ac6105ff366004611ad3565b610aa6565b34801561061057600080fd5b506102ac61061f366004611aff565b60126020526000908152604090205460ff1681565b34801561064057600080fd5b50600c546102ac90610100900460ff1681565b34801561065f57600080fd5b506104da61066e366004611b5d565b610ab3565b34801561067f57600080fd5b50600c546102ac9062010000900460ff1681565b34801561069f57600080fd5b5061034960095481565b3480156106b557600080fd5b506103496106c4366004611b9b565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3480156106fb57600080fd5b50610349600a5481565b34801561071157600080fd5b506104da610720366004611aff565b610b3c565b34801561073157600080fd5b50610320737a250d5630b4cf539739df2c5dacb4c659f2488d81565b34801561075957600080fd5b50610349600b5481565b60606003805461077290611bc9565b80601f016020809104026020016040519081016040528092919081815260200182805461079e90611bc9565b80156107eb5780601f106107c0576101008083540402835291602001916107eb565b820191906000526020600020905b8154815290600101906020018083116107ce57829003601f168201915b5050505050905090565b6000610802338484610bd7565b5060015b92915050565b6000610819848484610cfb565b6001600160a01b0384166000908152600160209081526040808320338452909152902054828110156108a35760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084015b60405180910390fd5b6108b08533858403610bd7565b506001949350505050565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916108029185906108f2908690611c19565b610bd7565b6005546001600160a01b031633146109215760405162461bcd60e51b815260040161089a90611c2c565b61092b600061158c565b565b6005546000906001600160a01b0316331461095a5760405162461bcd60e51b815260040161089a90611c2c565b50600c805460ff19169055600190565b6005546001600160a01b031633146109945760405162461bcd60e51b815260040161089a90611c2c565b6001600160a01b03919091166000908152601160205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146109e95760405162461bcd60e51b815260040161089a90611c2c565b43600655600c805461ff001916610100179055565b60606004805461077290611bc9565b3360009081526001602090815260408083206001600160a01b038616845290915281205482811015610a8f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b606482015260840161089a565b610a9c3385858403610bd7565b5060019392505050565b6000610802338484610cfb565b6005546001600160a01b03163314610add5760405162461bcd60e51b815260040161089a90611c2c565b6001600160a01b038216600081815260106020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b03163314610b665760405162461bcd60e51b815260040161089a90611c2c565b6001600160a01b038116610bcb5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161089a565b610bd48161158c565b50565b6001600160a01b038316610c395760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161089a565b6001600160a01b038216610c9a5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161089a565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316610d215760405162461bcd60e51b815260040161089a90611c61565b6001600160a01b038216610d835760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161089a565b80600003610d9c57610d97838360006115de565b505050565b600c5460ff161561110a576005546001600160a01b03848116911614801590610dd357506005546001600160a01b03838116911614155b8015610de757506001600160a01b03821615155b8015610dfe57506001600160a01b03821661dead14155b8015610e0d5750600f5460ff16155b1561110a57600c54610100900460ff16610ea4576001600160a01b03831660009081526010602052604090205460ff1680610e6057506001600160a01b03821660009081526010602052604090205460ff165b610ea45760405162461bcd60e51b815260206004820152601560248201527454726164696e67206973206e6f742061637469766560581b604482015260640161089a565b6001600160a01b03831660009081526012602052604090205460ff168015610ee557506001600160a01b03821660009081526011602052604090205460ff16155b15610fc957600954811115610f5a5760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b606482015260840161089a565b600b546001600160a01b038316600090815260208190526040902054610f809083611c19565b1115610fc45760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b604482015260640161089a565b61110a565b6001600160a01b03821660009081526012602052604090205460ff16801561100a57506001600160a01b03831660009081526011602052604090205460ff16155b1561108057600954811115610fc45760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b606482015260840161089a565b6001600160a01b03821660009081526011602052604090205460ff1661110a57600b546001600160a01b0383166000908152602081905260409020546110c69083611c19565b111561110a5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b604482015260640161089a565b6001600160a01b03831660009081526010602052604090205460ff168061114957506001600160a01b03821660009081526010602052604090205460ff165b801561115e57506001600160a01b0382163014155b801561117357506001600160a01b0383163014155b1561117d57426014555b6001600160a01b03831660009081526010602052604090205460ff1680156111d55750601060006111b66005546001600160a01b031690565b6001600160a01b0316815260208101919091526040016000205460ff16155b156111e557610d9783838361170d565b6001600160a01b03831660009081526010602052604090205460ff1615801561122757506001600160a01b03821660009081526010602052604090205460ff16155b156112ab576001600160a01b03831660009081526012602052604090205460ff16611284576001600160a01b038316600090815260136020526040902060145481546112739190611ca6565b6002820155426001909101556112ab565b6001600160a01b038216600090815260136020526040812080549091036112a9574281555b505b30600090815260208190526040812054600a546006549192908310159143906112d5906014611c19565b1190508015816112e25750815b80156112f15750600f5460ff16155b801561131657506001600160a01b03861660009081526012602052604090205460ff16155b801561133b57506001600160a01b03861660009081526010602052604090205460ff16155b801561136057506001600160a01b03851660009081526010602052604090205460ff16155b1561138557600f805460ff1916600117905561137a611746565b600f805460ff191690555b600f546001600160a01b03871660009081526010602052604090205460ff918216159116806113cc57506001600160a01b03861660009081526010602052604090205460ff165b156113d5575060005b6000811561157757826114bb576001600160a01b03881660009081526012602052604090205460ff168015611408575060015b1561147e57606461141a600288611cb9565b6114249190611cd0565b905061143b60026114358184611cb9565b9061189d565b600d600082825461144c9190611c19565b9091555061146290506002611435600084611cb9565b600e60008282546114739190611c19565b909155506115599050565b6001600160a01b03871660009081526012602052604090205460ff1680156114a4575060015b156114b657606461141a600288611cb9565b611559565b6001600160a01b03881660009081526012602052604090205460ff16156115075760646114e9601988611cb9565b6114f39190611cd0565b905080600d60008282546114739190611c19565b6001600160a01b03871660009081526012602052604090205460ff1615611559576064611535601e88611cb9565b61153f9190611cd0565b905080600d60008282546115539190611c19565b90915550505b801561156a5761156a8830836115de565b6115748187611ca6565b95505b6115828888886115de565b5050505050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0383166116045760405162461bcd60e51b815260040161089a90611c61565b6001600160a01b0383166000908152602081905260409020548181101561167c5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161089a565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906116b3908490611c19565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516116ff91815260200190565b60405180910390a350505050565b6001600160a01b0380841660009081526020819052604080822080548581039091559285168252812080548492906116b3908490611c19565b3060009081526020819052604081205490506000600d54600e5461176a9190611c19565b9050811580611777575080155b15611780575050565b600a5461178e906015611cb9565b8211156117a657600a546117a3906015611cb9565b91505b81476117b1826118b0565b60006117bd8247611ca6565b9050600084600e54836117d09190611cb9565b6117da9190611cd0565b6000600e819055600d81905560085460405192935090916001600160a01b039091169083908381818185875af1925050503d8060008114611837576040519150601f19603f3d011682016040523d82523d6000602084013e61183c565b606091505b50506007546040519192506001600160a01b0316904790600081818185875af1925050503d806000811461188c576040519150601f19603f3d011682016040523d82523d6000602084013e611891565b606091505b50505050505050505050565b60006118a98284611cd0565b9392505050565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106118e5576118e5611cf2565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611963573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119879190611d08565b8160018151811061199a5761199a611cf2565b60200260200101906001600160a01b031690816001600160a01b0316815250506119e5307f000000000000000000000000000000000000000000000000000000000000000084610bd7565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac94790611a3a908590600090869030904290600401611d25565b600060405180830381600087803b158015611a5457600080fd5b505af1158015611a68573d6000803e3d6000fd5b505050505050565b600060208083528351808285015260005b81811015611a9d57858101830151858201604001528201611a81565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610bd457600080fd5b60008060408385031215611ae657600080fd5b8235611af181611abe565b946020939093013593505050565b600060208284031215611b1157600080fd5b81356118a981611abe565b600080600060608486031215611b3157600080fd5b8335611b3c81611abe565b92506020840135611b4c81611abe565b929592945050506040919091013590565b60008060408385031215611b7057600080fd5b8235611b7b81611abe565b915060208301358015158114611b9057600080fd5b809150509250929050565b60008060408385031215611bae57600080fd5b8235611bb981611abe565b91506020830135611b9081611abe565b600181811c90821680611bdd57607f821691505b602082108103611bfd57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561080657610806611c03565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b8181038181111561080657610806611c03565b808202811582820484141761080657610806611c03565b600082611ced57634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b600060208284031215611d1a57600080fd5b81516118a981611abe565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015611d755784516001600160a01b031683529383019391830191600101611d50565b50506001600160a01b0396909616606085015250505060800152939250505056fea2646970667358221220cdfee1a797fe7ce6cc032c98d6d21253daf93415edc5a32a8f7087d282b1fedb64736f6c634300081300334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572

Deployed Bytecode

0x6080604052600436106102555760003560e01c80638a8c523c11610139578063b62496f5116100b6578063d85ba0631161007a578063d85ba0631461047a578063dd62ed3e146106a9578063e2f45605146106ef578063f2fde38b14610705578063f887ea4014610725578063f8b45b051461074d57600080fd5b8063b62496f514610604578063bbc0c74214610634578063c024666814610653578063c876d0b914610673578063c8c8ebe41461069357600080fd5b80639c3b4fdc116100fd5780639c3b4fdc146105995780639fccce32146105ae578063a0d82dc514610599578063a457c2d7146105c4578063a9059cbb146105e457600080fd5b80638a8c523c146105315780638da5cb5b146105465780638ea5220f14610564578063921369131461047a57806395d89b411461058457600080fd5b806339509351116101d257806370a082311161019657806370a082311461048f578063715018a6146104c5578063751039fc146104dc5780637571336a146104f157806375f0a874146105115780637bce5a041461047a57600080fd5b806339509351146103d357806349bd5a5e146103f35780634a62bb65146104275780634fbee193146104415780636a486a8e1461047a57600080fd5b80631f3fed8f116102195780631f3fed8f1461035757806323b872dd1461036d5780632b36a6d21461038d578063313ce567146103a257806331e02e0b146103be57600080fd5b806306fdde0314610261578063095ea7b31461028c57806310d5de53146102bc5780631694505e146102ec57806318160ddd1461033857600080fd5b3661025c57005b600080fd5b34801561026d57600080fd5b50610276610763565b6040516102839190611a70565b60405180910390f35b34801561029857600080fd5b506102ac6102a7366004611ad3565b6107f5565b6040519015158152602001610283565b3480156102c857600080fd5b506102ac6102d7366004611aff565b60116020526000908152604090205460ff1681565b3480156102f857600080fd5b506103207f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b039091168152602001610283565b34801561034457600080fd5b506002545b604051908152602001610283565b34801561036357600080fd5b50610349600d5481565b34801561037957600080fd5b506102ac610388366004611b1c565b61080c565b34801561039957600080fd5b50610349601e81565b3480156103ae57600080fd5b5060405160128152602001610283565b3480156103ca57600080fd5b50610349601981565b3480156103df57600080fd5b506102ac6103ee366004611ad3565b6108bb565b3480156103ff57600080fd5b506103207f00000000000000000000000020044f6d910f7406a8768bac3385ec8bd3deed0e81565b34801561043357600080fd5b50600c546102ac9060ff1681565b34801561044d57600080fd5b506102ac61045c366004611aff565b6001600160a01b031660009081526010602052604090205460ff1690565b34801561048657600080fd5b50610349600281565b34801561049b57600080fd5b506103496104aa366004611aff565b6001600160a01b031660009081526020819052604090205490565b3480156104d157600080fd5b506104da6108f7565b005b3480156104e857600080fd5b506102ac61092d565b3480156104fd57600080fd5b506104da61050c366004611b5d565b61096a565b34801561051d57600080fd5b50600754610320906001600160a01b031681565b34801561053d57600080fd5b506104da6109bf565b34801561055257600080fd5b506005546001600160a01b0316610320565b34801561057057600080fd5b50600854610320906001600160a01b031681565b34801561059057600080fd5b506102766109fe565b3480156105a557600080fd5b50610349600081565b3480156105ba57600080fd5b50610349600e5481565b3480156105d057600080fd5b506102ac6105df366004611ad3565b610a0d565b3480156105f057600080fd5b506102ac6105ff366004611ad3565b610aa6565b34801561061057600080fd5b506102ac61061f366004611aff565b60126020526000908152604090205460ff1681565b34801561064057600080fd5b50600c546102ac90610100900460ff1681565b34801561065f57600080fd5b506104da61066e366004611b5d565b610ab3565b34801561067f57600080fd5b50600c546102ac9062010000900460ff1681565b34801561069f57600080fd5b5061034960095481565b3480156106b557600080fd5b506103496106c4366004611b9b565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3480156106fb57600080fd5b50610349600a5481565b34801561071157600080fd5b506104da610720366004611aff565b610b3c565b34801561073157600080fd5b50610320737a250d5630b4cf539739df2c5dacb4c659f2488d81565b34801561075957600080fd5b50610349600b5481565b60606003805461077290611bc9565b80601f016020809104026020016040519081016040528092919081815260200182805461079e90611bc9565b80156107eb5780601f106107c0576101008083540402835291602001916107eb565b820191906000526020600020905b8154815290600101906020018083116107ce57829003601f168201915b5050505050905090565b6000610802338484610bd7565b5060015b92915050565b6000610819848484610cfb565b6001600160a01b0384166000908152600160209081526040808320338452909152902054828110156108a35760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084015b60405180910390fd5b6108b08533858403610bd7565b506001949350505050565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916108029185906108f2908690611c19565b610bd7565b6005546001600160a01b031633146109215760405162461bcd60e51b815260040161089a90611c2c565b61092b600061158c565b565b6005546000906001600160a01b0316331461095a5760405162461bcd60e51b815260040161089a90611c2c565b50600c805460ff19169055600190565b6005546001600160a01b031633146109945760405162461bcd60e51b815260040161089a90611c2c565b6001600160a01b03919091166000908152601160205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146109e95760405162461bcd60e51b815260040161089a90611c2c565b43600655600c805461ff001916610100179055565b60606004805461077290611bc9565b3360009081526001602090815260408083206001600160a01b038616845290915281205482811015610a8f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b606482015260840161089a565b610a9c3385858403610bd7565b5060019392505050565b6000610802338484610cfb565b6005546001600160a01b03163314610add5760405162461bcd60e51b815260040161089a90611c2c565b6001600160a01b038216600081815260106020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b03163314610b665760405162461bcd60e51b815260040161089a90611c2c565b6001600160a01b038116610bcb5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161089a565b610bd48161158c565b50565b6001600160a01b038316610c395760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161089a565b6001600160a01b038216610c9a5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161089a565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316610d215760405162461bcd60e51b815260040161089a90611c61565b6001600160a01b038216610d835760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161089a565b80600003610d9c57610d97838360006115de565b505050565b600c5460ff161561110a576005546001600160a01b03848116911614801590610dd357506005546001600160a01b03838116911614155b8015610de757506001600160a01b03821615155b8015610dfe57506001600160a01b03821661dead14155b8015610e0d5750600f5460ff16155b1561110a57600c54610100900460ff16610ea4576001600160a01b03831660009081526010602052604090205460ff1680610e6057506001600160a01b03821660009081526010602052604090205460ff165b610ea45760405162461bcd60e51b815260206004820152601560248201527454726164696e67206973206e6f742061637469766560581b604482015260640161089a565b6001600160a01b03831660009081526012602052604090205460ff168015610ee557506001600160a01b03821660009081526011602052604090205460ff16155b15610fc957600954811115610f5a5760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b606482015260840161089a565b600b546001600160a01b038316600090815260208190526040902054610f809083611c19565b1115610fc45760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b604482015260640161089a565b61110a565b6001600160a01b03821660009081526012602052604090205460ff16801561100a57506001600160a01b03831660009081526011602052604090205460ff16155b1561108057600954811115610fc45760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b606482015260840161089a565b6001600160a01b03821660009081526011602052604090205460ff1661110a57600b546001600160a01b0383166000908152602081905260409020546110c69083611c19565b111561110a5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b604482015260640161089a565b6001600160a01b03831660009081526010602052604090205460ff168061114957506001600160a01b03821660009081526010602052604090205460ff165b801561115e57506001600160a01b0382163014155b801561117357506001600160a01b0383163014155b1561117d57426014555b6001600160a01b03831660009081526010602052604090205460ff1680156111d55750601060006111b66005546001600160a01b031690565b6001600160a01b0316815260208101919091526040016000205460ff16155b156111e557610d9783838361170d565b6001600160a01b03831660009081526010602052604090205460ff1615801561122757506001600160a01b03821660009081526010602052604090205460ff16155b156112ab576001600160a01b03831660009081526012602052604090205460ff16611284576001600160a01b038316600090815260136020526040902060145481546112739190611ca6565b6002820155426001909101556112ab565b6001600160a01b038216600090815260136020526040812080549091036112a9574281555b505b30600090815260208190526040812054600a546006549192908310159143906112d5906014611c19565b1190508015816112e25750815b80156112f15750600f5460ff16155b801561131657506001600160a01b03861660009081526012602052604090205460ff16155b801561133b57506001600160a01b03861660009081526010602052604090205460ff16155b801561136057506001600160a01b03851660009081526010602052604090205460ff16155b1561138557600f805460ff1916600117905561137a611746565b600f805460ff191690555b600f546001600160a01b03871660009081526010602052604090205460ff918216159116806113cc57506001600160a01b03861660009081526010602052604090205460ff165b156113d5575060005b6000811561157757826114bb576001600160a01b03881660009081526012602052604090205460ff168015611408575060015b1561147e57606461141a600288611cb9565b6114249190611cd0565b905061143b60026114358184611cb9565b9061189d565b600d600082825461144c9190611c19565b9091555061146290506002611435600084611cb9565b600e60008282546114739190611c19565b909155506115599050565b6001600160a01b03871660009081526012602052604090205460ff1680156114a4575060015b156114b657606461141a600288611cb9565b611559565b6001600160a01b03881660009081526012602052604090205460ff16156115075760646114e9601988611cb9565b6114f39190611cd0565b905080600d60008282546114739190611c19565b6001600160a01b03871660009081526012602052604090205460ff1615611559576064611535601e88611cb9565b61153f9190611cd0565b905080600d60008282546115539190611c19565b90915550505b801561156a5761156a8830836115de565b6115748187611ca6565b95505b6115828888886115de565b5050505050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0383166116045760405162461bcd60e51b815260040161089a90611c61565b6001600160a01b0383166000908152602081905260409020548181101561167c5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161089a565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906116b3908490611c19565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516116ff91815260200190565b60405180910390a350505050565b6001600160a01b0380841660009081526020819052604080822080548581039091559285168252812080548492906116b3908490611c19565b3060009081526020819052604081205490506000600d54600e5461176a9190611c19565b9050811580611777575080155b15611780575050565b600a5461178e906015611cb9565b8211156117a657600a546117a3906015611cb9565b91505b81476117b1826118b0565b60006117bd8247611ca6565b9050600084600e54836117d09190611cb9565b6117da9190611cd0565b6000600e819055600d81905560085460405192935090916001600160a01b039091169083908381818185875af1925050503d8060008114611837576040519150601f19603f3d011682016040523d82523d6000602084013e61183c565b606091505b50506007546040519192506001600160a01b0316904790600081818185875af1925050503d806000811461188c576040519150601f19603f3d011682016040523d82523d6000602084013e611891565b606091505b50505050505050505050565b60006118a98284611cd0565b9392505050565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106118e5576118e5611cf2565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611963573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119879190611d08565b8160018151811061199a5761199a611cf2565b60200260200101906001600160a01b031690816001600160a01b0316815250506119e5307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84610bd7565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac94790611a3a908590600090869030904290600401611d25565b600060405180830381600087803b158015611a5457600080fd5b505af1158015611a68573d6000803e3d6000fd5b505050505050565b600060208083528351808285015260005b81811015611a9d57858101830151858201604001528201611a81565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610bd457600080fd5b60008060408385031215611ae657600080fd5b8235611af181611abe565b946020939093013593505050565b600060208284031215611b1157600080fd5b81356118a981611abe565b600080600060608486031215611b3157600080fd5b8335611b3c81611abe565b92506020840135611b4c81611abe565b929592945050506040919091013590565b60008060408385031215611b7057600080fd5b8235611b7b81611abe565b915060208301358015158114611b9057600080fd5b809150509250929050565b60008060408385031215611bae57600080fd5b8235611bb981611abe565b91506020830135611b9081611abe565b600181811c90821680611bdd57607f821691505b602082108103611bfd57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561080657610806611c03565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b8181038181111561080657610806611c03565b808202811582820484141761080657610806611c03565b600082611ced57634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b600060208284031215611d1a57600080fd5b81516118a981611abe565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015611d755784516001600160a01b031683529383019391830191600101611d50565b50506001600160a01b0396909616606085015250505060800152939250505056fea2646970667358221220cdfee1a797fe7ce6cc032c98d6d21253daf93415edc5a32a8f7087d282b1fedb64736f6c63430008130033

Deployed Bytecode Sourcemap

22309:11504:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8673:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10840:169;;;;;;;;;;-1:-1:-1;10840:169:0;;;;;:::i;:::-;;:::i;:::-;;;1188:14:1;;1181:22;1163:41;;1151:2;1136:18;10840:169:0;1023:187:1;23594:63:0;;;;;;;;;;-1:-1:-1;23594:63:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;22467:51;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1657:32:1;;;1639:51;;1627:2;1612:18;22467:51:0;1467:229:1;9793:108:0;;;;;;;;;;-1:-1:-1;9881:12:0;;9793:108;;;1847:25:1;;;1835:2;1820:18;9793:108:0;1701:177:1;23376:33:0;;;;;;;;;;;;;;;;11491:492;;;;;;;;;;-1:-1:-1;11491:492:0;;;;;:::i;:::-;;:::i;22974:43::-;;;;;;;;;;;;23015:2;22974:43;;9635:93;;;;;;;;;;-1:-1:-1;9635:93:0;;9718:2;2486:36:1;;2474:2;2459:18;9635:93:0;2344:184:1;22925:42:0;;;;;;;;;;;;22965:2;22925:42;;12392:215;;;;;;;;;;-1:-1:-1;12392:215:0;;;;;:::i;:::-;;:::i;22525:38::-;;;;;;;;;;;;;;;23247:33;;;;;;;;;;-1:-1:-1;23247:33:0;;;;;;;;26926:122;;;;;;;;;;-1:-1:-1;26926:122:0;;;;;:::i;:::-;-1:-1:-1;;;;;27014:26:0;26990:4;27014:26;;;:19;:26;;;;;;;;;26926:122;22850:41;;;;;;;;;;;;22890:1;22850:41;;9964:127;;;;;;;;;;-1:-1:-1;9964:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;10065:18:0;10038:7;10065:18;;;;;;;;;;;;9964:127;2585:103;;;;;;;;;;;;;:::i;:::-;;26250:121;;;;;;;;;;;;;:::i;26379:165::-;;;;;;;;;;-1:-1:-1;26379:165:0;;;;;:::i;:::-;;:::i;23062:30::-;;;;;;;;;;-1:-1:-1;23062:30:0;;;;-1:-1:-1;;;;;23062:30:0;;;26078:120;;;;;;;;;;;;;:::i;1934:87::-;;;;;;;;;;-1:-1:-1;2007:6:0;;-1:-1:-1;;;;;2007:6:0;1934:87;;23099:24;;;;;;;;;;-1:-1:-1;23099:24:0;;;;-1:-1:-1;;;;;23099:24:0;;;8892:104;;;;;;;;;;;;;:::i;22641:37::-;;;;;;;;;;;;22677:1;22641:37;;23416:27;;;;;;;;;;;;;;;;13110:413;;;;;;;;;;-1:-1:-1;13110:413:0;;;;;:::i;:::-;;:::i;10304:175::-;;;;;;;;;;-1:-1:-1;10304:175:0;;;;;:::i;:::-;;:::i;23815:57::-;;;;;;;;;;-1:-1:-1;23815:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;23287:33;;;;;;;;;;-1:-1:-1;23287:33:0;;;;;;;;;;;26552:170;;;;;;;;;;-1:-1:-1;26552:170:0;;;;;:::i;:::-;;:::i;23327:40::-;;;;;;;;;;-1:-1:-1;23327:40:0;;;;;;;;;;;23132:35;;;;;;;;;;;;;;;;10542:151;;;;;;;;;;-1:-1:-1;10542:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;10658:18:0;;;10631:7;10658:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;10542:151;23174:33;;;;;;;;;;;;;;;;2843:201;;;;;;;;;;-1:-1:-1;2843:201:0;;;;;:::i;:::-;;:::i;22383:75::-;;;;;;;;;;;;22416:42;22383:75;;23214:24;;;;;;;;;;;;;;;;8673:100;8727:13;8760:5;8753:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8673:100;:::o;10840:169::-;10923:4;10940:39;881:10;10963:7;10972:6;10940:8;:39::i;:::-;-1:-1:-1;10997:4:0;10840:169;;;;;:::o;11491:492::-;11631:4;11648:36;11658:6;11666:9;11677:6;11648:9;:36::i;:::-;-1:-1:-1;;;;;11724:19:0;;11697:24;11724:19;;;:11;:19;;;;;;;;881:10;11724:33;;;;;;;;11776:26;;;;11768:79;;;;-1:-1:-1;;;11768:79:0;;4142:2:1;11768:79:0;;;4124:21:1;4181:2;4161:18;;;4154:30;4220:34;4200:18;;;4193:62;-1:-1:-1;;;4271:18:1;;;4264:38;4319:19;;11768:79:0;;;;;;;;;11883:57;11892:6;881:10;11933:6;11914:16;:25;11883:8;:57::i;:::-;-1:-1:-1;11971:4:0;;11491:492;-1:-1:-1;;;;11491:492:0:o;12392:215::-;881:10;12480:4;12529:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;12529:34:0;;;;;;;;;;12480:4;;12497:80;;12520:7;;12529:47;;12566:10;;12529:47;:::i;:::-;12497:8;:80::i;2585:103::-;2007:6;;-1:-1:-1;;;;;2007:6:0;881:10;2154:23;2146:68;;;;-1:-1:-1;;;2146:68:0;;;;;;;:::i;:::-;2650:30:::1;2677:1;2650:18;:30::i;:::-;2585:103::o:0;26250:121::-;2007:6;;26302:4;;-1:-1:-1;;;;;2007:6:0;881:10;2154:23;2146:68;;;;-1:-1:-1;;;2146:68:0;;;;;;;:::i;:::-;-1:-1:-1;26319:14:0::1;:22:::0;;-1:-1:-1;;26319:22:0::1;::::0;;;26250:121;:::o;26379:165::-;2007:6;;-1:-1:-1;;;;;2007:6:0;881:10;2154:23;2146:68;;;;-1:-1:-1;;;2146:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26491:38:0;;;::::1;;::::0;;;:31:::1;:38;::::0;;;;:45;;-1:-1:-1;;26491:45:0::1;::::0;::::1;;::::0;;;::::1;::::0;;26379:165::o;26078:120::-;2007:6;;-1:-1:-1;;;;;2007:6:0;881:10;2154:23;2146:68;;;;-1:-1:-1;;;2146:68:0;;;;;;;:::i;:::-;26147:12:::1;26133:11;:26:::0;26170:13:::1;:20:::0;;-1:-1:-1;;26170:20:0::1;;;::::0;;26078:120::o;8892:104::-;8948:13;8981:7;8974:14;;;;;:::i;13110:413::-;881:10;13203:4;13247:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;13247:34:0;;;;;;;;;;13300:35;;;;13292:85;;;;-1:-1:-1;;;13292:85:0;;5174:2:1;13292:85:0;;;5156:21:1;5213:2;5193:18;;;5186:30;5252:34;5232:18;;;5225:62;-1:-1:-1;;;5303:18:1;;;5296:35;5348:19;;13292:85:0;4972:401:1;13292:85:0;13413:67;881:10;13436:7;13464:15;13445:16;:34;13413:8;:67::i;:::-;-1:-1:-1;13511:4:0;;13110:413;-1:-1:-1;;;13110:413:0:o;10304:175::-;10390:4;10407:42;881:10;10431:9;10442:6;10407:9;:42::i;26552:170::-;2007:6;;-1:-1:-1;;;;;2007:6:0;881:10;2154:23;2146:68;;;;-1:-1:-1;;;2146:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26633:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:35;;-1:-1:-1;;26633:35:0::1;::::0;::::1;;::::0;;::::1;::::0;;;26684:30;;1163:41:1;;;26684:30:0::1;::::0;1136:18:1;26684:30:0::1;;;;;;;26552:170:::0;;:::o;2843:201::-;2007:6;;-1:-1:-1;;;;;2007:6:0;881:10;2154:23;2146:68;;;;-1:-1:-1;;;2146:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;2932:22:0;::::1;2924:73;;;::::0;-1:-1:-1;;;2924:73:0;;5580:2:1;2924:73:0::1;::::0;::::1;5562:21:1::0;5619:2;5599:18;;;5592:30;5658:34;5638:18;;;5631:62;-1:-1:-1;;;5709:18:1;;;5702:36;5755:19;;2924:73:0::1;5378:402:1::0;2924:73:0::1;3008:28;3027:8;3008:18;:28::i;:::-;2843:201:::0;:::o;17686:380::-;-1:-1:-1;;;;;17822:19:0;;17814:68;;;;-1:-1:-1;;;17814:68:0;;5987:2:1;17814:68:0;;;5969:21:1;6026:2;6006:18;;;5999:30;6065:34;6045:18;;;6038:62;-1:-1:-1;;;6116:18:1;;;6109:34;6160:19;;17814:68:0;5785:400:1;17814:68:0;-1:-1:-1;;;;;17901:21:0;;17893:68;;;;-1:-1:-1;;;17893:68:0;;6392:2:1;17893:68:0;;;6374:21:1;6431:2;6411:18;;;6404:30;6470:34;6450:18;;;6443:62;-1:-1:-1;;;6521:18:1;;;6514:32;6563:19;;17893:68:0;6190:398:1;17893:68:0;-1:-1:-1;;;;;17974:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;18026:32;;1847:25:1;;;18026:32:0;;1820:18:1;18026:32:0;;;;;;;17686:380;;;:::o;27056:5157::-;-1:-1:-1;;;;;27188:18:0;;27180:68;;;;-1:-1:-1;;;27180:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27267:16:0;;27259:64;;;;-1:-1:-1;;;27259:64:0;;7201:2:1;27259:64:0;;;7183:21:1;7240:2;7220:18;;;7213:30;7279:34;7259:18;;;7252:62;-1:-1:-1;;;7330:18:1;;;7323:33;7373:19;;27259:64:0;6999:399:1;27259:64:0;27340:6;27350:1;27340:11;27336:93;;27368:28;27384:4;27390:2;27394:1;27368:15;:28::i;:::-;27056:5157;;;:::o;27336:93::-;27445:14;;;;27441:1693;;;2007:6;;-1:-1:-1;;;;;27498:15:0;;;2007:6;;27498:15;;;;:49;;-1:-1:-1;2007:6:0;;-1:-1:-1;;;;;27534:13:0;;;2007:6;;27534:13;;27498:49;:86;;;;-1:-1:-1;;;;;;27568:16:0;;;;27498:86;:128;;;;-1:-1:-1;;;;;;27605:21:0;;27619:6;27605:21;;27498:128;:158;;;;-1:-1:-1;27648:8:0;;;;27647:9;27498:158;27476:1647;;;27696:13;;;;;;;27691:222;;-1:-1:-1;;;;;27768:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;27797:23:0;;;;;;:19;:23;;;;;;;;27768:52;27734:159;;;;-1:-1:-1;;;27734:159:0;;7605:2:1;27734:159:0;;;7587:21:1;7644:2;7624:18;;;7617:30;-1:-1:-1;;;7663:18:1;;;7656:51;7724:18;;27734:159:0;7403:345:1;27734:159:0;-1:-1:-1;;;;;27987:31:0;;;;;;:25;:31;;;;;;;;:92;;;;-1:-1:-1;;;;;;28044:35:0;;;;;;:31;:35;;;;;;;;28043:36;27987:92;27961:1147;;;28166:20;;28156:6;:30;;28122:169;;;;-1:-1:-1;;;28122:169:0;;7955:2:1;28122:169:0;;;7937:21:1;7994:2;7974:18;;;7967:30;8033:34;8013:18;;;8006:62;-1:-1:-1;;;8084:18:1;;;8077:51;8145:19;;28122:169:0;7753:417:1;28122:169:0;28374:9;;-1:-1:-1;;;;;10065:18:0;;10038:7;10065:18;;;;;;;;;;;28348:22;;:6;:22;:::i;:::-;:35;;28314:140;;;;-1:-1:-1;;;28314:140:0;;8377:2:1;28314:140:0;;;8359:21:1;8416:2;8396:18;;;8389:30;-1:-1:-1;;;8435:18:1;;;8428:49;8494:18;;28314:140:0;8175:343:1;28314:140:0;27961:1147;;;-1:-1:-1;;;;;28552:29:0;;;;;;:25;:29;;;;;;;;:92;;;;-1:-1:-1;;;;;;28607:37:0;;;;;;:31;:37;;;;;;;;28606:38;28552:92;28526:582;;;28731:20;;28721:6;:30;;28687:170;;;;-1:-1:-1;;;28687:170:0;;8725:2:1;28687:170:0;;;8707:21:1;8764:2;8744:18;;;8737:30;8803:34;8783:18;;;8776:62;-1:-1:-1;;;8854:18:1;;;8847:52;8916:19;;28687:170:0;8523:418:1;28526:582:0;-1:-1:-1;;;;;28888:35:0;;;;;;:31;:35;;;;;;;;28883:225;;29008:9;;-1:-1:-1;;;;;10065:18:0;;10038:7;10065:18;;;;;;;;;;;28982:22;;:6;:22;:::i;:::-;:35;;28948:140;;;;-1:-1:-1;;;28948:140:0;;8377:2:1;28948:140:0;;;8359:21:1;8416:2;8396:18;;;8389:30;-1:-1:-1;;;8435:18:1;;;8428:49;8494:18;;28948:140:0;8175:343:1;28948:140:0;-1:-1:-1;;;;;29151:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;29180:23:0;;;;;;:19;:23;;;;;;;;29151:52;29150:77;;;;-1:-1:-1;;;;;;29208:19:0;;29222:4;29208:19;;29150:77;:102;;;;-1:-1:-1;;;;;;29231:21:0;;29247:4;29231:21;;29150:102;29146:161;;;29280:15;29269:8;:26;29146:161;-1:-1:-1;;;;;29321:25:0;;;;;;:19;:25;;;;;;;;:58;;;;;29351:19;:28;29371:7;2007:6;;-1:-1:-1;;;;;2007:6:0;;1934:87;29371:7;-1:-1:-1;;;;;29351:28:0;;;;;;;;;;;;-1:-1:-1;29351:28:0;;;;29350:29;29321:58;29317:146;;;29396:34;29413:4;29419:2;29423:6;29396:16;:34::i;29317:146::-;-1:-1:-1;;;;;29478:25:0;;;;;;:19;:25;;;;;;;;29477:26;:54;;;;-1:-1:-1;;;;;;29508:23:0;;;;;;:19;:23;;;;;;;;29507:24;29477:54;29473:555;;;-1:-1:-1;;;;;29553:31:0;;;;;;:25;:31;;;;;;;;29548:469;;-1:-1:-1;;;;;29643:15:0;;29605:35;29643:15;;;:9;:15;;;;;29722:8;;29702:17;;:28;;29722:8;29702:28;:::i;:::-;29677:22;;;:53;29770:15;29749:18;;;;:36;29548:469;;;-1:-1:-1;;;;;29864:13:0;;29826:35;29864:13;;;:9;:13;;;;;29900:17;;29864:13;;29900:22;29896:106;;29967:15;29947:35;;29896:106;29807:210;29548:469;30089:4;30040:28;10065:18;;;;;;;;;;;30123;;30192:11;;10065:18;;30123:42;;-1:-1:-1;30123:42:0;;30211:12;;30192:16;;30206:2;30192:16;:::i;:::-;:31;;-1:-1:-1;30254:9:0;;30192:31;30254:33;;;30280:7;30254:33;:59;;;;-1:-1:-1;30305:8:0;;;;30304:9;30254:59;:108;;;;-1:-1:-1;;;;;;30331:31:0;;;;;;:25;:31;;;;;;;;30330:32;30254:108;:151;;;;-1:-1:-1;;;;;;30380:25:0;;;;;;:19;:25;;;;;;;;30379:26;30254:151;:192;;;;-1:-1:-1;;;;;;30423:23:0;;;;;;:19;:23;;;;;;;;30422:24;30254:192;30236:320;;;30473:8;:15;;-1:-1:-1;;30473:15:0;30484:4;30473:15;;;30503:10;:8;:10::i;:::-;30528:8;:16;;-1:-1:-1;;30528:16:0;;;30236:320;30584:8;;-1:-1:-1;;;;;30694:25:0;;30568:12;30694:25;;;:19;:25;;;;;;30584:8;;;;30583:9;;30694:25;;:52;;-1:-1:-1;;;;;;30723:23:0;;;;;;:19;:23;;;;;;;;30694:52;30690:100;;;-1:-1:-1;30773:5:0;30690:100;30802:12;30907:7;30903:1257;;;30936:8;30931:1080;;-1:-1:-1;;;;;30969:31:0;;;;;;:25;:31;;;;;;;;:51;;;;-1:-1:-1;31004:16:0;30969:51;30965:630;;;31076:3;31052:21;22724:1;31052:6;:21;:::i;:::-;:27;;;;:::i;:::-;31045:34;-1:-1:-1;31124:42:0;22724:1;31125:22;22724:1;31045:34;31125:22;:::i;:::-;31124:28;;:42::i;:::-;31102:18;;:64;;;;;;;:::i;:::-;;;;-1:-1:-1;31205:36:0;;-1:-1:-1;22724:1:0;31206:16;22677:1;31206:4;:16;:::i;31205:36::-;31189:12;;:52;;;;;;;:::i;:::-;;;;-1:-1:-1;30931:1080:0;;-1:-1:-1;30931:1080:0;30965:630;-1:-1:-1;;;;;31299:29:0;;;;;;:25;:29;;;;;;;;:50;;;;-1:-1:-1;31332:17:0;31299:50;31295:300;;;31406:3;31381:22;22890:1;31381:6;:22;:::i;31295:300::-;30931:1080;;;-1:-1:-1;;;;;31639:31:0;;;;;;:25;:31;;;;;;;;31635:361;;;31727:3;31702:22;22965:2;31702:6;:22;:::i;:::-;:28;;;;:::i;:::-;31695:35;;31775:4;31753:18;;:26;;;;;;;:::i;31635:361::-;-1:-1:-1;;;;;31837:29:0;;;;;;:25;:29;;;;;;;;31833:163;;;31924:3;31898:23;23015:2;31898:6;:23;:::i;:::-;:29;;;;:::i;:::-;31891:36;;31972:4;31950:18;;:26;;;;;;;:::i;:::-;;;;-1:-1:-1;;31833:163:0;32031:8;;32027:91;;32060:42;32076:4;32090;32097;32060:15;:42::i;:::-;32134:14;32144:4;32134:14;;:::i;:::-;;;30903:1257;32172:33;32188:4;32194:2;32198:6;32172:15;:33::i;:::-;27169:5044;;;;;27056:5157;;;:::o;3204:191::-;3297:6;;;-1:-1:-1;;;;;3314:17:0;;;-1:-1:-1;;;;;;3314:17:0;;;;;;;3347:40;;3297:6;;;3314:17;3297:6;;3347:40;;3278:16;;3347:40;3267:128;3204:191;:::o;14013:651::-;-1:-1:-1;;;;;14153:20:0;;14145:70;;;;-1:-1:-1;;;14145:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;14312:17:0;;14288:21;14312:17;;;;;;;;;;;14348:23;;;;14340:74;;;;-1:-1:-1;;;14340:74:0;;9676:2:1;14340:74:0;;;9658:21:1;9715:2;9695:18;;;9688:30;9754:34;9734:18;;;9727:62;-1:-1:-1;;;9805:18:1;;;9798:36;9851:19;;14340:74:0;9474:402:1;14340:74:0;-1:-1:-1;;;;;14450:17:0;;;:9;:17;;;;;;;;;;;14470:22;;;14450:42;;14514:20;;;;;;;;:30;;14486:6;;14450:9;14514:30;;14486:6;;14514:30;:::i;:::-;;;;;;;;14579:9;-1:-1:-1;;;;;14562:35:0;14571:6;-1:-1:-1;;;;;14562:35:0;;14590:6;14562:35;;;;1847:25:1;;1835:2;1820:18;;1701:177;14562:35:0;;;;;;;;14134:530;14013:651;;;:::o;15154:484::-;-1:-1:-1;;;;;15371:17:0;;;15347:21;15371:17;;;;;;;;;;;;;15444:22;;;15424:42;;;15488:20;;;;;;;:30;;15460:6;;15347:21;15488:30;;15460:6;;15488:30;:::i;32818:992::-;32901:4;32857:23;10065:18;;;;;;;;;;;32857:50;;32918:25;32961:18;;32946:12;;:33;;;;:::i;:::-;32918:61;-1:-1:-1;32996:20:0;;;:46;;-1:-1:-1;33020:22:0;;32996:46;32992:85;;;33059:7;;32818:992::o;32992:85::-;33111:18;;:23;;33132:2;33111:23;:::i;:::-;33093:15;:41;33089:115;;;33169:18;;:23;;33190:2;33169:23;:::i;:::-;33151:41;;33089:115;33284:15;33338:21;33370:36;33284:15;33370:16;:36::i;:::-;33419:18;33440:41;33464:17;33440:21;:41;:::i;:::-;33419:62;;33492:17;33540;33525:12;;33512:10;:25;;;;:::i;:::-;:45;;;;:::i;:::-;33585:1;33570:12;:16;;;33597:18;:22;;;33677:9;;33669:45;;33492:65;;-1:-1:-1;33585:1:0;;-1:-1:-1;;;;;33677:9:0;;;;33492:65;;33585:1;33669:45;33585:1;33669:45;33492:65;33677:9;33669:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;33747:15:0;;33739:63;;33655:59;;-1:-1:-1;;;;;;33747:15:0;;33776:21;;33739:63;;;;33776:21;33747:15;33739:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;32818:992:0:o;22204:98::-;22262:7;22289:5;22293:1;22289;:5;:::i;:::-;22282:12;22204:98;-1:-1:-1;;;22204:98:0:o;32221:589::-;32371:16;;;32385:1;32371:16;;;;;;;;32347:21;;32371:16;;;;;;;;;;-1:-1:-1;32371:16:0;32347:40;;32416:4;32398;32403:1;32398:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;32398:23:0;;;-1:-1:-1;;;;;32398:23:0;;;;;32442:15;-1:-1:-1;;;;;32442:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32432:4;32437:1;32432:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;32432:32:0;;;-1:-1:-1;;;;;32432:32:0;;;;;32477:62;32494:4;32509:15;32527:11;32477:8;:62::i;:::-;32578:224;;-1:-1:-1;;;32578:224:0;;-1:-1:-1;;;;;32578:15:0;:66;;;;:224;;32659:11;;32685:1;;32729:4;;32756;;32776:15;;32578:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32276:534;32221:589;:::o;14:548:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;567:131::-;-1:-1:-1;;;;;642:31:1;;632:42;;622:70;;688:1;685;678:12;703:315;771:6;779;832:2;820:9;811:7;807:23;803:32;800:52;;;848:1;845;838:12;800:52;887:9;874:23;906:31;931:5;906:31;:::i;:::-;956:5;1008:2;993:18;;;;980:32;;-1:-1:-1;;;703:315:1:o;1215:247::-;1274:6;1327:2;1315:9;1306:7;1302:23;1298:32;1295:52;;;1343:1;1340;1333:12;1295:52;1382:9;1369:23;1401:31;1426:5;1401:31;:::i;1883:456::-;1960:6;1968;1976;2029:2;2017:9;2008:7;2004:23;2000:32;1997:52;;;2045:1;2042;2035:12;1997:52;2084:9;2071:23;2103:31;2128:5;2103:31;:::i;:::-;2153:5;-1:-1:-1;2210:2:1;2195:18;;2182:32;2223:33;2182:32;2223:33;:::i;:::-;1883:456;;2275:7;;-1:-1:-1;;;2329:2:1;2314:18;;;;2301:32;;1883:456::o;2741:416::-;2806:6;2814;2867:2;2855:9;2846:7;2842:23;2838:32;2835:52;;;2883:1;2880;2873:12;2835:52;2922:9;2909:23;2941:31;2966:5;2941:31;:::i;:::-;2991:5;-1:-1:-1;3048:2:1;3033:18;;3020:32;3090:15;;3083:23;3071:36;;3061:64;;3121:1;3118;3111:12;3061:64;3144:7;3134:17;;;2741:416;;;;;:::o;3162:388::-;3230:6;3238;3291:2;3279:9;3270:7;3266:23;3262:32;3259:52;;;3307:1;3304;3297:12;3259:52;3346:9;3333:23;3365:31;3390:5;3365:31;:::i;:::-;3415:5;-1:-1:-1;3472:2:1;3457:18;;3444:32;3485:33;3444:32;3485:33;:::i;3555:380::-;3634:1;3630:12;;;;3677;;;3698:61;;3752:4;3744:6;3740:17;3730:27;;3698:61;3805:2;3797:6;3794:14;3774:18;3771:38;3768:161;;3851:10;3846:3;3842:20;3839:1;3832:31;3886:4;3883:1;3876:15;3914:4;3911:1;3904:15;3768:161;;3555:380;;;:::o;4349:127::-;4410:10;4405:3;4401:20;4398:1;4391:31;4441:4;4438:1;4431:15;4465:4;4462:1;4455:15;4481:125;4546:9;;;4567:10;;;4564:36;;;4580:18;;:::i;4611:356::-;4813:2;4795:21;;;4832:18;;;4825:30;4891:34;4886:2;4871:18;;4864:62;4958:2;4943:18;;4611:356::o;6593:401::-;6795:2;6777:21;;;6834:2;6814:18;;;6807:30;6873:34;6868:2;6853:18;;6846:62;-1:-1:-1;;;6939:2:1;6924:18;;6917:35;6984:3;6969:19;;6593:401::o;8946:128::-;9013:9;;;9034:11;;;9031:37;;;9048:18;;:::i;9079:168::-;9152:9;;;9183;;9200:15;;;9194:22;;9180:37;9170:71;;9221:18;;:::i;9252:217::-;9292:1;9318;9308:132;;9362:10;9357:3;9353:20;9350:1;9343:31;9397:4;9394:1;9387:15;9425:4;9422:1;9415:15;9308:132;-1:-1:-1;9454:9:1;;9252:217::o;10223:127::-;10284:10;10279:3;10275:20;10272:1;10265:31;10315:4;10312:1;10305:15;10339:4;10336:1;10329:15;10355:251;10425:6;10478:2;10466:9;10457:7;10453:23;10449:32;10446:52;;;10494:1;10491;10484:12;10446:52;10526:9;10520:16;10545:31;10570:5;10545:31;:::i;10611:980::-;10873:4;10921:3;10910:9;10906:19;10952:6;10941:9;10934:25;10978:2;11016:6;11011:2;11000:9;10996:18;10989:34;11059:3;11054:2;11043:9;11039:18;11032:31;11083:6;11118;11112:13;11149:6;11141;11134:22;11187:3;11176:9;11172:19;11165:26;;11226:2;11218:6;11214:15;11200:29;;11247:1;11257:195;11271:6;11268:1;11265:13;11257:195;;;11336:13;;-1:-1:-1;;;;;11332:39:1;11320:52;;11427:15;;;;11392:12;;;;11368:1;11286:9;11257:195;;;-1:-1:-1;;;;;;;11508:32:1;;;;11503:2;11488:18;;11481:60;-1:-1:-1;;;11572:3:1;11557:19;11550:35;11469:3;10611:980;-1:-1:-1;;;10611:980:1:o

Swarm Source

ipfs://cdfee1a797fe7ce6cc032c98d6d21253daf93415edc5a32a8f7087d282b1fedb
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.