ETH Price: $2,011.14 (+4.15%)
 

Overview

Max Total Supply

119,000,000 FIRED

Holders

7

Transfers

-
0

Market

Onchain Market Cap

-

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

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:
Gary_Be_Gone

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license
/**
 *Submitted for verification at Etherscan.io on 2023-07-12
*/

pragma solidity 0.8.18;

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

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

    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
}
contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

    /**
     * @dev See {IERC20-approve}.
     *
     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on
     * `transferFrom`. This is semantically equivalent to an infinite approval.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, amount);
        return true;
    }

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

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

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

        return true;
    }

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

        _beforeTokenTransfer(from, to, amount);

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

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, amount);
    }

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

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

        _totalSupply += amount;
        unchecked {
            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.
            _balances[account] += amount;
        }
        emit Transfer(address(0), account, amount);

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

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

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

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
            // Overflow not possible: amount <= accountBalance <= totalSupply.
            _totalSupply -= amount;
        }

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

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

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

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

    /**
     * @dev Updates `owner` s allowance for `spender` based on spent `amount`.
     *
     * Does not update the allowance amount in case of infinite allowance.
     * Revert if not enough allowance is available.
     *
     * Might emit an {Approval} event.
     */
    function _spendAllowance(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(currentAllowance >= amount, "ERC20: insufficient allowance");
            unchecked {
                _approve(owner, spender, currentAllowance - amount);
            }
        }
    }

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

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

/**
 * @dev Extension of {ERC20} that allows token holders to destroy both their own
 * tokens and those that they have an allowance for, in a way that can be
 * recognized off-chain (via event analysis).
 */
abstract contract ERC20Burnable is Context, ERC20 {
    /**
     * @dev Destroys `amount` tokens from the caller.
     *
     * See {ERC20-_burn}.
     */
    function burn(uint256 amount) public virtual {
        _burn(_msgSender(), amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`, deducting from the caller's
     * allowance.
     *
     * See {ERC20-_burn} and {ERC20-allowance}.
     *
     * Requirements:
     *
     * - the caller must have allowance for ``accounts``'s tokens of at least
     * `amount`.
     */
    function burnFrom(address account, uint256 amount) public virtual {
        _spendAllowance(account, _msgSender(), amount);
        _burn(account, amount);
    }
}

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

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

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

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

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

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

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

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

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

abstract contract TokenRecover is Ownable {

    function recoverERC20(address tokenAddress, uint256 amount) public onlyOwner {
        require(tokenAddress != address(this), "TokenRecover: Cannot recover this token");

        IERC20(tokenAddress).transfer(owner(), amount);
    }
}

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

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);

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

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

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}
interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint 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 (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint 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 (uint);

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    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 (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint 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,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}


pragma solidity 0.8.18;

/*
1
2
3 #########################################
4 ##           Gary Be Gone              ##
5 #########################################
6
7
*/

// SPDX-License-Identifier: No License

contract Gary_Be_Gone is ERC20, ERC20Burnable, Ownable, TokenRecover {
    
    IUniswapV2Router02 public routerV2;
    address public pairV2;
    mapping (address => bool) public AMMPairs;

    mapping (address => bool) public isExcludedFromLimits;

    uint256 public maxWalletAmount;

    mapping (address => uint256) public lastTrade;
    uint256 public tradeCooldownTime;
 
    event RouterV2Updated(address indexed routerV2);
    event AMMPairsUpdated(address indexed AMMPair, bool isPair);

    event ExcludeFromLimits(address indexed account, bool isExcluded);

    event MaxWalletAmountUpdated(uint256 maxWalletAmount);

    event TradeCooldownTimeUpdated(uint256 tradeCooldownTime);
 
    constructor()
        ERC20("Gary Be Gone", "FIRED") 
    {
        address supplyRecipient = 0x9381A7621B8C278aDfd78E19358B56B591a9BF37;
        
        _updateRouterV2(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);

        excludeFromLimits(supplyRecipient, true);
        excludeFromLimits(address(this), true);
        excludeFromLimits(address(0), true); 

        updateMaxWalletAmount(5950000 * (10 ** decimals()));

        updateTradeCooldownTime(30);

        _mint(supplyRecipient, 119000000 * (10 ** decimals()));
        _transferOwnership(0x11f6C6Ad0208aaBf74FfB0BA2578012c045090f9);
    }

    receive() external payable {}

    function decimals() public pure override returns (uint8) {
        return 18;
    }
    
    function _updateRouterV2(address router) private {
        routerV2 = IUniswapV2Router02(router);
        pairV2 = IUniswapV2Factory(routerV2.factory()).createPair(address(this), routerV2.WETH());
        
        excludeFromLimits(router, true);

        _setAMMPair(pairV2, true);

        emit RouterV2Updated(router);
    }

    function setAMMPair(address pair, bool isPair) public onlyOwner {
        require(pair != pairV2, "DefaultRouter: Cannot remove initial pair from list");

        _setAMMPair(pair, isPair);
    }

    function _setAMMPair(address pair, bool isPair) private {
        AMMPairs[pair] = isPair;

        if (isPair) { 
            excludeFromLimits(pair, true);

        }

        emit AMMPairsUpdated(pair, isPair);
    }

    function excludeFromLimits(address account, bool isExcluded) public onlyOwner {
        isExcludedFromLimits[account] = isExcluded;

        emit ExcludeFromLimits(account, isExcluded);
    }

    function updateMaxWalletAmount(uint256 _maxWalletAmount) public onlyOwner {
        maxWalletAmount = _maxWalletAmount;
        
        emit MaxWalletAmountUpdated(_maxWalletAmount);
    }

    function updateTradeCooldownTime(uint256 _tradeCooldownTime) public onlyOwner {
        require(_tradeCooldownTime <= 7 days, "Antibot: Trade cooldown too long.");
            
        tradeCooldownTime = _tradeCooldownTime;
        
        emit TradeCooldownTimeUpdated(_tradeCooldownTime);
    }

    function _beforeTokenTransfer(address from, address to, uint256 amount)
        internal
        override
    {
        if(!isExcludedFromLimits[from])
            require(lastTrade[from] + tradeCooldownTime <= block.timestamp, "Antibot: Transaction sender is in anti-bot cooldown");
        if(!isExcludedFromLimits[to])
            require(lastTrade[to] + tradeCooldownTime <= block.timestamp, "Antibot: Transaction recipient is in anti-bot cooldown");

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

    function _afterTokenTransfer(address from, address to, uint256 amount)
        internal
        override
    {
        if (!isExcludedFromLimits[to]) {
            require(balanceOf(to) <= maxWalletAmount, "MaxWallet: Cannot exceed max wallet limit");
        }

        if (AMMPairs[from] && !isExcludedFromLimits[to]) lastTrade[to] = block.timestamp;
        else if (AMMPairs[to] && !isExcludedFromLimits[from]) lastTrade[from] = block.timestamp;

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

Contract Security Audit

Contract ABI

API
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"AMMPair","type":"address"},{"indexed":false,"internalType":"bool","name":"isPair","type":"bool"}],"name":"AMMPairsUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromLimits","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"maxWalletAmount","type":"uint256"}],"name":"MaxWalletAmountUpdated","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":"routerV2","type":"address"}],"name":"RouterV2Updated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tradeCooldownTime","type":"uint256"}],"name":"TradeCooldownTimeUpdated","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":"AMMPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","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"},{"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"excludeFromLimits","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":"","type":"address"}],"name":"isExcludedFromLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"lastTrade","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","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":"pairV2","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"recoverERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"routerV2","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"isPair","type":"bool"}],"name":"setAMMPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradeCooldownTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxWalletAmount","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tradeCooldownTime","type":"uint256"}],"name":"updateTradeCooldownTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040523480156200001157600080fd5b506040518060400160405280600c81526020017f4761727920426520476f6e6500000000000000000000000000000000000000008152506040518060400160405280600581526020017f464952454400000000000000000000000000000000000000000000000000000081525081600390816200008f919062001182565b508060049081620000a1919062001182565b505050620000c4620000b8620001f860201b60201c565b6200020060201b60201c565b6000739381a7621b8c278adfd78e19358b56b591a9bf37905062000102737a250d5630b4cf539739df2c5dacb4c659f2488d620002c660201b60201c565b620001158160016200057e60201b60201c565b620001283060016200057e60201b60201c565b6200013c600060016200057e60201b60201c565b6200017a620001506200063960201b60201c565b600a6200015e9190620013f9565b625aca306200016e91906200144a565b6200064260201b60201c565b6200018c601e6200069560201b60201c565b620001cc81620001a16200063960201b60201c565b600a620001af9190620013f9565b630717cbc0620001c091906200144a565b6200073160201b60201c565b620001f17311f6c6ad0208aabf74ffb0ba2578012c045090f96200020060201b60201c565b5062001967565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000375573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200039b9190620014ff565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000425573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200044b9190620014ff565b6040518363ffffffff1660e01b81526004016200046a92919062001542565b6020604051808303816000875af11580156200048a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004b09190620014ff565b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620005038160016200057e60201b60201c565b62000538600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200089e60201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff167fbc052db65df144ad4f71f02da93cae3d4401104c30ac374d7cc10d87ee07b60260405160405180910390a250565b6200058e6200096460201b60201c565b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f4b89c347592b1d537e066cb4ed98d87696ae35164745d7e370e4add16941dc92826040516200062d91906200158c565b60405180910390a25050565b60006012905090565b620006526200096460201b60201c565b80600a819055507f4b39c36d20c57d220f61fd25c4349d4435cc03ef6c2a680942f15333c3c3e001816040516200068a9190620015ba565b60405180910390a150565b620006a56200096460201b60201c565b62093a80811115620006ee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006e5906200165e565b60405180910390fd5b80600c819055507f07583f92fee444c67f59bbc03e68bfda63fc2e087769ccc4f2b40360336a546781604051620007269190620015ba565b60405180910390a150565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620007a3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200079a90620016d0565b60405180910390fd5b620007b760008383620009f560201b60201c565b8060026000828254620007cb9190620016f2565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200087e9190620015ba565b60405180910390a36200089a6000838362000be060201b60201c565b5050565b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550801562000910576200090f8260016200057e60201b60201c565b5b8173ffffffffffffffffffffffffffffffffffffffff167f911aa18ddbbbc33c9b4c704a71bdaa0984b0aa2e82726a7f51e64bad0b0a8455826040516200095891906200158c565b60405180910390a25050565b62000974620001f860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200099a62000e8c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620009f3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009ea906200177d565b60405180910390fd5b565b600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1662000adc5742600c54600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000a979190620016f2565b111562000adb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000ad29062001815565b60405180910390fd5b5b600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1662000bc35742600c54600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000b7e9190620016f2565b111562000bc2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000bb990620018ad565b60405180910390fd5b5b62000bdb83838362000eb660201b62000f081760201c565b505050565b600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1662000c8b57600a5462000c468362000ebb60201b60201c565b111562000c8a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000c819062001945565b60405180910390fd5b5b600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801562000d2f5750600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1562000d7f5742600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555062000e6f565b600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801562000e235750600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1562000e6e5742600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b62000e8783838362000f0360201b62000f0d1760201c565b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000f8a57607f821691505b60208210810362000fa05762000f9f62000f42565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026200100a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000fcb565b62001016868362000fcb565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620010636200105d62001057846200102e565b62001038565b6200102e565b9050919050565b6000819050919050565b6200107f8362001042565b620010976200108e826200106a565b84845462000fd8565b825550505050565b600090565b620010ae6200109f565b620010bb81848462001074565b505050565b5b81811015620010e357620010d7600082620010a4565b600181019050620010c1565b5050565b601f8211156200113257620010fc8162000fa6565b620011078462000fbb565b8101602085101562001117578190505b6200112f620011268562000fbb565b830182620010c0565b50505b505050565b600082821c905092915050565b6000620011576000198460080262001137565b1980831691505092915050565b600062001172838362001144565b9150826002028217905092915050565b6200118d8262000f08565b67ffffffffffffffff811115620011a957620011a862000f13565b5b620011b5825462000f71565b620011c2828285620010e7565b600060209050601f831160018114620011fa5760008415620011e5578287015190505b620011f1858262001164565b86555062001261565b601f1984166200120a8662000fa6565b60005b8281101562001234578489015182556001820191506020850194506020810190506200120d565b8683101562001254578489015162001250601f89168262001144565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b6001851115620012f757808604811115620012cf57620012ce62001269565b5b6001851615620012df5780820291505b8081029050620012ef8562001298565b9450620012af565b94509492505050565b600082620013125760019050620013e5565b81620013225760009050620013e5565b81600181146200133b576002811462001346576200137c565b6001915050620013e5565b60ff8411156200135b576200135a62001269565b5b8360020a91508482111562001375576200137462001269565b5b50620013e5565b5060208310610133831016604e8410600b8410161715620013b65782820a905083811115620013b057620013af62001269565b5b620013e5565b620013c58484846001620012a5565b92509050818404811115620013df57620013de62001269565b5b81810290505b9392505050565b600060ff82169050919050565b600062001406826200102e565b91506200141383620013ec565b9250620014427fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462001300565b905092915050565b600062001457826200102e565b915062001464836200102e565b925082820262001474816200102e565b915082820484148315176200148e576200148d62001269565b5b5092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620014c7826200149a565b9050919050565b620014d981620014ba565b8114620014e557600080fd5b50565b600081519050620014f981620014ce565b92915050565b60006020828403121562001518576200151762001495565b5b60006200152884828501620014e8565b91505092915050565b6200153c81620014ba565b82525050565b600060408201905062001559600083018562001531565b62001568602083018462001531565b9392505050565b60008115159050919050565b62001586816200156f565b82525050565b6000602082019050620015a360008301846200157b565b92915050565b620015b4816200102e565b82525050565b6000602082019050620015d16000830184620015a9565b92915050565b600082825260208201905092915050565b7f416e7469626f743a20547261646520636f6f6c646f776e20746f6f206c6f6e6760008201527f2e00000000000000000000000000000000000000000000000000000000000000602082015250565b600062001646602183620015d7565b91506200165382620015e8565b604082019050919050565b60006020820190508181036000830152620016798162001637565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000620016b8601f83620015d7565b9150620016c58262001680565b602082019050919050565b60006020820190508181036000830152620016eb81620016a9565b9050919050565b6000620016ff826200102e565b91506200170c836200102e565b925082820190508082111562001727576200172662001269565b5b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062001765602083620015d7565b915062001772826200172d565b602082019050919050565b60006020820190508181036000830152620017988162001756565b9050919050565b7f416e7469626f743a205472616e73616374696f6e2073656e646572206973206960008201527f6e20616e74692d626f7420636f6f6c646f776e00000000000000000000000000602082015250565b6000620017fd603383620015d7565b91506200180a826200179f565b604082019050919050565b600060208201905081810360008301526200183081620017ee565b9050919050565b7f416e7469626f743a205472616e73616374696f6e20726563697069656e74206960008201527f7320696e20616e74692d626f7420636f6f6c646f776e00000000000000000000602082015250565b600062001895603683620015d7565b9150620018a28262001837565b604082019050919050565b60006020820190508181036000830152620018c88162001886565b9050919050565b7f4d617857616c6c65743a2043616e6e6f7420657863656564206d61782077616c60008201527f6c6574206c696d69740000000000000000000000000000000000000000000000602082015250565b60006200192d602983620015d7565b91506200193a82620018cf565b604082019050919050565b6000602082019050818103600083015262001960816200191e565b9050919050565b612afa80620019776000396000f3fe6080604052600436106101bb5760003560e01c806379cc6790116100ec578063aa4bde281161008a578063c26d7be011610064578063c26d7be01461063d578063dd62ed3e1461067a578063f2fde38b146106b7578063fd116019146106e0576101c2565b8063aa4bde28146105c0578063c0a904a2146105eb578063c18bc19514610614576101c2565b80638fffabed116100c65780638fffabed146104f057806395d89b411461051b578063a457c2d714610546578063a9059cbb14610583576101c2565b806379cc6790146104735780638980f11f1461049c5780638da5cb5b146104c5576101c2565b806342966c68116101595780636a3e8f3d116101335780636a3e8f3d146103b957806370a08231146103e2578063715018a61461041f5780637685655714610436576101c2565b806342966c6814610328578063502f7446146103515780635cce86cd1461037c576101c2565b806323b872dd1161019557806323b872dd1461025a5780632d99d32e14610297578063313ce567146102c057806339509351146102eb576101c2565b806306fdde03146101c7578063095ea7b3146101f257806318160ddd1461022f576101c2565b366101c257005b600080fd5b3480156101d357600080fd5b506101dc61070b565b6040516101e99190611ca1565b60405180910390f35b3480156101fe57600080fd5b5061021960048036038101906102149190611d5c565b61079d565b6040516102269190611db7565b60405180910390f35b34801561023b57600080fd5b506102446107c0565b6040516102519190611de1565b60405180910390f35b34801561026657600080fd5b50610281600480360381019061027c9190611dfc565b6107ca565b60405161028e9190611db7565b60405180910390f35b3480156102a357600080fd5b506102be60048036038101906102b99190611e7b565b6107f9565b005b3480156102cc57600080fd5b506102d561089f565b6040516102e29190611ed7565b60405180910390f35b3480156102f757600080fd5b50610312600480360381019061030d9190611d5c565b6108a8565b60405161031f9190611db7565b60405180910390f35b34801561033457600080fd5b5061034f600480360381019061034a9190611ef2565b6108df565b005b34801561035d57600080fd5b506103666108f3565b6040516103739190611f7e565b60405180910390f35b34801561038857600080fd5b506103a3600480360381019061039e9190611f99565b610919565b6040516103b09190611db7565b60405180910390f35b3480156103c557600080fd5b506103e060048036038101906103db9190611ef2565b610939565b005b3480156103ee57600080fd5b5061040960048036038101906104049190611f99565b6109c8565b6040516104169190611de1565b60405180910390f35b34801561042b57600080fd5b50610434610a10565b005b34801561044257600080fd5b5061045d60048036038101906104589190611f99565b610a24565b60405161046a9190611db7565b60405180910390f35b34801561047f57600080fd5b5061049a60048036038101906104959190611d5c565b610a44565b005b3480156104a857600080fd5b506104c360048036038101906104be9190611d5c565b610a64565b005b3480156104d157600080fd5b506104da610b64565b6040516104e79190611fd5565b60405180910390f35b3480156104fc57600080fd5b50610505610b8e565b6040516105129190611fd5565b60405180910390f35b34801561052757600080fd5b50610530610bb4565b60405161053d9190611ca1565b60405180910390f35b34801561055257600080fd5b5061056d60048036038101906105689190611d5c565b610c46565b60405161057a9190611db7565b60405180910390f35b34801561058f57600080fd5b506105aa60048036038101906105a59190611d5c565b610cbd565b6040516105b79190611db7565b60405180910390f35b3480156105cc57600080fd5b506105d5610ce0565b6040516105e29190611de1565b60405180910390f35b3480156105f757600080fd5b50610612600480360381019061060d9190611e7b565b610ce6565b005b34801561062057600080fd5b5061063b60048036038101906106369190611ef2565b610d97565b005b34801561064957600080fd5b50610664600480360381019061065f9190611f99565b610de0565b6040516106719190611de1565b60405180910390f35b34801561068657600080fd5b506106a1600480360381019061069c9190611ff0565b610df8565b6040516106ae9190611de1565b60405180910390f35b3480156106c357600080fd5b506106de60048036038101906106d99190611f99565b610e7f565b005b3480156106ec57600080fd5b506106f5610f02565b6040516107029190611de1565b60405180910390f35b60606003805461071a9061205f565b80601f01602080910402602001604051908101604052809291908181526020018280546107469061205f565b80156107935780601f1061076857610100808354040283529160200191610793565b820191906000526020600020905b81548152906001019060200180831161077657829003601f168201915b5050505050905090565b6000806107a8610f12565b90506107b5818585610f1a565b600191505092915050565b6000600254905090565b6000806107d5610f12565b90506107e28582856110e3565b6107ed85858561116f565b60019150509392505050565b6108016113e5565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610891576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161088890612102565b60405180910390fd5b61089b8282611463565b5050565b60006012905090565b6000806108b3610f12565b90506108d48185856108c58589610df8565b6108cf9190612151565b610f1a565b600191505092915050565b6108f06108ea610f12565b8261151e565b50565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60096020528060005260406000206000915054906101000a900460ff1681565b6109416113e5565b62093a80811115610987576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161097e906121f7565b60405180910390fd5b80600c819055507f07583f92fee444c67f59bbc03e68bfda63fc2e087769ccc4f2b40360336a5467816040516109bd9190611de1565b60405180910390a150565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610a186113e5565b610a2260006116eb565b565b60086020528060005260406000206000915054906101000a900460ff1681565b610a5682610a50610f12565b836110e3565b610a60828261151e565b5050565b610a6c6113e5565b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610ada576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ad190612289565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb610afe610b64565b836040518363ffffffff1660e01b8152600401610b1c9291906122a9565b6020604051808303816000875af1158015610b3b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b5f91906122e7565b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060048054610bc39061205f565b80601f0160208091040260200160405190810160405280929190818152602001828054610bef9061205f565b8015610c3c5780601f10610c1157610100808354040283529160200191610c3c565b820191906000526020600020905b815481529060010190602001808311610c1f57829003601f168201915b5050505050905090565b600080610c51610f12565b90506000610c5f8286610df8565b905083811015610ca4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9b90612386565b60405180910390fd5b610cb18286868403610f1a565b60019250505092915050565b600080610cc8610f12565b9050610cd581858561116f565b600191505092915050565b600a5481565b610cee6113e5565b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f4b89c347592b1d537e066cb4ed98d87696ae35164745d7e370e4add16941dc9282604051610d8b9190611db7565b60405180910390a25050565b610d9f6113e5565b80600a819055507f4b39c36d20c57d220f61fd25c4349d4435cc03ef6c2a680942f15333c3c3e00181604051610dd59190611de1565b60405180910390a150565b600b6020528060005260406000206000915090505481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610e876113e5565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610ef6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eed90612418565b60405180910390fd5b610eff816116eb565b50565b600c5481565b505050565b505050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610f89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f80906124aa565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610ff8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fef9061253c565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516110d69190611de1565b60405180910390a3505050565b60006110ef8484610df8565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611169578181101561115b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611152906125a8565b60405180910390fd5b6111688484848403610f1a565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036111de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d59061263a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361124d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611244906126cc565b60405180910390fd5b6112588383836117b1565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156112de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d59061275e565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516113cc9190611de1565b60405180910390a36113df848484611983565b50505050565b6113ed610f12565b73ffffffffffffffffffffffffffffffffffffffff1661140b610b64565b73ffffffffffffffffffffffffffffffffffffffff1614611461576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611458906127ca565b60405180910390fd5b565b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080156114cc576114cb826001610ce6565b5b8173ffffffffffffffffffffffffffffffffffffffff167f911aa18ddbbbc33c9b4c704a71bdaa0984b0aa2e82726a7f51e64bad0b0a8455826040516115129190611db7565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361158d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115849061285c565b60405180910390fd5b611599826000836117b1565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561161f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611616906128ee565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008282540392505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516116d29190611de1565b60405180910390a36116e683600084611983565b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166118925742600c54600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546118509190612151565b1115611891576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188890612980565b60405180910390fd5b5b600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166119735742600c54600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546119319190612151565b1115611972576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196990612a12565b60405180910390fd5b5b61197e838383610f08565b505050565b600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611a2257600a546119e0836109c8565b1115611a21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1890612aa4565b60405180910390fd5b5b600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015611ac55750600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611b135742600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611c01565b600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015611bb65750600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611c005742600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b611c0c838383610f0d565b505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611c4b578082015181840152602081019050611c30565b60008484015250505050565b6000601f19601f8301169050919050565b6000611c7382611c11565b611c7d8185611c1c565b9350611c8d818560208601611c2d565b611c9681611c57565b840191505092915050565b60006020820190508181036000830152611cbb8184611c68565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611cf382611cc8565b9050919050565b611d0381611ce8565b8114611d0e57600080fd5b50565b600081359050611d2081611cfa565b92915050565b6000819050919050565b611d3981611d26565b8114611d4457600080fd5b50565b600081359050611d5681611d30565b92915050565b60008060408385031215611d7357611d72611cc3565b5b6000611d8185828601611d11565b9250506020611d9285828601611d47565b9150509250929050565b60008115159050919050565b611db181611d9c565b82525050565b6000602082019050611dcc6000830184611da8565b92915050565b611ddb81611d26565b82525050565b6000602082019050611df66000830184611dd2565b92915050565b600080600060608486031215611e1557611e14611cc3565b5b6000611e2386828701611d11565b9350506020611e3486828701611d11565b9250506040611e4586828701611d47565b9150509250925092565b611e5881611d9c565b8114611e6357600080fd5b50565b600081359050611e7581611e4f565b92915050565b60008060408385031215611e9257611e91611cc3565b5b6000611ea085828601611d11565b9250506020611eb185828601611e66565b9150509250929050565b600060ff82169050919050565b611ed181611ebb565b82525050565b6000602082019050611eec6000830184611ec8565b92915050565b600060208284031215611f0857611f07611cc3565b5b6000611f1684828501611d47565b91505092915050565b6000819050919050565b6000611f44611f3f611f3a84611cc8565b611f1f565b611cc8565b9050919050565b6000611f5682611f29565b9050919050565b6000611f6882611f4b565b9050919050565b611f7881611f5d565b82525050565b6000602082019050611f936000830184611f6f565b92915050565b600060208284031215611faf57611fae611cc3565b5b6000611fbd84828501611d11565b91505092915050565b611fcf81611ce8565b82525050565b6000602082019050611fea6000830184611fc6565b92915050565b6000806040838503121561200757612006611cc3565b5b600061201585828601611d11565b925050602061202685828601611d11565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061207757607f821691505b60208210810361208a57612089612030565b5b50919050565b7f44656661756c74526f757465723a2043616e6e6f742072656d6f766520696e6960008201527f7469616c20706169722066726f6d206c69737400000000000000000000000000602082015250565b60006120ec603383611c1c565b91506120f782612090565b604082019050919050565b6000602082019050818103600083015261211b816120df565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061215c82611d26565b915061216783611d26565b925082820190508082111561217f5761217e612122565b5b92915050565b7f416e7469626f743a20547261646520636f6f6c646f776e20746f6f206c6f6e6760008201527f2e00000000000000000000000000000000000000000000000000000000000000602082015250565b60006121e1602183611c1c565b91506121ec82612185565b604082019050919050565b60006020820190508181036000830152612210816121d4565b9050919050565b7f546f6b656e5265636f7665723a2043616e6e6f74207265636f7665722074686960008201527f7320746f6b656e00000000000000000000000000000000000000000000000000602082015250565b6000612273602783611c1c565b915061227e82612217565b604082019050919050565b600060208201905081810360008301526122a281612266565b9050919050565b60006040820190506122be6000830185611fc6565b6122cb6020830184611dd2565b9392505050565b6000815190506122e181611e4f565b92915050565b6000602082840312156122fd576122fc611cc3565b5b600061230b848285016122d2565b91505092915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000612370602583611c1c565b915061237b82612314565b604082019050919050565b6000602082019050818103600083015261239f81612363565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612402602683611c1c565b915061240d826123a6565b604082019050919050565b60006020820190508181036000830152612431816123f5565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000612494602483611c1c565b915061249f82612438565b604082019050919050565b600060208201905081810360008301526124c381612487565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000612526602283611c1c565b9150612531826124ca565b604082019050919050565b6000602082019050818103600083015261255581612519565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000612592601d83611c1c565b915061259d8261255c565b602082019050919050565b600060208201905081810360008301526125c181612585565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000612624602583611c1c565b915061262f826125c8565b604082019050919050565b6000602082019050818103600083015261265381612617565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006126b6602383611c1c565b91506126c18261265a565b604082019050919050565b600060208201905081810360008301526126e5816126a9565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000612748602683611c1c565b9150612753826126ec565b604082019050919050565b600060208201905081810360008301526127778161273b565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006127b4602083611c1c565b91506127bf8261277e565b602082019050919050565b600060208201905081810360008301526127e3816127a7565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000612846602183611c1c565b9150612851826127ea565b604082019050919050565b6000602082019050818103600083015261287581612839565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b60006128d8602283611c1c565b91506128e38261287c565b604082019050919050565b60006020820190508181036000830152612907816128cb565b9050919050565b7f416e7469626f743a205472616e73616374696f6e2073656e646572206973206960008201527f6e20616e74692d626f7420636f6f6c646f776e00000000000000000000000000602082015250565b600061296a603383611c1c565b91506129758261290e565b604082019050919050565b600060208201905081810360008301526129998161295d565b9050919050565b7f416e7469626f743a205472616e73616374696f6e20726563697069656e74206960008201527f7320696e20616e74692d626f7420636f6f6c646f776e00000000000000000000602082015250565b60006129fc603683611c1c565b9150612a07826129a0565b604082019050919050565b60006020820190508181036000830152612a2b816129ef565b9050919050565b7f4d617857616c6c65743a2043616e6e6f7420657863656564206d61782077616c60008201527f6c6574206c696d69740000000000000000000000000000000000000000000000602082015250565b6000612a8e602983611c1c565b9150612a9982612a32565b604082019050919050565b60006020820190508181036000830152612abd81612a81565b905091905056fea2646970667358221220feecb6e7377fc55546e514e6d9fbe8695d0aa0b487d3e642af0cc42dcfb4c61b64736f6c63430008120033

Deployed Bytecode

0x6080604052600436106101bb5760003560e01c806379cc6790116100ec578063aa4bde281161008a578063c26d7be011610064578063c26d7be01461063d578063dd62ed3e1461067a578063f2fde38b146106b7578063fd116019146106e0576101c2565b8063aa4bde28146105c0578063c0a904a2146105eb578063c18bc19514610614576101c2565b80638fffabed116100c65780638fffabed146104f057806395d89b411461051b578063a457c2d714610546578063a9059cbb14610583576101c2565b806379cc6790146104735780638980f11f1461049c5780638da5cb5b146104c5576101c2565b806342966c68116101595780636a3e8f3d116101335780636a3e8f3d146103b957806370a08231146103e2578063715018a61461041f5780637685655714610436576101c2565b806342966c6814610328578063502f7446146103515780635cce86cd1461037c576101c2565b806323b872dd1161019557806323b872dd1461025a5780632d99d32e14610297578063313ce567146102c057806339509351146102eb576101c2565b806306fdde03146101c7578063095ea7b3146101f257806318160ddd1461022f576101c2565b366101c257005b600080fd5b3480156101d357600080fd5b506101dc61070b565b6040516101e99190611ca1565b60405180910390f35b3480156101fe57600080fd5b5061021960048036038101906102149190611d5c565b61079d565b6040516102269190611db7565b60405180910390f35b34801561023b57600080fd5b506102446107c0565b6040516102519190611de1565b60405180910390f35b34801561026657600080fd5b50610281600480360381019061027c9190611dfc565b6107ca565b60405161028e9190611db7565b60405180910390f35b3480156102a357600080fd5b506102be60048036038101906102b99190611e7b565b6107f9565b005b3480156102cc57600080fd5b506102d561089f565b6040516102e29190611ed7565b60405180910390f35b3480156102f757600080fd5b50610312600480360381019061030d9190611d5c565b6108a8565b60405161031f9190611db7565b60405180910390f35b34801561033457600080fd5b5061034f600480360381019061034a9190611ef2565b6108df565b005b34801561035d57600080fd5b506103666108f3565b6040516103739190611f7e565b60405180910390f35b34801561038857600080fd5b506103a3600480360381019061039e9190611f99565b610919565b6040516103b09190611db7565b60405180910390f35b3480156103c557600080fd5b506103e060048036038101906103db9190611ef2565b610939565b005b3480156103ee57600080fd5b5061040960048036038101906104049190611f99565b6109c8565b6040516104169190611de1565b60405180910390f35b34801561042b57600080fd5b50610434610a10565b005b34801561044257600080fd5b5061045d60048036038101906104589190611f99565b610a24565b60405161046a9190611db7565b60405180910390f35b34801561047f57600080fd5b5061049a60048036038101906104959190611d5c565b610a44565b005b3480156104a857600080fd5b506104c360048036038101906104be9190611d5c565b610a64565b005b3480156104d157600080fd5b506104da610b64565b6040516104e79190611fd5565b60405180910390f35b3480156104fc57600080fd5b50610505610b8e565b6040516105129190611fd5565b60405180910390f35b34801561052757600080fd5b50610530610bb4565b60405161053d9190611ca1565b60405180910390f35b34801561055257600080fd5b5061056d60048036038101906105689190611d5c565b610c46565b60405161057a9190611db7565b60405180910390f35b34801561058f57600080fd5b506105aa60048036038101906105a59190611d5c565b610cbd565b6040516105b79190611db7565b60405180910390f35b3480156105cc57600080fd5b506105d5610ce0565b6040516105e29190611de1565b60405180910390f35b3480156105f757600080fd5b50610612600480360381019061060d9190611e7b565b610ce6565b005b34801561062057600080fd5b5061063b60048036038101906106369190611ef2565b610d97565b005b34801561064957600080fd5b50610664600480360381019061065f9190611f99565b610de0565b6040516106719190611de1565b60405180910390f35b34801561068657600080fd5b506106a1600480360381019061069c9190611ff0565b610df8565b6040516106ae9190611de1565b60405180910390f35b3480156106c357600080fd5b506106de60048036038101906106d99190611f99565b610e7f565b005b3480156106ec57600080fd5b506106f5610f02565b6040516107029190611de1565b60405180910390f35b60606003805461071a9061205f565b80601f01602080910402602001604051908101604052809291908181526020018280546107469061205f565b80156107935780601f1061076857610100808354040283529160200191610793565b820191906000526020600020905b81548152906001019060200180831161077657829003601f168201915b5050505050905090565b6000806107a8610f12565b90506107b5818585610f1a565b600191505092915050565b6000600254905090565b6000806107d5610f12565b90506107e28582856110e3565b6107ed85858561116f565b60019150509392505050565b6108016113e5565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610891576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161088890612102565b60405180910390fd5b61089b8282611463565b5050565b60006012905090565b6000806108b3610f12565b90506108d48185856108c58589610df8565b6108cf9190612151565b610f1a565b600191505092915050565b6108f06108ea610f12565b8261151e565b50565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60096020528060005260406000206000915054906101000a900460ff1681565b6109416113e5565b62093a80811115610987576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161097e906121f7565b60405180910390fd5b80600c819055507f07583f92fee444c67f59bbc03e68bfda63fc2e087769ccc4f2b40360336a5467816040516109bd9190611de1565b60405180910390a150565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610a186113e5565b610a2260006116eb565b565b60086020528060005260406000206000915054906101000a900460ff1681565b610a5682610a50610f12565b836110e3565b610a60828261151e565b5050565b610a6c6113e5565b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610ada576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ad190612289565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb610afe610b64565b836040518363ffffffff1660e01b8152600401610b1c9291906122a9565b6020604051808303816000875af1158015610b3b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b5f91906122e7565b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060048054610bc39061205f565b80601f0160208091040260200160405190810160405280929190818152602001828054610bef9061205f565b8015610c3c5780601f10610c1157610100808354040283529160200191610c3c565b820191906000526020600020905b815481529060010190602001808311610c1f57829003601f168201915b5050505050905090565b600080610c51610f12565b90506000610c5f8286610df8565b905083811015610ca4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9b90612386565b60405180910390fd5b610cb18286868403610f1a565b60019250505092915050565b600080610cc8610f12565b9050610cd581858561116f565b600191505092915050565b600a5481565b610cee6113e5565b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f4b89c347592b1d537e066cb4ed98d87696ae35164745d7e370e4add16941dc9282604051610d8b9190611db7565b60405180910390a25050565b610d9f6113e5565b80600a819055507f4b39c36d20c57d220f61fd25c4349d4435cc03ef6c2a680942f15333c3c3e00181604051610dd59190611de1565b60405180910390a150565b600b6020528060005260406000206000915090505481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610e876113e5565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610ef6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eed90612418565b60405180910390fd5b610eff816116eb565b50565b600c5481565b505050565b505050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610f89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f80906124aa565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610ff8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fef9061253c565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516110d69190611de1565b60405180910390a3505050565b60006110ef8484610df8565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611169578181101561115b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611152906125a8565b60405180910390fd5b6111688484848403610f1a565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036111de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d59061263a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361124d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611244906126cc565b60405180910390fd5b6112588383836117b1565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156112de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d59061275e565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516113cc9190611de1565b60405180910390a36113df848484611983565b50505050565b6113ed610f12565b73ffffffffffffffffffffffffffffffffffffffff1661140b610b64565b73ffffffffffffffffffffffffffffffffffffffff1614611461576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611458906127ca565b60405180910390fd5b565b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080156114cc576114cb826001610ce6565b5b8173ffffffffffffffffffffffffffffffffffffffff167f911aa18ddbbbc33c9b4c704a71bdaa0984b0aa2e82726a7f51e64bad0b0a8455826040516115129190611db7565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361158d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115849061285c565b60405180910390fd5b611599826000836117b1565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561161f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611616906128ee565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008282540392505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516116d29190611de1565b60405180910390a36116e683600084611983565b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166118925742600c54600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546118509190612151565b1115611891576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188890612980565b60405180910390fd5b5b600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166119735742600c54600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546119319190612151565b1115611972576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196990612a12565b60405180910390fd5b5b61197e838383610f08565b505050565b600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611a2257600a546119e0836109c8565b1115611a21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1890612aa4565b60405180910390fd5b5b600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015611ac55750600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611b135742600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611c01565b600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015611bb65750600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611c005742600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b611c0c838383610f0d565b505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611c4b578082015181840152602081019050611c30565b60008484015250505050565b6000601f19601f8301169050919050565b6000611c7382611c11565b611c7d8185611c1c565b9350611c8d818560208601611c2d565b611c9681611c57565b840191505092915050565b60006020820190508181036000830152611cbb8184611c68565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611cf382611cc8565b9050919050565b611d0381611ce8565b8114611d0e57600080fd5b50565b600081359050611d2081611cfa565b92915050565b6000819050919050565b611d3981611d26565b8114611d4457600080fd5b50565b600081359050611d5681611d30565b92915050565b60008060408385031215611d7357611d72611cc3565b5b6000611d8185828601611d11565b9250506020611d9285828601611d47565b9150509250929050565b60008115159050919050565b611db181611d9c565b82525050565b6000602082019050611dcc6000830184611da8565b92915050565b611ddb81611d26565b82525050565b6000602082019050611df66000830184611dd2565b92915050565b600080600060608486031215611e1557611e14611cc3565b5b6000611e2386828701611d11565b9350506020611e3486828701611d11565b9250506040611e4586828701611d47565b9150509250925092565b611e5881611d9c565b8114611e6357600080fd5b50565b600081359050611e7581611e4f565b92915050565b60008060408385031215611e9257611e91611cc3565b5b6000611ea085828601611d11565b9250506020611eb185828601611e66565b9150509250929050565b600060ff82169050919050565b611ed181611ebb565b82525050565b6000602082019050611eec6000830184611ec8565b92915050565b600060208284031215611f0857611f07611cc3565b5b6000611f1684828501611d47565b91505092915050565b6000819050919050565b6000611f44611f3f611f3a84611cc8565b611f1f565b611cc8565b9050919050565b6000611f5682611f29565b9050919050565b6000611f6882611f4b565b9050919050565b611f7881611f5d565b82525050565b6000602082019050611f936000830184611f6f565b92915050565b600060208284031215611faf57611fae611cc3565b5b6000611fbd84828501611d11565b91505092915050565b611fcf81611ce8565b82525050565b6000602082019050611fea6000830184611fc6565b92915050565b6000806040838503121561200757612006611cc3565b5b600061201585828601611d11565b925050602061202685828601611d11565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061207757607f821691505b60208210810361208a57612089612030565b5b50919050565b7f44656661756c74526f757465723a2043616e6e6f742072656d6f766520696e6960008201527f7469616c20706169722066726f6d206c69737400000000000000000000000000602082015250565b60006120ec603383611c1c565b91506120f782612090565b604082019050919050565b6000602082019050818103600083015261211b816120df565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061215c82611d26565b915061216783611d26565b925082820190508082111561217f5761217e612122565b5b92915050565b7f416e7469626f743a20547261646520636f6f6c646f776e20746f6f206c6f6e6760008201527f2e00000000000000000000000000000000000000000000000000000000000000602082015250565b60006121e1602183611c1c565b91506121ec82612185565b604082019050919050565b60006020820190508181036000830152612210816121d4565b9050919050565b7f546f6b656e5265636f7665723a2043616e6e6f74207265636f7665722074686960008201527f7320746f6b656e00000000000000000000000000000000000000000000000000602082015250565b6000612273602783611c1c565b915061227e82612217565b604082019050919050565b600060208201905081810360008301526122a281612266565b9050919050565b60006040820190506122be6000830185611fc6565b6122cb6020830184611dd2565b9392505050565b6000815190506122e181611e4f565b92915050565b6000602082840312156122fd576122fc611cc3565b5b600061230b848285016122d2565b91505092915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000612370602583611c1c565b915061237b82612314565b604082019050919050565b6000602082019050818103600083015261239f81612363565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612402602683611c1c565b915061240d826123a6565b604082019050919050565b60006020820190508181036000830152612431816123f5565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000612494602483611c1c565b915061249f82612438565b604082019050919050565b600060208201905081810360008301526124c381612487565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000612526602283611c1c565b9150612531826124ca565b604082019050919050565b6000602082019050818103600083015261255581612519565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000612592601d83611c1c565b915061259d8261255c565b602082019050919050565b600060208201905081810360008301526125c181612585565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000612624602583611c1c565b915061262f826125c8565b604082019050919050565b6000602082019050818103600083015261265381612617565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006126b6602383611c1c565b91506126c18261265a565b604082019050919050565b600060208201905081810360008301526126e5816126a9565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000612748602683611c1c565b9150612753826126ec565b604082019050919050565b600060208201905081810360008301526127778161273b565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006127b4602083611c1c565b91506127bf8261277e565b602082019050919050565b600060208201905081810360008301526127e3816127a7565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000612846602183611c1c565b9150612851826127ea565b604082019050919050565b6000602082019050818103600083015261287581612839565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b60006128d8602283611c1c565b91506128e38261287c565b604082019050919050565b60006020820190508181036000830152612907816128cb565b9050919050565b7f416e7469626f743a205472616e73616374696f6e2073656e646572206973206960008201527f6e20616e74692d626f7420636f6f6c646f776e00000000000000000000000000602082015250565b600061296a603383611c1c565b91506129758261290e565b604082019050919050565b600060208201905081810360008301526129998161295d565b9050919050565b7f416e7469626f743a205472616e73616374696f6e20726563697069656e74206960008201527f7320696e20616e74692d626f7420636f6f6c646f776e00000000000000000000602082015250565b60006129fc603683611c1c565b9150612a07826129a0565b604082019050919050565b60006020820190508181036000830152612a2b816129ef565b9050919050565b7f4d617857616c6c65743a2043616e6e6f7420657863656564206d61782077616c60008201527f6c6574206c696d69740000000000000000000000000000000000000000000000602082015250565b6000612a8e602983611c1c565b9150612a9982612a32565b604082019050919050565b60006020820190508181036000830152612abd81612a81565b905091905056fea2646970667358221220feecb6e7377fc55546e514e6d9fbe8695d0aa0b487d3e642af0cc42dcfb4c61b64736f6c63430008120033

Deployed Bytecode Sourcemap

29189:4043:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6018:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8369:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7138:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9150:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31016:199;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30575:85;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9854:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17585:91;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29271:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29390:53;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31863:304;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7309:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19891:103;;;;;;;;;;;;;:::i;:::-;;29340:41;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17995:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20759:236;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19243:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29312:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6237:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10595:436;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7642:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29452:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31459:195;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31662:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29491:45;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7898:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20149:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29543:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6018:100;6072:13;6105:5;6098:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6018:100;:::o;8369:201::-;8452:4;8469:13;8485:12;:10;:12::i;:::-;8469:28;;8508:32;8517:5;8524:7;8533:6;8508:8;:32::i;:::-;8558:4;8551:11;;;8369:201;;;;:::o;7138:108::-;7199:7;7226:12;;7219:19;;7138:108;:::o;9150:295::-;9281:4;9298:15;9316:12;:10;:12::i;:::-;9298:30;;9339:38;9355:4;9361:7;9370:6;9339:15;:38::i;:::-;9388:27;9398:4;9404:2;9408:6;9388:9;:27::i;:::-;9433:4;9426:11;;;9150:295;;;;;:::o;31016:199::-;19129:13;:11;:13::i;:::-;31107:6:::1;;;;;;;;;;;31099:14;;:4;:14;;::::0;31091:78:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;31182:25;31194:4;31200:6;31182:11;:25::i;:::-;31016:199:::0;;:::o;30575:85::-;30625:5;30650:2;30643:9;;30575:85;:::o;9854:238::-;9942:4;9959:13;9975:12;:10;:12::i;:::-;9959:28;;9998:64;10007:5;10014:7;10051:10;10023:25;10033:5;10040:7;10023:9;:25::i;:::-;:38;;;;:::i;:::-;9998:8;:64::i;:::-;10080:4;10073:11;;;9854:238;;;;:::o;17585:91::-;17641:27;17647:12;:10;:12::i;:::-;17661:6;17641:5;:27::i;:::-;17585:91;:::o;29271:34::-;;;;;;;;;;;;;:::o;29390:53::-;;;;;;;;;;;;;;;;;;;;;;:::o;31863:304::-;19129:13;:11;:13::i;:::-;31982:6:::1;31960:18;:28;;31952:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;32071:18;32051:17;:38;;;;32115:44;32140:18;32115:44;;;;;;:::i;:::-;;;;;;;;31863:304:::0;:::o;7309:127::-;7383:7;7410:9;:18;7420:7;7410:18;;;;;;;;;;;;;;;;7403:25;;7309:127;;;:::o;19891:103::-;19129:13;:11;:13::i;:::-;19956:30:::1;19983:1;19956:18;:30::i;:::-;19891:103::o:0;29340:41::-;;;;;;;;;;;;;;;;;;;;;;:::o;17995:164::-;18072:46;18088:7;18097:12;:10;:12::i;:::-;18111:6;18072:15;:46::i;:::-;18129:22;18135:7;18144:6;18129:5;:22::i;:::-;17995:164;;:::o;20759:236::-;19129:13;:11;:13::i;:::-;20879:4:::1;20855:29;;:12;:29;;::::0;20847:81:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;20948:12;20941:29;;;20971:7;:5;:7::i;:::-;20980:6;20941:46;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;20759:236:::0;;:::o;19243:87::-;19289:7;19316:6;;;;;;;;;;;19309:13;;19243:87;:::o;29312:21::-;;;;;;;;;;;;;:::o;6237:104::-;6293:13;6326:7;6319:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6237:104;:::o;10595:436::-;10688:4;10705:13;10721:12;:10;:12::i;:::-;10705:28;;10744:24;10771:25;10781:5;10788:7;10771:9;:25::i;:::-;10744:52;;10835:15;10815:16;:35;;10807:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;10928:60;10937:5;10944:7;10972:15;10953:16;:34;10928:8;:60::i;:::-;11019:4;11012:11;;;;10595:436;;;;:::o;7642:193::-;7721:4;7738:13;7754:12;:10;:12::i;:::-;7738:28;;7777;7787:5;7794:2;7798:6;7777:9;:28::i;:::-;7823:4;7816:11;;;7642:193;;;;:::o;29452:30::-;;;;:::o;31459:195::-;19129:13;:11;:13::i;:::-;31580:10:::1;31548:20;:29;31569:7;31548:29;;;;;;;;;;;;;;;;:42;;;;;;;;;;;;;;;;;;31626:7;31608:38;;;31635:10;31608:38;;;;;;:::i;:::-;;;;;;;;31459:195:::0;;:::o;31662:193::-;19129:13;:11;:13::i;:::-;31765:16:::1;31747:15;:34;;;;31807:40;31830:16;31807:40;;;;;;:::i;:::-;;;;;;;;31662:193:::0;:::o;29491:45::-;;;;;;;;;;;;;;;;;:::o;7898:151::-;7987:7;8014:11;:18;8026:5;8014:18;;;;;;;;;;;;;;;:27;8033:7;8014:27;;;;;;;;;;;;;;;;8007:34;;7898:151;;;;:::o;20149:201::-;19129:13;:11;:13::i;:::-;20258:1:::1;20238:22;;:8;:22;;::::0;20230:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;20314:28;20333:8;20314:18;:28::i;:::-;20149:201:::0;:::o;29543:32::-;;;;:::o;16346:125::-;;;;:::o;17075:124::-;;;;:::o;1767:98::-;1820:7;1847:10;1840:17;;1767:98;:::o;14622:380::-;14775:1;14758:19;;:5;:19;;;14750:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14856:1;14837:21;;:7;:21;;;14829:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14940:6;14910:11;:18;14922:5;14910:18;;;;;;;;;;;;;;;:27;14929:7;14910:27;;;;;;;;;;;;;;;:36;;;;14978:7;14962:32;;14971:5;14962:32;;;14987:6;14962:32;;;;;;:::i;:::-;;;;;;;;14622:380;;;:::o;15293:453::-;15428:24;15455:25;15465:5;15472:7;15455:9;:25::i;:::-;15428:52;;15515:17;15495:16;:37;15491:248;;15577:6;15557:16;:26;;15549:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15661:51;15670:5;15677:7;15705:6;15686:16;:25;15661:8;:51::i;:::-;15491:248;15417:329;15293:453;;;:::o;11501:840::-;11648:1;11632:18;;:4;:18;;;11624:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11725:1;11711:16;;:2;:16;;;11703:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;11780:38;11801:4;11807:2;11811:6;11780:20;:38::i;:::-;11831:19;11853:9;:15;11863:4;11853:15;;;;;;;;;;;;;;;;11831:37;;11902:6;11887:11;:21;;11879:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;12019:6;12005:11;:20;11987:9;:15;11997:4;11987:15;;;;;;;;;;;;;;;:38;;;;12222:6;12205:9;:13;12215:2;12205:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;12272:2;12257:26;;12266:4;12257:26;;;12276:6;12257:26;;;;;;:::i;:::-;;;;;;;;12296:37;12316:4;12322:2;12326:6;12296:19;:37::i;:::-;11613:728;11501:840;;;:::o;19408:132::-;19483:12;:10;:12::i;:::-;19472:23;;:7;:5;:7::i;:::-;:23;;;19464:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19408:132::o;31223:228::-;31307:6;31290:8;:14;31299:4;31290:14;;;;;;;;;;;;;;;;:23;;;;;;;;;;;;;;;;;;31330:6;31326:71;;;31354:29;31372:4;31378;31354:17;:29::i;:::-;31326:71;31430:4;31414:29;;;31436:6;31414:29;;;;;;:::i;:::-;;;;;;;;31223:228;;:::o;13509:675::-;13612:1;13593:21;;:7;:21;;;13585:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;13665:49;13686:7;13703:1;13707:6;13665:20;:49::i;:::-;13727:22;13752:9;:18;13762:7;13752:18;;;;;;;;;;;;;;;;13727:43;;13807:6;13789:14;:24;;13781:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;13926:6;13909:14;:23;13888:9;:18;13898:7;13888:18;;;;;;;;;;;;;;;:44;;;;14043:6;14027:12;;:22;;;;;;;;;;;14104:1;14078:37;;14087:7;14078:37;;;14108:6;14078:37;;;;;;:::i;:::-;;;;;;;;14128:48;14148:7;14165:1;14169:6;14128:19;:48::i;:::-;13574:610;13509:675;;:::o;20510:191::-;20584:16;20603:6;;;;;;;;;;;20584:25;;20629:8;20620:6;;:17;;;;;;;;;;;;;;;;;;20684:8;20653:40;;20674:8;20653:40;;;;;;;;;;;;20573:128;20510:191;:::o;32175:525::-;32303:20;:26;32324:4;32303:26;;;;;;;;;;;;;;;;;;;;;;;;;32299:163;;32391:15;32370:17;;32352:9;:15;32362:4;32352:15;;;;;;;;;;;;;;;;:35;;;;:::i;:::-;:54;;32344:118;;;;;;;;;;;;:::i;:::-;;;;;;;;;32299:163;32477:20;:24;32498:2;32477:24;;;;;;;;;;;;;;;;;;;;;;;;;32473:162;;32561:15;32540:17;;32524:9;:13;32534:2;32524:13;;;;;;;;;;;;;;;;:33;;;;:::i;:::-;:52;;32516:119;;;;;;;;;;;;:::i;:::-;;;;;;;;;32473:162;32648:44;32675:4;32681:2;32685:6;32648:26;:44::i;:::-;32175:525;;;:::o;32708:521::-;32836:20;:24;32857:2;32836:24;;;;;;;;;;;;;;;;;;;;;;;;;32831:144;;32902:15;;32885:13;32895:2;32885:9;:13::i;:::-;:32;;32877:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;32831:144;32991:8;:14;33000:4;32991:14;;;;;;;;;;;;;;;;;;;;;;;;;:43;;;;;33010:20;:24;33031:2;33010:24;;;;;;;;;;;;;;;;;;;;;;;;;33009:25;32991:43;32987:178;;;33052:15;33036:9;:13;33046:2;33036:13;;;;;;;;;;;;;;;:31;;;;32987:178;;;33087:8;:12;33096:2;33087:12;;;;;;;;;;;;;;;;;;;;;;;;;:43;;;;;33104:20;:26;33125:4;33104:26;;;;;;;;;;;;;;;;;;;;;;;;;33103:27;33087:43;33083:82;;;33150:15;33132:9;:15;33142:4;33132:15;;;;;;;;;;;;;;;:33;;;;33083:82;32987:178;33178:43;33204:4;33210:2;33214:6;33178:25;:43::i;:::-;32708:521;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:118::-;3533:24;3551:5;3533:24;:::i;:::-;3528:3;3521:37;3446:118;;:::o;3570:222::-;3663:4;3701:2;3690:9;3686:18;3678:26;;3714:71;3782:1;3771:9;3767:17;3758:6;3714:71;:::i;:::-;3570:222;;;;:::o;3798:619::-;3875:6;3883;3891;3940:2;3928:9;3919:7;3915:23;3911:32;3908:119;;;3946:79;;:::i;:::-;3908:119;4066:1;4091:53;4136:7;4127:6;4116:9;4112:22;4091:53;:::i;:::-;4081:63;;4037:117;4193:2;4219:53;4264:7;4255:6;4244:9;4240:22;4219:53;:::i;:::-;4209:63;;4164:118;4321:2;4347:53;4392:7;4383:6;4372:9;4368:22;4347:53;:::i;:::-;4337:63;;4292:118;3798:619;;;;;:::o;4423:116::-;4493:21;4508:5;4493:21;:::i;:::-;4486:5;4483:32;4473:60;;4529:1;4526;4519:12;4473:60;4423:116;:::o;4545:133::-;4588:5;4626:6;4613:20;4604:29;;4642:30;4666:5;4642:30;:::i;:::-;4545:133;;;;:::o;4684:468::-;4749:6;4757;4806:2;4794:9;4785:7;4781:23;4777:32;4774:119;;;4812:79;;:::i;:::-;4774:119;4932:1;4957:53;5002:7;4993:6;4982:9;4978:22;4957:53;:::i;:::-;4947:63;;4903:117;5059:2;5085:50;5127:7;5118:6;5107:9;5103:22;5085:50;:::i;:::-;5075:60;;5030:115;4684:468;;;;;:::o;5158:86::-;5193:7;5233:4;5226:5;5222:16;5211:27;;5158:86;;;:::o;5250:112::-;5333:22;5349:5;5333:22;:::i;:::-;5328:3;5321:35;5250:112;;:::o;5368:214::-;5457:4;5495:2;5484:9;5480:18;5472:26;;5508:67;5572:1;5561:9;5557:17;5548:6;5508:67;:::i;:::-;5368:214;;;;:::o;5588:329::-;5647:6;5696:2;5684:9;5675:7;5671:23;5667:32;5664:119;;;5702:79;;:::i;:::-;5664:119;5822:1;5847:53;5892:7;5883:6;5872:9;5868:22;5847:53;:::i;:::-;5837:63;;5793:117;5588:329;;;;:::o;5923:60::-;5951:3;5972:5;5965:12;;5923:60;;;:::o;5989:142::-;6039:9;6072:53;6090:34;6099:24;6117:5;6099:24;:::i;:::-;6090:34;:::i;:::-;6072:53;:::i;:::-;6059:66;;5989:142;;;:::o;6137:126::-;6187:9;6220:37;6251:5;6220:37;:::i;:::-;6207:50;;6137:126;;;:::o;6269:153::-;6346:9;6379:37;6410:5;6379:37;:::i;:::-;6366:50;;6269:153;;;:::o;6428:185::-;6542:64;6600:5;6542:64;:::i;:::-;6537:3;6530:77;6428:185;;:::o;6619:276::-;6739:4;6777:2;6766:9;6762:18;6754:26;;6790:98;6885:1;6874:9;6870:17;6861:6;6790:98;:::i;:::-;6619:276;;;;:::o;6901:329::-;6960:6;7009:2;6997:9;6988:7;6984:23;6980:32;6977:119;;;7015:79;;:::i;:::-;6977:119;7135:1;7160:53;7205:7;7196:6;7185:9;7181:22;7160:53;:::i;:::-;7150:63;;7106:117;6901:329;;;;:::o;7236:118::-;7323:24;7341:5;7323:24;:::i;:::-;7318:3;7311:37;7236:118;;:::o;7360:222::-;7453:4;7491:2;7480:9;7476:18;7468:26;;7504:71;7572:1;7561:9;7557:17;7548:6;7504:71;:::i;:::-;7360:222;;;;:::o;7588:474::-;7656:6;7664;7713:2;7701:9;7692:7;7688:23;7684:32;7681:119;;;7719:79;;:::i;:::-;7681:119;7839:1;7864:53;7909:7;7900:6;7889:9;7885:22;7864:53;:::i;:::-;7854:63;;7810:117;7966:2;7992:53;8037:7;8028:6;8017:9;8013:22;7992:53;:::i;:::-;7982:63;;7937:118;7588:474;;;;;:::o;8068:180::-;8116:77;8113:1;8106:88;8213:4;8210:1;8203:15;8237:4;8234:1;8227:15;8254:320;8298:6;8335:1;8329:4;8325:12;8315:22;;8382:1;8376:4;8372:12;8403:18;8393:81;;8459:4;8451:6;8447:17;8437:27;;8393:81;8521:2;8513:6;8510:14;8490:18;8487:38;8484:84;;8540:18;;:::i;:::-;8484:84;8305:269;8254:320;;;:::o;8580:238::-;8720:34;8716:1;8708:6;8704:14;8697:58;8789:21;8784:2;8776:6;8772:15;8765:46;8580:238;:::o;8824:366::-;8966:3;8987:67;9051:2;9046:3;8987:67;:::i;:::-;8980:74;;9063:93;9152:3;9063:93;:::i;:::-;9181:2;9176:3;9172:12;9165:19;;8824:366;;;:::o;9196:419::-;9362:4;9400:2;9389:9;9385:18;9377:26;;9449:9;9443:4;9439:20;9435:1;9424:9;9420:17;9413:47;9477:131;9603:4;9477:131;:::i;:::-;9469:139;;9196:419;;;:::o;9621:180::-;9669:77;9666:1;9659:88;9766:4;9763:1;9756:15;9790:4;9787:1;9780:15;9807:191;9847:3;9866:20;9884:1;9866:20;:::i;:::-;9861:25;;9900:20;9918:1;9900:20;:::i;:::-;9895:25;;9943:1;9940;9936:9;9929:16;;9964:3;9961:1;9958:10;9955:36;;;9971:18;;:::i;:::-;9955:36;9807:191;;;;:::o;10004:220::-;10144:34;10140:1;10132:6;10128:14;10121:58;10213:3;10208:2;10200:6;10196:15;10189:28;10004:220;:::o;10230:366::-;10372:3;10393:67;10457:2;10452:3;10393:67;:::i;:::-;10386:74;;10469:93;10558:3;10469:93;:::i;:::-;10587:2;10582:3;10578:12;10571:19;;10230:366;;;:::o;10602:419::-;10768:4;10806:2;10795:9;10791:18;10783:26;;10855:9;10849:4;10845:20;10841:1;10830:9;10826:17;10819:47;10883:131;11009:4;10883:131;:::i;:::-;10875:139;;10602:419;;;:::o;11027:226::-;11167:34;11163:1;11155:6;11151:14;11144:58;11236:9;11231:2;11223:6;11219:15;11212:34;11027:226;:::o;11259:366::-;11401:3;11422:67;11486:2;11481:3;11422:67;:::i;:::-;11415:74;;11498:93;11587:3;11498:93;:::i;:::-;11616:2;11611:3;11607:12;11600:19;;11259:366;;;:::o;11631:419::-;11797:4;11835:2;11824:9;11820:18;11812:26;;11884:9;11878:4;11874:20;11870:1;11859:9;11855:17;11848:47;11912:131;12038:4;11912:131;:::i;:::-;11904:139;;11631:419;;;:::o;12056:332::-;12177:4;12215:2;12204:9;12200:18;12192:26;;12228:71;12296:1;12285:9;12281:17;12272:6;12228:71;:::i;:::-;12309:72;12377:2;12366:9;12362:18;12353:6;12309:72;:::i;:::-;12056:332;;;;;:::o;12394:137::-;12448:5;12479:6;12473:13;12464:22;;12495:30;12519:5;12495:30;:::i;:::-;12394:137;;;;:::o;12537:345::-;12604:6;12653:2;12641:9;12632:7;12628:23;12624:32;12621:119;;;12659:79;;:::i;:::-;12621:119;12779:1;12804:61;12857:7;12848:6;12837:9;12833:22;12804:61;:::i;:::-;12794:71;;12750:125;12537:345;;;;:::o;12888:224::-;13028:34;13024:1;13016:6;13012:14;13005:58;13097:7;13092:2;13084:6;13080:15;13073:32;12888:224;:::o;13118:366::-;13260:3;13281:67;13345:2;13340:3;13281:67;:::i;:::-;13274:74;;13357:93;13446:3;13357:93;:::i;:::-;13475:2;13470:3;13466:12;13459:19;;13118:366;;;:::o;13490:419::-;13656:4;13694:2;13683:9;13679:18;13671:26;;13743:9;13737:4;13733:20;13729:1;13718:9;13714:17;13707:47;13771:131;13897:4;13771:131;:::i;:::-;13763:139;;13490:419;;;:::o;13915:225::-;14055:34;14051:1;14043:6;14039:14;14032:58;14124:8;14119:2;14111:6;14107:15;14100:33;13915:225;:::o;14146:366::-;14288:3;14309:67;14373:2;14368:3;14309:67;:::i;:::-;14302:74;;14385:93;14474:3;14385:93;:::i;:::-;14503:2;14498:3;14494:12;14487:19;;14146:366;;;:::o;14518:419::-;14684:4;14722:2;14711:9;14707:18;14699:26;;14771:9;14765:4;14761:20;14757:1;14746:9;14742:17;14735:47;14799:131;14925:4;14799:131;:::i;:::-;14791:139;;14518:419;;;:::o;14943:223::-;15083:34;15079:1;15071:6;15067:14;15060:58;15152:6;15147:2;15139:6;15135:15;15128:31;14943:223;:::o;15172:366::-;15314:3;15335:67;15399:2;15394:3;15335:67;:::i;:::-;15328:74;;15411:93;15500:3;15411:93;:::i;:::-;15529:2;15524:3;15520:12;15513:19;;15172:366;;;:::o;15544:419::-;15710:4;15748:2;15737:9;15733:18;15725:26;;15797:9;15791:4;15787:20;15783:1;15772:9;15768:17;15761:47;15825:131;15951:4;15825:131;:::i;:::-;15817:139;;15544:419;;;:::o;15969:221::-;16109:34;16105:1;16097:6;16093:14;16086:58;16178:4;16173:2;16165:6;16161:15;16154:29;15969:221;:::o;16196:366::-;16338:3;16359:67;16423:2;16418:3;16359:67;:::i;:::-;16352:74;;16435:93;16524:3;16435:93;:::i;:::-;16553:2;16548:3;16544:12;16537:19;;16196:366;;;:::o;16568:419::-;16734:4;16772:2;16761:9;16757:18;16749:26;;16821:9;16815:4;16811:20;16807:1;16796:9;16792:17;16785:47;16849:131;16975:4;16849:131;:::i;:::-;16841:139;;16568:419;;;:::o;16993:179::-;17133:31;17129:1;17121:6;17117:14;17110:55;16993:179;:::o;17178:366::-;17320:3;17341:67;17405:2;17400:3;17341:67;:::i;:::-;17334:74;;17417:93;17506:3;17417:93;:::i;:::-;17535:2;17530:3;17526:12;17519:19;;17178:366;;;:::o;17550:419::-;17716:4;17754:2;17743:9;17739:18;17731:26;;17803:9;17797:4;17793:20;17789:1;17778:9;17774:17;17767:47;17831:131;17957:4;17831:131;:::i;:::-;17823:139;;17550:419;;;:::o;17975:224::-;18115:34;18111:1;18103:6;18099:14;18092:58;18184:7;18179:2;18171:6;18167:15;18160:32;17975:224;:::o;18205:366::-;18347:3;18368:67;18432:2;18427:3;18368:67;:::i;:::-;18361:74;;18444:93;18533:3;18444:93;:::i;:::-;18562:2;18557:3;18553:12;18546:19;;18205:366;;;:::o;18577:419::-;18743:4;18781:2;18770:9;18766:18;18758:26;;18830:9;18824:4;18820:20;18816:1;18805:9;18801:17;18794:47;18858:131;18984:4;18858:131;:::i;:::-;18850:139;;18577:419;;;:::o;19002:222::-;19142:34;19138:1;19130:6;19126:14;19119:58;19211:5;19206:2;19198:6;19194:15;19187:30;19002:222;:::o;19230:366::-;19372:3;19393:67;19457:2;19452:3;19393:67;:::i;:::-;19386:74;;19469:93;19558:3;19469:93;:::i;:::-;19587:2;19582:3;19578:12;19571:19;;19230:366;;;:::o;19602:419::-;19768:4;19806:2;19795:9;19791:18;19783:26;;19855:9;19849:4;19845:20;19841:1;19830:9;19826:17;19819:47;19883:131;20009:4;19883:131;:::i;:::-;19875:139;;19602:419;;;:::o;20027:225::-;20167:34;20163:1;20155:6;20151:14;20144:58;20236:8;20231:2;20223:6;20219:15;20212:33;20027:225;:::o;20258:366::-;20400:3;20421:67;20485:2;20480:3;20421:67;:::i;:::-;20414:74;;20497:93;20586:3;20497:93;:::i;:::-;20615:2;20610:3;20606:12;20599:19;;20258:366;;;:::o;20630:419::-;20796:4;20834:2;20823:9;20819:18;20811:26;;20883:9;20877:4;20873:20;20869:1;20858:9;20854:17;20847:47;20911:131;21037:4;20911:131;:::i;:::-;20903:139;;20630:419;;;:::o;21055:182::-;21195:34;21191:1;21183:6;21179:14;21172:58;21055:182;:::o;21243:366::-;21385:3;21406:67;21470:2;21465:3;21406:67;:::i;:::-;21399:74;;21482:93;21571:3;21482:93;:::i;:::-;21600:2;21595:3;21591:12;21584:19;;21243:366;;;:::o;21615:419::-;21781:4;21819:2;21808:9;21804:18;21796:26;;21868:9;21862:4;21858:20;21854:1;21843:9;21839:17;21832:47;21896:131;22022:4;21896:131;:::i;:::-;21888:139;;21615:419;;;:::o;22040:220::-;22180:34;22176:1;22168:6;22164:14;22157:58;22249:3;22244:2;22236:6;22232:15;22225:28;22040:220;:::o;22266:366::-;22408:3;22429:67;22493:2;22488:3;22429:67;:::i;:::-;22422:74;;22505:93;22594:3;22505:93;:::i;:::-;22623:2;22618:3;22614:12;22607:19;;22266:366;;;:::o;22638:419::-;22804:4;22842:2;22831:9;22827:18;22819:26;;22891:9;22885:4;22881:20;22877:1;22866:9;22862:17;22855:47;22919:131;23045:4;22919:131;:::i;:::-;22911:139;;22638:419;;;:::o;23063:221::-;23203:34;23199:1;23191:6;23187:14;23180:58;23272:4;23267:2;23259:6;23255:15;23248:29;23063:221;:::o;23290:366::-;23432:3;23453:67;23517:2;23512:3;23453:67;:::i;:::-;23446:74;;23529:93;23618:3;23529:93;:::i;:::-;23647:2;23642:3;23638:12;23631:19;;23290:366;;;:::o;23662:419::-;23828:4;23866:2;23855:9;23851:18;23843:26;;23915:9;23909:4;23905:20;23901:1;23890:9;23886:17;23879:47;23943:131;24069:4;23943:131;:::i;:::-;23935:139;;23662:419;;;:::o;24087:238::-;24227:34;24223:1;24215:6;24211:14;24204:58;24296:21;24291:2;24283:6;24279:15;24272:46;24087:238;:::o;24331:366::-;24473:3;24494:67;24558:2;24553:3;24494:67;:::i;:::-;24487:74;;24570:93;24659:3;24570:93;:::i;:::-;24688:2;24683:3;24679:12;24672:19;;24331:366;;;:::o;24703:419::-;24869:4;24907:2;24896:9;24892:18;24884:26;;24956:9;24950:4;24946:20;24942:1;24931:9;24927:17;24920:47;24984:131;25110:4;24984:131;:::i;:::-;24976:139;;24703:419;;;:::o;25128:241::-;25268:34;25264:1;25256:6;25252:14;25245:58;25337:24;25332:2;25324:6;25320:15;25313:49;25128:241;:::o;25375:366::-;25517:3;25538:67;25602:2;25597:3;25538:67;:::i;:::-;25531:74;;25614:93;25703:3;25614:93;:::i;:::-;25732:2;25727:3;25723:12;25716:19;;25375:366;;;:::o;25747:419::-;25913:4;25951:2;25940:9;25936:18;25928:26;;26000:9;25994:4;25990:20;25986:1;25975:9;25971:17;25964:47;26028:131;26154:4;26028:131;:::i;:::-;26020:139;;25747:419;;;:::o;26172:228::-;26312:34;26308:1;26300:6;26296:14;26289:58;26381:11;26376:2;26368:6;26364:15;26357:36;26172:228;:::o;26406:366::-;26548:3;26569:67;26633:2;26628:3;26569:67;:::i;:::-;26562:74;;26645:93;26734:3;26645:93;:::i;:::-;26763:2;26758:3;26754:12;26747:19;;26406:366;;;:::o;26778:419::-;26944:4;26982:2;26971:9;26967:18;26959:26;;27031:9;27025:4;27021:20;27017:1;27006:9;27002:17;26995:47;27059:131;27185:4;27059:131;:::i;:::-;27051:139;;26778:419;;;:::o

Swarm Source

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