ETH Price: $3,330.64 (-3.85%)

Token

Wonderland (ALICE)
 

Overview

Max Total Supply

1,608,798,869.5 ALICE

Holders

254

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
ivanphl.eth
Balance
35.765132250990608297 ALICE

Value
$0.00
0x07a2cdeee240e05c3c048dc03ccdae309d657162
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:
Wonderland

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 2023-12-06
*/

/*
 * SPDX-License-Identifier: MIT
 * https://wonderland.capital/
 * https://t.me/wonderlandportal
 * https://twitter.com/WonderlandERC20
 */

pragma solidity 0.8.19;

library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(
        uint256 a,
        uint256 b
    ) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the substraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(
        uint256 a,
        uint256 b
    ) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(
        uint256 a,
        uint256 b
    ) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(
        uint256 a,
        uint256 b
    ) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(
        uint256 a,
        uint256 b
    ) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator.
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

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

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

abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

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

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 upd 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 upd 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 upd 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");
        require(recipient != address(0), "ERC20: transfer to 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 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 {}
}

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

interface IDexFactory {
    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 IDexRouter {
    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;
}

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

    IDexRouter private immutable dexRouter;
    address public immutable dexPair;

    // Nodes
    uint8[] private rewards = [5, 10, 15];
    uint256[] private prices = [
        45 * (10 ** uint256(decimals())),
        450 * (10 ** uint256(decimals())),
        950 * (10 ** uint256(decimals()))
    ];

    struct UserNodes {
        uint256 lastRewardCalculationTime;
        uint256 accruedReward;
        uint256[3] tierCounts;
    }

    mapping(address => UserNodes) public usersInfo;

    // Swapback
    bool private swapping;

    bool private swapbackEnabled = false;
    uint256 private swapBackValueMin;
    uint256 private swapBackValueMax;

    //Anti-whale
    bool private limitsInEffect = true;
    bool private trasnferDelayEnabled = true;
    uint256 private maxWallet;
    uint256 private maxTx;
    mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch

    bool public tradingOn = false;

    // Fee receivers
    address private mktReceiver;
    address private devReceiver;

    uint256 private totalBuyFee;
    uint256 private buyMktFee;
    uint256 private buyDevFee;

    uint256 private totalSellFee;
    uint256 private sellMktFee;
    uint256 private sellDevFee;

    /******************/

    // exlcude from fees and max transaction amount
    mapping(address => bool) private isFeeExempt;
    mapping(address => bool) private isTxLimitExempt;
    mapping(address => bool) private automatedMarketMakerPairs;

    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount

    event UpdateUniswapV2Router(
        address indexed newAddress,
        address indexed oldAddress
    );

    event ExcludeFromFees(address indexed account, bool isExcluded);
    event ExcludeFromLimits(address indexed account, bool isExcluded);
    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
    event TradingEnabled(uint256 indexed timestamp);
    event LimitsRemoved(uint256 indexed timestamp);
    event DisabledTransferDelay(uint256 indexed timestamp);

    event SwapbackSettingsUpdated(
        bool enabled,
        uint256 swapBackValueMin,
        uint256 swapBackValueMax
    );
    event MaxTxUpdated(uint256 maxTx);
    event MaxWalletUpdated(uint256 maxWallet);

    event mktReceiverUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );

    event devReceiverUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );

    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );

    event BuyFeeUpdated(
        uint256 totalBuyFee,
        uint256 buyMktFee,
        uint256 buyDevFee
    );

    event SellFeeUpdated(
        uint256 totalSellFee,
        uint256 sellMktFee,
        uint256 sellDevFee
    );

    event NodesCreated(
        address indexed user,
        uint256 indexed tier,
        uint256 indexed amount
    );

    constructor() ERC20("Wonderland", "ALICE") {
        IDexRouter _dexRouter = IDexRouter(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );

        excludeFromMaxTransaction(address(_dexRouter), true);
        dexRouter = _dexRouter;

        dexPair = IDexFactory(_dexRouter.factory()).createPair(
            address(this),
            _dexRouter.WETH()
        );
        excludeFromMaxTransaction(address(dexPair), true);
        _setAutomatedMarketMakerPair(address(dexPair), true);

        uint256 _buyMktFee = 32;
        uint256 _buyDevFee = 8;

        uint256 _sellMktFee = 56;
        uint256 _sellDevFee = 14;

        uint256 _totalSupply = 100_000 * 10 ** decimals();

        maxTx = (_totalSupply * 10) / 1000;
        maxWallet = (_totalSupply * 10) / 1000;

        swapBackValueMin = (_totalSupply * 1) / 1000;
        swapBackValueMax = (_totalSupply * 1) / 100;

        buyMktFee = _buyMktFee;
        buyDevFee = _buyDevFee;
        totalBuyFee = buyMktFee + buyDevFee;

        sellMktFee = _sellMktFee;
        sellDevFee = _sellDevFee;
        totalSellFee = sellMktFee + sellDevFee;

        mktReceiver = address(0x532a5fc2bDc2aE343Ac885d3F644DA9e84aCc388);
        devReceiver = address(msg.sender);

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

        excludeFromMaxTransaction(msg.sender, true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);

        transferOwnership(msg.sender);

        /*
            _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 {}

    // External write functions //

    /**
     * @notice Burns tokens in exchange for a node
     * Emits a {NodeCreated} event
     * @param tier The node tier
     * @param amount The amount of nodes
     */
    function enterTier(uint tier, uint amount) public {
        require(tier >= 0 && tier <= 2, "Invalid tier");
        UserNodes storage user = usersInfo[msg.sender];
        user.accruedReward += calculatePendingReward(msg.sender);
        user.tierCounts[tier] += amount;
        user.lastRewardCalculationTime = block.timestamp;
        _burn(msg.sender, prices[tier] * amount);
        emit NodesCreated(msg.sender, tier, amount);
    }

    /**
     * @notice  Sends the accumulated rewards to the user
     */
    function claimRewards() public {
        UserNodes storage user = usersInfo[msg.sender];
        uint256 reward = user.accruedReward +
            calculatePendingReward(msg.sender);
        user.lastRewardCalculationTime = block.timestamp;
        user.accruedReward = 0;
        /** dont fud this is node rewards */
        _mint(msg.sender, reward);
    }

    // Owner functions //

    /**
     * @notice  Opens public trading for the token
     * @dev     onlyOwner.
     */
    function enableTrading() external onlyOwner {
        tradingOn = true;
        swapbackEnabled = true;
        emit TradingEnabled(block.timestamp);
    }

    /**
     * @notice Removes the max wallet and max transaction limits
     * @dev onlyOwner.
     * Emits an {LimitsRemoved} event
     */
    function removeLimits() external onlyOwner {
        limitsInEffect = false;
        emit LimitsRemoved(block.timestamp);
    }

    /**
     * @notice Removes the transfer delay
     * @dev onlyOwner.
     * Emits an {DisabledTransferDelay} event
     */
    function disableTransferDelay() external onlyOwner {
        trasnferDelayEnabled = false;
        emit DisabledTransferDelay(block.timestamp);
    }

    /**
     * @notice sets if swapback is enabled and sets the minimum and maximum amounts
     * @dev onlyOwner.
     * Emits an {SwapbackSettingsUpdated} event
     * @param _enabled If swapback is enabled
     * @param _min The minimum amount of tokens the contract must have before swapping tokens for ETH. Base 10000, so 1% = 100.
     * @param _max The maximum amount of tokens the contract can swap for ETH. Base 10000, so 1% = 100.
     */
    function setSwapBackSettings(
        bool _enabled,
        uint256 _min,
        uint256 _max
    ) external onlyOwner {
        require(
            _min >= 1,
            "Swap amount cannot be lower than 0.01% total supply."
        );
        require(_max >= _min, "maximum amount cant be higher than minimum");

        swapbackEnabled = _enabled;
        swapBackValueMin = (totalSupply() * _min) / 10000;
        swapBackValueMax = (totalSupply() * _max) / 10000;
        emit SwapbackSettingsUpdated(_enabled, _min, _max);
    }

    /**
     * @notice Changes the maximum amount of tokens that can be bought or sold in a single transaction
     * @dev onlyOwner.
     * Emits an {MaxTxUpdated} event
     * @param newNum Base 1000, so 1% = 10
     */
    function setTxLimit(uint256 newNum) external onlyOwner {
        require(newNum >= 2, "Cannot set maxTx lower than 0.2%");
        maxTx = (newNum * totalSupply()) / 1000;
        emit MaxTxUpdated(maxTx);
    }

    /**
     * @notice Changes the maximum amount of tokens a wallet can hold
     * @dev onlyOwner.
     * Emits an {MaxWalletUpdated} event
     * @param newNum Base 1000, so 1% = 10
     */
    function setWalletLimit(uint256 newNum) external onlyOwner {
        require(newNum >= 5, "Cannot set maxWallet lower than 0.5%");
        maxWallet = (newNum * totalSupply()) / 1000;
        emit MaxWalletUpdated(maxWallet);
    }

    /**
     * @notice Sets if a wallet is excluded from the max wallet and tx limits
     * @dev onlyOwner.
     * Emits an {ExcludeFromLimits} event
     * @param updAds The wallet to update
     * @param isEx If the wallet is excluded or not
     */
    function excludeFromMaxTransaction(
        address updAds,
        bool isEx
    ) public onlyOwner {
        isTxLimitExempt[updAds] = isEx;
        emit ExcludeFromLimits(updAds, isEx);
    }

    /**
     * @notice Sets the fees for buys
     * @dev onlyOwner.
     * Emits a {BuyFeeUpdated} event
     * All fees added up must be less than 100
     * @param _marketingFee The fee for the marketing wallet
     * @param _devFee The fee for the dev wallet
     */
    function setBuyFees(
        uint256 _marketingFee,
        uint256 _devFee
    ) external onlyOwner {
        buyMktFee = _marketingFee;
        buyDevFee = _devFee;
        totalBuyFee = buyMktFee + buyDevFee;
        require(totalBuyFee <= 100, "Total buy fee cannot be higher than 100%");
        emit BuyFeeUpdated(totalBuyFee, buyMktFee, buyDevFee);
    }

    /**
     * @notice Sets the fees for sells
     * @dev onlyOwner.
     * Emits a {SellFeeUpdated} event
     * All fees added up must be less than 100
     * @param _marketingFee The fee for the marketing wallet
     * @param _devFee The fee for the dev wallet
     */
    function setSellFees(
        uint256 _marketingFee,
        uint256 _devFee
    ) external onlyOwner {
        sellMktFee = _marketingFee;
        sellDevFee = _devFee;
        totalSellFee = sellMktFee + sellDevFee;
        require(
            totalSellFee <= 100,
            "Total sell fee cannot be higher than 100%"
        );
        emit SellFeeUpdated(totalSellFee, sellMktFee, sellDevFee);
    }

    /**
     * @notice Sets if an address is excluded from fees
     * @dev onlyOwner.
     * Emits an {ExcludeFromFees} event
     * @param account The wallet to update
     * @param excluded If the wallet is excluded or not
     */
    function excludeFromFees(address account, bool excluded) public onlyOwner {
        isFeeExempt[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }

    /**
     * @notice Sets an address as a new liquidity pair. You probably dont want to do this.
     * @dev onlyOwner.
     * Emits a {SetAutomatedMarketMakerPair} event
     * @param pair the address of the pair
     * @param value If the pair is a automated market maker pair or not
     */
    function setAutomatedMarketMakerPair(
        address pair,
        bool value
    ) public onlyOwner {
        require(
            pair != dexPair,
            "The pair cannot be removed from automatedMarketMakerPairs"
        );

        _setAutomatedMarketMakerPair(pair, value);
    }

    /**
     * @notice Sets the marketing wallet
     * @dev onlyOwner.
     * Emits an {mktReceiverUpdated} event
     * @param newWallet The new marketing wallet
     */
    function setMarketingWallet(address newWallet) external onlyOwner {
        emit mktReceiverUpdated(newWallet, mktReceiver);
        mktReceiver = newWallet;
    }

    /**
     * @notice Sets the dev wallet
     * @dev onlyOwner.
     * Emits an {devReceiverUpdated} event
     * @param newWallet The new dev wallet
     */
    function setDevWallet(address newWallet) external onlyOwner {
        emit devReceiverUpdated(newWallet, devReceiver);
        devReceiver = newWallet;
    }

    // External read functions //

    /**
     * @notice  Information about the swapback settings
     * @return  _swapbackEnabled  if swapback is enabled
     * @return  _swapBackValueMin  the minimum amount of tokens in the contract balance to trigger swapback
     * @return  _swapBackValueMax  the maximum amount of tokens in the contract balance to trigger swapback
     */
    function swapbackInfo()
        external
        view
        returns (
            bool _swapbackEnabled,
            uint256 _swapBackValueMin,
            uint256 _swapBackValueMax
        )
    {
        _swapbackEnabled = swapbackEnabled;
        _swapBackValueMin = swapBackValueMin;
        _swapBackValueMax = swapBackValueMax;
    }

    /**
     * @notice  Information about the anti whale parameters
     * @return  _limitsInEffect  if the wallet limits are in effect
     * @return  _trasnferDelayEnabled  if the transfer delay is enabled
     * @return  _maxWallet  The maximum amount of tokens that can be held by a wallet
     * @return  _maxTx  The maximum amount of tokens that can be bought or sold in a single transaction
     */
    function antiWhaleInfo()
        external
        view
        returns (
            bool _limitsInEffect,
            bool _trasnferDelayEnabled,
            uint256 _maxWallet,
            uint256 _maxTx
        )
    {
        _limitsInEffect = limitsInEffect;
        _trasnferDelayEnabled = trasnferDelayEnabled;
        _maxWallet = maxWallet;
        _maxTx = maxTx;
    }

    /**
     * @notice The wallets that receive the collected fees
     * @return _mktReceiver The wallet that receives the marketing fees
     * @return _devReceiver The wallet that receives the dev fees
     */
    function feeReceivers()
        external
        view
        returns (address _mktReceiver, address _devReceiver)
    {
        return (mktReceiver, devReceiver);
    }

    /**
     * @notice Fees for buys, sells, and transfers
     * @return _totalBuyFee The total fee for buys
     * @return _buyMktFee The fee for buys that gets sent to marketing
     * @return _buyDevFee The fee for buys that gets sent to dev
     * @return _totalSellFee The total fee for sells
     * @return _sellMktFee The fee for sells that gets sent to marketing
     * @return _sellDevFee The fee for sells that gets sent to dev
     */
    function feeRates()
        external
        view
        returns (
            uint256 _totalBuyFee,
            uint256 _buyMktFee,
            uint256 _buyDevFee,
            uint256 _totalSellFee,
            uint256 _sellMktFee,
            uint256 _sellDevFee
        )
    {
        _totalBuyFee = totalBuyFee;
        _buyMktFee = buyMktFee;
        _buyDevFee = buyDevFee;
        _totalSellFee = totalSellFee;
        _sellMktFee = sellMktFee;
        _sellDevFee = sellDevFee;
    }

    /**
     * @notice  Information about the nodes
     * @param   _user  The wallet to check
     * @return  _lastRewardCalculationTime  The last time the user received a reward
     * @return  _accruedReward  The amount of tokens the user has accrued
     * @return  _tierCounts  The number of nodes the user has in each tier
     * @return _pendingRewards The amount of tokens the user will receive on the next claim
     */
    function nodesUserInfo(
        address _user
    )
        external
        view
        returns (
            uint256 _lastRewardCalculationTime,
            uint256 _accruedReward,
            uint256[3] memory _tierCounts,
            uint256 _pendingRewards
        )
    {
        _lastRewardCalculationTime = usersInfo[_user].lastRewardCalculationTime;
        _accruedReward = usersInfo[_user].accruedReward;
        _tierCounts = usersInfo[_user].tierCounts;
        _pendingRewards = calculatePendingReward(_user) + usersInfo[_user].accruedReward;
    }

    /**
     * @notice  Information about the nodes
     * @return  _rewards  The rewards for each tier
     * @return  _prices  The prices for each tier
     */
    function nodesTiersInfo()
        external
        view
        returns (uint8[] memory _rewards, uint256[] memory _prices)
    {
        _rewards = rewards;
        _prices = prices;
    }

    /**
     * @notice  If the wallet is excluded from fees and max transaction amount and if the wallet is a automated market maker pair
     * @param   _target  The wallet to check
     * @return  _isFeeExempt  If the wallet is excluded from fees
     * @return  _isTxLimitExempt  If the wallet is excluded from max transaction amount
     * @return  _automatedMarketMakerPairs If the wallet is a automated market maker pair
     */
    function checkAddressPermissions(
        address _target
    )
        external
        view
        returns (
            bool _isFeeExempt,
            bool _isTxLimitExempt,
            bool _automatedMarketMakerPairs
        )
    {
        _isFeeExempt = isFeeExempt[_target];
        _isTxLimitExempt = isTxLimitExempt[_target];
        _automatedMarketMakerPairs = automatedMarketMakerPairs[_target];
    }

    function checkAddressRewards(
        address _target
    ) external view returns (uint256 _pendingRewards) {
        UserNodes storage user = usersInfo[_target];
        _pendingRewards = user.accruedReward + calculatePendingReward(_target);
    }

    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

    // Internal write functions //

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

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    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 (!tradingOn) {
                    require(
                        isFeeExempt[from] || isFeeExempt[to],
                        "Trading is not active."
                    );
                }

                // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.
                if (trasnferDelayEnabled) {
                    if (
                        to != owner() &&
                        to != address(dexRouter) &&
                        to != address(dexPair)
                    ) {
                        require(
                            _holderLastTransferTimestamp[tx.origin] <
                                block.number,
                            "_transfer:: Transfer Delay enabled.  Only one purchase per block allowed."
                        );
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                    }
                }

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

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapBackValueMin;

        if (
            canSwap &&
            swapbackEnabled &&
            !swapping &&
            !automatedMarketMakerPairs[from] &&
            !isFeeExempt[from] &&
            !isFeeExempt[to]
        ) {
            swapping = true;

            swapBack();

            swapping = false;
        }

        bool takeFee = !swapping;

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

        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if (takeFee) {
            // on sell
            if (automatedMarketMakerPairs[to] && totalSellFee > 0) {
                fees = amount.mul(totalSellFee).div(100);
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && totalBuyFee > 0) {
                fees = amount.mul(totalBuyFee).div(100);
            }

            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] = dexRouter.WETH();

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

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

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        bool success;

        if (contractBalance == 0) {
            return;
        }

        if (contractBalance > swapBackValueMax) {
            contractBalance = swapBackValueMax;
        }

        swapTokensForEth(contractBalance);

        uint256 ethBalance = address(this).balance;

        uint256 ethForDev = 0;

        if (totalBuyFee != 0) {
            ethForDev = (ethBalance * buyDevFee) / totalBuyFee;
        }

        if (ethForDev > 0) {
            (success, ) = address(devReceiver).call{value: ethForDev}("");
        }
        (success, ) = address(mktReceiver).call{value: address(this).balance}(
            ""
        );
    }

    // Internal read functions //

    function calculatePendingReward(
        address userAddress
    ) internal view returns (uint256) {
        UserNodes storage user = usersInfo[userAddress];
        uint256 timeDelta = block.timestamp - user.lastRewardCalculationTime;
        uint256 totalReward = 0;
        for (uint i = 0; i < 3; i++) {
            uint256 tierReward = (prices[i] * rewards[i]) / 100;
            tierReward *= (user.tierCounts[i] * timeDelta) / 1 days;
            totalReward += tierReward;
        }
        return totalReward;
    }
}

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":false,"internalType":"uint256","name":"totalBuyFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"buyMktFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"buyDevFee","type":"uint256"}],"name":"BuyFeeUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"DisabledTransferDelay","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromLimits","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"LimitsRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"maxTx","type":"uint256"}],"name":"MaxTxUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"maxWallet","type":"uint256"}],"name":"MaxWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"tier","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"NodesCreated","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":false,"internalType":"uint256","name":"totalSellFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sellMktFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sellDevFee","type":"uint256"}],"name":"SellFeeUpdated","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":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"},{"indexed":false,"internalType":"uint256","name":"swapBackValueMin","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"swapBackValueMax","type":"uint256"}],"name":"SwapbackSettingsUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"TradingEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"devReceiverUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"mktReceiverUpdated","type":"event"},{"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":[],"name":"antiWhaleInfo","outputs":[{"internalType":"bool","name":"_limitsInEffect","type":"bool"},{"internalType":"bool","name":"_trasnferDelayEnabled","type":"bool"},{"internalType":"uint256","name":"_maxWallet","type":"uint256"},{"internalType":"uint256","name":"_maxTx","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_target","type":"address"}],"name":"checkAddressPermissions","outputs":[{"internalType":"bool","name":"_isFeeExempt","type":"bool"},{"internalType":"bool","name":"_isTxLimitExempt","type":"bool"},{"internalType":"bool","name":"_automatedMarketMakerPairs","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_target","type":"address"}],"name":"checkAddressRewards","outputs":[{"internalType":"uint256","name":"_pendingRewards","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimRewards","outputs":[],"stateMutability":"nonpayable","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":"dexPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tier","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"enterTier","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feeRates","outputs":[{"internalType":"uint256","name":"_totalBuyFee","type":"uint256"},{"internalType":"uint256","name":"_buyMktFee","type":"uint256"},{"internalType":"uint256","name":"_buyDevFee","type":"uint256"},{"internalType":"uint256","name":"_totalSellFee","type":"uint256"},{"internalType":"uint256","name":"_sellMktFee","type":"uint256"},{"internalType":"uint256","name":"_sellDevFee","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeReceivers","outputs":[{"internalType":"address","name":"_mktReceiver","type":"address"},{"internalType":"address","name":"_devReceiver","type":"address"}],"stateMutability":"view","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":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nodesTiersInfo","outputs":[{"internalType":"uint8[]","name":"_rewards","type":"uint8[]"},{"internalType":"uint256[]","name":"_prices","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"nodesUserInfo","outputs":[{"internalType":"uint256","name":"_lastRewardCalculationTime","type":"uint256"},{"internalType":"uint256","name":"_accruedReward","type":"uint256"},{"internalType":"uint256[3]","name":"_tierCounts","type":"uint256[3]"},{"internalType":"uint256","name":"_pendingRewards","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"setBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"setDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"setSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"},{"internalType":"uint256","name":"_min","type":"uint256"},{"internalType":"uint256","name":"_max","type":"uint256"}],"name":"setSwapBackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"setTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"setWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapbackInfo","outputs":[{"internalType":"bool","name":"_swapbackEnabled","type":"bool"},{"internalType":"uint256","name":"_swapBackValueMin","type":"uint256"},{"internalType":"uint256","name":"_swapBackValueMax","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingOn","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":[{"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":[{"internalType":"address","name":"","type":"address"}],"name":"usersInfo","outputs":[{"internalType":"uint256","name":"lastRewardCalculationTime","type":"uint256"},{"internalType":"uint256","name":"accruedReward","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

610120604052600560c0908152600a60e052600f610100526200002790600690600362000850565b50604051806060016040528062000043620004a460201b60201c565b620000539060ff16600a62000a67565b6200006090602d62000a7c565b8152602001620000736012600a62000a67565b62000081906101c262000a7c565b8152602001620000946012600a62000a67565b620000a2906103b662000a7c565b9052620000b4906007906003620008fd565b506009805461ff0019169055600c805461ffff19166101011790556010805460ff19169055348015620000e657600080fd5b506040518060400160405280600a81526020016915dbdb99195c9b185b9960b21b81525060405180604001604052806005815260200164414c49434560d81b815250816003908162000139919062000b3a565b50600462000148828262000b3a565b505050620001656200015f620004a960201b60201c565b620004ad565b737a250d5630b4cf539739df2c5dacb4c659f2488d62000187816001620004ff565b6001600160a01b03811660808190526040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa158015620001d2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001f8919062000c06565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000246573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200026c919062000c06565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015620002ba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002e0919062000c06565b6001600160a01b031660a0819052620002fb906001620004ff565b60a0516200030b906001620005ae565b602060086038600e6000620003236012600a62000c31565b6200033290620186a062000a7c565b90506103e86200034482600a62000a7c565b62000350919062000c42565b600e556103e86200036382600a62000a7c565b6200036f919062000c42565b600d556103e86200038282600162000a7c565b6200038e919062000c42565b600a556064620003a082600162000a7c565b620003ac919062000c42565b600b5560138590556014849055620003c5848662000c65565b60125560168390556017829055620003de828462000c65565b6015556010805474532a5fc2bdc2ae343ac885d3f644da9e84acc38800610100600160a81b0319909116179055601180546001600160a01b031916331790556200043c620004346005546001600160a01b031690565b600162000602565b6200044930600162000602565b6200045861dead600162000602565b62000465336001620004ff565b62000472306001620004ff565b6200048161dead6001620004ff565b6200048c33620006a6565b62000498338262000766565b50505050505062000c7b565b601290565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6005546001600160a01b031633146200054e5760405162461bcd60e51b8152602060048201819052602482015260008051602062003a1783398151915260448201526064015b60405180910390fd5b6001600160a01b038216600081815260196020908152604091829020805460ff191685151590811790915591519182527f4b89c347592b1d537e066cb4ed98d87696ae35164745d7e370e4add16941dc9291015b60405180910390a25050565b6001600160a01b0382166000818152601a6020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6005546001600160a01b031633146200064d5760405162461bcd60e51b8152602060048201819052602482015260008051602062003a17833981519152604482015260640162000545565b6001600160a01b038216600081815260186020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df79101620005a2565b6005546001600160a01b03163314620006f15760405162461bcd60e51b8152602060048201819052602482015260008051602062003a17833981519152604482015260640162000545565b6001600160a01b038116620007585760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840162000545565b6200076381620004ad565b50565b6001600160a01b038216620007be5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640162000545565b8060026000828254620007d2919062000c65565b90915550506001600160a01b038216600090815260208190526040812080548392906200080190849062000c65565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b505050565b82805482825590600052602060002090601f01602090048101928215620008eb5791602002820160005b83821115620008ba57835183826101000a81548160ff021916908360ff16021790555092602001926001016020816000010492830192600103026200087a565b8015620008e95782816101000a81549060ff0219169055600101602081600001049283019260010302620008ba565b505b50620008f99291506200093b565b5090565b828054828255906000526020600020908101928215620008eb579160200282015b82811115620008eb5782518255916020019190600101906200091e565b5b80821115620008f957600081556001016200093c565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620009a95781600019048211156200098d576200098d62000952565b808516156200099b57918102915b93841c93908002906200096d565b509250929050565b600082620009c25750600162000a61565b81620009d15750600062000a61565b8160018114620009ea5760028114620009f55762000a15565b600191505062000a61565b60ff84111562000a095762000a0962000952565b50506001821b62000a61565b5060208310610133831016604e8410600b841016171562000a3a575081810a62000a61565b62000a46838362000968565b806000190482111562000a5d5762000a5d62000952565b0290505b92915050565b600062000a758383620009b1565b9392505050565b808202811582820484141762000a615762000a6162000952565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168062000ac157607f821691505b60208210810362000ae257634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200084b57600081815260208120601f850160051c8101602086101562000b115750805b601f850160051c820191505b8181101562000b325782815560010162000b1d565b505050505050565b81516001600160401b0381111562000b565762000b5662000a96565b62000b6e8162000b67845462000aac565b8462000ae8565b602080601f83116001811462000ba6576000841562000b8d5750858301515b600019600386901b1c1916600185901b17855562000b32565b600085815260208120601f198616915b8281101562000bd75788860151825594840194600190910190840162000bb6565b508582101562000bf65787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006020828403121562000c1957600080fd5b81516001600160a01b038116811462000a7557600080fd5b600062000a7560ff841683620009b1565b60008262000c6057634e487b7160e01b600052601260045260246000fd5b500490565b8082018082111562000a615762000a6162000952565b60805160a051612d5362000cc46000396000818161083c01528181610e680152611af7015260008181611ab9015281816126c90152818161278201526127be0152612d536000f3fe60806040526004361061023f5760003560e01c80638da5cb5b1161012e578063c68397e8116100ab578063e884f2601161006f578063e884f260146107f5578063f1d5f5171461080a578063f242ab411461082a578063f2fde38b1461085e578063fd1bc2ca1461087e57600080fd5b8063c68397e814610714578063d088935814610734578063d204744414610754578063dd62ed3e14610777578063dd9cdaed146107bd57600080fd5b8063a9059cbb116100f2578063a9059cbb14610647578063ae7ed56714610667578063b2d8f208146106a4578063b8758c8f146106c4578063c0246668146106f457600080fd5b80638da5cb5b146105a057806395d89b41146105d25780639a7a23d6146105e75780639fd8234e14610607578063a457c2d71461062757600080fd5b806353cfdaca116101bc578063715018a611610180578063715018a6146104f5578063751039fc1461050a5780637571336a1461051f5780637688c5841461053f5780638a8c523c1461058b57600080fd5b806353cfdaca146104165780635c85974f146104365780635d098b38146104565780635d0eaaaf1461047657806370a08231146104bf57600080fd5b806323b872dd1161020357806323b872dd1461035a578063313ce5671461037a578063372500ab1461039657806339509351146103ab5780633ff5ad78146103cb57600080fd5b806306fdde031461024b578063095ea7b31461027657806318160ddd146102a65780631cffccf4146102c55780631f53ac021461033857600080fd5b3661024657005b600080fd5b34801561025757600080fd5b50610260610898565b60405161026d9190612850565b60405180910390f35b34801561028257600080fd5b506102966102913660046128b3565b61092a565b604051901515815260200161026d565b3480156102b257600080fd5b506002545b60405190815260200161026d565b3480156102d157600080fd5b506103196102e03660046128df565b6001600160a01b03166000908152601860209081526040808320546019835281842054601a90935292205460ff92831693918316921690565b604080519315158452911515602084015215159082015260600161026d565b34801561034457600080fd5b506103586103533660046128df565b610941565b005b34801561036657600080fd5b506102966103753660046128fc565b6109d1565b34801561038657600080fd5b506040516012815260200161026d565b3480156103a257600080fd5b50610358610a7b565b3480156103b757600080fd5b506102966103c63660046128b3565b610abd565b3480156103d757600080fd5b506103f4600c54600d54600e5460ff808416946101009094041692565b604080519415158552921515602085015291830152606082015260800161026d565b34801561042257600080fd5b506102b76104313660046128df565b610af9565b34801561044257600080fd5b5061035861045136600461293d565b610b30565b34801561046257600080fd5b506103586104713660046128df565b610c07565b34801561048257600080fd5b506104aa6104913660046128df565b6008602052600090815260409020805460019091015482565b6040805192835260208301919091520161026d565b3480156104cb57600080fd5b506102b76104da3660046128df565b6001600160a01b031660009081526020819052604090205490565b34801561050157600080fd5b50610358610c99565b34801561051657600080fd5b50610358610ccf565b34801561052b57600080fd5b5061035861053a36600461296b565b610d30565b34801561054b57600080fd5b50601254601354601454601554601654601754604080519687526020870195909552938501929092526060840152608083015260a082015260c00161026d565b34801561059757600080fd5b50610358610dba565b3480156105ac57600080fd5b506005546001600160a01b03165b6040516001600160a01b03909116815260200161026d565b3480156105de57600080fd5b50610260610e2d565b3480156105f357600080fd5b5061035861060236600461296b565b610e3c565b34801561061357600080fd5b506103586106223660046129a0565b610f17565b34801561063357600080fd5b506102966106423660046128b3565b61100a565b34801561065357600080fd5b506102966106623660046128b3565b6110a3565b34801561067357600080fd5b50600954600a54600b5461010090920460ff169160408051931515845260208401929092529082015260600161026d565b3480156106b057600080fd5b506103586106bf3660046129a0565b6110b0565b3480156106d057600080fd5b506106e46106df3660046128df565b61119a565b60405161026d94939291906129c2565b34801561070057600080fd5b5061035861070f36600461296b565b611236565b34801561072057600080fd5b5061035861072f3660046129a0565b6112b8565b34801561074057600080fd5b5061035861074f366004612a0a565b6113c3565b34801561076057600080fd5b5061076961155d565b60405161026d929190612a3d565b34801561078357600080fd5b506102b7610792366004612abb565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3480156107c957600080fd5b50601054601154604080516101009093046001600160a01b03908116845290911660208301520161026d565b34801561080157600080fd5b50610358611628565b34801561081657600080fd5b5061035861082536600461293d565b61168a565b34801561083657600080fd5b506105ba7f000000000000000000000000000000000000000000000000000000000000000081565b34801561086a57600080fd5b506103586108793660046128df565b611766565b34801561088a57600080fd5b506010546102969060ff1681565b6060600380546108a790612af4565b80601f01602080910402602001604051908101604052809291908181526020018280546108d390612af4565b80156109205780601f106108f557610100808354040283529160200191610920565b820191906000526020600020905b81548152906001019060200180831161090357829003601f168201915b5050505050905090565b6000610937338484611801565b5060015b92915050565b6005546001600160a01b031633146109745760405162461bcd60e51b815260040161096b90612b2e565b60405180910390fd5b6011546040516001600160a01b03918216918316907fc246820312f1be47e3958d661d0c150c01b96d1fe3df1e38edd76693ffa8122b90600090a3601180546001600160a01b0319166001600160a01b0392909216919091179055565b60006109de848484611925565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610a635760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b606482015260840161096b565b610a708533858403611801565b506001949350505050565b33600081815260086020526040812091610a949061201c565b8260010154610aa39190612b79565b428355600060018401559050610ab93382612124565b5050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610937918590610af4908690612b79565b611801565b6001600160a01b0381166000908152600860205260408120610b1a8361201c565b8160010154610b299190612b79565b9392505050565b6005546001600160a01b03163314610b5a5760405162461bcd60e51b815260040161096b90612b2e565b6002811015610bab5760405162461bcd60e51b815260206004820181905260248201527f43616e6e6f7420736574206d61785478206c6f776572207468616e20302e3225604482015260640161096b565b6103e8610bb760025490565b610bc19083612b8c565b610bcb9190612ba3565b600e8190556040519081527fff3dd5e80294197918c284bbfc3dadd97d0b40ce92106110946329088f80068a906020015b60405180910390a150565b6005546001600160a01b03163314610c315760405162461bcd60e51b815260040161096b90612b2e565b6010546040516001600160a01b036101009092048216918316907fa90d7598849ffffb63cb2a2b23157fa85704d50370070de404a308243fe1daec90600090a3601080546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b6005546001600160a01b03163314610cc35760405162461bcd60e51b815260040161096b90612b2e565b610ccd6000612203565b565b6005546001600160a01b03163314610cf95760405162461bcd60e51b815260040161096b90612b2e565b600c805460ff1916905560405142907ff4eaa75eae08ae80c3daf791438dac1cff2cfd3b0bad2304ec7bbb067e50261690600090a2565b6005546001600160a01b03163314610d5a5760405162461bcd60e51b815260040161096b90612b2e565b6001600160a01b038216600081815260196020908152604091829020805460ff191685151590811790915591519182527f4b89c347592b1d537e066cb4ed98d87696ae35164745d7e370e4add16941dc9291015b60405180910390a25050565b6005546001600160a01b03163314610de45760405162461bcd60e51b815260040161096b90612b2e565b6010805460ff191660011790556009805461ff00191661010017905560405142907fb3da2db3dfc3778f99852546c6e9ab39ec253f9de7b0847afec61bd27878e92390600090a2565b6060600480546108a790612af4565b6005546001600160a01b03163314610e665760405162461bcd60e51b815260040161096b90612b2e565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031603610f0d5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000606482015260840161096b565b610ab98282612255565b6005546001600160a01b03163314610f415760405162461bcd60e51b815260040161096b90612b2e565b60168290556017819055610f558183612b79565b601581905560641015610fbc5760405162461bcd60e51b815260206004820152602960248201527f546f74616c2073656c6c206665652063616e6e6f7420626520686967686572206044820152687468616e203130302560b81b606482015260840161096b565b601554601654601754604080519384526020840192909252908201527fcb5f36df892836a2eaedc349de29a7581176990398ee185d16eaa8f6c1abd8f1906060015b60405180910390a15050565b3360009081526001602090815260408083206001600160a01b03861684529091528120548281101561108c5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b606482015260840161096b565b6110993385858403611801565b5060019392505050565b6000610937338484611925565b6005546001600160a01b031633146110da5760405162461bcd60e51b815260040161096b90612b2e565b601382905560148190556110ee8183612b79565b6012819055606410156111545760405162461bcd60e51b815260206004820152602860248201527f546f74616c20627579206665652063616e6e6f7420626520686967686572207460448201526768616e203130302560c01b606482015260840161096b565b601254601354601454604080519384526020840192909252908201527f38513c502b0ab4834ac1df9502b76f75dcf7092469782cfd0db7fe664388e25e90606001610ffe565b6000806111a5612832565b6001600160a01b03841660009081526008602052604080822080546001820154835160608101909452909650945060020160038282826020028201915b8154815260200190600101908083116111e257505050506001600160a01b03871660009081526008602052604090206001015491935061122390508661201c565b61122d9190612b79565b90509193509193565b6005546001600160a01b031633146112605760405162461bcd60e51b815260040161096b90612b2e565b6001600160a01b038216600081815260186020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df79101610dae565b60028211156112f85760405162461bcd60e51b815260206004820152600c60248201526b24b73b30b634b2103a34b2b960a11b604482015260640161096b565b336000818152600860205260409020906113119061201c565b8160010160008282546113249190612b79565b9091555082905060028201846003811061134057611340612bc5565b0160008282546113509190612b79565b90915550504281556007805461138f9133918591908790811061137557611375612bc5565b906000526020600020015461138a9190612b8c565b6122a9565b6040518290849033907fb87d817dd53eba861d73916ac2df68eb06bdbccdd6b73185bb58ca6aada23b7a90600090a4505050565b6005546001600160a01b031633146113ed5760405162461bcd60e51b815260040161096b90612b2e565b600182101561145b5760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e604482015273101817181892903a37ba30b61039bab838363c9760611b606482015260840161096b565b818110156114be5760405162461bcd60e51b815260206004820152602a60248201527f6d6178696d756d20616d6f756e742063616e7420626520686967686572207468604482015269616e206d696e696d756d60b01b606482015260840161096b565b6009805461ff001916610100851515021790556002546127109083906114e49190612b8c565b6114ee9190612ba3565b600a55612710816114fe60025490565b6115089190612b8c565b6115129190612ba3565b600b55604080518415158152602081018490529081018290527f52cd2cdb42ff0eeec9362d7ed5b04f64c8d022697128b5378fc51cea7e63c7799060600160405180910390a1505050565b60608060068054806020026020016040519081016040528092919081815260200182805480156115ca57602002820191906000526020600020906000905b825461010083900a900460ff1681526020600192830181810494850194909303909202910180841161159b5790505b50505050509150600780548060200260200160405190810160405280929190818152602001828054801561161d57602002820191906000526020600020905b815481526020019060010190808311611609575b505050505090509091565b6005546001600160a01b031633146116525760405162461bcd60e51b815260040161096b90612b2e565b600c805461ff001916905560405142907f26e776fcf7ca20aa79b5b946e9b5111f47205539ece9d7a7995271dd6a8b5bad90600090a2565b6005546001600160a01b031633146116b45760405162461bcd60e51b815260040161096b90612b2e565b60058110156117115760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263302e352560e01b606482015260840161096b565b6103e861171d60025490565b6117279083612b8c565b6117319190612ba3565b600d8190556040519081527f12528a3c61e0f3b2d6fc707a9fc58b1af86e252cad0d7f4c154ebeabb162dace90602001610bfc565b6005546001600160a01b031633146117905760405162461bcd60e51b815260040161096b90612b2e565b6001600160a01b0381166117f55760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161096b565b6117fe81612203565b50565b6001600160a01b0383166118635760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161096b565b6001600160a01b0382166118c45760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161096b565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831661194b5760405162461bcd60e51b815260040161096b90612bdb565b6001600160a01b0382166119715760405162461bcd60e51b815260040161096b90612c20565b8060000361198a57611985838360006123f7565b505050565b600c5460ff1615611e22576005546001600160a01b038481169116148015906119c157506005546001600160a01b03838116911614155b80156119d557506001600160a01b03821615155b80156119ec57506001600160a01b03821661dead14155b80156119fb575060095460ff16155b15611e225760105460ff16611a8e576001600160a01b03831660009081526018602052604090205460ff1680611a4957506001600160a01b03821660009081526018602052604090205460ff165b611a8e5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b604482015260640161096b565b600c54610100900460ff1615611bda576005546001600160a01b03838116911614801590611aee57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b8015611b2c57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b15611bda57326000908152600f60205260409020544311611bc75760405162461bcd60e51b815260206004820152604960248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b6064820152681030b63637bbb2b21760b91b608482015260a40161096b565b326000908152600f602052604090204390555b6001600160a01b0383166000908152601a602052604090205460ff168015611c1b57506001600160a01b03821660009081526019602052604090205460ff16155b15611cf057600e54811115611c815760405162461bcd60e51b815260206004820152602660248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526536b0bc2a3c1760d11b606482015260840161096b565b600d546001600160a01b038316600090815260208190526040902054611ca79083612b79565b1115611ceb5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b604482015260640161096b565b611e22565b6001600160a01b0382166000908152601a602052604090205460ff168015611d3157506001600160a01b03831660009081526019602052604090205460ff16155b15611d9857600e54811115611ceb5760405162461bcd60e51b815260206004820152602760248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152661036b0bc2a3c1760c91b606482015260840161096b565b6001600160a01b03821660009081526019602052604090205460ff16611e2257600d546001600160a01b038316600090815260208190526040902054611dde9083612b79565b1115611e225760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b604482015260640161096b565b30600090815260208190526040902054600a5481108015908190611e4d5750600954610100900460ff165b8015611e5c575060095460ff16155b8015611e8157506001600160a01b0385166000908152601a602052604090205460ff16155b8015611ea657506001600160a01b03851660009081526018602052604090205460ff16155b8015611ecb57506001600160a01b03841660009081526018602052604090205460ff16155b15611ef0576009805460ff19166001179055611ee561254c565b6009805460ff191690555b6009546001600160a01b03861660009081526018602052604090205460ff91821615911680611f3757506001600160a01b03851660009081526018602052604090205460ff165b15611f40575060005b60008115612008576001600160a01b0386166000908152601a602052604090205460ff168015611f7257506000601554115b15611f9e57611f976064611f916015548861265a90919063ffffffff16565b90612666565b9050611fea565b6001600160a01b0387166000908152601a602052604090205460ff168015611fc857506000601254115b15611fea57611fe76064611f916012548861265a90919063ffffffff16565b90505b8015611ffb57611ffb8730836123f7565b6120058186612c63565b94505b6120138787876123f7565b50505050505050565b6001600160a01b0381166000908152600860205260408120805482906120429042612c63565b90506000805b600381101561211b57600060646006838154811061206857612068612bc5565b90600052602060002090602091828204019190069054906101000a900460ff1660ff166007848154811061209e5761209e612bc5565b90600052602060002001546120b39190612b8c565b6120bd9190612ba3565b905062015180848660020184600381106120d9576120d9612bc5565b01546120e59190612b8c565b6120ef9190612ba3565b6120f99082612b8c565b90506121058184612b79565b925050808061211390612c76565b915050612048565b50949350505050565b6001600160a01b03821661217a5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161096b565b806002600082825461218c9190612b79565b90915550506001600160a01b038216600090815260208190526040812080548392906121b9908490612b79565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0382166000818152601a6020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b0382166123095760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b606482015260840161096b565b6001600160a01b0382166000908152602081905260409020548181101561237d5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b606482015260840161096b565b6001600160a01b03831660009081526020819052604081208383039055600280548492906123ac908490612c63565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b6001600160a01b03831661241d5760405162461bcd60e51b815260040161096b90612bdb565b6001600160a01b0382166124435760405162461bcd60e51b815260040161096b90612c20565b6001600160a01b038316600090815260208190526040902054818110156124bb5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161096b565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906124f2908490612b79565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161253e91815260200190565b60405180910390a350505050565b3060009081526020819052604081205490818103612568575050565b600b5482111561257857600b5491505b61258182612672565b6012544790600090156125ab5760125460145461259e9084612b8c565b6125a89190612ba3565b90505b8015612609576011546040516001600160a01b03909116908290600081818185875af1925050503d80600081146125fe576040519150601f19603f3d011682016040523d82523d6000602084013e612603565b606091505b50909350505b6010546040516101009091046001600160a01b0316904790600081818185875af1925050503d8060008114612013576040519150601f19603f3d011682016040523d82523d6000602084013e612013565b6000610b298284612b8c565b6000610b298284612ba3565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106126a7576126a7612bc5565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612725573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127499190612c8f565b8160018151811061275c5761275c612bc5565b60200260200101906001600160a01b031690816001600160a01b0316815250506127a7307f000000000000000000000000000000000000000000000000000000000000000084611801565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac947906127fc908590600090869030904290600401612cac565b600060405180830381600087803b15801561281657600080fd5b505af115801561282a573d6000803e3d6000fd5b505050505050565b60405180606001604052806003906020820280368337509192915050565b600060208083528351808285015260005b8181101561287d57858101830151858201604001528201612861565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146117fe57600080fd5b600080604083850312156128c657600080fd5b82356128d18161289e565b946020939093013593505050565b6000602082840312156128f157600080fd5b8135610b298161289e565b60008060006060848603121561291157600080fd5b833561291c8161289e565b9250602084013561292c8161289e565b929592945050506040919091013590565b60006020828403121561294f57600080fd5b5035919050565b8035801515811461296657600080fd5b919050565b6000806040838503121561297e57600080fd5b82356129898161289e565b915061299760208401612956565b90509250929050565b600080604083850312156129b357600080fd5b50508035926020909101359150565b848152602080820185905260c0820190604083018560005b60038110156129f7578151835291830191908301906001016129da565b505050508260a083015295945050505050565b600080600060608486031215612a1f57600080fd5b612a2884612956565b95602085013595506040909401359392505050565b604080825283519082018190526000906020906060840190828701845b82811015612a7957815160ff1684529284019290840190600101612a5a565b5050508381038285015284518082528583019183019060005b81811015612aae57835183529284019291840191600101612a92565b5090979650505050505050565b60008060408385031215612ace57600080fd5b8235612ad98161289e565b91506020830135612ae98161289e565b809150509250929050565b600181811c90821680612b0857607f821691505b602082108103612b2857634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082018082111561093b5761093b612b63565b808202811582820484141761093b5761093b612b63565b600082612bc057634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b8181038181111561093b5761093b612b63565b600060018201612c8857612c88612b63565b5060010190565b600060208284031215612ca157600080fd5b8151610b298161289e565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612cfc5784516001600160a01b031683529383019391830191600101612cd7565b50506001600160a01b0396909616606085015250505060800152939250505056fea26469706673582212202d8d79fb640dd76aed5b6203d312ac63c8361d083af6705e85b46145214ad67464736f6c634300081300334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572

Deployed Bytecode

0x60806040526004361061023f5760003560e01c80638da5cb5b1161012e578063c68397e8116100ab578063e884f2601161006f578063e884f260146107f5578063f1d5f5171461080a578063f242ab411461082a578063f2fde38b1461085e578063fd1bc2ca1461087e57600080fd5b8063c68397e814610714578063d088935814610734578063d204744414610754578063dd62ed3e14610777578063dd9cdaed146107bd57600080fd5b8063a9059cbb116100f2578063a9059cbb14610647578063ae7ed56714610667578063b2d8f208146106a4578063b8758c8f146106c4578063c0246668146106f457600080fd5b80638da5cb5b146105a057806395d89b41146105d25780639a7a23d6146105e75780639fd8234e14610607578063a457c2d71461062757600080fd5b806353cfdaca116101bc578063715018a611610180578063715018a6146104f5578063751039fc1461050a5780637571336a1461051f5780637688c5841461053f5780638a8c523c1461058b57600080fd5b806353cfdaca146104165780635c85974f146104365780635d098b38146104565780635d0eaaaf1461047657806370a08231146104bf57600080fd5b806323b872dd1161020357806323b872dd1461035a578063313ce5671461037a578063372500ab1461039657806339509351146103ab5780633ff5ad78146103cb57600080fd5b806306fdde031461024b578063095ea7b31461027657806318160ddd146102a65780631cffccf4146102c55780631f53ac021461033857600080fd5b3661024657005b600080fd5b34801561025757600080fd5b50610260610898565b60405161026d9190612850565b60405180910390f35b34801561028257600080fd5b506102966102913660046128b3565b61092a565b604051901515815260200161026d565b3480156102b257600080fd5b506002545b60405190815260200161026d565b3480156102d157600080fd5b506103196102e03660046128df565b6001600160a01b03166000908152601860209081526040808320546019835281842054601a90935292205460ff92831693918316921690565b604080519315158452911515602084015215159082015260600161026d565b34801561034457600080fd5b506103586103533660046128df565b610941565b005b34801561036657600080fd5b506102966103753660046128fc565b6109d1565b34801561038657600080fd5b506040516012815260200161026d565b3480156103a257600080fd5b50610358610a7b565b3480156103b757600080fd5b506102966103c63660046128b3565b610abd565b3480156103d757600080fd5b506103f4600c54600d54600e5460ff808416946101009094041692565b604080519415158552921515602085015291830152606082015260800161026d565b34801561042257600080fd5b506102b76104313660046128df565b610af9565b34801561044257600080fd5b5061035861045136600461293d565b610b30565b34801561046257600080fd5b506103586104713660046128df565b610c07565b34801561048257600080fd5b506104aa6104913660046128df565b6008602052600090815260409020805460019091015482565b6040805192835260208301919091520161026d565b3480156104cb57600080fd5b506102b76104da3660046128df565b6001600160a01b031660009081526020819052604090205490565b34801561050157600080fd5b50610358610c99565b34801561051657600080fd5b50610358610ccf565b34801561052b57600080fd5b5061035861053a36600461296b565b610d30565b34801561054b57600080fd5b50601254601354601454601554601654601754604080519687526020870195909552938501929092526060840152608083015260a082015260c00161026d565b34801561059757600080fd5b50610358610dba565b3480156105ac57600080fd5b506005546001600160a01b03165b6040516001600160a01b03909116815260200161026d565b3480156105de57600080fd5b50610260610e2d565b3480156105f357600080fd5b5061035861060236600461296b565b610e3c565b34801561061357600080fd5b506103586106223660046129a0565b610f17565b34801561063357600080fd5b506102966106423660046128b3565b61100a565b34801561065357600080fd5b506102966106623660046128b3565b6110a3565b34801561067357600080fd5b50600954600a54600b5461010090920460ff169160408051931515845260208401929092529082015260600161026d565b3480156106b057600080fd5b506103586106bf3660046129a0565b6110b0565b3480156106d057600080fd5b506106e46106df3660046128df565b61119a565b60405161026d94939291906129c2565b34801561070057600080fd5b5061035861070f36600461296b565b611236565b34801561072057600080fd5b5061035861072f3660046129a0565b6112b8565b34801561074057600080fd5b5061035861074f366004612a0a565b6113c3565b34801561076057600080fd5b5061076961155d565b60405161026d929190612a3d565b34801561078357600080fd5b506102b7610792366004612abb565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3480156107c957600080fd5b50601054601154604080516101009093046001600160a01b03908116845290911660208301520161026d565b34801561080157600080fd5b50610358611628565b34801561081657600080fd5b5061035861082536600461293d565b61168a565b34801561083657600080fd5b506105ba7f000000000000000000000000c413e34a8b368e0c9a833f02519fab72515cd2e181565b34801561086a57600080fd5b506103586108793660046128df565b611766565b34801561088a57600080fd5b506010546102969060ff1681565b6060600380546108a790612af4565b80601f01602080910402602001604051908101604052809291908181526020018280546108d390612af4565b80156109205780601f106108f557610100808354040283529160200191610920565b820191906000526020600020905b81548152906001019060200180831161090357829003601f168201915b5050505050905090565b6000610937338484611801565b5060015b92915050565b6005546001600160a01b031633146109745760405162461bcd60e51b815260040161096b90612b2e565b60405180910390fd5b6011546040516001600160a01b03918216918316907fc246820312f1be47e3958d661d0c150c01b96d1fe3df1e38edd76693ffa8122b90600090a3601180546001600160a01b0319166001600160a01b0392909216919091179055565b60006109de848484611925565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610a635760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b606482015260840161096b565b610a708533858403611801565b506001949350505050565b33600081815260086020526040812091610a949061201c565b8260010154610aa39190612b79565b428355600060018401559050610ab93382612124565b5050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610937918590610af4908690612b79565b611801565b6001600160a01b0381166000908152600860205260408120610b1a8361201c565b8160010154610b299190612b79565b9392505050565b6005546001600160a01b03163314610b5a5760405162461bcd60e51b815260040161096b90612b2e565b6002811015610bab5760405162461bcd60e51b815260206004820181905260248201527f43616e6e6f7420736574206d61785478206c6f776572207468616e20302e3225604482015260640161096b565b6103e8610bb760025490565b610bc19083612b8c565b610bcb9190612ba3565b600e8190556040519081527fff3dd5e80294197918c284bbfc3dadd97d0b40ce92106110946329088f80068a906020015b60405180910390a150565b6005546001600160a01b03163314610c315760405162461bcd60e51b815260040161096b90612b2e565b6010546040516001600160a01b036101009092048216918316907fa90d7598849ffffb63cb2a2b23157fa85704d50370070de404a308243fe1daec90600090a3601080546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b6005546001600160a01b03163314610cc35760405162461bcd60e51b815260040161096b90612b2e565b610ccd6000612203565b565b6005546001600160a01b03163314610cf95760405162461bcd60e51b815260040161096b90612b2e565b600c805460ff1916905560405142907ff4eaa75eae08ae80c3daf791438dac1cff2cfd3b0bad2304ec7bbb067e50261690600090a2565b6005546001600160a01b03163314610d5a5760405162461bcd60e51b815260040161096b90612b2e565b6001600160a01b038216600081815260196020908152604091829020805460ff191685151590811790915591519182527f4b89c347592b1d537e066cb4ed98d87696ae35164745d7e370e4add16941dc9291015b60405180910390a25050565b6005546001600160a01b03163314610de45760405162461bcd60e51b815260040161096b90612b2e565b6010805460ff191660011790556009805461ff00191661010017905560405142907fb3da2db3dfc3778f99852546c6e9ab39ec253f9de7b0847afec61bd27878e92390600090a2565b6060600480546108a790612af4565b6005546001600160a01b03163314610e665760405162461bcd60e51b815260040161096b90612b2e565b7f000000000000000000000000c413e34a8b368e0c9a833f02519fab72515cd2e16001600160a01b0316826001600160a01b031603610f0d5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000606482015260840161096b565b610ab98282612255565b6005546001600160a01b03163314610f415760405162461bcd60e51b815260040161096b90612b2e565b60168290556017819055610f558183612b79565b601581905560641015610fbc5760405162461bcd60e51b815260206004820152602960248201527f546f74616c2073656c6c206665652063616e6e6f7420626520686967686572206044820152687468616e203130302560b81b606482015260840161096b565b601554601654601754604080519384526020840192909252908201527fcb5f36df892836a2eaedc349de29a7581176990398ee185d16eaa8f6c1abd8f1906060015b60405180910390a15050565b3360009081526001602090815260408083206001600160a01b03861684529091528120548281101561108c5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b606482015260840161096b565b6110993385858403611801565b5060019392505050565b6000610937338484611925565b6005546001600160a01b031633146110da5760405162461bcd60e51b815260040161096b90612b2e565b601382905560148190556110ee8183612b79565b6012819055606410156111545760405162461bcd60e51b815260206004820152602860248201527f546f74616c20627579206665652063616e6e6f7420626520686967686572207460448201526768616e203130302560c01b606482015260840161096b565b601254601354601454604080519384526020840192909252908201527f38513c502b0ab4834ac1df9502b76f75dcf7092469782cfd0db7fe664388e25e90606001610ffe565b6000806111a5612832565b6001600160a01b03841660009081526008602052604080822080546001820154835160608101909452909650945060020160038282826020028201915b8154815260200190600101908083116111e257505050506001600160a01b03871660009081526008602052604090206001015491935061122390508661201c565b61122d9190612b79565b90509193509193565b6005546001600160a01b031633146112605760405162461bcd60e51b815260040161096b90612b2e565b6001600160a01b038216600081815260186020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df79101610dae565b60028211156112f85760405162461bcd60e51b815260206004820152600c60248201526b24b73b30b634b2103a34b2b960a11b604482015260640161096b565b336000818152600860205260409020906113119061201c565b8160010160008282546113249190612b79565b9091555082905060028201846003811061134057611340612bc5565b0160008282546113509190612b79565b90915550504281556007805461138f9133918591908790811061137557611375612bc5565b906000526020600020015461138a9190612b8c565b6122a9565b6040518290849033907fb87d817dd53eba861d73916ac2df68eb06bdbccdd6b73185bb58ca6aada23b7a90600090a4505050565b6005546001600160a01b031633146113ed5760405162461bcd60e51b815260040161096b90612b2e565b600182101561145b5760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e604482015273101817181892903a37ba30b61039bab838363c9760611b606482015260840161096b565b818110156114be5760405162461bcd60e51b815260206004820152602a60248201527f6d6178696d756d20616d6f756e742063616e7420626520686967686572207468604482015269616e206d696e696d756d60b01b606482015260840161096b565b6009805461ff001916610100851515021790556002546127109083906114e49190612b8c565b6114ee9190612ba3565b600a55612710816114fe60025490565b6115089190612b8c565b6115129190612ba3565b600b55604080518415158152602081018490529081018290527f52cd2cdb42ff0eeec9362d7ed5b04f64c8d022697128b5378fc51cea7e63c7799060600160405180910390a1505050565b60608060068054806020026020016040519081016040528092919081815260200182805480156115ca57602002820191906000526020600020906000905b825461010083900a900460ff1681526020600192830181810494850194909303909202910180841161159b5790505b50505050509150600780548060200260200160405190810160405280929190818152602001828054801561161d57602002820191906000526020600020905b815481526020019060010190808311611609575b505050505090509091565b6005546001600160a01b031633146116525760405162461bcd60e51b815260040161096b90612b2e565b600c805461ff001916905560405142907f26e776fcf7ca20aa79b5b946e9b5111f47205539ece9d7a7995271dd6a8b5bad90600090a2565b6005546001600160a01b031633146116b45760405162461bcd60e51b815260040161096b90612b2e565b60058110156117115760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263302e352560e01b606482015260840161096b565b6103e861171d60025490565b6117279083612b8c565b6117319190612ba3565b600d8190556040519081527f12528a3c61e0f3b2d6fc707a9fc58b1af86e252cad0d7f4c154ebeabb162dace90602001610bfc565b6005546001600160a01b031633146117905760405162461bcd60e51b815260040161096b90612b2e565b6001600160a01b0381166117f55760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161096b565b6117fe81612203565b50565b6001600160a01b0383166118635760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161096b565b6001600160a01b0382166118c45760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161096b565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831661194b5760405162461bcd60e51b815260040161096b90612bdb565b6001600160a01b0382166119715760405162461bcd60e51b815260040161096b90612c20565b8060000361198a57611985838360006123f7565b505050565b600c5460ff1615611e22576005546001600160a01b038481169116148015906119c157506005546001600160a01b03838116911614155b80156119d557506001600160a01b03821615155b80156119ec57506001600160a01b03821661dead14155b80156119fb575060095460ff16155b15611e225760105460ff16611a8e576001600160a01b03831660009081526018602052604090205460ff1680611a4957506001600160a01b03821660009081526018602052604090205460ff165b611a8e5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b604482015260640161096b565b600c54610100900460ff1615611bda576005546001600160a01b03838116911614801590611aee57507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0316826001600160a01b031614155b8015611b2c57507f000000000000000000000000c413e34a8b368e0c9a833f02519fab72515cd2e16001600160a01b0316826001600160a01b031614155b15611bda57326000908152600f60205260409020544311611bc75760405162461bcd60e51b815260206004820152604960248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b6064820152681030b63637bbb2b21760b91b608482015260a40161096b565b326000908152600f602052604090204390555b6001600160a01b0383166000908152601a602052604090205460ff168015611c1b57506001600160a01b03821660009081526019602052604090205460ff16155b15611cf057600e54811115611c815760405162461bcd60e51b815260206004820152602660248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526536b0bc2a3c1760d11b606482015260840161096b565b600d546001600160a01b038316600090815260208190526040902054611ca79083612b79565b1115611ceb5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b604482015260640161096b565b611e22565b6001600160a01b0382166000908152601a602052604090205460ff168015611d3157506001600160a01b03831660009081526019602052604090205460ff16155b15611d9857600e54811115611ceb5760405162461bcd60e51b815260206004820152602760248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152661036b0bc2a3c1760c91b606482015260840161096b565b6001600160a01b03821660009081526019602052604090205460ff16611e2257600d546001600160a01b038316600090815260208190526040902054611dde9083612b79565b1115611e225760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b604482015260640161096b565b30600090815260208190526040902054600a5481108015908190611e4d5750600954610100900460ff165b8015611e5c575060095460ff16155b8015611e8157506001600160a01b0385166000908152601a602052604090205460ff16155b8015611ea657506001600160a01b03851660009081526018602052604090205460ff16155b8015611ecb57506001600160a01b03841660009081526018602052604090205460ff16155b15611ef0576009805460ff19166001179055611ee561254c565b6009805460ff191690555b6009546001600160a01b03861660009081526018602052604090205460ff91821615911680611f3757506001600160a01b03851660009081526018602052604090205460ff165b15611f40575060005b60008115612008576001600160a01b0386166000908152601a602052604090205460ff168015611f7257506000601554115b15611f9e57611f976064611f916015548861265a90919063ffffffff16565b90612666565b9050611fea565b6001600160a01b0387166000908152601a602052604090205460ff168015611fc857506000601254115b15611fea57611fe76064611f916012548861265a90919063ffffffff16565b90505b8015611ffb57611ffb8730836123f7565b6120058186612c63565b94505b6120138787876123f7565b50505050505050565b6001600160a01b0381166000908152600860205260408120805482906120429042612c63565b90506000805b600381101561211b57600060646006838154811061206857612068612bc5565b90600052602060002090602091828204019190069054906101000a900460ff1660ff166007848154811061209e5761209e612bc5565b90600052602060002001546120b39190612b8c565b6120bd9190612ba3565b905062015180848660020184600381106120d9576120d9612bc5565b01546120e59190612b8c565b6120ef9190612ba3565b6120f99082612b8c565b90506121058184612b79565b925050808061211390612c76565b915050612048565b50949350505050565b6001600160a01b03821661217a5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161096b565b806002600082825461218c9190612b79565b90915550506001600160a01b038216600090815260208190526040812080548392906121b9908490612b79565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0382166000818152601a6020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b0382166123095760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b606482015260840161096b565b6001600160a01b0382166000908152602081905260409020548181101561237d5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b606482015260840161096b565b6001600160a01b03831660009081526020819052604081208383039055600280548492906123ac908490612c63565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b6001600160a01b03831661241d5760405162461bcd60e51b815260040161096b90612bdb565b6001600160a01b0382166124435760405162461bcd60e51b815260040161096b90612c20565b6001600160a01b038316600090815260208190526040902054818110156124bb5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161096b565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906124f2908490612b79565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161253e91815260200190565b60405180910390a350505050565b3060009081526020819052604081205490818103612568575050565b600b5482111561257857600b5491505b61258182612672565b6012544790600090156125ab5760125460145461259e9084612b8c565b6125a89190612ba3565b90505b8015612609576011546040516001600160a01b03909116908290600081818185875af1925050503d80600081146125fe576040519150601f19603f3d011682016040523d82523d6000602084013e612603565b606091505b50909350505b6010546040516101009091046001600160a01b0316904790600081818185875af1925050503d8060008114612013576040519150601f19603f3d011682016040523d82523d6000602084013e612013565b6000610b298284612b8c565b6000610b298284612ba3565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106126a7576126a7612bc5565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612725573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127499190612c8f565b8160018151811061275c5761275c612bc5565b60200260200101906001600160a01b031690816001600160a01b0316815250506127a7307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611801565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac947906127fc908590600090869030904290600401612cac565b600060405180830381600087803b15801561281657600080fd5b505af115801561282a573d6000803e3d6000fd5b505050505050565b60405180606001604052806003906020820280368337509192915050565b600060208083528351808285015260005b8181101561287d57858101830151858201604001528201612861565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146117fe57600080fd5b600080604083850312156128c657600080fd5b82356128d18161289e565b946020939093013593505050565b6000602082840312156128f157600080fd5b8135610b298161289e565b60008060006060848603121561291157600080fd5b833561291c8161289e565b9250602084013561292c8161289e565b929592945050506040919091013590565b60006020828403121561294f57600080fd5b5035919050565b8035801515811461296657600080fd5b919050565b6000806040838503121561297e57600080fd5b82356129898161289e565b915061299760208401612956565b90509250929050565b600080604083850312156129b357600080fd5b50508035926020909101359150565b848152602080820185905260c0820190604083018560005b60038110156129f7578151835291830191908301906001016129da565b505050508260a083015295945050505050565b600080600060608486031215612a1f57600080fd5b612a2884612956565b95602085013595506040909401359392505050565b604080825283519082018190526000906020906060840190828701845b82811015612a7957815160ff1684529284019290840190600101612a5a565b5050508381038285015284518082528583019183019060005b81811015612aae57835183529284019291840191600101612a92565b5090979650505050505050565b60008060408385031215612ace57600080fd5b8235612ad98161289e565b91506020830135612ae98161289e565b809150509250929050565b600181811c90821680612b0857607f821691505b602082108103612b2857634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082018082111561093b5761093b612b63565b808202811582820484141761093b5761093b612b63565b600082612bc057634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b8181038181111561093b5761093b612b63565b600060018201612c8857612c88612b63565b5060010190565b600060208284031215612ca157600080fd5b8151610b298161289e565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612cfc5784516001600160a01b031683529383019391830191600101612cd7565b50506001600160a01b0396909616606085015250505060800152939250505056fea26469706673582212202d8d79fb640dd76aed5b6203d312ac63c8361d083af6705e85b46145214ad67464736f6c63430008130033

Deployed Bytecode Sourcemap

25428:24433:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11026:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13259:194;;;;;;;;;;-1:-1:-1;13259:194:0;;;;;:::i;:::-;;:::i;:::-;;;1188:14:1;;1181:22;1163:41;;1151:2;1136:18;13259:194:0;1023:187:1;12146:108:0;;;;;;;;;;-1:-1:-1;12234:12:0;;12146:108;;;1361:25:1;;;1349:2;1334:18;12146:108:0;1215:177:1;42882:428:0;;;;;;;;;;-1:-1:-1;42882:428:0;;;;;:::i;:::-;-1:-1:-1;;;;;43154:20:0;43012:17;43154:20;;;:11;:20;;;;;;;;;43204:15;:24;;;;;;43268:25;:34;;;;;;43154:20;;;;;43204:24;;;;43268:34;;42882:428;;;;;1858:14:1;;1851:22;1833:41;;1917:14;;1910:22;1905:2;1890:18;;1883:50;1976:14;1969:22;1949:18;;;1942:50;1821:2;1806:18;42882:428:0;1649:349:1;37938:160:0;;;;;;;;;;-1:-1:-1;37938:160:0;;;;;:::i;:::-;;:::i;:::-;;13931:529;;;;;;;;;;-1:-1:-1;13931:529:0;;;;;:::i;:::-;;:::i;43579:93::-;;;;;;;;;;-1:-1:-1;43579:93:0;;43662:2;2606:36:1;;2594:2;2579:18;43579:93:0;2464:184:1;31397:366:0;;;;;;;;;;;;;:::i;14865:290::-;;;;;;;;;;-1:-1:-1;14865:290:0;;;;;:::i;:::-;;:::i;39268:393::-;;;;;;;;;;;;39526:14;;39619:9;;39648:5;;39526:14;;;;;;39575:20;;;;;39268:393;;;;;2897:14:1;;2890:22;2872:41;;2956:14;;2949:22;2944:2;2929:18;;2922:50;2988:18;;;2981:34;3046:2;3031:18;;3024:34;2859:3;2844:19;39268:393:0;2653:411:1;43318:253:0;;;;;;;;;;-1:-1:-1;43318:253:0;;;;;:::i;:::-;;:::i;33888:215::-;;;;;;;;;;-1:-1:-1;33888:215:0;;;;;:::i;:::-;;:::i;37598:166::-;;;;;;;;;;-1:-1:-1;37598:166:0;;;;;:::i;:::-;;:::i;25967:46::-;;;;;;;;;;-1:-1:-1;25967:46:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;3428:25:1;;;3484:2;3469:18;;3462:34;;;;3401:18;25967:46:0;3254:248:1;12317:143:0;;;;;;;;;;-1:-1:-1;12317:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;12434:18:0;12407:7;12434:18;;;;;;;;;;;;12317:143;22365:103;;;;;;;;;;;;;:::i;32212:130::-;;;;;;;;;;;;;:::i;34813:200::-;;;;;;;;;;-1:-1:-1;34813:200:0;;;;;:::i;:::-;;:::i;40526:511::-;;;;;;;;;;-1:-1:-1;40843:11:0;;40878:9;;40911;;40947:12;;40984:10;;41019;;40526:511;;;4279:25:1;;;4335:2;4320:18;;4313:34;;;;4363:18;;;4356:34;;;;4421:2;4406:18;;4399:34;4464:3;4449:19;;4442:35;4508:3;4493:19;;4486:35;4266:3;4251:19;40526:511:0;3992:535:1;31898:159:0;;;;;;;;;;;;;:::i;21714:87::-;;;;;;;;;;-1:-1:-1;21787:6:0;;-1:-1:-1;;;;;21787:6:0;21714:87;;;-1:-1:-1;;;;;4696:32:1;;;4678:51;;4666:2;4651:18;21714:87:0;4532:203:1;11245:104:0;;;;;;;;;;;;;:::i;37112:300::-;;;;;;;;;;-1:-1:-1;37112:300:0;;;;;:::i;:::-;;:::i;35959:419::-;;;;;;;;;;-1:-1:-1;35959:419:0;;;;;:::i;:::-;;:::i;15654:475::-;;;;;;;;;;-1:-1:-1;15654:475:0;;;;;:::i;:::-;;:::i;12673:200::-;;;;;;;;;;-1:-1:-1;12673:200:0;;;;;:::i;:::-;;:::i;38494:353::-;;;;;;;;;;-1:-1:-1;38730:15:0;;38776:16;;38823;;38730:15;;;;;;;38494:353;;;5214:14:1;;5207:22;5189:41;;5261:2;5246:18;;5239:34;;;;5289:18;;;5282:34;5177:2;5162:18;38494:353:0;4993:329:1;35300:370:0;;;;;;;;;;-1:-1:-1;35300:370:0;;;;;:::i;:::-;;:::i;41482:579::-;;;;;;;;;;-1:-1:-1;41482:579:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;:::i;36627:174::-;;;;;;;;;;-1:-1:-1;36627:174:0;;;;;:::i;:::-;;:::i;30866:446::-;;;;;;;;;;-1:-1:-1;30866:446:0;;;;;:::i;:::-;;:::i;33099:553::-;;;;;;;;;;-1:-1:-1;33099:553:0;;;;;:::i;:::-;;:::i;42236:196::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;12936:176::-;;;;;;;;;;-1:-1:-1;12936:176:0;;;;;:::i;:::-;-1:-1:-1;;;;;13077:18:0;;;13050:7;13077:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;12936:176;39887:175;;;;;;;;;;-1:-1:-1;40029:11:0;;40042;;39887:175;;;40029:11;;;;-1:-1:-1;;;;;40029:11:0;;;8119:34:1;;40042:11:0;;;8184:2:1;8169:18;;8162:43;8054:18;39887:175:0;7907:304:1;32482:152:0;;;;;;;;;;;;;:::i;34310:235::-;;;;;;;;;;-1:-1:-1;34310:235:0;;;;;:::i;:::-;;:::i;25553:32::-;;;;;;;;;;;;;;;22623:238;;;;;;;;;;-1:-1:-1;22623:238:0;;;;;:::i;:::-;;:::i;26483:29::-;;;;;;;;;;-1:-1:-1;26483:29:0;;;;;;;;11026:100;11080:13;11113:5;11106:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11026:100;:::o;13259:194::-;13367:4;13384:39;10112:10;13407:7;13416:6;13384:8;:39::i;:::-;-1:-1:-1;13441:4:0;13259:194;;;;;:::o;37938:160::-;21787:6;;-1:-1:-1;;;;;21787:6:0;10112:10;21934:23;21926:68;;;;-1:-1:-1;;;21926:68:0;;;;;;;:::i;:::-;;;;;;;;;38044:11:::1;::::0;38014:42:::1;::::0;-1:-1:-1;;;;;38044:11:0;;::::1;::::0;38014:42;::::1;::::0;::::1;::::0;38044:11:::1;::::0;38014:42:::1;38067:11;:23:::0;;-1:-1:-1;;;;;;38067:23:0::1;-1:-1:-1::0;;;;;38067:23:0;;;::::1;::::0;;;::::1;::::0;;37938:160::o;13931:529::-;14071:4;14088:36;14098:6;14106:9;14117:6;14088:9;:36::i;:::-;-1:-1:-1;;;;;14164:19:0;;14137:24;14164:19;;;:11;:19;;;;;;;;10112:10;14164:33;;;;;;;;14230:26;;;;14208:116;;;;-1:-1:-1;;;14208:116:0;;9164:2:1;14208:116:0;;;9146:21:1;9203:2;9183:18;;;9176:30;9242:34;9222:18;;;9215:62;-1:-1:-1;;;9293:18:1;;;9286:38;9341:19;;14208:116:0;8962:404:1;14208:116:0;14360:57;14369:6;10112:10;14410:6;14391:16;:25;14360:8;:57::i;:::-;-1:-1:-1;14448:4:0;;13931:529;-1:-1:-1;;;;13931:529:0:o;31397:366::-;31474:10;31439:22;31464:21;;;:9;:21;;;;;;31547:34;;:22;:34::i;:::-;31513:4;:18;;;:68;;;;:::i;:::-;31625:15;31592:48;;:30;31651:18;;;:22;31496:85;-1:-1:-1;31730:25:0;31736:10;31496:85;31730:5;:25::i;:::-;31428:335;;31397:366::o;14865:290::-;10112:10;14978:4;15067:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;15067:34:0;;;;;;;;;;14978:4;;14995:130;;15045:7;;15067:47;;15104:10;;15067:47;:::i;:::-;14995:8;:130::i;43318:253::-;-1:-1:-1;;;;;43464:18:0;;43403:23;43464:18;;;:9;:18;;;;;43532:31;43474:7;43532:22;:31::i;:::-;43511:4;:18;;;:52;;;;:::i;:::-;43493:70;43318:253;-1:-1:-1;;;43318:253:0:o;33888:215::-;21787:6;;-1:-1:-1;;;;;21787:6:0;10112:10;21934:23;21926:68;;;;-1:-1:-1;;;21926:68:0;;;;;;;:::i;:::-;33972:1:::1;33962:6;:11;;33954:56;;;::::0;-1:-1:-1;;;33954:56:0;;9835:2:1;33954:56:0::1;::::0;::::1;9817:21:1::0;;;9854:18;;;9847:30;9913:34;9893:18;;;9886:62;9965:18;;33954:56:0::1;9633:356:1::0;33954:56:0::1;34056:4;34039:13;12234:12:::0;;;12146:108;34039:13:::1;34030:22;::::0;:6;:22:::1;:::i;:::-;34029:31;;;;:::i;:::-;34021:5;:39:::0;;;34076:19:::1;::::0;1361:25:1;;;34076:19:0::1;::::0;1349:2:1;1334:18;34076:19:0::1;;;;;;;;33888:215:::0;:::o;37598:166::-;21787:6;;-1:-1:-1;;;;;21787:6:0;10112:10;21934:23;21926:68;;;;-1:-1:-1;;;21926:68:0;;;;;;;:::i;:::-;37710:11:::1;::::0;37680:42:::1;::::0;-1:-1:-1;;;;;37710:11:0::1;::::0;;::::1;::::0;::::1;::::0;37680:42;::::1;::::0;::::1;::::0;;;::::1;37733:11;:23:::0;;-1:-1:-1;;;;;37733:23:0;;::::1;;;-1:-1:-1::0;;;;;;37733:23:0;;::::1;::::0;;;::::1;::::0;;37598:166::o;22365:103::-;21787:6;;-1:-1:-1;;;;;21787:6:0;10112:10;21934:23;21926:68;;;;-1:-1:-1;;;21926:68:0;;;;;;;:::i;:::-;22430:30:::1;22457:1;22430:18;:30::i;:::-;22365:103::o:0;32212:130::-;21787:6;;-1:-1:-1;;;;;21787:6:0;10112:10;21934:23;21926:68;;;;-1:-1:-1;;;21926:68:0;;;;;;;:::i;:::-;32266:14:::1;:22:::0;;-1:-1:-1;;32266:22:0::1;::::0;;32304:30:::1;::::0;32318:15:::1;::::0;32304:30:::1;::::0;32283:5:::1;::::0;32304:30:::1;32212:130::o:0;34813:200::-;21787:6;;-1:-1:-1;;;;;21787:6:0;10112:10;21934:23;21926:68;;;;-1:-1:-1;;;21926:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34928:23:0;::::1;;::::0;;;:15:::1;:23;::::0;;;;;;;;:30;;-1:-1:-1;;34928:30:0::1;::::0;::::1;;::::0;;::::1;::::0;;;34974:31;;1163:41:1;;;34974:31:0::1;::::0;1136:18:1;34974:31:0::1;;;;;;;;34813:200:::0;;:::o;31898:159::-;21787:6;;-1:-1:-1;;;;;21787:6:0;10112:10;21934:23;21926:68;;;;-1:-1:-1;;;21926:68:0;;;;;;;:::i;:::-;31953:9:::1;:16:::0;;-1:-1:-1;;31953:16:0::1;31965:4;31953:16;::::0;;31980:15:::1;:22:::0;;-1:-1:-1;;31980:22:0::1;31953:16;31980:22;::::0;;32018:31:::1;::::0;32033:15:::1;::::0;32018:31:::1;::::0;31953:9:::1;::::0;32018:31:::1;31898:159::o:0;11245:104::-;11301:13;11334:7;11327:14;;;;;:::i;37112:300::-;21787:6;;-1:-1:-1;;;;;21787:6:0;10112:10;21934:23;21926:68;;;;-1:-1:-1;;;21926:68:0;;;;;;;:::i;:::-;37258:7:::1;-1:-1:-1::0;;;;;37250:15:0::1;:4;-1:-1:-1::0;;;;;37250:15:0::1;::::0;37228:122:::1;;;::::0;-1:-1:-1;;;37228:122:0;;10591:2:1;37228:122:0::1;::::0;::::1;10573:21:1::0;10630:2;10610:18;;;10603:30;10669:34;10649:18;;;10642:62;10740:27;10720:18;;;10713:55;10785:19;;37228:122:0::1;10389:421:1::0;37228:122:0::1;37363:41;37392:4;37398:5;37363:28;:41::i;35959:419::-:0;21787:6;;-1:-1:-1;;;;;21787:6:0;10112:10;21934:23;21926:68;;;;-1:-1:-1;;;21926:68:0;;;;;;;:::i;:::-;36075:10:::1;:26:::0;;;36112:10:::1;:20:::0;;;36158:23:::1;36125:7:::0;36088:13;36158:23:::1;:::i;:::-;36143:12;:38:::0;;;36230:3:::1;-1:-1:-1::0;36214:19:0::1;36192:110;;;::::0;-1:-1:-1;;;36192:110:0;;11017:2:1;36192:110:0::1;::::0;::::1;10999:21:1::0;11056:2;11036:18;;;11029:30;11095:34;11075:18;;;11068:62;-1:-1:-1;;;11146:18:1;;;11139:39;11195:19;;36192:110:0::1;10815:405:1::0;36192:110:0::1;36333:12;::::0;36347:10:::1;::::0;36359::::1;::::0;36318:52:::1;::::0;;11427:25:1;;;11483:2;11468:18;;11461:34;;;;11511:18;;;11504:34;36318:52:0::1;::::0;11415:2:1;11400:18;36318:52:0::1;;;;;;;;35959:419:::0;;:::o;15654:475::-;10112:10;15772:4;15816:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;15816:34:0;;;;;;;;;;15883:35;;;;15861:122;;;;-1:-1:-1;;;15861:122:0;;11751:2:1;15861:122:0;;;11733:21:1;11790:2;11770:18;;;11763:30;11829:34;11809:18;;;11802:62;-1:-1:-1;;;11880:18:1;;;11873:35;11925:19;;15861:122:0;11549:401:1;15861:122:0;16019:67;10112:10;16042:7;16070:15;16051:16;:34;16019:8;:67::i;:::-;-1:-1:-1;16117:4:0;;15654:475;-1:-1:-1;;;15654:475:0:o;12673:200::-;12784:4;12801:42;10112:10;12825:9;12836:6;12801:9;:42::i;35300:370::-;21787:6;;-1:-1:-1;;;;;21787:6:0;10112:10;21934:23;21926:68;;;;-1:-1:-1;;;21926:68:0;;;;;;;:::i;:::-;35415:9:::1;:25:::0;;;35451:9:::1;:19:::0;;;35495:21:::1;35463:7:::0;35427:13;35495:21:::1;:::i;:::-;35481:11;:35:::0;;;35550:3:::1;-1:-1:-1::0;35535:18:0::1;35527:71;;;::::0;-1:-1:-1;;;35527:71:0;;12157:2:1;35527:71:0::1;::::0;::::1;12139:21:1::0;12196:2;12176:18;;;12169:30;12235:34;12215:18;;;12208:62;-1:-1:-1;;;12286:18:1;;;12279:38;12334:19;;35527:71:0::1;11955:404:1::0;35527:71:0::1;35628:11;::::0;35641:9:::1;::::0;35652::::1;::::0;35614:48:::1;::::0;;11427:25:1;;;11483:2;11468:18;;11461:34;;;;11511:18;;;11504:34;35614:48:0::1;::::0;11415:2:1;11400:18;35614:48:0::1;11225:319:1::0;41482:579:0;41600:34;41649:22;41686:29;;:::i;:::-;-1:-1:-1;;;;;41810:16:0;;41730:23;41810:16;;;:9;:16;;;;;;:42;;41880:30;;;;41921:41;;;;;;;;41810:42;;-1:-1:-1;41880:30:0;-1:-1:-1;41935:27:0;;41921:41;;41935:27;41921:41;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;42023:16:0;;;;;;:9;:16;;;;;:30;;;41921:41;;-1:-1:-1;41991:29:0;;-1:-1:-1;42023:16:0;41991:22;:29::i;:::-;:62;;;;:::i;:::-;41973:80;;41482:579;;;;;:::o;36627:174::-;21787:6;;-1:-1:-1;;;;;21787:6:0;10112:10;21934:23;21926:68;;;;-1:-1:-1;;;21926:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;36712:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;;;;:31;;-1:-1:-1;;36712:31:0::1;::::0;::::1;;::::0;;::::1;::::0;;;36759:34;;1163:41:1;;;36759:34:0::1;::::0;1136:18:1;36759:34:0::1;1023:187:1::0;30866:446:0;30956:1;30948:4;:9;;30927:47;;;;-1:-1:-1;;;30927:47:0;;12566:2:1;30927:47:0;;;12548:21:1;12605:2;12585:18;;;12578:30;-1:-1:-1;;;12624:18:1;;;12617:42;12676:18;;30927:47:0;12364:336:1;30927:47:0;31020:10;30985:22;31010:21;;;:9;:21;;;;;;31064:34;;:22;:34::i;:::-;31042:4;:18;;;:56;;;;;;;:::i;:::-;;;;-1:-1:-1;31134:6:0;;-1:-1:-1;31109:15:0;;;31125:4;31109:21;;;;;;;:::i;:::-;;;:31;;;;;;;:::i;:::-;;;;-1:-1:-1;;31184:15:0;31151:48;;31228:6;:12;;31210:40;;31216:10;;31243:6;;31228;31235:4;;31228:12;;;;;;:::i;:::-;;;;;;;;;:21;;;;:::i;:::-;31210:5;:40::i;:::-;31266:38;;31297:6;;31291:4;;31279:10;;31266:38;;;;;30916:396;30866:446;;:::o;33099:553::-;21787:6;;-1:-1:-1;;;;;21787:6:0;10112:10;21934:23;21926:68;;;;-1:-1:-1;;;21926:68:0;;;;;;;:::i;:::-;33265:1:::1;33257:4;:9;;33235:111;;;::::0;-1:-1:-1;;;33235:111:0;;13039:2:1;33235:111:0::1;::::0;::::1;13021:21:1::0;13078:2;13058:18;;;13051:30;13117:34;13097:18;;;13090:62;-1:-1:-1;;;13168:18:1;;;13161:50;13228:19;;33235:111:0::1;12837:416:1::0;33235:111:0::1;33373:4;33365;:12;;33357:67;;;::::0;-1:-1:-1;;;33357:67:0;;13460:2:1;33357:67:0::1;::::0;::::1;13442:21:1::0;13499:2;13479:18;;;13472:30;13538:34;13518:18;;;13511:62;-1:-1:-1;;;13589:18:1;;;13582:40;13639:19;;33357:67:0::1;13258:406:1::0;33357:67:0::1;33437:15;:26:::0;;-1:-1:-1;;33437:26:0::1;;::::0;::::1;;;;::::0;;12234:12;;33518:5:::1;::::0;33510:4;;33494:20:::1;;;;:::i;:::-;33493:30;;;;:::i;:::-;33474:16;:49:::0;33578:5:::1;33570:4:::0;33554:13:::1;12234:12:::0;;;12146:108;33554:13:::1;:20;;;;:::i;:::-;33553:30;;;;:::i;:::-;33534:16;:49:::0;33599:45:::1;::::0;;5214:14:1;;5207:22;5189:41;;5261:2;5246:18;;5239:34;;;5289:18;;;5282:34;;;33599:45:0::1;::::0;5177:2:1;5162:18;33599:45:0::1;;;;;;;33099:553:::0;;;:::o;42236:196::-;42312:23;42337:24;42390:7;42379:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42418:6;42408:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42236:196;;:::o;32482:152::-;21787:6;;-1:-1:-1;;;;;21787:6:0;10112:10;21934:23;21926:68;;;;-1:-1:-1;;;21926:68:0;;;;;;;:::i;:::-;32544:20:::1;:28:::0;;-1:-1:-1;;32544:28:0::1;::::0;;32588:38:::1;::::0;32610:15:::1;::::0;32588:38:::1;::::0;32567:5:::1;::::0;32588:38:::1;32482:152::o:0;34310:235::-;21787:6;;-1:-1:-1;;;;;21787:6:0;10112:10;21934:23;21926:68;;;;-1:-1:-1;;;21926:68:0;;;;;;;:::i;:::-;34398:1:::1;34388:6;:11;;34380:60;;;::::0;-1:-1:-1;;;34380:60:0;;13871:2:1;34380:60:0::1;::::0;::::1;13853:21:1::0;13910:2;13890:18;;;13883:30;13949:34;13929:18;;;13922:62;-1:-1:-1;;;14000:18:1;;;13993:34;14044:19;;34380:60:0::1;13669:400:1::0;34380:60:0::1;34490:4;34473:13;12234:12:::0;;;12146:108;34473:13:::1;34464:22;::::0;:6;:22:::1;:::i;:::-;34463:31;;;;:::i;:::-;34451:9;:43:::0;;;34510:27:::1;::::0;1361:25:1;;;34510:27:0::1;::::0;1349:2:1;1334:18;34510:27:0::1;1215:177:1::0;22623:238:0;21787:6;;-1:-1:-1;;;;;21787:6:0;10112:10;21934:23;21926:68;;;;-1:-1:-1;;;21926:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22726:22:0;::::1;22704:110;;;::::0;-1:-1:-1;;;22704:110:0;;14276:2:1;22704:110:0::1;::::0;::::1;14258:21:1::0;14315:2;14295:18;;;14288:30;14354:34;14334:18;;;14327:62;-1:-1:-1;;;14405:18:1;;;14398:36;14451:19;;22704:110:0::1;14074:402:1::0;22704:110:0::1;22825:28;22844:8;22825:18;:28::i;:::-;22623:238:::0;:::o;19437:380::-;-1:-1:-1;;;;;19573:19:0;;19565:68;;;;-1:-1:-1;;;19565:68:0;;14683:2:1;19565:68:0;;;14665:21:1;14722:2;14702:18;;;14695:30;14761:34;14741:18;;;14734:62;-1:-1:-1;;;14812:18:1;;;14805:34;14856:19;;19565:68:0;14481:400:1;19565:68:0;-1:-1:-1;;;;;19652:21:0;;19644:68;;;;-1:-1:-1;;;19644:68:0;;15088:2:1;19644:68:0;;;15070:21:1;15127:2;15107:18;;;15100:30;15166:34;15146:18;;;15139:62;-1:-1:-1;;;15217:18:1;;;15210:32;15259:19;;19644:68:0;14886:398:1;19644:68:0;-1:-1:-1;;;;;19725:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;19777:32;;1361:25:1;;;19777:32:0;;1334:18:1;19777:32:0;;;;;;;19437:380;;;:::o;43914:3999::-;-1:-1:-1;;;;;44046:18:0;;44038:68;;;;-1:-1:-1;;;44038:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;44125:16:0;;44117:64;;;;-1:-1:-1;;;44117:64:0;;;;;;;:::i;:::-;44198:6;44208:1;44198:11;44194:93;;44226:28;44242:4;44248:2;44252:1;44226:15;:28::i;:::-;43914:3999;;;:::o;44194:93::-;44303:14;;;;44299:2265;;;21787:6;;-1:-1:-1;;;;;44356:15:0;;;21787:6;;44356:15;;;;:49;;-1:-1:-1;21787:6:0;;-1:-1:-1;;;;;44392:13:0;;;21787:6;;44392:13;;44356:49;:86;;;;-1:-1:-1;;;;;;44426:16:0;;;;44356:86;:128;;;;-1:-1:-1;;;;;;44463:21:0;;44477:6;44463:21;;44356:128;:158;;;;-1:-1:-1;44506:8:0;;;;44505:9;44356:158;44334:2219;;;44554:9;;;;44549:203;;-1:-1:-1;;;;;44622:17:0;;;;;;:11;:17;;;;;;;;;:36;;-1:-1:-1;;;;;;44643:15:0;;;;;;:11;:15;;;;;;;;44622:36;44588:144;;;;-1:-1:-1;;;44588:144:0;;16301:2:1;44588:144:0;;;16283:21:1;16340:2;16320:18;;;16313:30;-1:-1:-1;;;16359:18:1;;;16352:52;16421:18;;44588:144:0;16099:346:1;44588:144:0;44908:20;;;;;;;44904:629;;;21787:6;;-1:-1:-1;;;;;44983:13:0;;;21787:6;;44983:13;;;;:66;;;45039:9;-1:-1:-1;;;;;45025:24:0;:2;-1:-1:-1;;;;;45025:24:0;;;44983:66;:117;;;;;45092:7;-1:-1:-1;;;;;45078:22:0;:2;-1:-1:-1;;;;;45078:22:0;;;44983:117;44953:561;;;45218:9;45189:39;;;;:28;:39;;;;;;45264:12;-1:-1:-1;45151:258:0;;;;-1:-1:-1;;;45151:258:0;;16652:2:1;45151:258:0;;;16634:21:1;16691:2;16671:18;;;16664:30;16730:34;16710:18;;;16703:62;16801:34;16781:18;;;16774:62;-1:-1:-1;;;16852:19:1;;;16845:40;16902:19;;45151:258:0;16450:477:1;45151:258:0;45465:9;45436:39;;;;:28;:39;;;;;45478:12;45436:54;;44953:561;-1:-1:-1;;;;;45585:31:0;;;;;;:25;:31;;;;;;;;:55;;;;-1:-1:-1;;;;;;45621:19:0;;;;;;:15;:19;;;;;;;;45620:20;45585:55;45581:957;;;45709:5;;45699:6;:15;;45665:139;;;;-1:-1:-1;;;45665:139:0;;17134:2:1;45665:139:0;;;17116:21:1;17173:2;17153:18;;;17146:30;17212:34;17192:18;;;17185:62;-1:-1:-1;;;17263:18:1;;;17256:36;17309:19;;45665:139:0;16932:402:1;45665:139:0;45887:9;;-1:-1:-1;;;;;12434:18:0;;12407:7;12434:18;;;;;;;;;;;45861:22;;:6;:22;:::i;:::-;:35;;45827:140;;;;-1:-1:-1;;;45827:140:0;;17541:2:1;45827:140:0;;;17523:21:1;17580:2;17560:18;;;17553:30;-1:-1:-1;;;17599:18:1;;;17592:49;17658:18;;45827:140:0;17339:343:1;45827:140:0;45581:957;;;-1:-1:-1;;;;;46065:29:0;;;;;;:25;:29;;;;;;;;:55;;;;-1:-1:-1;;;;;;46099:21:0;;;;;;:15;:21;;;;;;;;46098:22;46065:55;46039:499;;;46207:5;;46197:6;:15;;46163:140;;;;-1:-1:-1;;;46163:140:0;;17889:2:1;46163:140:0;;;17871:21:1;17928:2;17908:18;;;17901:30;17967:34;17947:18;;;17940:62;-1:-1:-1;;;18018:18:1;;;18011:37;18065:19;;46163:140:0;17687:403:1;46039:499:0;-1:-1:-1;;;;;46334:19:0;;;;;;:15;:19;;;;;;;;46329:209;;46438:9;;-1:-1:-1;;;;;12434:18:0;;12407:7;12434:18;;;;;;;;;;;46412:22;;:6;:22;:::i;:::-;:35;;46378:140;;;;-1:-1:-1;;;46378:140:0;;17541:2:1;46378:140:0;;;17523:21:1;17580:2;17560:18;;;17553:30;-1:-1:-1;;;17599:18:1;;;17592:49;17658:18;;46378:140:0;17339:343:1;46378:140:0;46625:4;46576:28;12434:18;;;;;;;;;;;46683:16;;46659:40;;;;;;;46730:39;;-1:-1:-1;46754:15:0;;;;;;;46730:39;:65;;;;-1:-1:-1;46787:8:0;;;;46786:9;46730:65;:114;;;;-1:-1:-1;;;;;;46813:31:0;;;;;;:25;:31;;;;;;;;46812:32;46730:114;:149;;;;-1:-1:-1;;;;;;46862:17:0;;;;;;:11;:17;;;;;;;;46861:18;46730:149;:182;;;;-1:-1:-1;;;;;;46897:15:0;;;;;;:11;:15;;;;;;;;46896:16;46730:182;46712:314;;;46939:8;:15;;-1:-1:-1;;46939:15:0;46950:4;46939:15;;;46971:10;:8;:10::i;:::-;46998:8;:16;;-1:-1:-1;;46998:16:0;;;46712:314;47054:8;;-1:-1:-1;;;;;47164:17:0;;47038:12;47164:17;;;:11;:17;;;;;;47054:8;;;;47053:9;;47164:17;;:36;;-1:-1:-1;;;;;;47185:15:0;;;;;;:11;:15;;;;;;;;47164:36;47160:84;;;-1:-1:-1;47227:5:0;47160:84;47256:12;47361:7;47357:503;;;-1:-1:-1;;;;;47413:29:0;;;;;;:25;:29;;;;;;;;:49;;;;;47461:1;47446:12;;:16;47413:49;47409:302;;;47490:33;47519:3;47490:24;47501:12;;47490:6;:10;;:24;;;;:::i;:::-;:28;;:33::i;:::-;47483:40;;47409:302;;;-1:-1:-1;;;;;47585:31:0;;;;;;:25;:31;;;;;;;;:50;;;;;47634:1;47620:11;;:15;47585:50;47581:130;;;47663:32;47691:3;47663:23;47674:11;;47663:6;:10;;:23;;;;:::i;:32::-;47656:39;;47581:130;47731:8;;47727:91;;47760:42;47776:4;47790;47797;47760:15;:42::i;:::-;47834:14;47844:4;47834:14;;:::i;:::-;;;47357:503;47872:33;47888:4;47894:2;47898:6;47872:15;:33::i;:::-;44027:3886;;;;43914:3999;;;:::o;49322:536::-;-1:-1:-1;;;;;49459:22:0;;49414:7;49459:22;;;:9;:22;;;;;49530:30;;49414:7;;49512:48;;:15;:48;:::i;:::-;49492:68;;49571:19;49610:6;49605:217;49626:1;49622;:5;49605:217;;;49649:18;49697:3;49683:7;49691:1;49683:10;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;49671:22;;:6;49678:1;49671:9;;;;;;;;:::i;:::-;;;;;;;;;:22;;;;:::i;:::-;49670:30;;;;:::i;:::-;49649:51;;49764:6;49751:9;49730:4;:15;;49746:1;49730:18;;;;;;;:::i;:::-;;;:30;;;;:::i;:::-;49729:41;;;;:::i;:::-;49715:55;;;;:::i;:::-;;-1:-1:-1;49785:25:0;49715:55;49785:25;;:::i;:::-;;;49634:188;49629:3;;;;;:::i;:::-;;;;49605:217;;;-1:-1:-1;49839:11:0;49322:536;-1:-1:-1;;;;49322:536:0:o;17676:399::-;-1:-1:-1;;;;;17760:21:0;;17752:65;;;;-1:-1:-1;;;17752:65:0;;18570:2:1;17752:65:0;;;18552:21:1;18609:2;18589:18;;;18582:30;18648:33;18628:18;;;18621:61;18699:18;;17752:65:0;18368:355:1;17752:65:0;17908:6;17892:12;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;17925:18:0;;:9;:18;;;;;;;;;;:28;;17947:6;;17925:9;:28;;17947:6;;17925:28;:::i;:::-;;;;-1:-1:-1;;17969:37:0;;1361:25:1;;;-1:-1:-1;;;;;17969:37:0;;;17986:1;;17969:37;;1349:2:1;1334:18;17969:37:0;;;;;;;31428:335;;31397:366::o;23021:191::-;23114:6;;;-1:-1:-1;;;;;23131:17:0;;;-1:-1:-1;;;;;;23131:17:0;;;;;;;23164:40;;23114:6;;;23131:17;23114:6;;23164:40;;23095:16;;23164:40;23084:128;23021:191;:::o;43718:188::-;-1:-1:-1;;;;;43801:31:0;;;;;;:25;:31;;;;;;:39;;-1:-1:-1;;43801:39:0;;;;;;;;;;43858:40;;43801:39;;:31;43858:40;;;43718:188;;:::o;18408:591::-;-1:-1:-1;;;;;18492:21:0;;18484:67;;;;-1:-1:-1;;;18484:67:0;;18930:2:1;18484:67:0;;;18912:21:1;18969:2;18949:18;;;18942:30;19008:34;18988:18;;;18981:62;-1:-1:-1;;;19059:18:1;;;19052:31;19100:19;;18484:67:0;18728:397:1;18484:67:0;-1:-1:-1;;;;;18651:18:0;;18626:22;18651:18;;;;;;;;;;;18688:24;;;;18680:71;;;;-1:-1:-1;;;18680:71:0;;19332:2:1;18680:71:0;;;19314:21:1;19371:2;19351:18;;;19344:30;19410:34;19390:18;;;19383:62;-1:-1:-1;;;19461:18:1;;;19454:32;19503:19;;18680:71:0;19130:398:1;18680:71:0;-1:-1:-1;;;;;18787:18:0;;:9;:18;;;;;;;;;;18808:23;;;18787:44;;18853:12;:22;;18825:6;;18787:9;18853:22;;18825:6;;18853:22;:::i;:::-;;;;-1:-1:-1;;18893:37:0;;1361:25:1;;;18919:1:0;;-1:-1:-1;;;;;18893:37:0;;;;;1349:2:1;1334:18;18893:37:0;;;;;;;43914:3999;;;:::o;16619:770::-;-1:-1:-1;;;;;16759:20:0;;16751:70;;;;-1:-1:-1;;;16751:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16840:23:0;;16832:71;;;;-1:-1:-1;;;16832:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;17000:17:0;;16976:21;17000:17;;;;;;;;;;;17050:23;;;;17028:111;;;;-1:-1:-1;;;17028:111:0;;19735:2:1;17028:111:0;;;19717:21:1;19774:2;19754:18;;;19747:30;19813:34;19793:18;;;19786:62;-1:-1:-1;;;19864:18:1;;;19857:36;19910:19;;17028:111:0;19533:402:1;17028:111:0;-1:-1:-1;;;;;17175:17:0;;;:9;:17;;;;;;;;;;;17195:22;;;17175:42;;17239:20;;;;;;;;:30;;17211:6;;17175:9;17239:30;;17211:6;;17239:30;:::i;:::-;;;;;;;;17304:9;-1:-1:-1;;;;;17287:35:0;17296:6;-1:-1:-1;;;;;17287:35:0;;17315:6;17287:35;;;;1361:25:1;;1349:2;1334:18;;1215:177;17287:35:0;;;;;;;;16740:649;16619:770;;;:::o;48500:777::-;48583:4;48539:23;12434:18;;;;;;;;;;;;48629:20;;;48625:59;;48666:7;;48500:777::o;48625:59::-;48718:16;;48700:15;:34;48696:101;;;48769:16;;48751:34;;48696:101;48809:33;48826:15;48809:16;:33::i;:::-;48948:11;;48876:21;;48855:18;;48948:16;48944:99;;49020:11;;49007:9;;48994:22;;:10;:22;:::i;:::-;48993:38;;;;:::i;:::-;48981:50;;48944:99;49059:13;;49055:107;;49111:11;;49103:47;;-1:-1:-1;;;;;49111:11:0;;;;49136:9;;49103:47;;;;49136:9;49111:11;49103:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;49089:61:0;;-1:-1:-1;;49055:107:0;49194:11;;49186:83;;49194:11;;;;-1:-1:-1;;;;;49194:11:0;;49219:21;;49186:83;;;;49219:21;49194:11;49186:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3391:98;3449:7;3476:5;3480:1;3476;:5;:::i;3790:98::-;3848:7;3875:5;3879:1;3875;:5;:::i;47921:571::-;48071:16;;;48085:1;48071:16;;;;;;;;48047:21;;48071:16;;;;;;;;;;-1:-1:-1;48071:16:0;48047:40;;48116:4;48098;48103:1;48098:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;48098:23:0;;;-1:-1:-1;;;;;48098:23:0;;;;;48142:9;-1:-1:-1;;;;;48142:14:0;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;48132:4;48137:1;48132:7;;;;;;;;:::i;:::-;;;;;;:26;-1:-1:-1;;;;;48132:26:0;;;-1:-1:-1;;;;;48132:26:0;;;;;48171:56;48188:4;48203:9;48215:11;48171:8;:56::i;:::-;48266:218;;-1:-1:-1;;;48266:218:0;;-1:-1:-1;;;;;48266:9:0;:60;;;;:218;;48341:11;;48367:1;;48411:4;;48438;;48458:15;;48266:218;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47976:516;47921:571;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;:::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;1397:247::-;1456:6;1509:2;1497:9;1488:7;1484:23;1480:32;1477:52;;;1525:1;1522;1515:12;1477:52;1564:9;1551:23;1583:31;1608:5;1583:31;:::i;2003:456::-;2080:6;2088;2096;2149:2;2137:9;2128:7;2124:23;2120:32;2117:52;;;2165:1;2162;2155:12;2117:52;2204:9;2191:23;2223:31;2248:5;2223:31;:::i;:::-;2273:5;-1:-1:-1;2330:2:1;2315:18;;2302:32;2343:33;2302:32;2343:33;:::i;:::-;2003:456;;2395:7;;-1:-1:-1;;;2449:2:1;2434:18;;;;2421:32;;2003:456::o;3069:180::-;3128:6;3181:2;3169:9;3160:7;3156:23;3152:32;3149:52;;;3197:1;3194;3187:12;3149:52;-1:-1:-1;3220:23:1;;3069:180;-1:-1:-1;3069:180:1:o;3507:160::-;3572:20;;3628:13;;3621:21;3611:32;;3601:60;;3657:1;3654;3647:12;3601:60;3507:160;;;:::o;3672:315::-;3737:6;3745;3798:2;3786:9;3777:7;3773:23;3769:32;3766:52;;;3814:1;3811;3804:12;3766:52;3853:9;3840:23;3872:31;3897:5;3872:31;:::i;:::-;3922:5;-1:-1:-1;3946:35:1;3977:2;3962:18;;3946:35;:::i;:::-;3936:45;;3672:315;;;;;:::o;4740:248::-;4808:6;4816;4869:2;4857:9;4848:7;4844:23;4840:32;4837:52;;;4885:1;4882;4875:12;4837:52;-1:-1:-1;;4908:23:1;;;4978:2;4963:18;;;4950:32;;-1:-1:-1;4740:248:1:o;5327:697::-;5604:25;;;5648:2;5666:18;;;5659:34;;;5591:3;5576:19;;;5728:2;5713:18;;5773:6;5549:4;5807:167;5821:4;5818:1;5815:11;5807:167;;;5880:13;;5868:26;;5914:12;;;;5949:15;;;;5841:1;5834:9;5807:167;;;5811:3;;;;6011:6;6005:3;5994:9;5990:19;5983:35;5327:697;;;;;;;:::o;6029:316::-;6103:6;6111;6119;6172:2;6160:9;6151:7;6147:23;6143:32;6140:52;;;6188:1;6185;6178:12;6140:52;6211:26;6227:9;6211:26;:::i;:::-;6201:36;6284:2;6269:18;;6256:32;;-1:-1:-1;6335:2:1;6320:18;;;6307:32;;6029:316;-1:-1:-1;;;6029:316:1:o;6350:1159::-;6614:2;6626:21;;;6696:13;;6599:18;;;6718:22;;;6566:4;;6793;;6771:2;6756:18;;;6820:15;;;6566:4;6863:180;6877:6;6874:1;6871:13;6863:180;;;6942:13;;6957:4;6938:24;6926:37;;6983:12;;;;7018:15;;;;6899:1;6892:9;6863:180;;;-1:-1:-1;;;7079:19:1;;;7059:18;;;7052:47;7149:13;;7171:21;;;7247:15;;;;7210:12;;;7282:1;7292:189;7308:8;7303:3;7300:17;7292:189;;;7377:15;;7363:30;;7454:17;;;;7415:14;;;;7336:1;7327:11;7292:189;;;-1:-1:-1;7498:5:1;;6350:1159;-1:-1:-1;;;;;;;6350:1159:1:o;7514:388::-;7582:6;7590;7643:2;7631:9;7622:7;7618:23;7614:32;7611:52;;;7659:1;7656;7649:12;7611:52;7698:9;7685:23;7717:31;7742:5;7717:31;:::i;:::-;7767:5;-1:-1:-1;7824:2:1;7809:18;;7796:32;7837:33;7796:32;7837:33;:::i;:::-;7889:7;7879:17;;;7514:388;;;;;:::o;8216:380::-;8295:1;8291:12;;;;8338;;;8359:61;;8413:4;8405:6;8401:17;8391:27;;8359:61;8466:2;8458:6;8455:14;8435:18;8432:38;8429:161;;8512:10;8507:3;8503:20;8500:1;8493:31;8547:4;8544:1;8537:15;8575:4;8572:1;8565:15;8429:161;;8216:380;;;:::o;8601:356::-;8803:2;8785:21;;;8822:18;;;8815:30;8881:34;8876:2;8861:18;;8854:62;8948:2;8933:18;;8601:356::o;9371:127::-;9432:10;9427:3;9423:20;9420:1;9413:31;9463:4;9460:1;9453:15;9487:4;9484:1;9477:15;9503:125;9568:9;;;9589:10;;;9586:36;;;9602:18;;:::i;9994:168::-;10067:9;;;10098;;10115:15;;;10109:22;;10095:37;10085:71;;10136:18;;:::i;10167:217::-;10207:1;10233;10223:132;;10277:10;10272:3;10268:20;10265:1;10258:31;10312:4;10309:1;10302:15;10340:4;10337:1;10330:15;10223:132;-1:-1:-1;10369:9:1;;10167:217::o;12705:127::-;12766:10;12761:3;12757:20;12754:1;12747:31;12797:4;12794:1;12787:15;12821:4;12818:1;12811:15;15289:401;15491:2;15473:21;;;15530:2;15510:18;;;15503:30;15569:34;15564:2;15549:18;;15542:62;-1:-1:-1;;;15635:2:1;15620:18;;15613:35;15680:3;15665:19;;15289:401::o;15695:399::-;15897:2;15879:21;;;15936:2;15916:18;;;15909:30;15975:34;15970:2;15955:18;;15948:62;-1:-1:-1;;;16041:2:1;16026:18;;16019:33;16084:3;16069:19;;15695:399::o;18095:128::-;18162:9;;;18183:11;;;18180:37;;;18197:18;;:::i;18228:135::-;18267:3;18288:17;;;18285:43;;18308:18;;:::i;:::-;-1:-1:-1;18355:1:1;18344:13;;18228:135::o;20282:251::-;20352:6;20405:2;20393:9;20384:7;20380:23;20376:32;20373:52;;;20421:1;20418;20411:12;20373:52;20453:9;20447:16;20472:31;20497:5;20472:31;:::i;20538:980::-;20800:4;20848:3;20837:9;20833:19;20879:6;20868:9;20861:25;20905:2;20943:6;20938:2;20927:9;20923:18;20916:34;20986:3;20981:2;20970:9;20966:18;20959:31;21010:6;21045;21039:13;21076:6;21068;21061:22;21114:3;21103:9;21099:19;21092:26;;21153:2;21145:6;21141:15;21127:29;;21174:1;21184:195;21198:6;21195:1;21192:13;21184:195;;;21263:13;;-1:-1:-1;;;;;21259:39:1;21247:52;;21354:15;;;;21319:12;;;;21295:1;21213:9;21184:195;;;-1:-1:-1;;;;;;;21435:32:1;;;;21430:2;21415:18;;21408:60;-1:-1:-1;;;21499:3:1;21484:19;21477:35;21396:3;20538:980;-1:-1:-1;;;20538:980:1:o

Swarm Source

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