ETH Price: $3,435.18 (+5.79%)
Gas: 6 Gwei

Token

SkyNet AI (SkyNet)
 

Overview

Max Total Supply

29,081,994 SkyNet

Holders

167

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
1,545.167307243061355989 SkyNet

Value
$0.00
0x74771172f47a22e58d0c63405249b516e72f5cb7
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:
SKYNET

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-15
*/

/* SKYNET IS THE WORLD'S FIRST TAX FREE, BUYBACK AND BURN TOKEN
 NEURAL MEME BASED ARTIFICAL INTELLIGENCE

 WEBISTE: https://www.skynettoken.vip/
 TELEGRAM: https://t.me/SkyNet_Portal
 X: https://twitter.com/SkyNetToken


0 TAX
UNISWAP V3 WETH AND USDC POOL, CREATING A FOREVER LASTING ARBITRAGE
*/




// SPDX-License-Identifier: MIT
pragma solidity 0.8.19;

// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)



/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

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

    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

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

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

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

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

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

// File: @openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)

pragma solidity ^0.8.0;


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

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

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

// File: @openzeppelin/contracts/utils/Context.sol


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

pragma solidity ^0.8.0;

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

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

// File: @openzeppelin/contracts/token/ERC20/ERC20.sol


// OpenZeppelin Contracts (last updated v4.8.0) (token/ERC20/ERC20.sol)

pragma solidity ^0.8.0;




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

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address to, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _transfer(owner, to, 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}.
     *
     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on
     * `transferFrom`. This is semantically equivalent to an infinite approval.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * NOTE: Does not update the allowance if the current allowance
     * is the maximum `uint256`.
     *
     * Requirements:
     *
     * - `from` and `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     * - the caller must have allowance for ``from``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) public virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        return true;
    }

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

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

        return true;
    }

    /**
     * @dev Moves `amount` of tokens from `from` to `to`.
     *
     * 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:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     */
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(from, to, amount);

        uint256 fromBalance = _balances[from];
        require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[from] = fromBalance - amount;
            // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by
            // decrementing then incrementing.
            _balances[to] += amount;
        }

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, 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;
        unchecked {
            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.
            _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;
            // Overflow not possible: amount <= accountBalance <= totalSupply.
            _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 Updates `owner` s allowance for `spender` based on spent `amount`.
     *
     * Does not update the allowance amount in case of infinite allowance.
     * Revert if not enough allowance is available.
     *
     * Might emit an {Approval} event.
     */
    function _spendAllowance(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(currentAllowance >= amount, "ERC20: insufficient allowance");
            unchecked {
                _approve(owner, spender, currentAllowance - 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 {}
}

// File: @openzeppelin/contracts/access/Ownable.sol


// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)

pragma solidity ^0.8.0;


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

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

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

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        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);
    }
}



pragma solidity 0.8.19;



library TransferHelper {
    function safeApprove(
        address token,
        address to,
        uint256 value
    ) internal {
        (bool success, bytes memory data) = token.call(abi.encodeWithSelector(IERC20.approve.selector, to, value));
        require(success && (data.length == 0 || abi.decode(data, (bool))), 'SA');
    }
}

interface IV3SwapRouter {
    struct ExactInputSingleParams {
        address tokenIn;
        address tokenOut;
        uint24 fee;
        address recipient;
        uint256 deadline;
        uint256 amountIn;
        uint256 amountOutMinimum;
        uint160 sqrtPriceLimitX96;
    }

    function exactInputSingle(ExactInputSingleParams calldata params) external returns (uint256 amountOut);
}

interface INonfungiblePositionManager {
    struct MintParams {
        address token0;
        address token1;
        uint24 fee;
        int24 tickLower;
        int24 tickUpper;
        uint256 amount0Desired;
        uint256 amount1Desired;
        uint256 amount0Min;
        uint256 amount1Min;
        address recipient;
        uint256 deadline;
    }
    function mint(MintParams calldata params) external payable returns (
        uint256 tokenId,
        uint128 liquidity,
        uint256 amount0,
        uint256 amount1
    );
    function createAndInitializePoolIfNecessary(
        address token0,
        address token1,
        uint24 fee,
        uint160 sqrtPriceX96
    ) external payable returns (address pool);
}

interface IUniCryptCollect {
    function collect(
        uint256 lockId,
        address recipient,
        uint128 amount0Max,
        uint128 amount1Max
    ) external returns (uint256 amount0, uint256 amount1);
}


contract SKYNET is ERC20, Ownable {

     INonfungiblePositionManager public Posman;
    address private UniCryptCollect;
    address private V3SwapRouter;
    address public weth;
    address public usdc;
    address private externalAddress;
    address private smartRouter;

    uint256 private wethPortion = 10;
    uint256 private lockWETH;
    uint256 private lockUSDC;
    uint256 private supply = 29_081_994 * 10 ** 18;
    uint24  private feePoolWeth = 10000;
    uint24  private feePoolUsdc = 10000;
    uint128 constant MAX_UINT128 = type(uint128).max;
    uint256 constant MAX_UINT256 = type(uint256).max;
    bool    public maxWalletEnforced = false;
    bool    private liquidityAdded = false;
    uint256 public maxWalletAmountTier1;
    uint256 public maxWalletAmountTier2;
    uint256 public maxWalletTimeTier1 = 2 minutes;
    uint256 public maxWalletTimeTier2 = 5 minutes;
    uint256 private constant PERCENTAGE_TO_CONTRACT = 40;
    uint256 private LpAmount;
    uint256 public tradingStartTime;
    uint256 public lastCollectTimePoolWeth;
    uint256 public lastCollectTimePoolUsdc;  
    uint256 public collectInterval = 15 minutes;
    uint256 public buyBackInterval = 10 seconds;
    address public poolWETH;
    address public poolUSDC;
    uint256 private contractAmount;
    address public constant DEAD = 0x000000000000000000000000000000000000dEaD;
    uint160 private sqrtPriceX96;
    uint160 private sqrtPriceX96U;
    uint256 private WethAmt = 1 ether; 
    uint256 private USDCAmt = 2275000000;
    address private token0;
    address private token1;
    uint    private amount0Desired;
    uint    private amount1Desired;
    address private token0U;
    address private token1U;
    uint    private amount0DesiredU;
    uint    private amount1DesiredU;

    uint256 public lastWethBuyBackTime;
    uint256 public lastUsdcBuyBackTime;
    uint256 public WethBought;
    uint256 public UsdcBought;
    bool    public LPLocked = false;
    uint256 public lastPublicCollect;
    uint256 public lastManualBuyBackWeth;
    uint256 public lastManualBuyBackUsdc;
    uint160 private token1Weth;
    uint160 private token0Weth;
    uint160 private token1USDC;
    uint160 private token0USDC;
    bool    public wethPoolCreated = false;
    bool    public usdcPoolCreated = false;
    bool    private inBuyBack;

    
    mapping(address => bool) private excludedFromMaxWallet;
    

constructor(address _uniCryptCollect, address _v3SwapRouter, address _posman, address _weth, address _usdc, address _externalAddress, address _smartRouter, uint160 _token0Weth, uint160 _token1Weth, uint160 _token0USDC, uint160 _token1USDC) ERC20("SkyNet AI", "SkyNet") {
        uint256 _contractAmount = (supply * PERCENTAGE_TO_CONTRACT) / 100;
        uint256 senderAmount = supply - _contractAmount;
        uint256 _LpAmount = _contractAmount /2;
        LpAmount = _LpAmount;
        contractAmount = _contractAmount;

        _mint(address(this), _contractAmount);
        _mint(msg.sender, senderAmount);
        
        UniCryptCollect = _uniCryptCollect;
        V3SwapRouter = _v3SwapRouter;
        Posman = INonfungiblePositionManager(_posman);
        weth = _weth;
        usdc = _usdc;
        externalAddress = _externalAddress;
        smartRouter = _smartRouter;
        token0Weth = _token0Weth;
        token1Weth = _token1Weth;
        token0USDC = _token0USDC;
        token1USDC = _token1USDC;

        maxWalletAmountTier1 = (supply * 25) / 10000;  // .25%
        maxWalletAmountTier2= (supply * 75) / 10000;  // .75%

        _Ordering();

        excludedFromMaxWallet[address(this)] = true;  
        excludedFromMaxWallet[msg.sender] = true;
        excludedFromMaxWallet[address(poolWETH)] = true;
        excludedFromMaxWallet[address(poolUSDC)] = true;
        excludedFromMaxWallet[address(Posman)] = true;
        excludedFromMaxWallet[address(V3SwapRouter)] = true;
        excludedFromMaxWallet[address(UniCryptCollect)] = true;
        excludedFromMaxWallet[address(smartRouter)] = true;
    }

    function createPools() external onlyOwner {
        require(!wethPoolCreated, "pool already added!");
        require(!usdcPoolCreated, "pool already added!");

        poolWETH = Posman.createAndInitializePoolIfNecessary(token0, token1, feePoolWeth, sqrtPriceX96);
        poolUSDC = Posman.createAndInitializePoolIfNecessary(token0U, token1U, feePoolUsdc, sqrtPriceX96U);
        wethPoolCreated = true;
        usdcPoolCreated = true;
    }


    function _Ordering() private {
        if (address(this) < weth) {
            token0 = address(this);
            token1 = weth;
            amount0Desired = LpAmount;
            amount1Desired = WethAmt;
            sqrtPriceX96 =  token1Weth;       //1771595571142957102749610171
            
        } else {
            token0 = weth;
            token1 = address(this);
            amount0Desired = WethAmt;
            amount1Desired = LpAmount;
            sqrtPriceX96 = token0Weth;   //35431911422859351420592203432321452
           
        }

        if (address(this) < usdc) {
            token0U = address(this);
            token1U = usdc;
            amount0DesiredU = LpAmount;
            amount1DesiredU = USDCAmt;
            sqrtPriceX96U =  token1USDC;       //2817895585981079558759335776
            
        } else {
            token0U = usdc;
            token1U = address(this);
            amount0DesiredU = USDCAmt;
            amount1DesiredU = LpAmount;
            sqrtPriceX96U = token0USDC;   //2227585691856211822826824962574399
           
        }
    }

    function addLiquidity() public onlyOwner {
        require(!liquidityAdded, "Liquidity already added!");
        tradingStartTime = block.timestamp;
        lastWethBuyBackTime = block.timestamp;
        lastUsdcBuyBackTime = block.timestamp;
        lastCollectTimePoolWeth = block.timestamp;
        lastCollectTimePoolUsdc = block.timestamp;

        TransferHelper.safeApprove(token0, address(Posman), amount0Desired);
        TransferHelper.safeApprove(token1, address(Posman), amount1Desired); 

        Posman.mint(INonfungiblePositionManager.MintParams({
            token0: token0,
            token1: token1,
            fee: feePoolWeth,
            tickLower: -887200,
            tickUpper: 887200,
            amount0Desired: amount0Desired,
            amount1Desired: amount1Desired,
            amount0Min: 0,
            amount1Min: 0,
            recipient: msg.sender,
            deadline: block.timestamp + 1200
        }));
        TransferHelper.safeApprove(token0U, address(Posman), amount0DesiredU);
        TransferHelper.safeApprove(token1U, address(Posman), amount1DesiredU);


        Posman.mint(INonfungiblePositionManager.MintParams({
            token0: token0U,
            token1: token1U,
            fee: feePoolUsdc,
            tickLower: -887200,
            tickUpper: 887200,
            amount0Desired: amount0DesiredU,
            amount1Desired: amount1DesiredU,
            amount0Min: 0,
            amount1Min: 0,
            recipient: msg.sender,
            deadline: block.timestamp + 1200
        }));

         liquidityAdded = true;
         maxWalletEnforced = true;
         
    }

    function PoolIDs(uint256 _lockWETH, uint256 _lockUSDC) external onlyOwner{
        lockWETH =   _lockWETH;
        lockUSDC =   _lockUSDC;

        LPLocked = true;
    }

    

    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 (maxWalletEnforced) {
        uint256 currentTime = block.timestamp;
        bool isWithinFirstTier = currentTime > tradingStartTime && currentTime <= tradingStartTime + maxWalletTimeTier1;
        bool isWithinSecondTier = currentTime <= tradingStartTime + maxWalletTimeTier2;
        bool isBuyFromPool = (from == poolWETH || from == poolUSDC);
        uint256 maxWalletAmount = isWithinFirstTier ? maxWalletAmountTier1 : maxWalletAmountTier2;

        if ((isWithinFirstTier || isWithinSecondTier) && !excludedFromMaxWallet[to]) {
            // Apply max wallet restriction if it's a buy from the pool or during the first time period
            if (isBuyFromPool || isWithinFirstTier) {
                require(balanceOf(to) + amount <= maxWalletAmount, "Exceeds max wallet amount");
            }
        }

        // Disable max wallet enforcement after the second time period
        if (!isWithinSecondTier) {
            maxWalletEnforced = false;
        }
    }

    // Call collect functions for pool transfers 
    if ((to == poolWETH) && LPLocked) {  
         if (block.timestamp - lastCollectTimePoolUsdc >= collectInterval) {
            _collectForPoolUSDC();
         }
    }    

    if ((to == poolUSDC) && LPLocked) { 
         if (block.timestamp - lastCollectTimePoolWeth >= collectInterval) {
            _collectForPoolWETH();
         }
    }   

    super._transfer(from, to, amount);

    if (!inBuyBack) {
    if ((from == poolWETH) && LPLocked) {
        if (block.timestamp - buyBackInterval >= lastUsdcBuyBackTime) {
            _buyBackAndBurnUsdc();
        }
    }

    if ((from == poolUSDC) && LPLocked) {
        if (block.timestamp - buyBackInterval >= lastWethBuyBackTime) {
            _buyBackAndBurnWeth();
        }
    }
    }

}


function _collectForPoolWETH() internal {
    uint256 wethBalanceBefore = IERC20(weth).balanceOf(address(this)); 
    bool collected = false;

    // Attempt collection from Pool1
    if (block.timestamp - lastCollectTimePoolWeth >= collectInterval) {
        try IUniCryptCollect(UniCryptCollect).collect(lockWETH, address(this), MAX_UINT128, MAX_UINT128) {
            lastCollectTimePoolWeth = block.timestamp;
            collected = true;
        } catch {} // Do nothing if the call fails
    }
    

    if (collected) {
        // Calculate WETH received from the collect
        uint256 wethReceived = IERC20(weth).balanceOf(address(this)) - wethBalanceBefore;

        // Burn tokens equivalent to the contract's balance
        uint256 tokensToBurn = balanceOf(address(this));
        _transfer(address(this), DEAD, tokensToBurn); // This will send the tokens to the dead address, effectively burning them.

        // Send a portion of the WETH to the external address
        uint256 wethToSend = (wethReceived * wethPortion) / 100; // Calculates the portion of WETH to send
        IERC20(weth).transfer(externalAddress, wethToSend);
    }
}

function _collectForPoolUSDC() internal {
    uint256 usdcBalanceBefore = IERC20(usdc).balanceOf(address(this)); 
    bool collected = false;

    
    if (block.timestamp - lastCollectTimePoolUsdc >= collectInterval) {
        try IUniCryptCollect(UniCryptCollect).collect(lockUSDC, address(this), MAX_UINT128, MAX_UINT128) {
            lastCollectTimePoolUsdc = block.timestamp;
            collected = true;
        } catch {} // Do nothing if the call fails
    }
    

    if (collected) {
        // Calculate WETH received from the collect
        uint256 usdcReceived = IERC20(usdc).balanceOf(address(this)) - usdcBalanceBefore;

        // Burn tokens equivalent to the contract's balance
        uint256 tokensToBurn = balanceOf(address(this));
        _transfer(address(this), DEAD, tokensToBurn); // This will send the tokens to the dead address, effectively burning them.

        // Send a portion of the usdc to the external address
        uint256 usdcToSend = (usdcReceived * wethPortion) / 100; // Calculates the portion of WETH to send
        IERC20(usdc).transfer(externalAddress, usdcToSend);
    }
}


function _buyBackAndBurnWeth() internal {
    if (inBuyBack) return;
    inBuyBack = true;
    uint256 wethBalance = IERC20(weth).balanceOf(address(this));

    if (wethBalance == 0) {
        return; // Exit the function early if no WETH is available for buyback
    }

    uint256 buyBackAmount = (wethBalance * 10) / 100; // 10% of WETH balance

    if (buyBackAmount > 0) {

        TransferHelper.safeApprove(weth, address(V3SwapRouter), buyBackAmount);
        // Define the swap params
        IV3SwapRouter.ExactInputSingleParams memory params = IV3SwapRouter.ExactInputSingleParams({
            tokenIn: weth,
            tokenOut: address(this),
            fee: feePoolWeth, 
            recipient: DEAD,
            deadline: block.timestamp,
            amountIn: buyBackAmount,
            amountOutMinimum: 0,  // Accept any amount of tokens out
            sqrtPriceLimitX96: 0  // No price limit
        });

        // Attempt the swap
         try IV3SwapRouter(V3SwapRouter).exactInputSingle(params) {
             WethBought += buyBackAmount;
             lastWethBuyBackTime = block.timestamp;
         } catch {}   
        }
     inBuyBack = false;
    
} 

function _buyBackAndBurnUsdc() internal {
    if (inBuyBack) return;
    inBuyBack = true;
    uint256 usdcBalance = IERC20(usdc).balanceOf(address(this));

    if (usdcBalance == 0) {
        return; // Exit the function early if no Usdc is available for buyback
    }

    uint256 buyBackAmount = (usdcBalance * 10) / 100; // 10% of Usdc balance

    if (buyBackAmount > 0) {
                TransferHelper.safeApprove(usdc, address(V3SwapRouter), buyBackAmount);

        // Define the swap params
        IV3SwapRouter.ExactInputSingleParams memory params = IV3SwapRouter.ExactInputSingleParams({
            tokenIn: usdc,
            tokenOut: address(this),
            fee: feePoolUsdc, 
            recipient: DEAD,
            deadline: block.timestamp,
            amountIn: buyBackAmount,
            amountOutMinimum: 0,  // Accept any amount of tokens out
            sqrtPriceLimitX96: 0  // No price limit
        });

        // Attempt the swap
         try IV3SwapRouter(V3SwapRouter).exactInputSingle(params) {
             UsdcBought += buyBackAmount;
             lastUsdcBuyBackTime = block.timestamp;
         } catch {}   
        }
        inBuyBack = false;
     
    
} 

function changeBuyBackInterval(uint256 _timeSeconds) external onlyOwner {
    buyBackInterval = _timeSeconds;
}


function rescue(address token) external onlyOwner {
        require(token != address(this));
        if (token == address(0x0)) {
            payable(msg.sender).transfer(address(this).balance);
            return;
        }
        IERC20 ERC20token = IERC20(token);
        uint256 balance = ERC20token.balanceOf(address(this));
        ERC20token.transfer(msg.sender, balance);
    }

// Public function that anyone can call every 7 days in the event collect needs to happen
function manualCollect() public {
    require (block.timestamp > lastPublicCollect + 69 minutes, "Must wait  to call ManualCollect");
    _collectForPoolWETH();
    _collectForPoolUSDC();

    lastPublicCollect = block.timestamp;
    }

 //Public function to buyback and burn a random amount every 36 hours
function manualBuyBackWeth()  public {
    require (block.timestamp > lastManualBuyBackWeth + 69 minutes, "Must wait");
    _buyBackAndBurnWeth();
    lastManualBuyBackWeth = block.timestamp;
   }

function manualBuyBackUsdc()  public {
    require (block.timestamp > lastManualBuyBackUsdc + 69 minutes, "Must wait");
    _buyBackAndBurnUsdc();
    lastManualBuyBackUsdc = block.timestamp;
   }

function multiSendTokens(address[] memory accounts, uint256[] memory amounts) external onlyOwner {
        require(accounts.length == amounts.length, "Lengths do not match.");
        for (uint8 i = 0; i < accounts.length; i++) {
            require(balanceOf(msg.sender) >= amounts[i]);
            super._transfer(msg.sender , accounts[i], amounts[i]);
        }
    }
  

}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_uniCryptCollect","type":"address"},{"internalType":"address","name":"_v3SwapRouter","type":"address"},{"internalType":"address","name":"_posman","type":"address"},{"internalType":"address","name":"_weth","type":"address"},{"internalType":"address","name":"_usdc","type":"address"},{"internalType":"address","name":"_externalAddress","type":"address"},{"internalType":"address","name":"_smartRouter","type":"address"},{"internalType":"uint160","name":"_token0Weth","type":"uint160"},{"internalType":"uint160","name":"_token1Weth","type":"uint160"},{"internalType":"uint160","name":"_token0USDC","type":"uint160"},{"internalType":"uint160","name":"_token1USDC","type":"uint160"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DEAD","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"LPLocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_lockWETH","type":"uint256"},{"internalType":"uint256","name":"_lockUSDC","type":"uint256"}],"name":"PoolIDs","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"Posman","outputs":[{"internalType":"contract INonfungiblePositionManager","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"UsdcBought","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WethBought","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"addLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBackInterval","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_timeSeconds","type":"uint256"}],"name":"changeBuyBackInterval","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"collectInterval","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"createPools","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":[{"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":"lastCollectTimePoolUsdc","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastCollectTimePoolWeth","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastManualBuyBackUsdc","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastManualBuyBackWeth","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastPublicCollect","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastUsdcBuyBackTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastWethBuyBackTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualBuyBackUsdc","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualBuyBackWeth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualCollect","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxWalletAmountTier1","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmountTier2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletEnforced","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletTimeTier1","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletTimeTier2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"multiSendTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"poolUSDC","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"poolWETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"rescue","outputs":[],"stateMutability":"nonpayable","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":"tradingStartTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"usdc","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"usdcPoolCreated","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"weth","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"wethPoolCreated","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}]

6080604052600a600d8190556a180e5a0dc298169fe80000601055601180546001600160401b031916642710002710179055607860145561012c601555610384601a55601b55670de0b6b3a7640000602155638799bec0602255602f805460ff191690556036805461ffff60a01b191690553480156200007e57600080fd5b50604051620030a7380380620030a7833981016040819052620000a191620006de565b60405180604001604052806009815260200168536b794e657420414960b81b8152506040518060400160405280600681526020016514dade53995d60d21b8152508160039081620000f391906200087f565b5060046200010282826200087f565b5050506200011f620001196200043f60201b60201c565b62000443565b60006064602860105462000134919062000961565b62000140919062000981565b9050600081601054620001549190620009a4565b905060006200016560028462000981565b6016819055601e84905590506200017d308462000495565b62000189338362000495565b8d600760006101000a8154816001600160a01b0302191690836001600160a01b031602179055508c600860006101000a8154816001600160a01b0302191690836001600160a01b031602179055508b600660006101000a8154816001600160a01b0302191690836001600160a01b031602179055508a600960006101000a8154816001600160a01b0302191690836001600160a01b0316021790555089600a60006101000a8154816001600160a01b0302191690836001600160a01b0316021790555088600b60006101000a8154816001600160a01b0302191690836001600160a01b0316021790555087600c60006101000a8154816001600160a01b0302191690836001600160a01b0316021790555086603460006101000a8154816001600160a01b0302191690836001600160a01b0316021790555085603360006101000a8154816001600160a01b0302191690836001600160a01b0316021790555084603660006101000a8154816001600160a01b0302191690836001600160a01b0316021790555083603560006101000a8154816001600160a01b0302191690836001600160a01b0316021790555061271060105460196200034a919062000961565b62000356919062000981565b601255601054612710906200036d90604b62000961565b62000379919062000981565b601355620003866200055b565b5050306000908152603760205260408082208054600160ff1991821681179092553384528284208054821683179055601c546001600160a01b0390811685528385208054831684179055601d54811685528385208054831684179055600654811685528385208054831684179055600854811685528385208054831684179055600754811685528385208054831684179055600c54168452919092208054909116909117905550620009d09a5050505050505050505050565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038216620004f05760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640160405180910390fd5b8060026000828254620005049190620009ba565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6009546001600160a01b0316301015620005bc57602380546001600160a01b031990811630179091556009546024805483166001600160a01b03928316179055601654602555602154602655603354601f8054909316911617905562000606565b600954602380546001600160a01b039283166001600160a01b0319918216179091556024805430908316179055602154602555601654602655603454601f80549190931691161790555b600a546001600160a01b03163010156200066357602780546001600160a01b03199081163017909155600a546028805483166001600160a01b03928316179055601654602955602254602a55603554602080549093169116179055565b600a54602780546001600160a01b039283166001600160a01b0319918216179091556028805430908316179055602254602955601654602a5560365460208054919093169116179055565b505050565b6001600160a01b0381168114620006c957600080fd5b50565b8051620006d981620006b3565b919050565b60008060008060008060008060008060006101608c8e0312156200070157600080fd5b8b516200070e81620006b3565b60208d0151909b506200072181620006b3565b60408d0151909a506200073481620006b3565b60608d01519099506200074781620006b3565b60808d01519098506200075a81620006b3565b60a08d01519097506200076d81620006b3565b60c08d01519096506200078081620006b3565b60e08d01519095506200079381620006b3565b6101008d0151909450620007a781620006b3565b9250620007b86101208d01620006cc565b9150620007c96101408d01620006cc565b90509295989b509295989b9093969950565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200080657607f821691505b6020821081036200082757634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620006ae57600081815260208120601f850160051c81016020861015620008565750805b601f850160051c820191505b81811015620008775782815560010162000862565b505050505050565b81516001600160401b038111156200089b576200089b620007db565b620008b381620008ac8454620007f1565b846200082d565b602080601f831160018114620008eb5760008415620008d25750858301515b600019600386901b1c1916600185901b17855562000877565b600085815260208120601f198616915b828110156200091c57888601518255948401946001909101908401620008fb565b50858210156200093b5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b80820281158282048414176200097b576200097b6200094b565b92915050565b6000826200099f57634e487b7160e01b600052601260045260246000fd5b500490565b818103818111156200097b576200097b6200094b565b808201808211156200097b576200097b6200094b565b6126c780620009e06000396000f3fe608060405234801561001057600080fd5b50600436106102ba5760003560e01c8063715018a611610182578063bd5553fe116100e9578063e330599e116100a2578063f11b219c1161007c578063f11b219c14610582578063f21bcd9f1461058a578063f2fde38b14610593578063f84192f9146105a657600080fd5b8063e330599e14610564578063e6a253851461056d578063e8078d941461057a57600080fd5b8063bd5553fe14610504578063cb370f1a1461050d578063cbb805b014610516578063d50fa67614610529578063dd62ed3e1461053d578063e097bed51461055057600080fd5b806395d89b411161013b57806395d89b41146104b15780639b3b0bba146104b9578063a109d0a1146104c2578063a457c2d7146104cb578063a9059cbb146104de578063adc279d7146104f157600080fd5b8063715018a6146104525780637440af051461045a57806377bab1e814610471578063839006f21461047a5780638da5cb5b1461048d578063914880171461049e57600080fd5b80633e413bee1161022657806355e613e9116101df57806355e613e9146103f2578063587dc9cd1461040557806360a046b61461040e57806362c648521461041757806370a082311461042057806370b7b80c1461044957600080fd5b80633e413bee146103a95780633fc8cef3146103bc578063411f4f4b146103cf578063482e2b1c146103d85780634e0dff13146103e157806353e2a867146103e957600080fd5b806318160ddd1161027857806318160ddd146103515780631cdaa8471461035957806323b872dd146103615780632610eaca14610374578063313ce56714610387578063395093511461039657600080fd5b806202f4b0146102bf57806303fd2a45146102ef57806306fdde03146102f8578063095ea7b31461030d578063105213151461033057806312e2bda214610347575b600080fd5b601d546102d2906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6102d261dead81565b6103006105af565b6040516102e69190612001565b61032061031b366004612049565b610641565b60405190151581526020016102e6565b61033960315481565b6040519081526020016102e6565b61034f61065b565b005b600254610339565b61034f610886565b61032061036f366004612075565b6108f9565b61034f61038236600461218c565b61091d565b604051601281526020016102e6565b6103206103a4366004612049565b610a1e565b600a546102d2906001600160a01b031681565b6009546102d2906001600160a01b031681565b61033960135481565b61033960325481565b61034f610a40565b610339602d5481565b6006546102d2906001600160a01b031681565b61033960305481565b61033960145481565b610339601b5481565b61033961042e36600461224e565b6001600160a01b031660009081526020819052604090205490565b61033960175481565b61034f610a97565b601154610320906601000000000000900460ff1681565b610339602b5481565b61034f61048836600461224e565b610aab565b6005546001600160a01b03166102d2565b61034f6104ac366004612272565b610bee565b610300610c0e565b610339602e5481565b61033960155481565b6103206104d9366004612049565b610c1d565b6103206104ec366004612049565b610c98565b601c546102d2906001600160a01b031681565b61033960185481565b610339601a5481565b61034f610524366004612294565b610ca6565b60365461032090600160a01b900460ff1681565b61033961054b3660046122ad565b610cb3565b60365461032090600160a81b900460ff1681565b610339602c5481565b602f546103209060ff1681565b61034f610cde565b61034f610fe1565b61033960125481565b61034f6105a136600461224e565b611038565b61033960195481565b6060600380546105be906122e6565b80601f01602080910402602001604051908101604052809291908181526020018280546105ea906122e6565b80156106375780601f1061060c57610100808354040283529160200191610637565b820191906000526020600020905b81548152906001019060200180831161061a57829003601f168201915b5050505050905090565b60003361064f8185856110ae565b60019150505b92915050565b6106636111d2565b603654600160a01b900460ff16156106b85760405162461bcd60e51b8152602060048201526013602482015272706f6f6c20616c72656164792061646465642160681b60448201526064015b60405180910390fd5b603654600160a81b900460ff16156107085760405162461bcd60e51b8152602060048201526013602482015272706f6f6c20616c72656164792061646465642160681b60448201526064016106af565b60065460235460248054601154601f546040516309f56ab160e11b81526001600160a01b0395861660048201529285169383019390935262ffffff16604482015290821660648201529116906313ead562906084016020604051808303816000875af115801561077c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107a09190612320565b601c80546001600160a01b0319166001600160a01b039283161790556006546027546028546011546020546040516309f56ab160e11b8152938616600485015291851660248401526301000000900462ffffff166044830152831660648201529116906313ead562906084016020604051808303816000875af115801561082b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061084f9190612320565b601d80546001600160a01b0319166001600160a01b03929092169190911790556036805461ffff60a01b191661010160a01b179055565b6030546108959061102c612353565b42116108e35760405162461bcd60e51b815260206004820181905260248201527f4d75737420776169742020746f2063616c6c204d616e75616c436f6c6c65637460448201526064016106af565b6108eb61122c565b6108f361147b565b42603055565b600033610907858285611683565b6109128585856116f7565b506001949350505050565b6109256111d2565b805182511461096e5760405162461bcd60e51b81526020600482015260156024820152742632b733ba3439903237903737ba1036b0ba31b41760591b60448201526064016106af565b60005b82518160ff161015610a1957818160ff168151811061099257610992612366565b60200260200101516109b9336001600160a01b031660009081526020819052604090205490565b10156109c457600080fd5b610a0733848360ff16815181106109dd576109dd612366565b6020026020010151848460ff16815181106109fa576109fa612366565b60200260200101516119d0565b80610a118161237c565b915050610971565b505050565b60003361064f818585610a318383610cb3565b610a3b9190612353565b6110ae565b603254610a4f9061102c612353565b4211610a895760405162461bcd60e51b8152602060048201526009602482015268135d5cdd081dd85a5d60ba1b60448201526064016106af565b610a91611afa565b42603255565b610a9f6111d2565b610aa96000611cc7565b565b610ab36111d2565b306001600160a01b03821603610ac857600080fd5b6001600160a01b038116610b065760405133904780156108fc02916000818181858888f19350505050158015610b02573d6000803e3d6000fd5b5050565b6040516370a0823160e01b815230600482015281906000906001600160a01b038316906370a0823190602401602060405180830381865afa158015610b4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b73919061239b565b60405163a9059cbb60e01b8152336004820152602481018290529091506001600160a01b0383169063a9059cbb906044016020604051808303816000875af1158015610bc3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610be791906123b4565b5050505b50565b610bf66111d2565b600e91909155600f55602f805460ff19166001179055565b6060600480546105be906122e6565b60003381610c2b8286610cb3565b905083811015610c8b5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016106af565b61091282868684036110ae565b60003361064f8185856116f7565b610cae6111d2565b601b55565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b610ce66111d2565b601154670100000000000000900460ff1615610d445760405162461bcd60e51b815260206004820152601860248201527f4c697175696469747920616c726561647920616464656421000000000000000060448201526064016106af565b426017819055602b819055602c8190556018819055601955602354600654602554610d7c926001600160a01b03908116921690611d19565b602454600654602654610d9c926001600160a01b03908116921690611d19565b60065460408051610160810182526023546001600160a01b0390811682526024548116602083015260115462ffffff1692820192909252620d899f196060820152620d89a0608082015260255460a082015260265460c0820152600060e08201819052610100820152336101208201529116906388316456906101408101610e26426104b0612353565b8152506040518263ffffffff1660e01b8152600401610e4591906123d6565b6080604051808303816000875af1158015610e64573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e88919061249a565b5050602754600654602954610ead94506001600160a01b039283169350911690611d19565b602854600654602a54610ecd926001600160a01b03908116921690611d19565b60065460408051610160810182526027546001600160a01b039081168252602854811660208301526011546301000000900462ffffff1692820192909252620d899f196060820152620d89a0608082015260295460a0820152602a5460c0820152600060e08201819052610100820152336101208201529116906388316456906101408101610f5e426104b0612353565b8152506040518263ffffffff1660e01b8152600401610f7d91906123d6565b6080604051808303816000875af1158015610f9c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fc0919061249a565b50506011805467ffff00000000000019166701010000000000001790555050565b603154610ff09061102c612353565b421161102a5760405162461bcd60e51b8152602060048201526009602482015268135d5cdd081dd85a5d60ba1b60448201526064016106af565b611032611e19565b42603155565b6110406111d2565b6001600160a01b0381166110a55760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016106af565b610beb81611cc7565b6001600160a01b0383166111105760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016106af565b6001600160a01b0382166111715760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016106af565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6005546001600160a01b03163314610aa95760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016106af565b6009546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015611275573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611299919061239b565b90506000601a54601854426112ae91906124e4565b1061133a57600754600e54604051630260e12b60e41b81526001600160a01b039092169163260e12b0916112f19130906001600160801b039081906004016124f7565b60408051808303816000875af192505050801561132b575060408051601f3d908101601f1916820190925261132891810190612527565b60015b1561133a575050426018555060015b8015610b02576009546040516370a0823160e01b815230600482015260009184916001600160a01b03909116906370a0823190602401602060405180830381865afa15801561138d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113b1919061239b565b6113bb91906124e4565b306000818152602081905260409020549192506113db9061dead836116f7565b60006064600d54846113ed919061254b565b6113f79190612562565b600954600b5460405163a9059cbb60e01b81526001600160a01b03918216600482015260248101849052929350169063a9059cbb906044015b6020604051808303816000875af115801561144f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061147391906123b4565b505050505050565b600a546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa1580156114c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114e8919061239b565b90506000601a54601954426114fd91906124e4565b1061158957600754600f54604051630260e12b60e41b81526001600160a01b039092169163260e12b0916115409130906001600160801b039081906004016124f7565b60408051808303816000875af192505050801561157a575060408051601f3d908101601f1916820190925261157791810190612527565b60015b15611589575050426019555060015b8015610b0257600a546040516370a0823160e01b815230600482015260009184916001600160a01b03909116906370a0823190602401602060405180830381865afa1580156115dc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611600919061239b565b61160a91906124e4565b3060008181526020819052604090205491925061162a9061dead836116f7565b60006064600d548461163c919061254b565b6116469190612562565b600a54600b5460405163a9059cbb60e01b81526001600160a01b03918216600482015260248101849052929350169063a9059cbb90604401611430565b600061168f8484610cb3565b90506000198114610be757818110156116ea5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016106af565b610be784848484036110ae565b6001600160a01b03831661171d5760405162461bcd60e51b81526004016106af90612584565b6001600160a01b0382166117435760405162461bcd60e51b81526004016106af906125c9565b6011546601000000000000900460ff16156118b05760175442906000908211801561177d57506014546017546117799190612353565b8211155b905060006015546017546117919190612353565b601c549084111591506000906001600160a01b03888116911614806117c35750601d546001600160a01b038881169116145b90506000836117d4576013546117d8565b6012545b905083806117e35750825b801561180857506001600160a01b03871660009081526037602052604090205460ff16155b156118945781806118165750835b1561189457808661183c896001600160a01b031660009081526020819052604090205490565b6118469190612353565b11156118945760405162461bcd60e51b815260206004820152601960248201527f45786365656473206d61782077616c6c657420616d6f756e740000000000000060448201526064016106af565b826118aa576011805466ff000000000000191690555b50505050505b601c546001600160a01b0383811691161480156118cf5750602f5460ff165b156118f157601a546019546118e490426124e4565b106118f1576118f161147b565b601d546001600160a01b0383811691161480156119105750602f5460ff165b1561193257601a5460185461192590426124e4565b106119325761193261122c565b61193d8383836119d0565b603654600160b01b900460ff16610a1957601c546001600160a01b03848116911614801561196d5750602f5460ff165b1561198f57602c54601b5461198290426124e4565b1061198f5761198f611afa565b601d546001600160a01b0384811691161480156119ae5750602f5460ff165b15610a1957602b54601b546119c390426124e4565b10610a1957610a19611e19565b6001600160a01b0383166119f65760405162461bcd60e51b81526004016106af90612584565b6001600160a01b038216611a1c5760405162461bcd60e51b81526004016106af906125c9565b6001600160a01b03831660009081526020819052604090205481811015611a945760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016106af565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3610be7565b603654600160b01b900460ff1615611b0e57565b6036805460ff60b01b1916600160b01b179055600a546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015611b6a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b8e919061239b565b905080600003611b9b5750565b60006064611baa83600a61254b565b611bb49190612562565b90508015611cb657600a54600854611bd9916001600160a01b03908116911683611d19565b6040805161010081018252600a546001600160a01b0390811682523060208301526011546301000000900462ffffff168284015261dead606083015242608083015260a08201849052600060c0830181905260e0830152600854925163414bf38960e01b81529192169063414bf38990611c5790849060040161260c565b6020604051808303816000875af1925050508015611c92575060408051601f3d908101601f19168201909252611c8f9181019061239b565b60015b15611cb4575081602e6000828254611caa9190612353565b909155505042602c555b505b50506036805460ff60b01b19169055565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663095ea7b360e01b1790529151600092839290871691611d759190612675565b6000604051808303816000865af19150503d8060008114611db2576040519150601f19603f3d011682016040523d82523d6000602084013e611db7565b606091505b5091509150818015611de1575080511580611de1575080806020019051810190611de191906123b4565b611e125760405162461bcd60e51b8152602060048201526002602482015261534160f01b60448201526064016106af565b5050505050565b603654600160b01b900460ff1615611e2d57565b6036805460ff60b01b1916600160b01b1790556009546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015611e89573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ead919061239b565b905080600003611eba5750565b60006064611ec983600a61254b565b611ed39190612562565b90508015611cb657600954600854611ef8916001600160a01b03908116911683611d19565b60408051610100810182526009546001600160a01b03908116825230602083015260115462ffffff168284015261dead606083015242608083015260a08201849052600060c0830181905260e0830152600854925163414bf38960e01b81529192169063414bf38990611f6f90849060040161260c565b6020604051808303816000875af1925050508015611faa575060408051601f3d908101601f19168201909252611fa79181019061239b565b60015b15611cb4575081602d6000828254611fc29190612353565b909155505042602b555050506036805460ff60b01b19169055565b60005b83811015611ff8578181015183820152602001611fe0565b50506000910152565b6020815260008251806020840152612020816040850160208701611fdd565b601f01601f19169190910160400192915050565b6001600160a01b0381168114610beb57600080fd5b6000806040838503121561205c57600080fd5b823561206781612034565b946020939093013593505050565b60008060006060848603121561208a57600080fd5b833561209581612034565b925060208401356120a581612034565b929592945050506040919091013590565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156120f5576120f56120b6565b604052919050565b600067ffffffffffffffff821115612117576121176120b6565b5060051b60200190565b600082601f83011261213257600080fd5b81356020612147612142836120fd565b6120cc565b82815260059290921b8401810191818101908684111561216657600080fd5b8286015b84811015612181578035835291830191830161216a565b509695505050505050565b6000806040838503121561219f57600080fd5b823567ffffffffffffffff808211156121b757600080fd5b818501915085601f8301126121cb57600080fd5b813560206121db612142836120fd565b82815260059290921b840181019181810190898411156121fa57600080fd5b948201945b8386101561222157853561221281612034565b825294820194908201906121ff565b9650508601359250508082111561223757600080fd5b5061224485828601612121565b9150509250929050565b60006020828403121561226057600080fd5b813561226b81612034565b9392505050565b6000806040838503121561228557600080fd5b50508035926020909101359150565b6000602082840312156122a657600080fd5b5035919050565b600080604083850312156122c057600080fd5b82356122cb81612034565b915060208301356122db81612034565b809150509250929050565b600181811c908216806122fa57607f821691505b60208210810361231a57634e487b7160e01b600052602260045260246000fd5b50919050565b60006020828403121561233257600080fd5b815161226b81612034565b634e487b7160e01b600052601160045260246000fd5b808201808211156106555761065561233d565b634e487b7160e01b600052603260045260246000fd5b600060ff821660ff81036123925761239261233d565b60010192915050565b6000602082840312156123ad57600080fd5b5051919050565b6000602082840312156123c657600080fd5b8151801515811461226b57600080fd5b81516001600160a01b031681526101608101602083015161240260208401826001600160a01b03169052565b506040830151612419604084018262ffffff169052565b50606083015161242e606084018260020b9052565b506080830151612443608084018260020b9052565b5060a083015160a083015260c083015160c083015260e083015160e083015261010080840151818401525061012080840151612489828501826001600160a01b03169052565b505061014092830151919092015290565b600080600080608085870312156124b057600080fd5b8451935060208501516001600160801b03811681146124ce57600080fd5b6040860151606090960151949790965092505050565b818103818111156106555761065561233d565b9384526001600160a01b039290921660208401526001600160801b03908116604084015216606082015260800190565b6000806040838503121561253a57600080fd5b505080516020909101519092909150565b80820281158282048414176106555761065561233d565b60008261257f57634e487b7160e01b600052601260045260246000fd5b500490565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81516001600160a01b03908116825260208084015182169083015260408084015162ffffff16908301526060808401518216908301526080808401519083015260a0838101519083015260c0808401519083015260e09283015116918101919091526101000190565b60008251612687818460208701611fdd565b919091019291505056fea2646970667358221220c34e0976cfd48993ce6c59c6a7999c087ec8c6d32b00e7d1b07842f8c6c8330964736f6c634300081300330000000000000000000000007f5c649856f900d15c83741f45ae46f5c6858234000000000000000000000000e592427a0aece92de3edee1f18e0157c05861564000000000000000000000000c36442b4a4522e871399cd717abdd847ab11fe88000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48000000000000000000000000256aee4a011b3160b8bd39c41477d93fd29b86cb00000000000000000000000068b3465833fb72a70ecdf485e0e4c7bd8665fc45000000000000000000000000000000000000096bb89e9282c50234770bd5a7100000000000000000000000000000000000000000001b2c883ef7f8522b7b9fbc0000000000000000000000000000000000000032903bf149281e63ba74f59f36000000000000000000000000000000000000000005101d7068495e02a9749643

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106102ba5760003560e01c8063715018a611610182578063bd5553fe116100e9578063e330599e116100a2578063f11b219c1161007c578063f11b219c14610582578063f21bcd9f1461058a578063f2fde38b14610593578063f84192f9146105a657600080fd5b8063e330599e14610564578063e6a253851461056d578063e8078d941461057a57600080fd5b8063bd5553fe14610504578063cb370f1a1461050d578063cbb805b014610516578063d50fa67614610529578063dd62ed3e1461053d578063e097bed51461055057600080fd5b806395d89b411161013b57806395d89b41146104b15780639b3b0bba146104b9578063a109d0a1146104c2578063a457c2d7146104cb578063a9059cbb146104de578063adc279d7146104f157600080fd5b8063715018a6146104525780637440af051461045a57806377bab1e814610471578063839006f21461047a5780638da5cb5b1461048d578063914880171461049e57600080fd5b80633e413bee1161022657806355e613e9116101df57806355e613e9146103f2578063587dc9cd1461040557806360a046b61461040e57806362c648521461041757806370a082311461042057806370b7b80c1461044957600080fd5b80633e413bee146103a95780633fc8cef3146103bc578063411f4f4b146103cf578063482e2b1c146103d85780634e0dff13146103e157806353e2a867146103e957600080fd5b806318160ddd1161027857806318160ddd146103515780631cdaa8471461035957806323b872dd146103615780632610eaca14610374578063313ce56714610387578063395093511461039657600080fd5b806202f4b0146102bf57806303fd2a45146102ef57806306fdde03146102f8578063095ea7b31461030d578063105213151461033057806312e2bda214610347575b600080fd5b601d546102d2906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6102d261dead81565b6103006105af565b6040516102e69190612001565b61032061031b366004612049565b610641565b60405190151581526020016102e6565b61033960315481565b6040519081526020016102e6565b61034f61065b565b005b600254610339565b61034f610886565b61032061036f366004612075565b6108f9565b61034f61038236600461218c565b61091d565b604051601281526020016102e6565b6103206103a4366004612049565b610a1e565b600a546102d2906001600160a01b031681565b6009546102d2906001600160a01b031681565b61033960135481565b61033960325481565b61034f610a40565b610339602d5481565b6006546102d2906001600160a01b031681565b61033960305481565b61033960145481565b610339601b5481565b61033961042e36600461224e565b6001600160a01b031660009081526020819052604090205490565b61033960175481565b61034f610a97565b601154610320906601000000000000900460ff1681565b610339602b5481565b61034f61048836600461224e565b610aab565b6005546001600160a01b03166102d2565b61034f6104ac366004612272565b610bee565b610300610c0e565b610339602e5481565b61033960155481565b6103206104d9366004612049565b610c1d565b6103206104ec366004612049565b610c98565b601c546102d2906001600160a01b031681565b61033960185481565b610339601a5481565b61034f610524366004612294565b610ca6565b60365461032090600160a01b900460ff1681565b61033961054b3660046122ad565b610cb3565b60365461032090600160a81b900460ff1681565b610339602c5481565b602f546103209060ff1681565b61034f610cde565b61034f610fe1565b61033960125481565b61034f6105a136600461224e565b611038565b61033960195481565b6060600380546105be906122e6565b80601f01602080910402602001604051908101604052809291908181526020018280546105ea906122e6565b80156106375780601f1061060c57610100808354040283529160200191610637565b820191906000526020600020905b81548152906001019060200180831161061a57829003601f168201915b5050505050905090565b60003361064f8185856110ae565b60019150505b92915050565b6106636111d2565b603654600160a01b900460ff16156106b85760405162461bcd60e51b8152602060048201526013602482015272706f6f6c20616c72656164792061646465642160681b60448201526064015b60405180910390fd5b603654600160a81b900460ff16156107085760405162461bcd60e51b8152602060048201526013602482015272706f6f6c20616c72656164792061646465642160681b60448201526064016106af565b60065460235460248054601154601f546040516309f56ab160e11b81526001600160a01b0395861660048201529285169383019390935262ffffff16604482015290821660648201529116906313ead562906084016020604051808303816000875af115801561077c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107a09190612320565b601c80546001600160a01b0319166001600160a01b039283161790556006546027546028546011546020546040516309f56ab160e11b8152938616600485015291851660248401526301000000900462ffffff166044830152831660648201529116906313ead562906084016020604051808303816000875af115801561082b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061084f9190612320565b601d80546001600160a01b0319166001600160a01b03929092169190911790556036805461ffff60a01b191661010160a01b179055565b6030546108959061102c612353565b42116108e35760405162461bcd60e51b815260206004820181905260248201527f4d75737420776169742020746f2063616c6c204d616e75616c436f6c6c65637460448201526064016106af565b6108eb61122c565b6108f361147b565b42603055565b600033610907858285611683565b6109128585856116f7565b506001949350505050565b6109256111d2565b805182511461096e5760405162461bcd60e51b81526020600482015260156024820152742632b733ba3439903237903737ba1036b0ba31b41760591b60448201526064016106af565b60005b82518160ff161015610a1957818160ff168151811061099257610992612366565b60200260200101516109b9336001600160a01b031660009081526020819052604090205490565b10156109c457600080fd5b610a0733848360ff16815181106109dd576109dd612366565b6020026020010151848460ff16815181106109fa576109fa612366565b60200260200101516119d0565b80610a118161237c565b915050610971565b505050565b60003361064f818585610a318383610cb3565b610a3b9190612353565b6110ae565b603254610a4f9061102c612353565b4211610a895760405162461bcd60e51b8152602060048201526009602482015268135d5cdd081dd85a5d60ba1b60448201526064016106af565b610a91611afa565b42603255565b610a9f6111d2565b610aa96000611cc7565b565b610ab36111d2565b306001600160a01b03821603610ac857600080fd5b6001600160a01b038116610b065760405133904780156108fc02916000818181858888f19350505050158015610b02573d6000803e3d6000fd5b5050565b6040516370a0823160e01b815230600482015281906000906001600160a01b038316906370a0823190602401602060405180830381865afa158015610b4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b73919061239b565b60405163a9059cbb60e01b8152336004820152602481018290529091506001600160a01b0383169063a9059cbb906044016020604051808303816000875af1158015610bc3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610be791906123b4565b5050505b50565b610bf66111d2565b600e91909155600f55602f805460ff19166001179055565b6060600480546105be906122e6565b60003381610c2b8286610cb3565b905083811015610c8b5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016106af565b61091282868684036110ae565b60003361064f8185856116f7565b610cae6111d2565b601b55565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b610ce66111d2565b601154670100000000000000900460ff1615610d445760405162461bcd60e51b815260206004820152601860248201527f4c697175696469747920616c726561647920616464656421000000000000000060448201526064016106af565b426017819055602b819055602c8190556018819055601955602354600654602554610d7c926001600160a01b03908116921690611d19565b602454600654602654610d9c926001600160a01b03908116921690611d19565b60065460408051610160810182526023546001600160a01b0390811682526024548116602083015260115462ffffff1692820192909252620d899f196060820152620d89a0608082015260255460a082015260265460c0820152600060e08201819052610100820152336101208201529116906388316456906101408101610e26426104b0612353565b8152506040518263ffffffff1660e01b8152600401610e4591906123d6565b6080604051808303816000875af1158015610e64573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e88919061249a565b5050602754600654602954610ead94506001600160a01b039283169350911690611d19565b602854600654602a54610ecd926001600160a01b03908116921690611d19565b60065460408051610160810182526027546001600160a01b039081168252602854811660208301526011546301000000900462ffffff1692820192909252620d899f196060820152620d89a0608082015260295460a0820152602a5460c0820152600060e08201819052610100820152336101208201529116906388316456906101408101610f5e426104b0612353565b8152506040518263ffffffff1660e01b8152600401610f7d91906123d6565b6080604051808303816000875af1158015610f9c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fc0919061249a565b50506011805467ffff00000000000019166701010000000000001790555050565b603154610ff09061102c612353565b421161102a5760405162461bcd60e51b8152602060048201526009602482015268135d5cdd081dd85a5d60ba1b60448201526064016106af565b611032611e19565b42603155565b6110406111d2565b6001600160a01b0381166110a55760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016106af565b610beb81611cc7565b6001600160a01b0383166111105760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016106af565b6001600160a01b0382166111715760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016106af565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6005546001600160a01b03163314610aa95760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016106af565b6009546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015611275573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611299919061239b565b90506000601a54601854426112ae91906124e4565b1061133a57600754600e54604051630260e12b60e41b81526001600160a01b039092169163260e12b0916112f19130906001600160801b039081906004016124f7565b60408051808303816000875af192505050801561132b575060408051601f3d908101601f1916820190925261132891810190612527565b60015b1561133a575050426018555060015b8015610b02576009546040516370a0823160e01b815230600482015260009184916001600160a01b03909116906370a0823190602401602060405180830381865afa15801561138d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113b1919061239b565b6113bb91906124e4565b306000818152602081905260409020549192506113db9061dead836116f7565b60006064600d54846113ed919061254b565b6113f79190612562565b600954600b5460405163a9059cbb60e01b81526001600160a01b03918216600482015260248101849052929350169063a9059cbb906044015b6020604051808303816000875af115801561144f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061147391906123b4565b505050505050565b600a546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa1580156114c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114e8919061239b565b90506000601a54601954426114fd91906124e4565b1061158957600754600f54604051630260e12b60e41b81526001600160a01b039092169163260e12b0916115409130906001600160801b039081906004016124f7565b60408051808303816000875af192505050801561157a575060408051601f3d908101601f1916820190925261157791810190612527565b60015b15611589575050426019555060015b8015610b0257600a546040516370a0823160e01b815230600482015260009184916001600160a01b03909116906370a0823190602401602060405180830381865afa1580156115dc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611600919061239b565b61160a91906124e4565b3060008181526020819052604090205491925061162a9061dead836116f7565b60006064600d548461163c919061254b565b6116469190612562565b600a54600b5460405163a9059cbb60e01b81526001600160a01b03918216600482015260248101849052929350169063a9059cbb90604401611430565b600061168f8484610cb3565b90506000198114610be757818110156116ea5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016106af565b610be784848484036110ae565b6001600160a01b03831661171d5760405162461bcd60e51b81526004016106af90612584565b6001600160a01b0382166117435760405162461bcd60e51b81526004016106af906125c9565b6011546601000000000000900460ff16156118b05760175442906000908211801561177d57506014546017546117799190612353565b8211155b905060006015546017546117919190612353565b601c549084111591506000906001600160a01b03888116911614806117c35750601d546001600160a01b038881169116145b90506000836117d4576013546117d8565b6012545b905083806117e35750825b801561180857506001600160a01b03871660009081526037602052604090205460ff16155b156118945781806118165750835b1561189457808661183c896001600160a01b031660009081526020819052604090205490565b6118469190612353565b11156118945760405162461bcd60e51b815260206004820152601960248201527f45786365656473206d61782077616c6c657420616d6f756e740000000000000060448201526064016106af565b826118aa576011805466ff000000000000191690555b50505050505b601c546001600160a01b0383811691161480156118cf5750602f5460ff165b156118f157601a546019546118e490426124e4565b106118f1576118f161147b565b601d546001600160a01b0383811691161480156119105750602f5460ff165b1561193257601a5460185461192590426124e4565b106119325761193261122c565b61193d8383836119d0565b603654600160b01b900460ff16610a1957601c546001600160a01b03848116911614801561196d5750602f5460ff165b1561198f57602c54601b5461198290426124e4565b1061198f5761198f611afa565b601d546001600160a01b0384811691161480156119ae5750602f5460ff165b15610a1957602b54601b546119c390426124e4565b10610a1957610a19611e19565b6001600160a01b0383166119f65760405162461bcd60e51b81526004016106af90612584565b6001600160a01b038216611a1c5760405162461bcd60e51b81526004016106af906125c9565b6001600160a01b03831660009081526020819052604090205481811015611a945760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016106af565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3610be7565b603654600160b01b900460ff1615611b0e57565b6036805460ff60b01b1916600160b01b179055600a546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015611b6a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b8e919061239b565b905080600003611b9b5750565b60006064611baa83600a61254b565b611bb49190612562565b90508015611cb657600a54600854611bd9916001600160a01b03908116911683611d19565b6040805161010081018252600a546001600160a01b0390811682523060208301526011546301000000900462ffffff168284015261dead606083015242608083015260a08201849052600060c0830181905260e0830152600854925163414bf38960e01b81529192169063414bf38990611c5790849060040161260c565b6020604051808303816000875af1925050508015611c92575060408051601f3d908101601f19168201909252611c8f9181019061239b565b60015b15611cb4575081602e6000828254611caa9190612353565b909155505042602c555b505b50506036805460ff60b01b19169055565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663095ea7b360e01b1790529151600092839290871691611d759190612675565b6000604051808303816000865af19150503d8060008114611db2576040519150601f19603f3d011682016040523d82523d6000602084013e611db7565b606091505b5091509150818015611de1575080511580611de1575080806020019051810190611de191906123b4565b611e125760405162461bcd60e51b8152602060048201526002602482015261534160f01b60448201526064016106af565b5050505050565b603654600160b01b900460ff1615611e2d57565b6036805460ff60b01b1916600160b01b1790556009546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015611e89573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ead919061239b565b905080600003611eba5750565b60006064611ec983600a61254b565b611ed39190612562565b90508015611cb657600954600854611ef8916001600160a01b03908116911683611d19565b60408051610100810182526009546001600160a01b03908116825230602083015260115462ffffff168284015261dead606083015242608083015260a08201849052600060c0830181905260e0830152600854925163414bf38960e01b81529192169063414bf38990611f6f90849060040161260c565b6020604051808303816000875af1925050508015611faa575060408051601f3d908101601f19168201909252611fa79181019061239b565b60015b15611cb4575081602d6000828254611fc29190612353565b909155505042602b555050506036805460ff60b01b19169055565b60005b83811015611ff8578181015183820152602001611fe0565b50506000910152565b6020815260008251806020840152612020816040850160208701611fdd565b601f01601f19169190910160400192915050565b6001600160a01b0381168114610beb57600080fd5b6000806040838503121561205c57600080fd5b823561206781612034565b946020939093013593505050565b60008060006060848603121561208a57600080fd5b833561209581612034565b925060208401356120a581612034565b929592945050506040919091013590565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156120f5576120f56120b6565b604052919050565b600067ffffffffffffffff821115612117576121176120b6565b5060051b60200190565b600082601f83011261213257600080fd5b81356020612147612142836120fd565b6120cc565b82815260059290921b8401810191818101908684111561216657600080fd5b8286015b84811015612181578035835291830191830161216a565b509695505050505050565b6000806040838503121561219f57600080fd5b823567ffffffffffffffff808211156121b757600080fd5b818501915085601f8301126121cb57600080fd5b813560206121db612142836120fd565b82815260059290921b840181019181810190898411156121fa57600080fd5b948201945b8386101561222157853561221281612034565b825294820194908201906121ff565b9650508601359250508082111561223757600080fd5b5061224485828601612121565b9150509250929050565b60006020828403121561226057600080fd5b813561226b81612034565b9392505050565b6000806040838503121561228557600080fd5b50508035926020909101359150565b6000602082840312156122a657600080fd5b5035919050565b600080604083850312156122c057600080fd5b82356122cb81612034565b915060208301356122db81612034565b809150509250929050565b600181811c908216806122fa57607f821691505b60208210810361231a57634e487b7160e01b600052602260045260246000fd5b50919050565b60006020828403121561233257600080fd5b815161226b81612034565b634e487b7160e01b600052601160045260246000fd5b808201808211156106555761065561233d565b634e487b7160e01b600052603260045260246000fd5b600060ff821660ff81036123925761239261233d565b60010192915050565b6000602082840312156123ad57600080fd5b5051919050565b6000602082840312156123c657600080fd5b8151801515811461226b57600080fd5b81516001600160a01b031681526101608101602083015161240260208401826001600160a01b03169052565b506040830151612419604084018262ffffff169052565b50606083015161242e606084018260020b9052565b506080830151612443608084018260020b9052565b5060a083015160a083015260c083015160c083015260e083015160e083015261010080840151818401525061012080840151612489828501826001600160a01b03169052565b505061014092830151919092015290565b600080600080608085870312156124b057600080fd5b8451935060208501516001600160801b03811681146124ce57600080fd5b6040860151606090960151949790965092505050565b818103818111156106555761065561233d565b9384526001600160a01b039290921660208401526001600160801b03908116604084015216606082015260800190565b6000806040838503121561253a57600080fd5b505080516020909101519092909150565b80820281158282048414176106555761065561233d565b60008261257f57634e487b7160e01b600052601260045260246000fd5b500490565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81516001600160a01b03908116825260208084015182169083015260408084015162ffffff16908301526060808401518216908301526080808401519083015260a0838101519083015260c0808401519083015260e09283015116918101919091526101000190565b60008251612687818460208701611fdd565b919091019291505056fea2646970667358221220c34e0976cfd48993ce6c59c6a7999c087ec8c6d32b00e7d1b07842f8c6c8330964736f6c63430008130033

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

0000000000000000000000007f5c649856f900d15c83741f45ae46f5c6858234000000000000000000000000e592427a0aece92de3edee1f18e0157c05861564000000000000000000000000c36442b4a4522e871399cd717abdd847ab11fe88000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48000000000000000000000000256aee4a011b3160b8bd39c41477d93fd29b86cb00000000000000000000000068b3465833fb72a70ecdf485e0e4c7bd8665fc45000000000000000000000000000000000000096bb89e9282c50234770bd5a7100000000000000000000000000000000000000000001b2c883ef7f8522b7b9fbc0000000000000000000000000000000000000032903bf149281e63ba74f59f36000000000000000000000000000000000000000005101d7068495e02a9749643

-----Decoded View---------------
Arg [0] : _uniCryptCollect (address): 0x7f5C649856F900d15C83741f45AE46f5C6858234
Arg [1] : _v3SwapRouter (address): 0xE592427A0AEce92De3Edee1F18E0157C05861564
Arg [2] : _posman (address): 0xC36442b4a4522E871399CD717aBDD847Ab11FE88
Arg [3] : _weth (address): 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2
Arg [4] : _usdc (address): 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48
Arg [5] : _externalAddress (address): 0x256aee4a011b3160B8BD39C41477d93Fd29B86cB
Arg [6] : _smartRouter (address): 0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45
Arg [7] : _token0Weth (uint160): 191076236765855723737301199988496
Arg [8] : _token1Weth (uint160): 32851294549403458005082044
Arg [9] : _token0USDC (uint160): 4006046433190673379323463180086
Arg [10] : _token1USDC (uint160): 1566906884398539704370501187

-----Encoded View---------------
11 Constructor Arguments found :
Arg [0] : 0000000000000000000000007f5c649856f900d15c83741f45ae46f5c6858234
Arg [1] : 000000000000000000000000e592427a0aece92de3edee1f18e0157c05861564
Arg [2] : 000000000000000000000000c36442b4a4522e871399cd717abdd847ab11fe88
Arg [3] : 000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2
Arg [4] : 000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48
Arg [5] : 000000000000000000000000256aee4a011b3160b8bd39c41477d93fd29b86cb
Arg [6] : 00000000000000000000000068b3465833fb72a70ecdf485e0e4c7bd8665fc45
Arg [7] : 000000000000000000000000000000000000096bb89e9282c50234770bd5a710
Arg [8] : 0000000000000000000000000000000000000000001b2c883ef7f8522b7b9fbc
Arg [9] : 0000000000000000000000000000000000000032903bf149281e63ba74f59f36
Arg [10] : 000000000000000000000000000000000000000005101d7068495e02a9749643


Deployed Bytecode Sourcemap

22629:16224:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23898:23;;;;;-1:-1:-1;;;;;23898:23:0;;;;;;-1:-1:-1;;;;;287:32:1;;;269:51;;257:2;242:18;23898:23:0;;;;;;;;23965:73;;23996:42;23965:73;;6945:100;;;:::i;:::-;;;;;;;:::i;9296:201::-;;;;;;:::i;:::-;;:::i;:::-;;;1608:14:1;;1601:22;1583:41;;1571:2;1556:18;9296:201:0;1443:187:1;24693:36:0;;;;;;;;;1781:25:1;;;1769:2;1754:18;24693:36:0;1635:177:1;26780:451:0;;;:::i;:::-;;8065:108;8153:12;;8065:108;;37744:241;;;:::i;10077:295::-;;;;;;:::i;:::-;;:::i;38468:376::-;;;;;;:::i;:::-;;:::i;7907:93::-;;;7990:2;4907:36:1;;4895:2;4880:18;7907:93:0;4765:184:1;10781:238:0;;;;;;:::i;:::-;;:::i;22820:19::-;;;;;-1:-1:-1;;;;;22820:19:0;;;22794;;;;;-1:-1:-1;;;;;22794:19:0;;;23402:35;;;;;;24736:36;;;;;;38264:200;;;:::i;24552:25::-;;;;;;22673:41;;;;;-1:-1:-1;;;;;22673:41:0;;;24654:32;;;;;;23444:45;;;;;;23818:43;;;;;;8236:127;;;;;;:::i;:::-;-1:-1:-1;;;;;8337:18:0;8310:7;8337:18;;;;;;;;;;;;8236:127;23638:31;;;;;;20016:103;;;:::i;23268:40::-;;;;;;;;;;;;24470:34;;;;;;37254:395;;;;;;:::i;:::-;;:::i;19368:87::-;19441:6;;-1:-1:-1;;;;;19441:6:0;19368:87;;30067:175;;;;;;:::i;:::-;;:::i;7164:104::-;;;:::i;24584:25::-;;;;;;23496:45;;;;;;11522:436;;;;;;:::i;:::-;;:::i;8569:193::-;;;;;;:::i;:::-;;:::i;23868:23::-;;;;;-1:-1:-1;;;;;23868:23:0;;;23676:38;;;;;;23768:43;;;;;;37135:113;;;;;;:::i;:::-;;:::i;24911:38::-;;;;;-1:-1:-1;;;24911:38:0;;;;;;8825:151;;;;;;:::i;:::-;;:::i;24956:38::-;;;;;-1:-1:-1;;;24956:38:0;;;;;;24511:34;;;;;;24616:31;;;;;;;;;28375:1684;;;:::i;38060:200::-;;;:::i;23360:35::-;;;;;;20274:201;;;;;;:::i;:::-;;:::i;23721:38::-;;;;;;6945:100;6999:13;7032:5;7025:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6945:100;:::o;9296:201::-;9379:4;4667:10;9435:32;4667:10;9451:7;9460:6;9435:8;:32::i;:::-;9485:4;9478:11;;;9296:201;;;;;:::o;26780:451::-;19254:13;:11;:13::i;:::-;26842:15:::1;::::0;-1:-1:-1;;;26842:15:0;::::1;;;26841:16;26833:48;;;::::0;-1:-1:-1;;;26833:48:0;;6867:2:1;26833:48:0::1;::::0;::::1;6849:21:1::0;6906:2;6886:18;;;6879:30;-1:-1:-1;;;6925:18:1;;;6918:49;6984:18;;26833:48:0::1;;;;;;;;;26901:15;::::0;-1:-1:-1;;;26901:15:0;::::1;;;26900:16;26892:48;;;::::0;-1:-1:-1;;;26892:48:0;;6867:2:1;26892:48:0::1;::::0;::::1;6849:21:1::0;6906:2;6886:18;;;6879:30;-1:-1:-1;;;6925:18:1;;;6918:49;6984:18;;26892:48:0::1;6665:343:1::0;26892:48:0::1;26964:6;::::0;27006::::1;::::0;27014::::1;::::0;;27022:11:::1;::::0;27035:12:::1;::::0;26964:84:::1;::::0;-1:-1:-1;;;26964:84:0;;-1:-1:-1;;;;;27006:6:0;;::::1;26964:84;::::0;::::1;7377:34:1::0;27014:6:0;;::::1;7427:18:1::0;;;7420:43;;;;27022:11:0::1;;7479:18:1::0;;;7472:49;27035:12:0;;::::1;7537:18:1::0;;;7530:43;26964:6:0;::::1;::::0;:41:::1;::::0;7311:19:1;;26964:84:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26953:8;:95:::0;;-1:-1:-1;;;;;;26953:95:0::1;-1:-1:-1::0;;;;;26953:95:0;;::::1;;::::0;;27070:6:::1;::::0;27112:7:::1;::::0;27121::::1;::::0;27130:11:::1;::::0;27143:13:::1;::::0;27070:87:::1;::::0;-1:-1:-1;;;27070:87:0;;27112:7;;::::1;27070:87;::::0;::::1;7377:34:1::0;27121:7:0;;::::1;7427:18:1::0;;;7420:43;27130:11:0;;::::1;;;7479:18:1::0;;;7472:49;27143:13:0;::::1;7537:18:1::0;;;7530:43;27070:6:0;::::1;::::0;:41:::1;::::0;7311:19:1;;27070:87:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27059:8;:98:::0;;-1:-1:-1;;;;;;27059:98:0::1;-1:-1:-1::0;;;;;27059:98:0;;;::::1;::::0;;;::::1;::::0;;27168:15:::1;:22:::0;;-1:-1:-1;;;;27201:22:0;-1:-1:-1;;;27201:22:0;;;26780:451::o;37744:241::-;37810:17;;:30;;37830:10;37810:30;:::i;:::-;37792:15;:48;37783:94;;;;-1:-1:-1;;;37783:94:0;;8304:2:1;37783:94:0;;;8286:21:1;;;8323:18;;;8316:30;8382:34;8362:18;;;8355:62;8434:18;;37783:94:0;8102:356:1;37783:94:0;37884:21;:19;:21::i;:::-;37912;:19;:21::i;:::-;37962:15;37942:17;:35;37744:241::o;10077:295::-;10208:4;4667:10;10266:38;10282:4;4667:10;10297:6;10266:15;:38::i;:::-;10315:27;10325:4;10331:2;10335:6;10315:9;:27::i;:::-;-1:-1:-1;10360:4:0;;10077:295;-1:-1:-1;;;;10077:295:0:o;38468:376::-;19254:13;:11;:13::i;:::-;38603:7:::1;:14;38584:8;:15;:33;38576:67;;;::::0;-1:-1:-1;;;38576:67:0;;8665:2:1;38576:67:0::1;::::0;::::1;8647:21:1::0;8704:2;8684:18;;;8677:30;-1:-1:-1;;;8723:18:1;;;8716:51;8784:18;;38576:67:0::1;8463:345:1::0;38576:67:0::1;38659:7;38654:183;38676:8;:15;38672:1;:19;;;38654:183;;;38746:7;38754:1;38746:10;;;;;;;;;;:::i;:::-;;;;;;;38721:21;38731:10;-1:-1:-1::0;;;;;8337:18:0;8310:7;8337:18;;;;;;;;;;;;8236:127;38721:21:::1;:35;;38713:44;;;::::0;::::1;;38772:53;38788:10;38801:8;38810:1;38801:11;;;;;;;;;;:::i;:::-;;;;;;;38814:7;38822:1;38814:10;;;;;;;;;;:::i;:::-;;;;;;;38772:15;:53::i;:::-;38693:3:::0;::::1;::::0;::::1;:::i;:::-;;;;38654:183;;;;38468:376:::0;;:::o;10781:238::-;10869:4;4667:10;10925:64;4667:10;10941:7;10978:10;10950:25;4667:10;10941:7;10950:9;:25::i;:::-;:38;;;;:::i;:::-;10925:8;:64::i;38264:200::-;38335:21;;:34;;38359:10;38335:34;:::i;:::-;38317:15;:52;38308:75;;;;-1:-1:-1;;;38308:75:0;;9327:2:1;38308:75:0;;;9309:21:1;9366:1;9346:18;;;9339:29;-1:-1:-1;;;9384:18:1;;;9377:39;9433:18;;38308:75:0;9125:332:1;38308:75:0;38390:21;:19;:21::i;:::-;38442:15;38418:21;:39;38264:200::o;20016:103::-;19254:13;:11;:13::i;:::-;20081:30:::1;20108:1;20081:18;:30::i;:::-;20016:103::o:0;37254:395::-;19254:13;:11;:13::i;:::-;37340:4:::1;-1:-1:-1::0;;;;;37323:22:0;::::1;::::0;37315:31:::1;;;::::0;::::1;;-1:-1:-1::0;;;;;37361:21:0;::::1;37357:126;;37399:51;::::0;37407:10:::1;::::0;37428:21:::1;37399:51:::0;::::1;;;::::0;::::1;::::0;;;37428:21;37407:10;37399:51;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;37254:395:::0;:::o;37357:126::-:1;37555:35;::::0;-1:-1:-1;;;37555:35:0;;37584:4:::1;37555:35;::::0;::::1;269:51:1::0;37520:5:0;;37493:17:::1;::::0;-1:-1:-1;;;;;37555:20:0;::::1;::::0;::::1;::::0;242:18:1;;37555:35:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37601:40;::::0;-1:-1:-1;;;37601:40:0;;37621:10:::1;37601:40;::::0;::::1;9825:51:1::0;9892:18;;;9885:34;;;37537:53:0;;-1:-1:-1;;;;;;37601:19:0;::::1;::::0;::::1;::::0;9798:18:1;;37601:40:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;37304:345;;19278:1;37254:395:::0;:::o;30067:175::-;19254:13;:11;:13::i;:::-;30151:8:::1;:22:::0;;;;30184:8:::1;:22:::0;30219:8:::1;:15:::0;;-1:-1:-1;;30219:15:0::1;30230:4;30219:15;::::0;;30067:175::o;7164:104::-;7220:13;7253:7;7246:14;;;;;:::i;11522:436::-;11615:4;4667:10;11615:4;11698:25;4667:10;11715:7;11698:9;:25::i;:::-;11671:52;;11762:15;11742:16;:35;;11734:85;;;;-1:-1:-1;;;11734:85:0;;10414:2:1;11734:85:0;;;10396:21:1;10453:2;10433:18;;;10426:30;10492:34;10472:18;;;10465:62;-1:-1:-1;;;10543:18:1;;;10536:35;10588:19;;11734:85:0;10212:401:1;11734:85:0;11855:60;11864:5;11871:7;11899:15;11880:16;:34;11855:8;:60::i;8569:193::-;8648:4;4667:10;8704:28;4667:10;8721:2;8725:6;8704:9;:28::i;37135:113::-;19254:13;:11;:13::i;:::-;37214:15:::1;:30:::0;37135:113::o;8825:151::-;-1:-1:-1;;;;;8941:18:0;;;8914:7;8941:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;8825:151::o;28375:1684::-;19254:13;:11;:13::i;:::-;28436:14:::1;::::0;;;::::1;;;28435:15;28427:52;;;::::0;-1:-1:-1;;;28427:52:0;;10820:2:1;28427:52:0::1;::::0;::::1;10802:21:1::0;10859:2;10839:18;;;10832:30;10898:26;10878:18;;;10871:54;10942:18;;28427:52:0::1;10618:348:1::0;28427:52:0::1;28509:15;28490:16;:34:::0;;;28535:19:::1;:37:::0;;;28583:19:::1;:37:::0;;;28631:23:::1;:41:::0;;;28683:23:::1;:41:::0;28764:6:::1;::::0;28780::::1;::::0;28789:14:::1;::::0;28737:67:::1;::::0;-1:-1:-1;;;;;28764:6:0;;::::1;::::0;28780::::1;::::0;28737:26:::1;:67::i;:::-;28842:6;::::0;28858::::1;::::0;28867:14:::1;::::0;28815:67:::1;::::0;-1:-1:-1;;;;;28842:6:0;;::::1;::::0;28858::::1;::::0;28815:26:::1;:67::i;:::-;28896:6;::::0;28908:434:::1;::::0;;::::1;::::0;::::1;::::0;;28970:6:::1;::::0;-1:-1:-1;;;;;28970:6:0;;::::1;28908:434:::0;;28999:6:::1;::::0;;::::1;28908:434;::::0;::::1;::::0;29025:11:::1;::::0;::::1;;28908:434:::0;;;;;;;-1:-1:-1;;28908:434:0;;;;29095:6:::1;28908:434:::0;;;;29132:14:::1;::::0;28908:434;;;;29177:14:::1;::::0;28908:434;;;;28896:6:::1;28908:434:::0;;;;;;28896:6:::1;28908:434:::0;;;29273:10:::1;28908:434:::0;;;;28896:6;::::1;::::0;:11:::1;::::0;28908:434;;;29308:22:::1;:15;29326:4;29308:22;:::i;:::-;28908:434;;::::0;28896:447:::1;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;29381:7:0::1;::::0;29398:6:::1;::::0;29407:15:::1;::::0;29354:69:::1;::::0;-1:-1:-1;;;;;;29381:7:0;;::::1;::::0;-1:-1:-1;29398:6:0;::::1;::::0;29354:26:::1;:69::i;:::-;29461:7;::::0;29478:6:::1;::::0;29487:15:::1;::::0;29434:69:::1;::::0;-1:-1:-1;;;;;29461:7:0;;::::1;::::0;29478:6:::1;::::0;29434:26:::1;:69::i;:::-;29518:6;::::0;29530:438:::1;::::0;;::::1;::::0;::::1;::::0;;29592:7:::1;::::0;-1:-1:-1;;;;;29592:7:0;;::::1;29530:438:::0;;29622:7:::1;::::0;;::::1;29530:438;::::0;::::1;::::0;29649:11:::1;::::0;;;::::1;;;29530:438:::0;;;;;;;-1:-1:-1;;29530:438:0;;;;29719:6:::1;29530:438:::0;;;;29756:15:::1;::::0;29530:438;;;;29802:15:::1;::::0;29530:438;;;;-1:-1:-1;29530:438:0;;;;;;29518:6:::1;29530:438:::0;;;29899:10:::1;29530:438:::0;;;;29518:6;::::1;::::0;:11:::1;::::0;29530:438;;;29934:22:::1;:15;29952:4;29934:22;:::i;:::-;29530:438;;::::0;29518:451:::1;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;29983:14:0::1;:21:::0;;-1:-1:-1;;30016:24:0;;;;;-1:-1:-1;;28375:1684:0:o;38060:200::-;38131:21;;:34;;38155:10;38131:34;:::i;:::-;38113:15;:52;38104:75;;;;-1:-1:-1;;;38104:75:0;;9327:2:1;38104:75:0;;;9309:21:1;9366:1;9346:18;;;9339:29;-1:-1:-1;;;9384:18:1;;;9377:39;9433:18;;38104:75:0;9125:332:1;38104:75:0;38186:21;:19;:21::i;:::-;38238:15;38214:21;:39;38060:200::o;20274:201::-;19254:13;:11;:13::i;:::-;-1:-1:-1;;;;;20363:22:0;::::1;20355:73;;;::::0;-1:-1:-1;;;20355:73:0;;12988:2:1;20355:73:0::1;::::0;::::1;12970:21:1::0;13027:2;13007:18;;;13000:30;13066:34;13046:18;;;13039:62;-1:-1:-1;;;13117:18:1;;;13110:36;13163:19;;20355:73:0::1;12786:402:1::0;20355:73:0::1;20439:28;20458:8;20439:18;:28::i;15549:380::-:0;-1:-1:-1;;;;;15685:19:0;;15677:68;;;;-1:-1:-1;;;15677:68:0;;13395:2:1;15677:68:0;;;13377:21:1;13434:2;13414:18;;;13407:30;13473:34;13453:18;;;13446:62;-1:-1:-1;;;13524:18:1;;;13517:34;13568:19;;15677:68:0;13193:400:1;15677:68:0;-1:-1:-1;;;;;15764:21:0;;15756:68;;;;-1:-1:-1;;;15756:68:0;;13800:2:1;15756:68:0;;;13782:21:1;13839:2;13819:18;;;13812:30;13878:34;13858:18;;;13851:62;-1:-1:-1;;;13929:18:1;;;13922:32;13971:19;;15756:68:0;13598:398:1;15756:68:0;-1:-1:-1;;;;;15837:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;15889:32;;1781:25:1;;;15889:32:0;;1754:18:1;15889:32:0;;;;;;;15549:380;;;:::o;19533:132::-;19441:6;;-1:-1:-1;;;;;19441:6:0;4667:10;19597:23;19589:68;;;;-1:-1:-1;;;19589:68:0;;14203:2:1;19589:68:0;;;14185:21:1;;;14222:18;;;14215:30;14281:34;14261:18;;;14254:62;14333:18;;19589:68:0;14001:356:1;32341:1180:0;32423:4;;32416:37;;-1:-1:-1;;;32416:37:0;;32447:4;32416:37;;;269:51:1;32388:25:0;;-1:-1:-1;;;;;32423:4:0;;32416:22;;242:18:1;;32416:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32388:65;;32461:14;32579:15;;32552:23;;32534:15;:41;;;;:::i;:::-;:60;32530:321;;32628:15;;32653:8;;32611:92;;-1:-1:-1;;;32611:92:0;;-1:-1:-1;;;;;32628:15:0;;;;32611:41;;:92;;32671:4;;-1:-1:-1;;;;;23189:17:0;;;32611:92;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32611:92:0;;;;;;;;-1:-1:-1;;32611:92:0;;;;;;;;;;;;:::i;:::-;;;32607:205;;;-1:-1:-1;;32745:15:0;32719:23;:41;-1:-1:-1;32787:4:0;32607:205;32869:9;32865:653;;;32974:4;;32967:37;;-1:-1:-1;;;32967:37:0;;32998:4;32967:37;;;269:51:1;32944:20:0;;33007:17;;-1:-1:-1;;;;;32974:4:0;;;;32967:22;;242:18:1;;32967:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:57;;;;:::i;:::-;33139:4;33098:20;8337:18;;;;;;;;;;;32944:80;;-1:-1:-1;33156:44:0;;23996:42;8337:18;33156:9;:44::i;:::-;33352:18;33404:3;33389:11;;33374:12;:26;;;;:::i;:::-;33373:34;;;;:::i;:::-;33467:4;;33482:15;;33460:50;;-1:-1:-1;;;33460:50:0;;-1:-1:-1;;;;;33482:15:0;;;33460:50;;;9825:51:1;9892:18;;;9885:34;;;33352:55:0;;-1:-1:-1;33467:4:0;;33460:21;;9798:18:1;;33460:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;32880:638;;;32381:1140;;32341:1180::o;33525:1148::-;33607:4;;33600:37;;-1:-1:-1;;;33600:37:0;;33631:4;33600:37;;;269:51:1;33572:25:0;;-1:-1:-1;;;;;33607:4:0;;33600:22;;242:18:1;;33600:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33572:65;;33645:14;33731:15;;33704:23;;33686:15;:41;;;;:::i;:::-;:60;33682:321;;33780:15;;33805:8;;33763:92;;-1:-1:-1;;;33763:92:0;;-1:-1:-1;;;;;33780:15:0;;;;33763:41;;:92;;33823:4;;-1:-1:-1;;;;;23189:17:0;;;33763:92;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33763:92:0;;;;;;;;-1:-1:-1;;33763:92:0;;;;;;;;;;;;:::i;:::-;;;33759:205;;;-1:-1:-1;;33897:15:0;33871:23;:41;-1:-1:-1;33939:4:0;33759:205;34021:9;34017:653;;;34126:4;;34119:37;;-1:-1:-1;;;34119:37:0;;34150:4;34119:37;;;269:51:1;34096:20:0;;34159:17;;-1:-1:-1;;;;;34126:4:0;;;;34119:22;;242:18:1;;34119:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:57;;;;:::i;:::-;34291:4;34250:20;8337:18;;;;;;;;;;;34096:80;;-1:-1:-1;34308:44:0;;23996:42;8337:18;34308:9;:44::i;:::-;34504:18;34556:3;34541:11;;34526:12;:26;;;;:::i;:::-;34525:34;;;;:::i;:::-;34619:4;;34634:15;;34612:50;;-1:-1:-1;;;34612:50:0;;-1:-1:-1;;;;;34634:15:0;;;34612:50;;;9825:51:1;9892:18;;;9885:34;;;34504:55:0;;-1:-1:-1;34619:4:0;;34612:21;;9798:18:1;;34612:50:0;9651:274:1;16220:453:0;16355:24;16382:25;16392:5;16399:7;16382:9;:25::i;:::-;16355:52;;-1:-1:-1;;16422:16:0;:37;16418:248;;16504:6;16484:16;:26;;16476:68;;;;-1:-1:-1;;;16476:68:0;;15835:2:1;16476:68:0;;;15817:21:1;15874:2;15854:18;;;15847:30;15913:31;15893:18;;;15886:59;15962:18;;16476:68:0;15633:353:1;16476:68:0;16588:51;16597:5;16604:7;16632:6;16613:16;:25;16588:8;:51::i;30258:2077::-;-1:-1:-1;;;;;30356:18:0;;30348:68;;;;-1:-1:-1;;;30348:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;30435:16:0;;30427:64;;;;-1:-1:-1;;;30427:64:0;;;;;;;:::i;:::-;30510:17;;;;;;;30506:995;;;30627:16;;30562:15;;30540:19;;30613:30;;:86;;;;;30681:18;;30662:16;;:37;;;;:::i;:::-;30647:11;:52;;30613:86;30588:111;;30710:23;30770:18;;30751:16;;:37;;;;:::i;:::-;30829:8;;30736:52;;;;;-1:-1:-1;30799:18:0;;-1:-1:-1;;;;;30821:16:0;;;30829:8;;30821:16;;:36;;-1:-1:-1;30849:8:0;;-1:-1:-1;;;;;30841:16:0;;;30849:8;;30841:16;30821:36;30799:59;;30869:23;30895:17;:63;;30938:20;;30895:63;;;30915:20;;30895:63;30869:89;;30976:17;:39;;;;30997:18;30976:39;30975:71;;;;-1:-1:-1;;;;;;31021:25:0;;;;;;:21;:25;;;;;;;;31020:26;30975:71;30971:362;;;31172:13;:34;;;;31189:17;31172:34;31168:154;;;31261:15;31251:6;31235:13;31245:2;-1:-1:-1;;;;;8337:18:0;8310:7;8337:18;;;;;;;;;;;;8236:127;31235:13;:22;;;;:::i;:::-;:41;;31227:79;;;;-1:-1:-1;;;31227:79:0;;17003:2:1;31227:79:0;;;16985:21:1;17042:2;17022:18;;;17015:30;17081:27;17061:18;;;17054:55;17126:18;;31227:79:0;16801:349:1;31227:79:0;31422:18;31417:77;;31457:17;:25;;-1:-1:-1;;31457:25:0;;;31417:77;30529:972;;;;;30506:995;31571:8;;-1:-1:-1;;;;;31565:14:0;;;31571:8;;31565:14;31564:28;;;;-1:-1:-1;31584:8:0;;;;31564:28;31560:170;;;31657:15;;31630:23;;31612:41;;:15;:41;:::i;:::-;:60;31608:115;;31689:21;:19;:21::i;:::-;31753:8;;-1:-1:-1;;;;;31747:14:0;;;31753:8;;31747:14;31746:28;;;;-1:-1:-1;31766:8:0;;;;31746:28;31742:169;;;31838:15;;31811:23;;31793:41;;:15;:41;:::i;:::-;:60;31789:115;;31870:21;:19;:21::i;:::-;31922:33;31938:4;31944:2;31948:6;31922:15;:33::i;:::-;31969:9;;-1:-1:-1;;;31969:9:0;;;;31964:366;;32000:8;;-1:-1:-1;;;;;31992:16:0;;;32000:8;;31992:16;31991:30;;;;-1:-1:-1;32013:8:0;;;;31991:30;31987:164;;;32075:19;;32056:15;;32038:33;;:15;:33;:::i;:::-;:56;32034:110;;32111:21;:19;:21::i;:::-;32172:8;;-1:-1:-1;;;;;32164:16:0;;;32172:8;;32164:16;32163:30;;;;-1:-1:-1;32185:8:0;;;;32163:30;32159:164;;;32247:19;;32228:15;;32210:33;;:15;:33;:::i;:::-;:56;32206:110;;32283:21;:19;:21::i;12428:840::-;-1:-1:-1;;;;;12559:18:0;;12551:68;;;;-1:-1:-1;;;12551:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;12638:16:0;;12630:64;;;;-1:-1:-1;;;12630:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;12780:15:0;;12758:19;12780:15;;;;;;;;;;;12814:21;;;;12806:72;;;;-1:-1:-1;;;12806:72:0;;17357:2:1;12806:72:0;;;17339:21:1;17396:2;17376:18;;;17369:30;17435:34;17415:18;;;17408:62;-1:-1:-1;;;17486:18:1;;;17479:36;17532:19;;12806:72:0;17155:402:1;12806:72:0;-1:-1:-1;;;;;12914:15:0;;;:9;:15;;;;;;;;;;;12932:20;;;12914:38;;13132:13;;;;;;;;;;:23;;;;;;13184:26;;1781:25:1;;;13132:13:0;;13184:26;;1754:18:1;13184:26:0;;;;;;;13223:37;38468:376;35898:1232;35949:9;;-1:-1:-1;;;35949:9:0;;;;35945:22;;;35898:1232::o;35945:22::-;35973:9;:16;;-1:-1:-1;;;;35973:16:0;-1:-1:-1;;;35973:16:0;;;36025:4;;36018:37;;-1:-1:-1;;;36018:37:0;;36049:4;36018:37;;;269:51:1;-1:-1:-1;;;;;;;36025:4:0;;36018:22;;242:18:1;;36018:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35996:59;;36068:11;36083:1;36068:16;36064:110;;36097:7;35898:1232::o;36064:110::-;36182:21;36227:3;36207:16;:11;36221:2;36207:16;:::i;:::-;36206:24;;;;:::i;:::-;36182:48;-1:-1:-1;36266:17:0;;36262:824;;36331:4;;36345:12;;36304:70;;-1:-1:-1;;;;;36331:4:0;;;;36345:12;36360:13;36304:26;:70::i;:::-;36475:379;;;;;;;;36536:4;;-1:-1:-1;;;;;36536:4:0;;;36475:379;;36573:4;36475:379;;;;36598:11;;;;;;;36475:379;;;;23996:42;36475:379;;;;36665:15;36475:379;;;;;;;;;;-1:-1:-1;36475:379:0;;;;;;;;;;36915:12;;36901:52;;-1:-1:-1;;;36901:52:0;;36475:379;;36915:12;;36901:44;;:52;;36475:379;;36901:52;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36901:52:0;;;;;;;;-1:-1:-1;;36901:52:0;;;;;;;;;;;;:::i;:::-;;;36897:175;;;;36984:13;36970:10;;:27;;;;;;;:::i;:::-;;;;-1:-1:-1;;37035:15:0;37013:19;:37;36897:175;36285:801;36262:824;-1:-1:-1;;37096:9:0;:17;;-1:-1:-1;;;;37096:17:0;;;35898:1232::o;20635:191::-;20728:6;;;-1:-1:-1;;;;;20745:17:0;;;-1:-1:-1;;;;;;20745:17:0;;;;;;;20778:40;;20728:6;;;20745:17;20728:6;;20778:40;;20709:16;;20778:40;20698:128;20635:191;:::o;20898:314::-;21062:58;;;-1:-1:-1;;;;;9843:32:1;;;21062:58:0;;;9825:51:1;9892:18;;;;9885:34;;;21062:58:0;;;;;;;;;;9798:18:1;;;;21062:58:0;;;;;;;-1:-1:-1;;;;;21062:58:0;-1:-1:-1;;;21062:58:0;;;21051:70;;-1:-1:-1;;;;21051:10:0;;;;:70;;21062:58;21051:70;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21015:106;;;;21140:7;:57;;;;-1:-1:-1;21152:11:0;;:16;;:44;;;21183:4;21172:24;;;;;;;;;;;;:::i;:::-;21132:72;;;;-1:-1:-1;;;21132:72:0;;18854:2:1;21132:72:0;;;18836:21:1;18893:1;18873:18;;;18866:29;-1:-1:-1;;;18911:18:1;;;18904:32;18953:18;;21132:72:0;18652:325:1;21132:72:0;21004:208;;20898:314;;;:::o;34679:1214::-;34730:9;;-1:-1:-1;;;34730:9:0;;;;34726:22;;;34679:1214::o;34726:22::-;34754:9;:16;;-1:-1:-1;;;;34754:16:0;-1:-1:-1;;;34754:16:0;;;34806:4;;34799:37;;-1:-1:-1;;;34799:37:0;;34830:4;34799:37;;;269:51:1;-1:-1:-1;;;;;;;34806:4:0;;34799:22;;242:18:1;;34799:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34777:59;;34849:11;34864:1;34849:16;34845:110;;34878:7;34679:1214::o;34845:110::-;34963:21;35008:3;34988:16;:11;35002:2;34988:16;:::i;:::-;34987:24;;;;:::i;:::-;34963:48;-1:-1:-1;35047:17:0;;35043:816;;35106:4;;35120:12;;35079:70;;-1:-1:-1;;;;;35106:4:0;;;;35120:12;35135:13;35079:26;:70::i;:::-;35248:379;;;;;;;;35309:4;;-1:-1:-1;;;;;35309:4:0;;;35248:379;;35346:4;35248:379;;;;35371:11;;;;35248:379;;;;23996:42;35248:379;;;;35438:15;35248:379;;;;;;;;;;35195:50;35248:379;;;;;;;;;;35688:12;;35674:52;;-1:-1:-1;;;35674:52:0;;35248:379;;35688:12;;35674:44;;:52;;35248:379;;35674:52;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35674:52:0;;;;;;;;-1:-1:-1;;35674:52:0;;;;;;;;;;;;:::i;:::-;;;35670:175;;;;35757:13;35743:10;;:27;;;;;;;:::i;:::-;;;;-1:-1:-1;;35808:15:0;35786:19;:37;35066:793;-1:-1:-1;;35866:9:0;:17;;-1:-1:-1;;;;35866:17:0;;;34679:1214::o;331:250:1:-;416:1;426:113;440:6;437:1;434:13;426:113;;;516:11;;;510:18;497:11;;;490:39;462:2;455:10;426:113;;;-1:-1:-1;;573:1:1;555:16;;548:27;331:250::o;586:396::-;735:2;724:9;717:21;698:4;767:6;761:13;810:6;805:2;794:9;790:18;783:34;826:79;898:6;893:2;882:9;878:18;873:2;865:6;861:15;826:79;:::i;:::-;966:2;945:15;-1:-1:-1;;941:29:1;926:45;;;;973:2;922:54;;586:396;-1:-1:-1;;586:396:1:o;987:131::-;-1:-1:-1;;;;;1062:31:1;;1052:42;;1042:70;;1108:1;1105;1098:12;1123:315;1191:6;1199;1252:2;1240:9;1231:7;1227:23;1223:32;1220:52;;;1268:1;1265;1258:12;1220:52;1307:9;1294:23;1326:31;1351:5;1326:31;:::i;:::-;1376:5;1428:2;1413:18;;;;1400:32;;-1:-1:-1;;;1123:315:1:o;1817:456::-;1894:6;1902;1910;1963:2;1951:9;1942:7;1938:23;1934:32;1931:52;;;1979:1;1976;1969:12;1931:52;2018:9;2005:23;2037:31;2062:5;2037:31;:::i;:::-;2087:5;-1:-1:-1;2144:2:1;2129:18;;2116:32;2157:33;2116:32;2157:33;:::i;:::-;1817:456;;2209:7;;-1:-1:-1;;;2263:2:1;2248:18;;;;2235:32;;1817:456::o;2278:127::-;2339:10;2334:3;2330:20;2327:1;2320:31;2370:4;2367:1;2360:15;2394:4;2391:1;2384:15;2410:275;2481:2;2475:9;2546:2;2527:13;;-1:-1:-1;;2523:27:1;2511:40;;2581:18;2566:34;;2602:22;;;2563:62;2560:88;;;2628:18;;:::i;:::-;2664:2;2657:22;2410:275;;-1:-1:-1;2410:275:1:o;2690:183::-;2750:4;2783:18;2775:6;2772:30;2769:56;;;2805:18;;:::i;:::-;-1:-1:-1;2850:1:1;2846:14;2862:4;2842:25;;2690:183::o;2878:662::-;2932:5;2985:3;2978:4;2970:6;2966:17;2962:27;2952:55;;3003:1;3000;2993:12;2952:55;3039:6;3026:20;3065:4;3089:60;3105:43;3145:2;3105:43;:::i;:::-;3089:60;:::i;:::-;3183:15;;;3269:1;3265:10;;;;3253:23;;3249:32;;;3214:12;;;;3293:15;;;3290:35;;;3321:1;3318;3311:12;3290:35;3357:2;3349:6;3345:15;3369:142;3385:6;3380:3;3377:15;3369:142;;;3451:17;;3439:30;;3489:12;;;;3402;;3369:142;;;-1:-1:-1;3529:5:1;2878:662;-1:-1:-1;;;;;;2878:662:1:o;3545:1215::-;3663:6;3671;3724:2;3712:9;3703:7;3699:23;3695:32;3692:52;;;3740:1;3737;3730:12;3692:52;3780:9;3767:23;3809:18;3850:2;3842:6;3839:14;3836:34;;;3866:1;3863;3856:12;3836:34;3904:6;3893:9;3889:22;3879:32;;3949:7;3942:4;3938:2;3934:13;3930:27;3920:55;;3971:1;3968;3961:12;3920:55;4007:2;3994:16;4029:4;4053:60;4069:43;4109:2;4069:43;:::i;4053:60::-;4147:15;;;4229:1;4225:10;;;;4217:19;;4213:28;;;4178:12;;;;4253:19;;;4250:39;;;4285:1;4282;4275:12;4250:39;4309:11;;;;4329:217;4345:6;4340:3;4337:15;4329:217;;;4425:3;4412:17;4442:31;4467:5;4442:31;:::i;:::-;4486:18;;4362:12;;;;4524;;;;4329:217;;;4565:5;-1:-1:-1;;4608:18:1;;4595:32;;-1:-1:-1;;4639:16:1;;;4636:36;;;4668:1;4665;4658:12;4636:36;;4691:63;4746:7;4735:8;4724:9;4720:24;4691:63;:::i;:::-;4681:73;;;3545:1215;;;;;:::o;5197:247::-;5256:6;5309:2;5297:9;5288:7;5284:23;5280:32;5277:52;;;5325:1;5322;5315:12;5277:52;5364:9;5351:23;5383:31;5408:5;5383:31;:::i;:::-;5433:5;5197:247;-1:-1:-1;;;5197:247:1:o;5449:248::-;5517:6;5525;5578:2;5566:9;5557:7;5553:23;5549:32;5546:52;;;5594:1;5591;5584:12;5546:52;-1:-1:-1;;5617:23:1;;;5687:2;5672:18;;;5659:32;;-1:-1:-1;5449:248:1:o;5702:180::-;5761:6;5814:2;5802:9;5793:7;5789:23;5785:32;5782:52;;;5830:1;5827;5820:12;5782:52;-1:-1:-1;5853:23:1;;5702:180;-1:-1:-1;5702:180:1:o;5887:388::-;5955:6;5963;6016:2;6004:9;5995:7;5991:23;5987:32;5984:52;;;6032:1;6029;6022:12;5984:52;6071:9;6058:23;6090:31;6115:5;6090:31;:::i;:::-;6140:5;-1:-1:-1;6197:2:1;6182:18;;6169:32;6210:33;6169:32;6210:33;:::i;:::-;6262:7;6252:17;;;5887:388;;;;;:::o;6280:380::-;6359:1;6355:12;;;;6402;;;6423:61;;6477:4;6469:6;6465:17;6455:27;;6423:61;6530:2;6522:6;6519:14;6499:18;6496:38;6493:161;;6576:10;6571:3;6567:20;6564:1;6557:31;6611:4;6608:1;6601:15;6639:4;6636:1;6629:15;6493:161;;6280:380;;;:::o;7584:251::-;7654:6;7707:2;7695:9;7686:7;7682:23;7678:32;7675:52;;;7723:1;7720;7713:12;7675:52;7755:9;7749:16;7774:31;7799:5;7774:31;:::i;7840:127::-;7901:10;7896:3;7892:20;7889:1;7882:31;7932:4;7929:1;7922:15;7956:4;7953:1;7946:15;7972:125;8037:9;;;8058:10;;;8055:36;;;8071:18;;:::i;8813:127::-;8874:10;8869:3;8865:20;8862:1;8855:31;8905:4;8902:1;8895:15;8929:4;8926:1;8919:15;8945:175;8982:3;9026:4;9019:5;9015:16;9055:4;9046:7;9043:17;9040:43;;9063:18;;:::i;:::-;9112:1;9099:15;;8945:175;-1:-1:-1;;8945:175:1:o;9462:184::-;9532:6;9585:2;9573:9;9564:7;9560:23;9556:32;9553:52;;;9601:1;9598;9591:12;9553:52;-1:-1:-1;9624:16:1;;9462:184;-1:-1:-1;9462:184:1:o;9930:277::-;9997:6;10050:2;10038:9;10029:7;10025:23;10021:32;10018:52;;;10066:1;10063;10056:12;10018:52;10098:9;10092:16;10151:5;10144:13;10137:21;10130:5;10127:32;10117:60;;10173:1;10170;10163:12;11067:1220;11287:13;;-1:-1:-1;;;;;80:31:1;68:44;;11255:3;11240:19;;11359:4;11351:6;11347:17;11341:24;11374:54;11422:4;11411:9;11407:20;11393:12;-1:-1:-1;;;;;80:31:1;68:44;;14:104;11374:54;;11477:4;11469:6;11465:17;11459:24;11492:55;11541:4;11530:9;11526:20;11510:14;7089:8;7078:20;7066:33;;7013:92;11492:55;;11596:4;11588:6;11584:17;11578:24;11611:54;11659:4;11648:9;11644:20;11628:14;11046:1;11035:20;11023:33;;10971:91;11611:54;;11714:4;11706:6;11702:17;11696:24;11729:54;11777:4;11766:9;11762:20;11746:14;11046:1;11035:20;11023:33;;10971:91;11729:54;;11839:4;11831:6;11827:17;11821:24;11814:4;11803:9;11799:20;11792:54;11902:4;11894:6;11890:17;11884:24;11877:4;11866:9;11862:20;11855:54;11965:4;11957:6;11953:17;11947:24;11940:4;11929:9;11925:20;11918:54;11991:6;12051:2;12043:6;12039:15;12033:22;12028:2;12017:9;12013:18;12006:50;;12075:6;12130:2;12122:6;12118:15;12112:22;12143:54;12193:2;12182:9;12178:18;12162:14;-1:-1:-1;;;;;80:31:1;68:44;;14:104;12143:54;-1:-1:-1;;12216:6:1;12264:15;;;12258:22;12238:18;;;;12231:50;11067:1220;:::o;12292:489::-;12389:6;12397;12405;12413;12466:3;12454:9;12445:7;12441:23;12437:33;12434:53;;;12483:1;12480;12473:12;12434:53;12512:9;12506:16;12496:26;;12565:2;12554:9;12550:18;12544:25;-1:-1:-1;;;;;12602:5:1;12598:46;12591:5;12588:57;12578:85;;12659:1;12656;12649:12;12578:85;12727:2;12712:18;;12706:25;12771:2;12756:18;;;12750:25;12292:489;;12682:5;;-1:-1:-1;12292:489:1;-1:-1:-1;;;12292:489:1:o;14362:128::-;14429:9;;;14450:11;;;14447:37;;;14464:18;;:::i;14495:488::-;14726:25;;;-1:-1:-1;;;;;14787:32:1;;;;14782:2;14767:18;;14760:60;-1:-1:-1;;;;;14909:15:1;;;14904:2;14889:18;;14882:43;14961:15;14956:2;14941:18;;14934:43;14713:3;14698:19;;14495:488::o;14988:245::-;15067:6;15075;15128:2;15116:9;15107:7;15103:23;15099:32;15096:52;;;15144:1;15141;15134:12;15096:52;-1:-1:-1;;15167:16:1;;15223:2;15208:18;;;15202:25;15167:16;;15202:25;;-1:-1:-1;14988:245:1:o;15238:168::-;15311:9;;;15342;;15359:15;;;15353:22;;15339:37;15329:71;;15380:18;;:::i;15411:217::-;15451:1;15477;15467:132;;15521:10;15516:3;15512:20;15509:1;15502:31;15556:4;15553:1;15546:15;15584:4;15581:1;15574:15;15467:132;-1:-1:-1;15613:9:1;;15411:217::o;15991:401::-;16193:2;16175:21;;;16232:2;16212:18;;;16205:30;16271:34;16266:2;16251:18;;16244:62;-1:-1:-1;;;16337:2:1;16322:18;;16315:35;16382:3;16367:19;;15991:401::o;16397:399::-;16599:2;16581:21;;;16638:2;16618:18;;;16611:30;16677:34;16672:2;16657:18;;16650:62;-1:-1:-1;;;16743:2:1;16728:18;;16721:33;16786:3;16771:19;;16397:399::o;17562:793::-;17847:13;;-1:-1:-1;;;;;17843:22:1;;;17825:41;;17926:4;17914:17;;;17908:24;17904:33;;17882:20;;;17875:63;17998:4;17986:17;;;17980:24;18006:8;17976:39;17954:20;;;17947:69;18076:4;18064:17;;;18058:24;18054:33;;18032:20;;;18025:63;18144:4;18132:17;;;18126:24;18104:20;;;18097:54;17805:3;18195:17;;;18189:24;18167:20;;;18160:54;18270:4;18258:17;;;18252:24;18230:20;;;18223:54;18337:4;18325:17;;;18319:24;18315:33;18293:20;;;18286:63;;;;17774:3;17759:19;;17562:793::o;18360:287::-;18489:3;18527:6;18521:13;18543:66;18602:6;18597:3;18590:4;18582:6;18578:17;18543:66;:::i;:::-;18625:16;;;;;18360:287;-1:-1:-1;;18360:287:1:o

Swarm Source

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