ETH Price: $3,125.62 (-5.72%)
 

Overview

Max Total Supply

1,000,000 NAUT

Holders

24

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 0 Decimals)

Balance
1,278 NAUT

Value
$0.00
0x67c1fec8db1d8328137281015ec0bd46e2e82428
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:
Asstroverse

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-09-29
*/

// SPDX-License-Identifier: Unlicensed
pragma solidity ^0.8.9;

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

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

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

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

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

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

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

    /**
     * @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 `sender` to `recipient`.
     *
     * This internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `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;
        }
        _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;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

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

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

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

interface IUniswapV2Pair {
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
    event Transfer(address indexed from, address indexed to, uint256 value);

    function name() external pure returns (string memory);

    function symbol() external pure returns (string memory);

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint256);

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

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

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

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

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

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

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

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

    function getReserves()
        external
        view
        returns (
            uint112 reserve0,
            uint112 reserve1,
            uint32 blockTimestampLast
        );

    function price0CumulativeLast() external view returns (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

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

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

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

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

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

    function WETH() external pure returns (address);

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

interface IAssteroid {
    function setStartTime(uint256 wen) external;
}

contract Asstroverse is ERC20, Ownable {
    // Basic units
    uint256 private constant PERCENT_DENOMENATOR = 1000;

    address public assteroid;

    // who doesn't pay tax
    mapping(address => bool) private _isTaxExcluded;
    // _percent: 1 == 0.1%, 1000 = 100%
    uint256 public buyTax = 100; // 10%
    uint256 public sellTax = 100; // 10%
    bool private _taxesOff; // are taxes enabled or not

    uint256 public maxBuy = 10; // 1%
    uint256 public maxSell = 10; // 1%

    // Uniswap addresses
    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapV2Pair;

    // Blacklisted Bots
    mapping(address => bool) public _isBot;

    // Swapping variables and swapLock
    bool private _swapEnabled = true;
    bool private _swapping = false;

    modifier swapLock() {
        _swapping = true;
        _;
        _swapping = false;
    }

    modifier ownerOrAssteroid() {
        require(
            msg.sender == owner() || msg.sender == assteroid,
            "cannot do that"
        );
        _;
    }

    constructor() ERC20("Asstroverse", "NAUT") {
        _mint(msg.sender, 1_000_000);

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());
        uniswapV2Router = _uniswapV2Router;

        // The Government does not pay taxes
        _isTaxExcluded[address(this)] = true;
        _isTaxExcluded[msg.sender] = true;
    }

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual override {
        bool _isOwner = sender == owner() || recipient == owner();
        bool _isBuy = sender == uniswapV2Pair &&
            recipient != address(uniswapV2Router);
        bool _isSell = recipient == uniswapV2Pair;
        bool _isSwap = _isBuy || _isSell;

        // fuck bots
        require(!_isBot[recipient], "Stop botting!");
        require(!_isBot[sender], "Stop botting!");
        require(!_isBot[_msgSender()], "Stop botting!");

        uint256 tax = 0;

        if (
            _isSwap &&
            !_taxesOff &&
            !(_isTaxExcluded[sender] || _isTaxExcluded[recipient])
        ) {
            if (_isBuy) {
                // below is logic for buy

                require(
                    _isOwner ||
                        amount <=
                        ((totalSupply() / PERCENT_DENOMENATOR) * maxBuy),
                    "ERC20: exceed max transaction"
                );

                // how many tokens to tax
                tax = (amount * buyTax) / PERCENT_DENOMENATOR;
            } else if (_isSell) {
                require(
                    _isOwner ||
                        amount <=
                        ((totalSupply() / PERCENT_DENOMENATOR) * maxSell),
                    "ERC20: exceed max transaction"
                );

                // how many tokens to tax
                tax = (amount * sellTax) / PERCENT_DENOMENATOR;
            }
        }

        // collect tax amount, swap it and send it to assteroid
        super._transfer(sender, address(this), tax);
        uint256 bal = balanceOf(address(this));

        if (
            bal > 0 &&
            _swapEnabled &&
            !_swapping &&
            !_isOwner &&
            sender != uniswapV2Pair &&
            !(_isTaxExcluded[sender] || _isTaxExcluded[recipient])
        ) {
            _swap(bal);
        }

        // transfer the rest
        super._transfer(sender, recipient, (amount - tax));
    }

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

        _approve(address(this), address(uniswapV2Router), _amountToSwap);
        // send to assteroid
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            _amountToSwap,
            0,
            path,
            assteroid,
            block.timestamp
        );
    }

    function setAssteroidAddress(address addy) external onlyOwner {
        assteroid = addy;
        _isTaxExcluded[addy] = true;
    }

    function isBotBlacklisted(address account) external view returns (bool) {
        return _isBot[account];
    }

    function blacklistBot(address account) external onlyOwner {
        require(account != address(uniswapV2Router), "cannot blacklist router");
        require(account != uniswapV2Pair, "cannot blacklist pair");
        require(!_isBot[account], "user is already blacklisted");
        _isBot[account] = true;
    }

    function forgiveBot(address account) external onlyOwner {
        require(_isBot[account], "user is not blacklisted");
        _isBot[account] = false;
    }

    function setSellTax(uint256 _tax) external ownerOrAssteroid {
        sellTax = _tax;
    }

    function setBuyTax(uint256 _tax) external ownerOrAssteroid {
        buyTax = _tax;
    }

    function changeMaxBuy(uint256 _newMaxSell) external onlyOwner {
        maxBuy = _newMaxSell;
    }

    function changeMaxSell(uint256 _newMaxSell) external onlyOwner {
        maxSell = _newMaxSell;
    }

    function setIsTaxExcluded(address _wallet, bool _isExcluded)
        external
        onlyOwner
    {
        _isTaxExcluded[_wallet] = _isExcluded;
    }

    function setTaxesOff(bool _areOff) external onlyOwner {
        _taxesOff = _areOff;
    }

    function setSwapEnabled(bool _enabled) external onlyOwner {
        _swapEnabled = _enabled;
    }

    function withdrawETH() external onlyOwner {
        payable(owner()).call{value: address(this).balance}("");
    }

    receive() external payable {}
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"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":[{"internalType":"address","name":"","type":"address"}],"name":"_isBot","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"assteroid","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"blacklistBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newMaxSell","type":"uint256"}],"name":"changeMaxBuy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newMaxSell","type":"uint256"}],"name":"changeMaxSell","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":"account","type":"address"}],"name":"forgiveBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isBotBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addy","type":"address"}],"name":"setAssteroidAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tax","type":"uint256"}],"name":"setBuyTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"},{"internalType":"bool","name":"_isExcluded","type":"bool"}],"name":"setIsTaxExcluded","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tax","type":"uint256"}],"name":"setSellTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_areOff","type":"bool"}],"name":"setTaxesOff","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":[{"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":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405260646008556064600955600a600b55600a600c556001601060006101000a81548160ff0219169083151502179055506000601060016101000a81548160ff0219169083151502179055503480156200005b57600080fd5b506040518060400160405280600b81526020017f41737374726f76657273650000000000000000000000000000000000000000008152506040518060400160405280600481526020017f4e415554000000000000000000000000000000000000000000000000000000008152508160039080519060200190620000e092919062000668565b508060049080519060200190620000f992919062000668565b5050506200011c620001106200041760201b60201c565b6200041f60201b60201c565b6200013133620f4240620004e560201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200019157600080fd5b505afa158015620001a6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001cc919062000782565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200022f57600080fd5b505afa15801562000244573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200026a919062000782565b6040518363ffffffff1660e01b815260040162000289929190620007c5565b602060405180830381600087803b158015620002a457600080fd5b505af1158015620002b9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002df919062000782565b600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550506200099e565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000558576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200054f9062000853565b60405180910390fd5b6200056c600083836200065e60201b60201c565b8060026000828254620005809190620008ae565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620005d79190620008ae565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200063e91906200091c565b60405180910390a36200065a600083836200066360201b60201c565b5050565b505050565b505050565b828054620006769062000968565b90600052602060002090601f0160209004810192826200069a5760008555620006e6565b82601f10620006b557805160ff1916838001178555620006e6565b82800160010185558215620006e6579182015b82811115620006e5578251825591602001919060010190620006c8565b5b509050620006f59190620006f9565b5090565b5b8082111562000714576000816000905550600101620006fa565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200074a826200071d565b9050919050565b6200075c816200073d565b81146200076857600080fd5b50565b6000815190506200077c8162000751565b92915050565b6000602082840312156200079b576200079a62000718565b5b6000620007ab848285016200076b565b91505092915050565b620007bf816200073d565b82525050565b6000604082019050620007dc6000830185620007b4565b620007eb6020830184620007b4565b9392505050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b60006200083b601f83620007f2565b9150620008488262000803565b602082019050919050565b600060208201905081810360008301526200086e816200082c565b9050919050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620008bb8262000875565b9150620008c88362000875565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156200090057620008ff6200087f565b5b828201905092915050565b620009168162000875565b82525050565b60006020820190506200093360008301846200090b565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200098157607f821691505b6020821081141562000998576200099762000939565b5b50919050565b61381280620009ae6000396000f3fe6080604052600436106101fd5760003560e01c806370a082311161010d578063abb81052116100a0578063dd62ed3e1161006f578063dd62ed3e14610754578063e01af92c14610791578063e086e5ec146107ba578063f2fde38b146107d1578063fbeedd88146107fa57610204565b8063abb8105214610698578063b8eb3546146106d5578063cc1776d314610700578063dc1052e21461072b57610204565b80638da5cb5b116100dc5780638da5cb5b146105c857806395d89b41146105f3578063a457c2d71461061e578063a9059cbb1461065b57610204565b806370a082311461052057806370db69d61461055d578063715018a6146105885780638cd09d501461059f57610204565b806318160ddd116101905780633a40c53e1161015f5780633a40c53e1461044f5780633b031c5e1461047857806349bd5a5e146104a15780634f7041a5146104cc57806351b8f090146104f757610204565b806318160ddd1461037f57806323b872dd146103aa578063313ce567146103e7578063395093511461041257610204565b8063095ea7b3116101cc578063095ea7b3146102c5578063134f9c8d1461030257806314ea796d1461032b5780631694505e1461035457610204565b8063042d347d1461020957806305cb48931461023457806306fdde031461027157806308aad1f11461029c57610204565b3661020457005b600080fd5b34801561021557600080fd5b5061021e610823565b60405161022b91906127f1565b60405180910390f35b34801561024057600080fd5b5061025b6004803603810190610256919061283d565b610849565b6040516102689190612885565b60405180910390f35b34801561027d57600080fd5b5061028661089f565b6040516102939190612939565b60405180910390f35b3480156102a857600080fd5b506102c360048036038101906102be919061283d565b610931565b005b3480156102d157600080fd5b506102ec60048036038101906102e79190612991565b610bb7565b6040516102f99190612885565b60405180910390f35b34801561030e57600080fd5b506103296004803603810190610324919061283d565b610bda565b005b34801561033757600080fd5b50610352600480360381019061034d91906129fd565b610d3d565b005b34801561036057600080fd5b50610369610dd6565b6040516103769190612a89565b60405180910390f35b34801561038b57600080fd5b50610394610dfc565b6040516103a19190612ab3565b60405180910390f35b3480156103b657600080fd5b506103d160048036038101906103cc9190612ace565b610e06565b6040516103de9190612885565b60405180910390f35b3480156103f357600080fd5b506103fc610e35565b6040516104099190612b3d565b60405180910390f35b34801561041e57600080fd5b5061043960048036038101906104349190612991565b610e3a565b6040516104469190612885565b60405180910390f35b34801561045b57600080fd5b5061047660048036038101906104719190612b58565b610e71565b005b34801561048457600080fd5b5061049f600480360381019061049a9190612b58565b610ef7565b005b3480156104ad57600080fd5b506104b6610f7d565b6040516104c391906127f1565b60405180910390f35b3480156104d857600080fd5b506104e1610fa3565b6040516104ee9190612ab3565b60405180910390f35b34801561050357600080fd5b5061051e6004803603810190610519919061283d565b610fa9565b005b34801561052c57600080fd5b506105476004803603810190610542919061283d565b6110c1565b6040516105549190612ab3565b60405180910390f35b34801561056957600080fd5b50610572611109565b60405161057f9190612ab3565b60405180910390f35b34801561059457600080fd5b5061059d61110f565b005b3480156105ab57600080fd5b506105c660048036038101906105c19190612b58565b611197565b005b3480156105d457600080fd5b506105dd61126e565b6040516105ea91906127f1565b60405180910390f35b3480156105ff57600080fd5b50610608611298565b6040516106159190612939565b60405180910390f35b34801561062a57600080fd5b5061064560048036038101906106409190612991565b61132a565b6040516106529190612885565b60405180910390f35b34801561066757600080fd5b50610682600480360381019061067d9190612991565b6113a1565b60405161068f9190612885565b60405180910390f35b3480156106a457600080fd5b506106bf60048036038101906106ba919061283d565b6113c4565b6040516106cc9190612885565b60405180910390f35b3480156106e157600080fd5b506106ea6113e4565b6040516106f79190612ab3565b60405180910390f35b34801561070c57600080fd5b506107156113ea565b6040516107229190612ab3565b60405180910390f35b34801561073757600080fd5b50610752600480360381019061074d9190612b58565b6113f0565b005b34801561076057600080fd5b5061077b60048036038101906107769190612b85565b6114c7565b6040516107889190612ab3565b60405180910390f35b34801561079d57600080fd5b506107b860048036038101906107b391906129fd565b61154e565b005b3480156107c657600080fd5b506107cf6115e7565b005b3480156107dd57600080fd5b506107f860048036038101906107f3919061283d565b6116d5565b005b34801561080657600080fd5b50610821600480360381019061081c9190612bc5565b6117cd565b005b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6060600380546108ae90612c34565b80601f01602080910402602001604051908101604052809291908181526020018280546108da90612c34565b80156109275780601f106108fc57610100808354040283529160200191610927565b820191906000526020600020905b81548152906001019060200180831161090a57829003601f168201915b5050505050905090565b6109396118a4565b73ffffffffffffffffffffffffffffffffffffffff1661095761126e565b73ffffffffffffffffffffffffffffffffffffffff16146109ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a490612cb2565b60405180910390fd5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610a3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3590612d1e565b60405180910390fd5b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610acf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac690612d8a565b60405180910390fd5b600f60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610b5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5390612df6565b60405180910390fd5b6001600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600080610bc26118a4565b9050610bcf8185856118ac565b600191505092915050565b610be26118a4565b73ffffffffffffffffffffffffffffffffffffffff16610c0061126e565b73ffffffffffffffffffffffffffffffffffffffff1614610c56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4d90612cb2565b60405180910390fd5b600f60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610ce2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd990612e62565b60405180910390fd5b6000600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b610d456118a4565b73ffffffffffffffffffffffffffffffffffffffff16610d6361126e565b73ffffffffffffffffffffffffffffffffffffffff1614610db9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db090612cb2565b60405180910390fd5b80600a60006101000a81548160ff02191690831515021790555050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b600080610e116118a4565b9050610e1e858285611a77565b610e29858585611b03565b60019150509392505050565b600090565b600080610e456118a4565b9050610e66818585610e5785896114c7565b610e619190612eb1565b6118ac565b600191505092915050565b610e796118a4565b73ffffffffffffffffffffffffffffffffffffffff16610e9761126e565b73ffffffffffffffffffffffffffffffffffffffff1614610eed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee490612cb2565b60405180910390fd5b80600c8190555050565b610eff6118a4565b73ffffffffffffffffffffffffffffffffffffffff16610f1d61126e565b73ffffffffffffffffffffffffffffffffffffffff1614610f73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6a90612cb2565b60405180910390fd5b80600b8190555050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60085481565b610fb16118a4565b73ffffffffffffffffffffffffffffffffffffffff16610fcf61126e565b73ffffffffffffffffffffffffffffffffffffffff1614611025576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101c90612cb2565b60405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600b5481565b6111176118a4565b73ffffffffffffffffffffffffffffffffffffffff1661113561126e565b73ffffffffffffffffffffffffffffffffffffffff161461118b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118290612cb2565b60405180910390fd5b61119560006121b5565b565b61119f61126e565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806112255750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611264576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125b90612f53565b60405180910390fd5b8060098190555050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546112a790612c34565b80601f01602080910402602001604051908101604052809291908181526020018280546112d390612c34565b80156113205780601f106112f557610100808354040283529160200191611320565b820191906000526020600020905b81548152906001019060200180831161130357829003601f168201915b5050505050905090565b6000806113356118a4565b9050600061134382866114c7565b905083811015611388576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137f90612fe5565b60405180910390fd5b61139582868684036118ac565b60019250505092915050565b6000806113ac6118a4565b90506113b9818585611b03565b600191505092915050565b600f6020528060005260406000206000915054906101000a900460ff1681565b600c5481565b60095481565b6113f861126e565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061147e5750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6114bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b490612f53565b60405180910390fd5b8060088190555050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6115566118a4565b73ffffffffffffffffffffffffffffffffffffffff1661157461126e565b73ffffffffffffffffffffffffffffffffffffffff16146115ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c190612cb2565b60405180910390fd5b80601060006101000a81548160ff02191690831515021790555050565b6115ef6118a4565b73ffffffffffffffffffffffffffffffffffffffff1661160d61126e565b73ffffffffffffffffffffffffffffffffffffffff1614611663576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165a90612cb2565b60405180910390fd5b61166b61126e565b73ffffffffffffffffffffffffffffffffffffffff164760405161168e90613036565b60006040518083038185875af1925050503d80600081146116cb576040519150601f19603f3d011682016040523d82523d6000602084013e6116d0565b606091505b505050565b6116dd6118a4565b73ffffffffffffffffffffffffffffffffffffffff166116fb61126e565b73ffffffffffffffffffffffffffffffffffffffff1614611751576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174890612cb2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156117c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b8906130bd565b60405180910390fd5b6117ca816121b5565b50565b6117d56118a4565b73ffffffffffffffffffffffffffffffffffffffff166117f361126e565b73ffffffffffffffffffffffffffffffffffffffff1614611849576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184090612cb2565b60405180910390fd5b80600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561191c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119139061314f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561198c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611983906131e1565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611a6a9190612ab3565b60405180910390a3505050565b6000611a8384846114c7565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611afd5781811015611aef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae69061324d565b60405180910390fd5b611afc84848484036118ac565b5b50505050565b6000611b0d61126e565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611b785750611b4961126e565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b90506000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148015611c275750600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b90506000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614905060008280611c895750815b9050600f60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611d18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0f906132b9565b60405180910390fd5b600f60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611da5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9c906132b9565b60405180910390fd5b600f6000611db16118a4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611e39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e30906132b9565b60405180910390fd5b6000818015611e555750600a60009054906101000a900460ff16155b8015611eff5750600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611efd5750600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b155b1561202a578315611f98578480611f375750600b546103e8611f1f610dfc565b611f299190613308565b611f339190613339565b8611155b611f76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6d906133df565b60405180910390fd5b6103e860085487611f879190613339565b611f919190613308565b9050612029565b8215612028578480611fcb5750600c546103e8611fb3610dfc565b611fbd9190613308565b611fc79190613339565b8611155b61200a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612001906133df565b60405180910390fd5b6103e86009548761201b9190613339565b6120259190613308565b90505b5b5b61203588308361227b565b6000612040306110c1565b905060008111801561205e5750601060009054906101000a900460ff165b80156120775750601060019054906101000a900460ff16155b8015612081575085155b80156120db5750600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff1614155b80156121855750600760008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806121835750600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b155b1561219457612193816124fc565b5b6121aa8989848a6121a591906133ff565b61227b565b505050505050505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156122eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122e2906134a5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561235b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235290613537565b60405180910390fd5b6123668383836127a6565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156123ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e3906135c9565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461247f9190612eb1565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516124e39190612ab3565b60405180910390a36124f68484846127ab565b50505050565b6001601060016101000a81548160ff0219169083151502179055506000600267ffffffffffffffff811115612534576125336135e9565b5b6040519080825280602002602001820160405280156125625781602001602082028036833780820191505090505b509050308160008151811061257a57612579613618565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561261c57600080fd5b505afa158015612630573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612654919061365c565b8160018151811061266857612667613618565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506126cf30600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846118ac565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac94783600084600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b8152600401612755959493929190613782565b600060405180830381600087803b15801561276f57600080fd5b505af1158015612783573d6000803e3d6000fd5b50505050506000601060016101000a81548160ff02191690831515021790555050565b505050565b505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006127db826127b0565b9050919050565b6127eb816127d0565b82525050565b600060208201905061280660008301846127e2565b92915050565b600080fd5b61281a816127d0565b811461282557600080fd5b50565b60008135905061283781612811565b92915050565b6000602082840312156128535761285261280c565b5b600061286184828501612828565b91505092915050565b60008115159050919050565b61287f8161286a565b82525050565b600060208201905061289a6000830184612876565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156128da5780820151818401526020810190506128bf565b838111156128e9576000848401525b50505050565b6000601f19601f8301169050919050565b600061290b826128a0565b61291581856128ab565b93506129258185602086016128bc565b61292e816128ef565b840191505092915050565b600060208201905081810360008301526129538184612900565b905092915050565b6000819050919050565b61296e8161295b565b811461297957600080fd5b50565b60008135905061298b81612965565b92915050565b600080604083850312156129a8576129a761280c565b5b60006129b685828601612828565b92505060206129c78582860161297c565b9150509250929050565b6129da8161286a565b81146129e557600080fd5b50565b6000813590506129f7816129d1565b92915050565b600060208284031215612a1357612a1261280c565b5b6000612a21848285016129e8565b91505092915050565b6000819050919050565b6000612a4f612a4a612a45846127b0565b612a2a565b6127b0565b9050919050565b6000612a6182612a34565b9050919050565b6000612a7382612a56565b9050919050565b612a8381612a68565b82525050565b6000602082019050612a9e6000830184612a7a565b92915050565b612aad8161295b565b82525050565b6000602082019050612ac86000830184612aa4565b92915050565b600080600060608486031215612ae757612ae661280c565b5b6000612af586828701612828565b9350506020612b0686828701612828565b9250506040612b178682870161297c565b9150509250925092565b600060ff82169050919050565b612b3781612b21565b82525050565b6000602082019050612b526000830184612b2e565b92915050565b600060208284031215612b6e57612b6d61280c565b5b6000612b7c8482850161297c565b91505092915050565b60008060408385031215612b9c57612b9b61280c565b5b6000612baa85828601612828565b9250506020612bbb85828601612828565b9150509250929050565b60008060408385031215612bdc57612bdb61280c565b5b6000612bea85828601612828565b9250506020612bfb858286016129e8565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612c4c57607f821691505b60208210811415612c6057612c5f612c05565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612c9c6020836128ab565b9150612ca782612c66565b602082019050919050565b60006020820190508181036000830152612ccb81612c8f565b9050919050565b7f63616e6e6f7420626c61636b6c69737420726f75746572000000000000000000600082015250565b6000612d086017836128ab565b9150612d1382612cd2565b602082019050919050565b60006020820190508181036000830152612d3781612cfb565b9050919050565b7f63616e6e6f7420626c61636b6c69737420706169720000000000000000000000600082015250565b6000612d746015836128ab565b9150612d7f82612d3e565b602082019050919050565b60006020820190508181036000830152612da381612d67565b9050919050565b7f7573657220697320616c726561647920626c61636b6c69737465640000000000600082015250565b6000612de0601b836128ab565b9150612deb82612daa565b602082019050919050565b60006020820190508181036000830152612e0f81612dd3565b9050919050565b7f75736572206973206e6f7420626c61636b6c6973746564000000000000000000600082015250565b6000612e4c6017836128ab565b9150612e5782612e16565b602082019050919050565b60006020820190508181036000830152612e7b81612e3f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612ebc8261295b565b9150612ec78361295b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612efc57612efb612e82565b5b828201905092915050565b7f63616e6e6f7420646f2074686174000000000000000000000000000000000000600082015250565b6000612f3d600e836128ab565b9150612f4882612f07565b602082019050919050565b60006020820190508181036000830152612f6c81612f30565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000612fcf6025836128ab565b9150612fda82612f73565b604082019050919050565b60006020820190508181036000830152612ffe81612fc2565b9050919050565b600081905092915050565b50565b6000613020600083613005565b915061302b82613010565b600082019050919050565b600061304182613013565b9150819050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006130a76026836128ab565b91506130b28261304b565b604082019050919050565b600060208201905081810360008301526130d68161309a565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006131396024836128ab565b9150613144826130dd565b604082019050919050565b600060208201905081810360008301526131688161312c565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006131cb6022836128ab565b91506131d68261316f565b604082019050919050565b600060208201905081810360008301526131fa816131be565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000613237601d836128ab565b915061324282613201565b602082019050919050565b600060208201905081810360008301526132668161322a565b9050919050565b7f53746f7020626f7474696e672100000000000000000000000000000000000000600082015250565b60006132a3600d836128ab565b91506132ae8261326d565b602082019050919050565b600060208201905081810360008301526132d281613296565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006133138261295b565b915061331e8361295b565b92508261332e5761332d6132d9565b5b828204905092915050565b60006133448261295b565b915061334f8361295b565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561338857613387612e82565b5b828202905092915050565b7f45524332303a20657863656564206d6178207472616e73616374696f6e000000600082015250565b60006133c9601d836128ab565b91506133d482613393565b602082019050919050565b600060208201905081810360008301526133f8816133bc565b9050919050565b600061340a8261295b565b91506134158361295b565b92508282101561342857613427612e82565b5b828203905092915050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061348f6025836128ab565b915061349a82613433565b604082019050919050565b600060208201905081810360008301526134be81613482565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006135216023836128ab565b915061352c826134c5565b604082019050919050565b6000602082019050818103600083015261355081613514565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006135b36026836128ab565b91506135be82613557565b604082019050919050565b600060208201905081810360008301526135e2816135a6565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061365681612811565b92915050565b6000602082840312156136725761367161280c565b5b600061368084828501613647565b91505092915050565b6000819050919050565b60006136ae6136a96136a484613689565b612a2a565b61295b565b9050919050565b6136be81613693565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6136f9816127d0565b82525050565b600061370b83836136f0565b60208301905092915050565b6000602082019050919050565b600061372f826136c4565b61373981856136cf565b9350613744836136e0565b8060005b8381101561377557815161375c88826136ff565b975061376783613717565b925050600181019050613748565b5085935050505092915050565b600060a0820190506137976000830188612aa4565b6137a460208301876136b5565b81810360408301526137b68186613724565b90506137c560608301856127e2565b6137d26080830184612aa4565b969550505050505056fea26469706673582212205ce9f2a7ffc94d5d09e419ab74e79e765c7e7918d94906147982b19ed88582c664736f6c63430008090033

Deployed Bytecode

0x6080604052600436106101fd5760003560e01c806370a082311161010d578063abb81052116100a0578063dd62ed3e1161006f578063dd62ed3e14610754578063e01af92c14610791578063e086e5ec146107ba578063f2fde38b146107d1578063fbeedd88146107fa57610204565b8063abb8105214610698578063b8eb3546146106d5578063cc1776d314610700578063dc1052e21461072b57610204565b80638da5cb5b116100dc5780638da5cb5b146105c857806395d89b41146105f3578063a457c2d71461061e578063a9059cbb1461065b57610204565b806370a082311461052057806370db69d61461055d578063715018a6146105885780638cd09d501461059f57610204565b806318160ddd116101905780633a40c53e1161015f5780633a40c53e1461044f5780633b031c5e1461047857806349bd5a5e146104a15780634f7041a5146104cc57806351b8f090146104f757610204565b806318160ddd1461037f57806323b872dd146103aa578063313ce567146103e7578063395093511461041257610204565b8063095ea7b3116101cc578063095ea7b3146102c5578063134f9c8d1461030257806314ea796d1461032b5780631694505e1461035457610204565b8063042d347d1461020957806305cb48931461023457806306fdde031461027157806308aad1f11461029c57610204565b3661020457005b600080fd5b34801561021557600080fd5b5061021e610823565b60405161022b91906127f1565b60405180910390f35b34801561024057600080fd5b5061025b6004803603810190610256919061283d565b610849565b6040516102689190612885565b60405180910390f35b34801561027d57600080fd5b5061028661089f565b6040516102939190612939565b60405180910390f35b3480156102a857600080fd5b506102c360048036038101906102be919061283d565b610931565b005b3480156102d157600080fd5b506102ec60048036038101906102e79190612991565b610bb7565b6040516102f99190612885565b60405180910390f35b34801561030e57600080fd5b506103296004803603810190610324919061283d565b610bda565b005b34801561033757600080fd5b50610352600480360381019061034d91906129fd565b610d3d565b005b34801561036057600080fd5b50610369610dd6565b6040516103769190612a89565b60405180910390f35b34801561038b57600080fd5b50610394610dfc565b6040516103a19190612ab3565b60405180910390f35b3480156103b657600080fd5b506103d160048036038101906103cc9190612ace565b610e06565b6040516103de9190612885565b60405180910390f35b3480156103f357600080fd5b506103fc610e35565b6040516104099190612b3d565b60405180910390f35b34801561041e57600080fd5b5061043960048036038101906104349190612991565b610e3a565b6040516104469190612885565b60405180910390f35b34801561045b57600080fd5b5061047660048036038101906104719190612b58565b610e71565b005b34801561048457600080fd5b5061049f600480360381019061049a9190612b58565b610ef7565b005b3480156104ad57600080fd5b506104b6610f7d565b6040516104c391906127f1565b60405180910390f35b3480156104d857600080fd5b506104e1610fa3565b6040516104ee9190612ab3565b60405180910390f35b34801561050357600080fd5b5061051e6004803603810190610519919061283d565b610fa9565b005b34801561052c57600080fd5b506105476004803603810190610542919061283d565b6110c1565b6040516105549190612ab3565b60405180910390f35b34801561056957600080fd5b50610572611109565b60405161057f9190612ab3565b60405180910390f35b34801561059457600080fd5b5061059d61110f565b005b3480156105ab57600080fd5b506105c660048036038101906105c19190612b58565b611197565b005b3480156105d457600080fd5b506105dd61126e565b6040516105ea91906127f1565b60405180910390f35b3480156105ff57600080fd5b50610608611298565b6040516106159190612939565b60405180910390f35b34801561062a57600080fd5b5061064560048036038101906106409190612991565b61132a565b6040516106529190612885565b60405180910390f35b34801561066757600080fd5b50610682600480360381019061067d9190612991565b6113a1565b60405161068f9190612885565b60405180910390f35b3480156106a457600080fd5b506106bf60048036038101906106ba919061283d565b6113c4565b6040516106cc9190612885565b60405180910390f35b3480156106e157600080fd5b506106ea6113e4565b6040516106f79190612ab3565b60405180910390f35b34801561070c57600080fd5b506107156113ea565b6040516107229190612ab3565b60405180910390f35b34801561073757600080fd5b50610752600480360381019061074d9190612b58565b6113f0565b005b34801561076057600080fd5b5061077b60048036038101906107769190612b85565b6114c7565b6040516107889190612ab3565b60405180910390f35b34801561079d57600080fd5b506107b860048036038101906107b391906129fd565b61154e565b005b3480156107c657600080fd5b506107cf6115e7565b005b3480156107dd57600080fd5b506107f860048036038101906107f3919061283d565b6116d5565b005b34801561080657600080fd5b50610821600480360381019061081c9190612bc5565b6117cd565b005b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6060600380546108ae90612c34565b80601f01602080910402602001604051908101604052809291908181526020018280546108da90612c34565b80156109275780601f106108fc57610100808354040283529160200191610927565b820191906000526020600020905b81548152906001019060200180831161090a57829003601f168201915b5050505050905090565b6109396118a4565b73ffffffffffffffffffffffffffffffffffffffff1661095761126e565b73ffffffffffffffffffffffffffffffffffffffff16146109ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a490612cb2565b60405180910390fd5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610a3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3590612d1e565b60405180910390fd5b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610acf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac690612d8a565b60405180910390fd5b600f60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610b5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5390612df6565b60405180910390fd5b6001600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600080610bc26118a4565b9050610bcf8185856118ac565b600191505092915050565b610be26118a4565b73ffffffffffffffffffffffffffffffffffffffff16610c0061126e565b73ffffffffffffffffffffffffffffffffffffffff1614610c56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4d90612cb2565b60405180910390fd5b600f60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610ce2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd990612e62565b60405180910390fd5b6000600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b610d456118a4565b73ffffffffffffffffffffffffffffffffffffffff16610d6361126e565b73ffffffffffffffffffffffffffffffffffffffff1614610db9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db090612cb2565b60405180910390fd5b80600a60006101000a81548160ff02191690831515021790555050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b600080610e116118a4565b9050610e1e858285611a77565b610e29858585611b03565b60019150509392505050565b600090565b600080610e456118a4565b9050610e66818585610e5785896114c7565b610e619190612eb1565b6118ac565b600191505092915050565b610e796118a4565b73ffffffffffffffffffffffffffffffffffffffff16610e9761126e565b73ffffffffffffffffffffffffffffffffffffffff1614610eed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee490612cb2565b60405180910390fd5b80600c8190555050565b610eff6118a4565b73ffffffffffffffffffffffffffffffffffffffff16610f1d61126e565b73ffffffffffffffffffffffffffffffffffffffff1614610f73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6a90612cb2565b60405180910390fd5b80600b8190555050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60085481565b610fb16118a4565b73ffffffffffffffffffffffffffffffffffffffff16610fcf61126e565b73ffffffffffffffffffffffffffffffffffffffff1614611025576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101c90612cb2565b60405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600b5481565b6111176118a4565b73ffffffffffffffffffffffffffffffffffffffff1661113561126e565b73ffffffffffffffffffffffffffffffffffffffff161461118b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118290612cb2565b60405180910390fd5b61119560006121b5565b565b61119f61126e565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806112255750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611264576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125b90612f53565b60405180910390fd5b8060098190555050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546112a790612c34565b80601f01602080910402602001604051908101604052809291908181526020018280546112d390612c34565b80156113205780601f106112f557610100808354040283529160200191611320565b820191906000526020600020905b81548152906001019060200180831161130357829003601f168201915b5050505050905090565b6000806113356118a4565b9050600061134382866114c7565b905083811015611388576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137f90612fe5565b60405180910390fd5b61139582868684036118ac565b60019250505092915050565b6000806113ac6118a4565b90506113b9818585611b03565b600191505092915050565b600f6020528060005260406000206000915054906101000a900460ff1681565b600c5481565b60095481565b6113f861126e565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061147e5750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6114bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b490612f53565b60405180910390fd5b8060088190555050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6115566118a4565b73ffffffffffffffffffffffffffffffffffffffff1661157461126e565b73ffffffffffffffffffffffffffffffffffffffff16146115ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c190612cb2565b60405180910390fd5b80601060006101000a81548160ff02191690831515021790555050565b6115ef6118a4565b73ffffffffffffffffffffffffffffffffffffffff1661160d61126e565b73ffffffffffffffffffffffffffffffffffffffff1614611663576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165a90612cb2565b60405180910390fd5b61166b61126e565b73ffffffffffffffffffffffffffffffffffffffff164760405161168e90613036565b60006040518083038185875af1925050503d80600081146116cb576040519150601f19603f3d011682016040523d82523d6000602084013e6116d0565b606091505b505050565b6116dd6118a4565b73ffffffffffffffffffffffffffffffffffffffff166116fb61126e565b73ffffffffffffffffffffffffffffffffffffffff1614611751576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174890612cb2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156117c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b8906130bd565b60405180910390fd5b6117ca816121b5565b50565b6117d56118a4565b73ffffffffffffffffffffffffffffffffffffffff166117f361126e565b73ffffffffffffffffffffffffffffffffffffffff1614611849576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184090612cb2565b60405180910390fd5b80600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561191c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119139061314f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561198c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611983906131e1565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611a6a9190612ab3565b60405180910390a3505050565b6000611a8384846114c7565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611afd5781811015611aef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae69061324d565b60405180910390fd5b611afc84848484036118ac565b5b50505050565b6000611b0d61126e565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611b785750611b4961126e565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b90506000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148015611c275750600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b90506000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614905060008280611c895750815b9050600f60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611d18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0f906132b9565b60405180910390fd5b600f60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611da5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9c906132b9565b60405180910390fd5b600f6000611db16118a4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611e39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e30906132b9565b60405180910390fd5b6000818015611e555750600a60009054906101000a900460ff16155b8015611eff5750600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611efd5750600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b155b1561202a578315611f98578480611f375750600b546103e8611f1f610dfc565b611f299190613308565b611f339190613339565b8611155b611f76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6d906133df565b60405180910390fd5b6103e860085487611f879190613339565b611f919190613308565b9050612029565b8215612028578480611fcb5750600c546103e8611fb3610dfc565b611fbd9190613308565b611fc79190613339565b8611155b61200a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612001906133df565b60405180910390fd5b6103e86009548761201b9190613339565b6120259190613308565b90505b5b5b61203588308361227b565b6000612040306110c1565b905060008111801561205e5750601060009054906101000a900460ff165b80156120775750601060019054906101000a900460ff16155b8015612081575085155b80156120db5750600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff1614155b80156121855750600760008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806121835750600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b155b1561219457612193816124fc565b5b6121aa8989848a6121a591906133ff565b61227b565b505050505050505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156122eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122e2906134a5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561235b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235290613537565b60405180910390fd5b6123668383836127a6565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156123ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e3906135c9565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461247f9190612eb1565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516124e39190612ab3565b60405180910390a36124f68484846127ab565b50505050565b6001601060016101000a81548160ff0219169083151502179055506000600267ffffffffffffffff811115612534576125336135e9565b5b6040519080825280602002602001820160405280156125625781602001602082028036833780820191505090505b509050308160008151811061257a57612579613618565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561261c57600080fd5b505afa158015612630573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612654919061365c565b8160018151811061266857612667613618565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506126cf30600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846118ac565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac94783600084600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b8152600401612755959493929190613782565b600060405180830381600087803b15801561276f57600080fd5b505af1158015612783573d6000803e3d6000fd5b50505050506000601060016101000a81548160ff02191690831515021790555050565b505050565b505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006127db826127b0565b9050919050565b6127eb816127d0565b82525050565b600060208201905061280660008301846127e2565b92915050565b600080fd5b61281a816127d0565b811461282557600080fd5b50565b60008135905061283781612811565b92915050565b6000602082840312156128535761285261280c565b5b600061286184828501612828565b91505092915050565b60008115159050919050565b61287f8161286a565b82525050565b600060208201905061289a6000830184612876565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156128da5780820151818401526020810190506128bf565b838111156128e9576000848401525b50505050565b6000601f19601f8301169050919050565b600061290b826128a0565b61291581856128ab565b93506129258185602086016128bc565b61292e816128ef565b840191505092915050565b600060208201905081810360008301526129538184612900565b905092915050565b6000819050919050565b61296e8161295b565b811461297957600080fd5b50565b60008135905061298b81612965565b92915050565b600080604083850312156129a8576129a761280c565b5b60006129b685828601612828565b92505060206129c78582860161297c565b9150509250929050565b6129da8161286a565b81146129e557600080fd5b50565b6000813590506129f7816129d1565b92915050565b600060208284031215612a1357612a1261280c565b5b6000612a21848285016129e8565b91505092915050565b6000819050919050565b6000612a4f612a4a612a45846127b0565b612a2a565b6127b0565b9050919050565b6000612a6182612a34565b9050919050565b6000612a7382612a56565b9050919050565b612a8381612a68565b82525050565b6000602082019050612a9e6000830184612a7a565b92915050565b612aad8161295b565b82525050565b6000602082019050612ac86000830184612aa4565b92915050565b600080600060608486031215612ae757612ae661280c565b5b6000612af586828701612828565b9350506020612b0686828701612828565b9250506040612b178682870161297c565b9150509250925092565b600060ff82169050919050565b612b3781612b21565b82525050565b6000602082019050612b526000830184612b2e565b92915050565b600060208284031215612b6e57612b6d61280c565b5b6000612b7c8482850161297c565b91505092915050565b60008060408385031215612b9c57612b9b61280c565b5b6000612baa85828601612828565b9250506020612bbb85828601612828565b9150509250929050565b60008060408385031215612bdc57612bdb61280c565b5b6000612bea85828601612828565b9250506020612bfb858286016129e8565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612c4c57607f821691505b60208210811415612c6057612c5f612c05565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612c9c6020836128ab565b9150612ca782612c66565b602082019050919050565b60006020820190508181036000830152612ccb81612c8f565b9050919050565b7f63616e6e6f7420626c61636b6c69737420726f75746572000000000000000000600082015250565b6000612d086017836128ab565b9150612d1382612cd2565b602082019050919050565b60006020820190508181036000830152612d3781612cfb565b9050919050565b7f63616e6e6f7420626c61636b6c69737420706169720000000000000000000000600082015250565b6000612d746015836128ab565b9150612d7f82612d3e565b602082019050919050565b60006020820190508181036000830152612da381612d67565b9050919050565b7f7573657220697320616c726561647920626c61636b6c69737465640000000000600082015250565b6000612de0601b836128ab565b9150612deb82612daa565b602082019050919050565b60006020820190508181036000830152612e0f81612dd3565b9050919050565b7f75736572206973206e6f7420626c61636b6c6973746564000000000000000000600082015250565b6000612e4c6017836128ab565b9150612e5782612e16565b602082019050919050565b60006020820190508181036000830152612e7b81612e3f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612ebc8261295b565b9150612ec78361295b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612efc57612efb612e82565b5b828201905092915050565b7f63616e6e6f7420646f2074686174000000000000000000000000000000000000600082015250565b6000612f3d600e836128ab565b9150612f4882612f07565b602082019050919050565b60006020820190508181036000830152612f6c81612f30565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000612fcf6025836128ab565b9150612fda82612f73565b604082019050919050565b60006020820190508181036000830152612ffe81612fc2565b9050919050565b600081905092915050565b50565b6000613020600083613005565b915061302b82613010565b600082019050919050565b600061304182613013565b9150819050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006130a76026836128ab565b91506130b28261304b565b604082019050919050565b600060208201905081810360008301526130d68161309a565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006131396024836128ab565b9150613144826130dd565b604082019050919050565b600060208201905081810360008301526131688161312c565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006131cb6022836128ab565b91506131d68261316f565b604082019050919050565b600060208201905081810360008301526131fa816131be565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000613237601d836128ab565b915061324282613201565b602082019050919050565b600060208201905081810360008301526132668161322a565b9050919050565b7f53746f7020626f7474696e672100000000000000000000000000000000000000600082015250565b60006132a3600d836128ab565b91506132ae8261326d565b602082019050919050565b600060208201905081810360008301526132d281613296565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006133138261295b565b915061331e8361295b565b92508261332e5761332d6132d9565b5b828204905092915050565b60006133448261295b565b915061334f8361295b565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561338857613387612e82565b5b828202905092915050565b7f45524332303a20657863656564206d6178207472616e73616374696f6e000000600082015250565b60006133c9601d836128ab565b91506133d482613393565b602082019050919050565b600060208201905081810360008301526133f8816133bc565b9050919050565b600061340a8261295b565b91506134158361295b565b92508282101561342857613427612e82565b5b828203905092915050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061348f6025836128ab565b915061349a82613433565b604082019050919050565b600060208201905081810360008301526134be81613482565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006135216023836128ab565b915061352c826134c5565b604082019050919050565b6000602082019050818103600083015261355081613514565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006135b36026836128ab565b91506135be82613557565b604082019050919050565b600060208201905081810360008301526135e2816135a6565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061365681612811565b92915050565b6000602082840312156136725761367161280c565b5b600061368084828501613647565b91505092915050565b6000819050919050565b60006136ae6136a96136a484613689565b612a2a565b61295b565b9050919050565b6136be81613693565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6136f9816127d0565b82525050565b600061370b83836136f0565b60208301905092915050565b6000602082019050919050565b600061372f826136c4565b61373981856136cf565b9350613744836136e0565b8060005b8381101561377557815161375c88826136ff565b975061376783613717565b925050600181019050613748565b5085935050505092915050565b600060a0820190506137976000830188612aa4565b6137a460208301876136b5565b81810360408301526137b68186613724565b90506137c560608301856127e2565b6137d26080830184612aa4565b969550505050505056fea26469706673582212205ce9f2a7ffc94d5d09e419ab74e79e765c7e7918d94906147982b19ed88582c664736f6c63430008090033

Deployed Bytecode Sourcemap

28976:6078:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29102:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33489:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5942:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33610:317;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8433:242;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33935:160;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34690:92;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29507:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7061:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9255:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6904:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9959:270;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34412:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34303:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29555:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29258:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33346:135;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7232:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29400:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18700:103;;;;;;;;;;;;;:::i;:::-;;34103:93;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18049:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6161:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10732:505;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7615:234;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29617:38;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29439:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29299:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34204:91;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7912:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34790:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34898:116;;;;;;;;;;;;;:::i;:::-;;18958:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34523:159;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29102:24;;;;;;;;;;;;;:::o;33489:113::-;33555:4;33579:6;:15;33586:7;33579:15;;;;;;;;;;;;;;;;;;;;;;;;;33572:22;;33489:113;;;:::o;5942:100::-;5996:13;6029:5;6022:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5942:100;:::o;33610:317::-;18280:12;:10;:12::i;:::-;18269:23;;:7;:5;:7::i;:::-;:23;;;18261:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33706:15:::1;;;;;;;;;;;33687:35;;:7;:35;;;;33679:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;33780:13;;;;;;;;;;;33769:24;;:7;:24;;;;33761:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;33839:6;:15;33846:7;33839:15;;;;;;;;;;;;;;;;;;;;;;;;;33838:16;33830:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;33915:4;33897:6;:15;33904:7;33897:15;;;;;;;;;;;;;;;;:22;;;;;;;;;;;;;;;;;;33610:317:::0;:::o;8433:242::-;8552:4;8574:13;8590:12;:10;:12::i;:::-;8574:28;;8613:32;8622:5;8629:7;8638:6;8613:8;:32::i;:::-;8663:4;8656:11;;;8433:242;;;;:::o;33935:160::-;18280:12;:10;:12::i;:::-;18269:23;;:7;:5;:7::i;:::-;:23;;;18261:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34010:6:::1;:15;34017:7;34010:15;;;;;;;;;;;;;;;;;;;;;;;;;34002:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;34082:5;34064:6;:15;34071:7;34064:15;;;;;;;;;;;;;;;;:23;;;;;;;;;;;;;;;;;;33935:160:::0;:::o;34690:92::-;18280:12;:10;:12::i;:::-;18269:23;;:7;:5;:7::i;:::-;:23;;;18261:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34767:7:::1;34755:9;;:19;;;;;;;;;;;;;;;;;;34690:92:::0;:::o;29507:41::-;;;;;;;;;;;;;:::o;7061:108::-;7122:7;7149:12;;7142:19;;7061:108;:::o;9255:295::-;9386:4;9403:15;9421:12;:10;:12::i;:::-;9403:30;;9444:38;9460:4;9466:7;9475:6;9444:15;:38::i;:::-;9493:27;9503:4;9509:2;9513:6;9493:9;:27::i;:::-;9538:4;9531:11;;;9255:295;;;;;:::o;6904:92::-;6962:5;6904:92;:::o;9959:270::-;10074:4;10096:13;10112:12;:10;:12::i;:::-;10096:28;;10135:64;10144:5;10151:7;10188:10;10160:25;10170:5;10177:7;10160:9;:25::i;:::-;:38;;;;:::i;:::-;10135:8;:64::i;:::-;10217:4;10210:11;;;9959:270;;;;:::o;34412:103::-;18280:12;:10;:12::i;:::-;18269:23;;:7;:5;:7::i;:::-;:23;;;18261:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34496:11:::1;34486:7;:21;;;;34412:103:::0;:::o;34303:101::-;18280:12;:10;:12::i;:::-;18269:23;;:7;:5;:7::i;:::-;:23;;;18261:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34385:11:::1;34376:6;:20;;;;34303:101:::0;:::o;29555:28::-;;;;;;;;;;;;;:::o;29258:27::-;;;;:::o;33346:135::-;18280:12;:10;:12::i;:::-;18269:23;;:7;:5;:7::i;:::-;:23;;;18261:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33431:4:::1;33419:9;;:16;;;;;;;;;;;;;;;;;;33469:4;33446:14;:20;33461:4;33446:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;33346:135:::0;:::o;7232:177::-;7351:7;7383:9;:18;7393:7;7383:18;;;;;;;;;;;;;;;;7376:25;;7232:177;;;:::o;29400:26::-;;;;:::o;18700:103::-;18280:12;:10;:12::i;:::-;18269:23;;:7;:5;:7::i;:::-;:23;;;18261:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18765:30:::1;18792:1;18765:18;:30::i;:::-;18700:103::o:0;34103:93::-;29960:7;:5;:7::i;:::-;29946:21;;:10;:21;;;:48;;;;29985:9;;;;;;;;;;;29971:23;;:10;:23;;;29946:48;29924:112;;;;;;;;;;;;:::i;:::-;;;;;;;;;34184:4:::1;34174:7;:14;;;;34103:93:::0;:::o;18049:87::-;18095:7;18122:6;;;;;;;;;;;18115:13;;18049:87;:::o;6161:104::-;6217:13;6250:7;6243:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6161:104;:::o;10732:505::-;10852:4;10874:13;10890:12;:10;:12::i;:::-;10874:28;;10913:24;10940:25;10950:5;10957:7;10940:9;:25::i;:::-;10913:52;;11018:15;10998:16;:35;;10976:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;11134:60;11143:5;11150:7;11178:15;11159:16;:34;11134:8;:60::i;:::-;11225:4;11218:11;;;;10732:505;;;;:::o;7615:234::-;7730:4;7752:13;7768:12;:10;:12::i;:::-;7752:28;;7791;7801:5;7808:2;7812:6;7791:9;:28::i;:::-;7837:4;7830:11;;;7615:234;;;;:::o;29617:38::-;;;;;;;;;;;;;;;;;;;;;;:::o;29439:27::-;;;;:::o;29299:28::-;;;;:::o;34204:91::-;29960:7;:5;:7::i;:::-;29946:21;;:10;:21;;;:48;;;;29985:9;;;;;;;;;;;29971:23;;:10;:23;;;29946:48;29924:112;;;;;;;;;;;;:::i;:::-;;;;;;;;;34283:4:::1;34274:6;:13;;;;34204:91:::0;:::o;7912:201::-;8046:7;8078:11;:18;8090:5;8078:18;;;;;;;;;;;;;;;:27;8097:7;8078:27;;;;;;;;;;;;;;;;8071:34;;7912:201;;;;:::o;34790:100::-;18280:12;:10;:12::i;:::-;18269:23;;:7;:5;:7::i;:::-;:23;;;18261:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34874:8:::1;34859:12;;:23;;;;;;;;;;;;;;;;;;34790:100:::0;:::o;34898:116::-;18280:12;:10;:12::i;:::-;18269:23;;:7;:5;:7::i;:::-;:23;;;18261:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34959:7:::1;:5;:7::i;:::-;34951:21;;34980;34951:55;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34898:116::o:0;18958:238::-;18280:12;:10;:12::i;:::-;18269:23;;:7;:5;:7::i;:::-;:23;;;18261:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19081:1:::1;19061:22;;:8;:22;;;;19039:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;19160:28;19179:8;19160:18;:28::i;:::-;18958:238:::0;:::o;34523:159::-;18280:12;:10;:12::i;:::-;18269:23;;:7;:5;:7::i;:::-;:23;;;18261:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34663:11:::1;34637:14;:23;34652:7;34637:23;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;34523:159:::0;;:::o;607:98::-;660:7;687:10;680:17;;607:98;:::o;14472:380::-;14625:1;14608:19;;:5;:19;;;;14600:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14706:1;14687:21;;:7;:21;;;;14679:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14790:6;14760:11;:18;14772:5;14760:18;;;;;;;;;;;;;;;:27;14779:7;14760:27;;;;;;;;;;;;;;;:36;;;;14828:7;14812:32;;14821:5;14812:32;;;14837:6;14812:32;;;;;;:::i;:::-;;;;;;;;14472:380;;;:::o;15143:502::-;15278:24;15305:25;15315:5;15322:7;15305:9;:25::i;:::-;15278:52;;15365:17;15345:16;:37;15341:297;;15445:6;15425:16;:26;;15399:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;15560:51;15569:5;15576:7;15604:6;15585:16;:25;15560:8;:51::i;:::-;15341:297;15267:378;15143:502;;;:::o;30620:2147::-;30761:13;30787:7;:5;:7::i;:::-;30777:17;;:6;:17;;;:41;;;;30811:7;:5;:7::i;:::-;30798:20;;:9;:20;;;30777:41;30761:57;;30829:11;30853:13;;;;;;;;;;;30843:23;;:6;:23;;;:77;;;;;30904:15;;;;;;;;;;;30883:37;;:9;:37;;;;30843:77;30829:91;;30931:12;30959:13;;;;;;;;;;;30946:26;;:9;:26;;;30931:41;;30983:12;30998:6;:17;;;;31008:7;30998:17;30983:32;;31059:6;:17;31066:9;31059:17;;;;;;;;;;;;;;;;;;;;;;;;;31058:18;31050:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;31114:6;:14;31121:6;31114:14;;;;;;;;;;;;;;;;;;;;;;;;;31113:15;31105:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;31166:6;:20;31173:12;:10;:12::i;:::-;31166:20;;;;;;;;;;;;;;;;;;;;;;;;;31165:21;31157:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;31217:11;31263:7;:34;;;;;31288:9;;;;;;;;;;;31287:10;31263:34;:105;;;;;31316:14;:22;31331:6;31316:22;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;31342:14;:25;31357:9;31342:25;;;;;;;;;;;;;;;;;;;;;;;;;31316:51;31314:54;31263:105;31245:973;;;31399:6;31395:812;;;31501:8;:120;;;;31614:6;;29089:4;31575:13;:11;:13::i;:::-;:35;;;;:::i;:::-;31574:46;;;;:::i;:::-;31538:6;:83;;31501:120;31471:223;;;;;;;;;;;;:::i;:::-;;;;;;;;;29089:4;31774:6;;31765;:15;;;;:::i;:::-;31764:39;;;;:::i;:::-;31758:45;;31395:812;;;31829:7;31825:382;;;31887:8;:121;;;;32000:7;;29089:4;31961:13;:11;:13::i;:::-;:35;;;;:::i;:::-;31960:47;;;;:::i;:::-;31924:6;:84;;31887:121;31857:224;;;;;;;;;;;;:::i;:::-;;;;;;;;;29089:4;32161:7;;32152:6;:16;;;;:::i;:::-;32151:40;;;;:::i;:::-;32145:46;;31825:382;31395:812;31245:973;32295:43;32311:6;32327:4;32334:3;32295:15;:43::i;:::-;32349:11;32363:24;32381:4;32363:9;:24::i;:::-;32349:38;;32424:1;32418:3;:7;:36;;;;;32442:12;;;;;;;;;;;32418:36;:63;;;;;32472:9;;;;;;;;;;;32471:10;32418:63;:89;;;;;32499:8;32498:9;32418:89;:129;;;;;32534:13;;;;;;;;;;;32524:23;;:6;:23;;;;32418:129;:200;;;;;32566:14;:22;32581:6;32566:22;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;32592:14;:25;32607:9;32592:25;;;;;;;;;;;;;;;;;;;;;;;;;32566:51;32564:54;32418:200;32400:267;;;32645:10;32651:3;32645:5;:10::i;:::-;32400:267;32709:50;32725:6;32733:9;32754:3;32745:6;:12;;;;:::i;:::-;32709:15;:50::i;:::-;30750:2017;;;;;;30620:2147;;;:::o;19356:191::-;19430:16;19449:6;;;;;;;;;;;19430:25;;19475:8;19466:6;;:17;;;;;;;;;;;;;;;;;;19530:8;19499:40;;19520:8;19499:40;;;;;;;;;;;;19419:128;19356:191;:::o;11716:708::-;11863:1;11847:18;;:4;:18;;;;11839:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11940:1;11926:16;;:2;:16;;;;11918:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;11995:38;12016:4;12022:2;12026:6;11995:20;:38::i;:::-;12046:19;12068:9;:15;12078:4;12068:15;;;;;;;;;;;;;;;;12046:37;;12131:6;12116:11;:21;;12094:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;12271:6;12257:11;:20;12239:9;:15;12249:4;12239:15;;;;;;;;;;;;;;;:38;;;;12316:6;12299:9;:13;12309:2;12299:13;;;;;;;;;;;;;;;;:23;;;;;;;:::i;:::-;;;;;;;;12355:2;12340:26;;12349:4;12340:26;;;12359:6;12340:26;;;;;;:::i;:::-;;;;;;;;12379:37;12399:4;12405:2;12409:6;12379:19;:37::i;:::-;11828:596;11716:708;;;:::o;32775:563::-;29825:4;29813:9;;:16;;;;;;;;;;;;;;;;;;32901:21:::1;32939:1;32925:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32901:40;;32970:4;32952;32957:1;32952:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;32996:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32986:4;32991:1;32986:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;::::0;::::1;33031:64;33048:4;33063:15;;;;;;;;;;;33081:13;33031:8;:64::i;:::-;33136:15;;;;;;;;;;;:66;;;33217:13;33245:1;33261:4;33280:9;;;;;;;;;;;33304:15;33136:194;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;32830:508;29864:5:::0;29852:9;;:17;;;;;;;;;;;;;;;;;;32775:563;:::o;16245:125::-;;;;:::o;16974:124::-;;;;:::o;7:126:1:-;44:7;84:42;77:5;73:54;62:65;;7:126;;;:::o;139:96::-;176:7;205:24;223:5;205:24;:::i;:::-;194:35;;139:96;;;:::o;241:118::-;328:24;346:5;328:24;:::i;:::-;323:3;316:37;241:118;;:::o;365:222::-;458:4;496:2;485:9;481:18;473:26;;509:71;577:1;566:9;562:17;553:6;509:71;:::i;:::-;365:222;;;;:::o;674:117::-;783:1;780;773:12;920:122;993:24;1011:5;993:24;:::i;:::-;986:5;983:35;973:63;;1032:1;1029;1022:12;973:63;920:122;:::o;1048:139::-;1094:5;1132:6;1119:20;1110:29;;1148:33;1175:5;1148:33;:::i;:::-;1048:139;;;;:::o;1193:329::-;1252:6;1301:2;1289:9;1280:7;1276:23;1272:32;1269:119;;;1307:79;;:::i;:::-;1269:119;1427:1;1452:53;1497:7;1488:6;1477:9;1473:22;1452:53;:::i;:::-;1442:63;;1398:117;1193:329;;;;:::o;1528:90::-;1562:7;1605:5;1598:13;1591:21;1580:32;;1528:90;;;:::o;1624:109::-;1705:21;1720:5;1705:21;:::i;:::-;1700:3;1693:34;1624:109;;:::o;1739:210::-;1826:4;1864:2;1853:9;1849:18;1841:26;;1877:65;1939:1;1928:9;1924:17;1915:6;1877:65;:::i;:::-;1739:210;;;;:::o;1955:99::-;2007:6;2041:5;2035:12;2025:22;;1955:99;;;:::o;2060:169::-;2144:11;2178:6;2173:3;2166:19;2218:4;2213:3;2209:14;2194:29;;2060:169;;;;:::o;2235:307::-;2303:1;2313:113;2327:6;2324:1;2321:13;2313:113;;;2412:1;2407:3;2403:11;2397:18;2393:1;2388:3;2384:11;2377:39;2349:2;2346:1;2342:10;2337:15;;2313:113;;;2444:6;2441:1;2438:13;2435:101;;;2524:1;2515:6;2510:3;2506:16;2499:27;2435:101;2284:258;2235:307;;;:::o;2548:102::-;2589:6;2640:2;2636:7;2631:2;2624:5;2620:14;2616:28;2606:38;;2548:102;;;:::o;2656:364::-;2744:3;2772:39;2805:5;2772:39;:::i;:::-;2827:71;2891:6;2886:3;2827:71;:::i;:::-;2820:78;;2907:52;2952:6;2947:3;2940:4;2933:5;2929:16;2907:52;:::i;:::-;2984:29;3006:6;2984:29;:::i;:::-;2979:3;2975:39;2968:46;;2748:272;2656:364;;;;:::o;3026:313::-;3139:4;3177:2;3166:9;3162:18;3154:26;;3226:9;3220:4;3216:20;3212:1;3201:9;3197:17;3190:47;3254:78;3327:4;3318:6;3254:78;:::i;:::-;3246:86;;3026:313;;;;:::o;3345:77::-;3382:7;3411:5;3400:16;;3345:77;;;:::o;3428:122::-;3501:24;3519:5;3501:24;:::i;:::-;3494:5;3491:35;3481:63;;3540:1;3537;3530:12;3481:63;3428:122;:::o;3556:139::-;3602:5;3640:6;3627:20;3618:29;;3656:33;3683:5;3656:33;:::i;:::-;3556:139;;;;:::o;3701:474::-;3769:6;3777;3826:2;3814:9;3805:7;3801:23;3797:32;3794:119;;;3832:79;;:::i;:::-;3794:119;3952:1;3977:53;4022:7;4013:6;4002:9;3998:22;3977:53;:::i;:::-;3967:63;;3923:117;4079:2;4105:53;4150:7;4141:6;4130:9;4126:22;4105:53;:::i;:::-;4095:63;;4050:118;3701:474;;;;;:::o;4181:116::-;4251:21;4266:5;4251:21;:::i;:::-;4244:5;4241:32;4231:60;;4287:1;4284;4277:12;4231:60;4181:116;:::o;4303:133::-;4346:5;4384:6;4371:20;4362:29;;4400:30;4424:5;4400:30;:::i;:::-;4303:133;;;;:::o;4442:323::-;4498:6;4547:2;4535:9;4526:7;4522:23;4518:32;4515:119;;;4553:79;;:::i;:::-;4515:119;4673:1;4698:50;4740:7;4731:6;4720:9;4716:22;4698:50;:::i;:::-;4688:60;;4644:114;4442:323;;;;:::o;4771:60::-;4799:3;4820:5;4813:12;;4771:60;;;:::o;4837:142::-;4887:9;4920:53;4938:34;4947:24;4965:5;4947:24;:::i;:::-;4938:34;:::i;:::-;4920:53;:::i;:::-;4907:66;;4837:142;;;:::o;4985:126::-;5035:9;5068:37;5099:5;5068:37;:::i;:::-;5055:50;;4985:126;;;:::o;5117:153::-;5194:9;5227:37;5258:5;5227:37;:::i;:::-;5214:50;;5117:153;;;:::o;5276:185::-;5390:64;5448:5;5390:64;:::i;:::-;5385:3;5378:77;5276:185;;:::o;5467:276::-;5587:4;5625:2;5614:9;5610:18;5602:26;;5638:98;5733:1;5722:9;5718:17;5709:6;5638:98;:::i;:::-;5467:276;;;;:::o;5749:118::-;5836:24;5854:5;5836:24;:::i;:::-;5831:3;5824:37;5749:118;;:::o;5873:222::-;5966:4;6004:2;5993:9;5989:18;5981:26;;6017:71;6085:1;6074:9;6070:17;6061:6;6017:71;:::i;:::-;5873:222;;;;:::o;6101:619::-;6178:6;6186;6194;6243:2;6231:9;6222:7;6218:23;6214:32;6211:119;;;6249:79;;:::i;:::-;6211:119;6369:1;6394:53;6439:7;6430:6;6419:9;6415:22;6394:53;:::i;:::-;6384:63;;6340:117;6496:2;6522:53;6567:7;6558:6;6547:9;6543:22;6522:53;:::i;:::-;6512:63;;6467:118;6624:2;6650:53;6695:7;6686:6;6675:9;6671:22;6650:53;:::i;:::-;6640:63;;6595:118;6101:619;;;;;:::o;6726:86::-;6761:7;6801:4;6794:5;6790:16;6779:27;;6726:86;;;:::o;6818:112::-;6901:22;6917:5;6901:22;:::i;:::-;6896:3;6889:35;6818:112;;:::o;6936:214::-;7025:4;7063:2;7052:9;7048:18;7040:26;;7076:67;7140:1;7129:9;7125:17;7116:6;7076:67;:::i;:::-;6936:214;;;;:::o;7156:329::-;7215:6;7264:2;7252:9;7243:7;7239:23;7235:32;7232:119;;;7270:79;;:::i;:::-;7232:119;7390:1;7415:53;7460:7;7451:6;7440:9;7436:22;7415:53;:::i;:::-;7405:63;;7361:117;7156:329;;;;:::o;7491:474::-;7559:6;7567;7616:2;7604:9;7595:7;7591:23;7587:32;7584:119;;;7622:79;;:::i;:::-;7584:119;7742:1;7767:53;7812:7;7803:6;7792:9;7788:22;7767:53;:::i;:::-;7757:63;;7713:117;7869:2;7895:53;7940:7;7931:6;7920:9;7916:22;7895:53;:::i;:::-;7885:63;;7840:118;7491:474;;;;;:::o;7971:468::-;8036:6;8044;8093:2;8081:9;8072:7;8068:23;8064:32;8061:119;;;8099:79;;:::i;:::-;8061:119;8219:1;8244:53;8289:7;8280:6;8269:9;8265:22;8244:53;:::i;:::-;8234:63;;8190:117;8346:2;8372:50;8414:7;8405:6;8394:9;8390:22;8372:50;:::i;:::-;8362:60;;8317:115;7971:468;;;;;:::o;8445:180::-;8493:77;8490:1;8483:88;8590:4;8587:1;8580:15;8614:4;8611:1;8604:15;8631:320;8675:6;8712:1;8706:4;8702:12;8692:22;;8759:1;8753:4;8749:12;8780:18;8770:81;;8836:4;8828:6;8824:17;8814:27;;8770:81;8898:2;8890:6;8887:14;8867:18;8864:38;8861:84;;;8917:18;;:::i;:::-;8861:84;8682:269;8631:320;;;:::o;8957:182::-;9097:34;9093:1;9085:6;9081:14;9074:58;8957:182;:::o;9145:366::-;9287:3;9308:67;9372:2;9367:3;9308:67;:::i;:::-;9301:74;;9384:93;9473:3;9384:93;:::i;:::-;9502:2;9497:3;9493:12;9486:19;;9145:366;;;:::o;9517:419::-;9683:4;9721:2;9710:9;9706:18;9698:26;;9770:9;9764:4;9760:20;9756:1;9745:9;9741:17;9734:47;9798:131;9924:4;9798:131;:::i;:::-;9790:139;;9517:419;;;:::o;9942:173::-;10082:25;10078:1;10070:6;10066:14;10059:49;9942:173;:::o;10121:366::-;10263:3;10284:67;10348:2;10343:3;10284:67;:::i;:::-;10277:74;;10360:93;10449:3;10360:93;:::i;:::-;10478:2;10473:3;10469:12;10462:19;;10121:366;;;:::o;10493:419::-;10659:4;10697:2;10686:9;10682:18;10674:26;;10746:9;10740:4;10736:20;10732:1;10721:9;10717:17;10710:47;10774:131;10900:4;10774:131;:::i;:::-;10766:139;;10493:419;;;:::o;10918:171::-;11058:23;11054:1;11046:6;11042:14;11035:47;10918:171;:::o;11095:366::-;11237:3;11258:67;11322:2;11317:3;11258:67;:::i;:::-;11251:74;;11334:93;11423:3;11334:93;:::i;:::-;11452:2;11447:3;11443:12;11436:19;;11095:366;;;:::o;11467:419::-;11633:4;11671:2;11660:9;11656:18;11648:26;;11720:9;11714:4;11710:20;11706:1;11695:9;11691:17;11684:47;11748:131;11874:4;11748:131;:::i;:::-;11740:139;;11467:419;;;:::o;11892:177::-;12032:29;12028:1;12020:6;12016:14;12009:53;11892:177;:::o;12075:366::-;12217:3;12238:67;12302:2;12297:3;12238:67;:::i;:::-;12231:74;;12314:93;12403:3;12314:93;:::i;:::-;12432:2;12427:3;12423:12;12416:19;;12075:366;;;:::o;12447:419::-;12613:4;12651:2;12640:9;12636:18;12628:26;;12700:9;12694:4;12690:20;12686:1;12675:9;12671:17;12664:47;12728:131;12854:4;12728:131;:::i;:::-;12720:139;;12447:419;;;:::o;12872:173::-;13012:25;13008:1;13000:6;12996:14;12989:49;12872:173;:::o;13051:366::-;13193:3;13214:67;13278:2;13273:3;13214:67;:::i;:::-;13207:74;;13290:93;13379:3;13290:93;:::i;:::-;13408:2;13403:3;13399:12;13392:19;;13051:366;;;:::o;13423:419::-;13589:4;13627:2;13616:9;13612:18;13604:26;;13676:9;13670:4;13666:20;13662:1;13651:9;13647:17;13640:47;13704:131;13830:4;13704:131;:::i;:::-;13696:139;;13423:419;;;:::o;13848:180::-;13896:77;13893:1;13886:88;13993:4;13990:1;13983:15;14017:4;14014:1;14007:15;14034:305;14074:3;14093:20;14111:1;14093:20;:::i;:::-;14088:25;;14127:20;14145:1;14127:20;:::i;:::-;14122:25;;14281:1;14213:66;14209:74;14206:1;14203:81;14200:107;;;14287:18;;:::i;:::-;14200:107;14331:1;14328;14324:9;14317:16;;14034:305;;;;:::o;14345:164::-;14485:16;14481:1;14473:6;14469:14;14462:40;14345:164;:::o;14515:366::-;14657:3;14678:67;14742:2;14737:3;14678:67;:::i;:::-;14671:74;;14754:93;14843:3;14754:93;:::i;:::-;14872:2;14867:3;14863:12;14856:19;;14515:366;;;:::o;14887:419::-;15053:4;15091:2;15080:9;15076:18;15068:26;;15140:9;15134:4;15130:20;15126:1;15115:9;15111:17;15104:47;15168:131;15294:4;15168:131;:::i;:::-;15160:139;;14887:419;;;:::o;15312:224::-;15452:34;15448:1;15440:6;15436:14;15429:58;15521:7;15516:2;15508:6;15504:15;15497:32;15312:224;:::o;15542:366::-;15684:3;15705:67;15769:2;15764:3;15705:67;:::i;:::-;15698:74;;15781:93;15870:3;15781:93;:::i;:::-;15899:2;15894:3;15890:12;15883:19;;15542:366;;;:::o;15914:419::-;16080:4;16118:2;16107:9;16103:18;16095:26;;16167:9;16161:4;16157:20;16153:1;16142:9;16138:17;16131:47;16195:131;16321:4;16195:131;:::i;:::-;16187:139;;15914:419;;;:::o;16339:147::-;16440:11;16477:3;16462:18;;16339:147;;;;:::o;16492:114::-;;:::o;16612:398::-;16771:3;16792:83;16873:1;16868:3;16792:83;:::i;:::-;16785:90;;16884:93;16973:3;16884:93;:::i;:::-;17002:1;16997:3;16993:11;16986:18;;16612:398;;;:::o;17016:379::-;17200:3;17222:147;17365:3;17222:147;:::i;:::-;17215:154;;17386:3;17379:10;;17016:379;;;:::o;17401:225::-;17541:34;17537:1;17529:6;17525:14;17518:58;17610:8;17605:2;17597:6;17593:15;17586:33;17401:225;:::o;17632:366::-;17774:3;17795:67;17859:2;17854:3;17795:67;:::i;:::-;17788:74;;17871:93;17960:3;17871:93;:::i;:::-;17989:2;17984:3;17980:12;17973:19;;17632:366;;;:::o;18004:419::-;18170:4;18208:2;18197:9;18193:18;18185:26;;18257:9;18251:4;18247:20;18243:1;18232:9;18228:17;18221:47;18285:131;18411:4;18285:131;:::i;:::-;18277:139;;18004:419;;;:::o;18429:223::-;18569:34;18565:1;18557:6;18553:14;18546:58;18638:6;18633:2;18625:6;18621:15;18614:31;18429:223;:::o;18658:366::-;18800:3;18821:67;18885:2;18880:3;18821:67;:::i;:::-;18814:74;;18897:93;18986:3;18897:93;:::i;:::-;19015:2;19010:3;19006:12;18999:19;;18658:366;;;:::o;19030:419::-;19196:4;19234:2;19223:9;19219:18;19211:26;;19283:9;19277:4;19273:20;19269:1;19258:9;19254:17;19247:47;19311:131;19437:4;19311:131;:::i;:::-;19303:139;;19030:419;;;:::o;19455:221::-;19595:34;19591:1;19583:6;19579:14;19572:58;19664:4;19659:2;19651:6;19647:15;19640:29;19455:221;:::o;19682:366::-;19824:3;19845:67;19909:2;19904:3;19845:67;:::i;:::-;19838:74;;19921:93;20010:3;19921:93;:::i;:::-;20039:2;20034:3;20030:12;20023:19;;19682:366;;;:::o;20054:419::-;20220:4;20258:2;20247:9;20243:18;20235:26;;20307:9;20301:4;20297:20;20293:1;20282:9;20278:17;20271:47;20335:131;20461:4;20335:131;:::i;:::-;20327:139;;20054:419;;;:::o;20479:179::-;20619:31;20615:1;20607:6;20603:14;20596:55;20479:179;:::o;20664:366::-;20806:3;20827:67;20891:2;20886:3;20827:67;:::i;:::-;20820:74;;20903:93;20992:3;20903:93;:::i;:::-;21021:2;21016:3;21012:12;21005:19;;20664:366;;;:::o;21036:419::-;21202:4;21240:2;21229:9;21225:18;21217:26;;21289:9;21283:4;21279:20;21275:1;21264:9;21260:17;21253:47;21317:131;21443:4;21317:131;:::i;:::-;21309:139;;21036:419;;;:::o;21461:163::-;21601:15;21597:1;21589:6;21585:14;21578:39;21461:163;:::o;21630:366::-;21772:3;21793:67;21857:2;21852:3;21793:67;:::i;:::-;21786:74;;21869:93;21958:3;21869:93;:::i;:::-;21987:2;21982:3;21978:12;21971:19;;21630:366;;;:::o;22002:419::-;22168:4;22206:2;22195:9;22191:18;22183:26;;22255:9;22249:4;22245:20;22241:1;22230:9;22226:17;22219:47;22283:131;22409:4;22283:131;:::i;:::-;22275:139;;22002:419;;;:::o;22427:180::-;22475:77;22472:1;22465:88;22572:4;22569:1;22562:15;22596:4;22593:1;22586:15;22613:185;22653:1;22670:20;22688:1;22670:20;:::i;:::-;22665:25;;22704:20;22722:1;22704:20;:::i;:::-;22699:25;;22743:1;22733:35;;22748:18;;:::i;:::-;22733:35;22790:1;22787;22783:9;22778:14;;22613:185;;;;:::o;22804:348::-;22844:7;22867:20;22885:1;22867:20;:::i;:::-;22862:25;;22901:20;22919:1;22901:20;:::i;:::-;22896:25;;23089:1;23021:66;23017:74;23014:1;23011:81;23006:1;22999:9;22992:17;22988:105;22985:131;;;23096:18;;:::i;:::-;22985:131;23144:1;23141;23137:9;23126:20;;22804:348;;;;:::o;23158:179::-;23298:31;23294:1;23286:6;23282:14;23275:55;23158:179;:::o;23343:366::-;23485:3;23506:67;23570:2;23565:3;23506:67;:::i;:::-;23499:74;;23582:93;23671:3;23582:93;:::i;:::-;23700:2;23695:3;23691:12;23684:19;;23343:366;;;:::o;23715:419::-;23881:4;23919:2;23908:9;23904:18;23896:26;;23968:9;23962:4;23958:20;23954:1;23943:9;23939:17;23932:47;23996:131;24122:4;23996:131;:::i;:::-;23988:139;;23715:419;;;:::o;24140:191::-;24180:4;24200:20;24218:1;24200:20;:::i;:::-;24195:25;;24234:20;24252:1;24234:20;:::i;:::-;24229:25;;24273:1;24270;24267:8;24264:34;;;24278:18;;:::i;:::-;24264:34;24323:1;24320;24316:9;24308:17;;24140:191;;;;:::o;24337:224::-;24477:34;24473:1;24465:6;24461:14;24454:58;24546:7;24541:2;24533:6;24529:15;24522:32;24337:224;:::o;24567:366::-;24709:3;24730:67;24794:2;24789:3;24730:67;:::i;:::-;24723:74;;24806:93;24895:3;24806:93;:::i;:::-;24924:2;24919:3;24915:12;24908:19;;24567:366;;;:::o;24939:419::-;25105:4;25143:2;25132:9;25128:18;25120:26;;25192:9;25186:4;25182:20;25178:1;25167:9;25163:17;25156:47;25220:131;25346:4;25220:131;:::i;:::-;25212:139;;24939:419;;;:::o;25364:222::-;25504:34;25500:1;25492:6;25488:14;25481:58;25573:5;25568:2;25560:6;25556:15;25549:30;25364:222;:::o;25592:366::-;25734:3;25755:67;25819:2;25814:3;25755:67;:::i;:::-;25748:74;;25831:93;25920:3;25831:93;:::i;:::-;25949:2;25944:3;25940:12;25933:19;;25592:366;;;:::o;25964:419::-;26130:4;26168:2;26157:9;26153:18;26145:26;;26217:9;26211:4;26207:20;26203:1;26192:9;26188:17;26181:47;26245:131;26371:4;26245:131;:::i;:::-;26237:139;;25964:419;;;:::o;26389:225::-;26529:34;26525:1;26517:6;26513:14;26506:58;26598:8;26593:2;26585:6;26581:15;26574:33;26389:225;:::o;26620:366::-;26762:3;26783:67;26847:2;26842:3;26783:67;:::i;:::-;26776:74;;26859:93;26948:3;26859:93;:::i;:::-;26977:2;26972:3;26968:12;26961:19;;26620:366;;;:::o;26992:419::-;27158:4;27196:2;27185:9;27181:18;27173:26;;27245:9;27239:4;27235:20;27231:1;27220:9;27216:17;27209:47;27273:131;27399:4;27273:131;:::i;:::-;27265:139;;26992:419;;;:::o;27417:180::-;27465:77;27462:1;27455:88;27562:4;27559:1;27552:15;27586:4;27583:1;27576:15;27603:180;27651:77;27648:1;27641:88;27748:4;27745:1;27738:15;27772:4;27769:1;27762:15;27789:143;27846:5;27877:6;27871:13;27862:22;;27893:33;27920:5;27893:33;:::i;:::-;27789:143;;;;:::o;27938:351::-;28008:6;28057:2;28045:9;28036:7;28032:23;28028:32;28025:119;;;28063:79;;:::i;:::-;28025:119;28183:1;28208:64;28264:7;28255:6;28244:9;28240:22;28208:64;:::i;:::-;28198:74;;28154:128;27938:351;;;;:::o;28295:85::-;28340:7;28369:5;28358:16;;28295:85;;;:::o;28386:158::-;28444:9;28477:61;28495:42;28504:32;28530:5;28504:32;:::i;:::-;28495:42;:::i;:::-;28477:61;:::i;:::-;28464:74;;28386:158;;;:::o;28550:147::-;28645:45;28684:5;28645:45;:::i;:::-;28640:3;28633:58;28550:147;;:::o;28703:114::-;28770:6;28804:5;28798:12;28788:22;;28703:114;;;:::o;28823:184::-;28922:11;28956:6;28951:3;28944:19;28996:4;28991:3;28987:14;28972:29;;28823:184;;;;:::o;29013:132::-;29080:4;29103:3;29095:11;;29133:4;29128:3;29124:14;29116:22;;29013:132;;;:::o;29151:108::-;29228:24;29246:5;29228:24;:::i;:::-;29223:3;29216:37;29151:108;;:::o;29265:179::-;29334:10;29355:46;29397:3;29389:6;29355:46;:::i;:::-;29433:4;29428:3;29424:14;29410:28;;29265:179;;;;:::o;29450:113::-;29520:4;29552;29547:3;29543:14;29535:22;;29450:113;;;:::o;29599:732::-;29718:3;29747:54;29795:5;29747:54;:::i;:::-;29817:86;29896:6;29891:3;29817:86;:::i;:::-;29810:93;;29927:56;29977:5;29927:56;:::i;:::-;30006:7;30037:1;30022:284;30047:6;30044:1;30041:13;30022:284;;;30123:6;30117:13;30150:63;30209:3;30194:13;30150:63;:::i;:::-;30143:70;;30236:60;30289:6;30236:60;:::i;:::-;30226:70;;30082:224;30069:1;30066;30062:9;30057:14;;30022:284;;;30026:14;30322:3;30315:10;;29723:608;;;29599:732;;;;:::o;30337:831::-;30600:4;30638:3;30627:9;30623:19;30615:27;;30652:71;30720:1;30709:9;30705:17;30696:6;30652:71;:::i;:::-;30733:80;30809:2;30798:9;30794:18;30785:6;30733:80;:::i;:::-;30860:9;30854:4;30850:20;30845:2;30834:9;30830:18;30823:48;30888:108;30991:4;30982:6;30888:108;:::i;:::-;30880:116;;31006:72;31074:2;31063:9;31059:18;31050:6;31006:72;:::i;:::-;31088:73;31156:3;31145:9;31141:19;31132:6;31088:73;:::i;:::-;30337:831;;;;;;;;:::o

Swarm Source

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