ETH Price: $2,398.33 (+3.25%)
Gas: 7.62 Gwei

Token

 

Overview

Max Total Supply

10,000,000

Holders

174

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
11,480.829025578548358068

Value
$0.00
0xc4fb8ac57d064eb9ad9bfb1ac492c697feec1571
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:
Unknown

Compiler Version
v0.8.26+commit.8a97fa7a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-06-27
*/

// SPDX-License-Identifier: MIT

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

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

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


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


// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler
 * now has built in overflow checking.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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


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

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

    uint256 private _totalSupply;

    string internal _name;
    string internal _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() {

    }

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

contract Unknown is ERC20, Ownable {
    using SafeMath for uint256;
    address public uniswapV2Pair;
    bool public tradingStarted = false;


    IUniswapV2Router02 public router;
    address private routerAddress;
    bool private swapping;
    address public marketingWallet;
    address public devWallet;
    uint256 public swapTokensAtAmount;
    bool public swapEnabled = true;

    mapping(address => bool) public _isExcludedMaxTransactionAmount;
    uint256 public maxTransactionAmount;
    uint256 public maxWallet;
    bool public limited = true;

    bool public blacklistRenounced = false;
    bool public contractDumpPrevention = true;


    uint256 public buyTotalFees;
    uint256 public buyMarketingFee;
    uint256 public buyDevFee;
    uint256 public buyLiquidityFee;
    uint256 public sellTotalFees;
    uint256 public sellMarketingFee;
    uint256 public sellDevFee;
    uint256 public sellLiquidityFee;
    uint256 private tokensForMarketing;
    uint256 private tokensForDev;
    uint256 private tokensForLiquidity;
    bool public swapBackRestriction = true;
    mapping(address => bool) private excludedFromFees;

    bool reducedFirstBlockEnabled = true;
    uint256 public reducedMaxTransactionAmount;
    uint256 public swapsAmount;
    uint256 public tradingStartBlock;

    mapping(address => bool) public blacklists;

    mapping(address => bool) public automatedMarketMakerPairs;

    constructor() ERC20() {
        uint256 totalSupply = 10_000_000 * 1e18;

        routerAddress = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
            routerAddress
        );
        router = _uniswapV2Router;

        uint256 _buyMarketingFee = 20;
        uint256 _buyDevFee = 5;
        uint256 _buyLiquidityFee = 0;
        uint256 _sellMarketingFee = 20;
        uint256 _sellDevFee = 5;
        uint256 _sellLiquidityFee = 0;
        swapTokensAtAmount = (totalSupply * 5) / 1000;
        buyMarketingFee = _buyMarketingFee;
        buyLiquidityFee = _buyLiquidityFee;
        buyDevFee = _buyDevFee;
        sellMarketingFee = _sellMarketingFee;
        sellDevFee = _sellDevFee;
        sellLiquidityFee = _sellLiquidityFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;


        marketingWallet = address(0x6BE6877D7460856c8E996625dcdc144925E41DBE);
        devWallet  = address(0xb91060B06DCB9b8D16639C72E99DcaF44610079B);
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        limited = true;
        maxTransactionAmount = (totalSupply * 2) / 100;
        maxWallet = (totalSupply * 2) / 100;
        disableWalletLimits(owner(), true);
        disableWalletLimits(address(this), true);
        disableWalletLimits(address(0xdead), true);
        disableWalletLimits(address(_uniswapV2Router), true);

        _mint(address(this), totalSupply);
    }

    receive() external payable {}

    function launch(string memory name, string memory symbol) public onlyOwner {
        require(!tradingStarted);
        _name = name;
        _symbol = symbol;
        _approve(address(this), address(router), totalSupply());
        uniswapV2Pair = IUniswapV2Factory(router.factory()).createPair(address(this), router.WETH());
        disableWalletLimits(address(uniswapV2Pair), true);
        automatedMarketMakerPairs[uniswapV2Pair] = true;
        router.addLiquidityETH { value: address(this).balance }(
            address(this),
            balanceOf(address(this)),
            0,
            0,
            owner(),
            block.timestamp);
        IERC20(uniswapV2Pair).approve(address(router), type(uint).max);
        tradingStartBlock = block.number;
        tradingStarted = true;
    }


    function limitsOff() external onlyOwner returns (bool) {
        limited = false;
        return true;
    }


    function updateSwapTokensAtAmount(uint256 newAmount)
    external
    onlyOwner
    returns (bool)
    {
        require(
            newAmount >= (totalSupply() * 1) / 100000,
            "Swap amount cannot be lower than 0.001% total supply."
        );
        require(
            newAmount <= (totalSupply() * 4) / 100,
            "Swap amount cannot be higher than 4% total supply."
        );
        swapTokensAtAmount = newAmount;
        return true;
    }

    function updateSwapEnabled(bool enabled) external onlyOwner {
        swapEnabled = enabled;
    }

    function updateMaxTransaction(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 1) / 1000) / 1e18
        );
        maxTransactionAmount = newNum * (10 ** 18);
    }

    function updateMaxWallet(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 1) / 1000) / 1e18
        );
        maxWallet = newNum * (10 ** 18);
    }

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

    function changeBuyFees(
        uint256 _marketingFee,
        uint256 _devFee,
        uint256 _liquidityFee
    ) external onlyOwner {
        buyMarketingFee = _marketingFee;
        buyLiquidityFee = _liquidityFee;
        buyDevFee = _devFee;
        buyTotalFees = buyMarketingFee + buyDevFee + buyLiquidityFee;
        require(buyTotalFees <= 30);
    }

    function changeSellFees(
        uint256 _marketingFee,
        uint256 _devFee,
        uint256 _liquidityFee
    ) external onlyOwner {
        sellMarketingFee = _marketingFee;
        sellLiquidityFee = _liquidityFee;
        sellDevFee = _devFee;
        sellTotalFees = sellMarketingFee + sellDevFee + sellLiquidityFee;
        require(sellTotalFees <= 30);
    }

    function excludeFromFees(address account, bool excluded) public onlyOwner {
        excludedFromFees[account] = excluded;
    }


    function setAMMPair(address pair, bool value)
    public
    onlyOwner
    {
        require(
            pair != uniswapV2Pair,
            "The pair cannot be removed from automatedMarketMakerPairs"
        );

        _setAutomatedMarketMakerPair(pair, value);
    }

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

    }

    function updateMarketingWalletAddress(address _wallet) external onlyOwner {
        marketingWallet = _wallet;
    }

    function updateDevWalletAddress(address _wallet) external onlyOwner {
        devWallet = _wallet;
    }

    function checkExcludedFromFees(address account) public view returns (bool) {
        return excludedFromFees[account];
    }


    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(!blacklists[from], "Blacklisted");
        if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        }

        if (limited) {
            if (
                from != owner() &&
                to != owner() &&
                !swapping &&
                to != address(0) &&
                to != address(0xdead)

            ) {
                if (!tradingStarted) {
                    require(
                        excludedFromFees[from] || excludedFromFees[to],
                        "Trading is not active."
                    );
                }



                uint256 maxTxAmount = maxTransactionAmount;
                uint256 difference = block.number - tradingStartBlock;
                if (difference < 10 && reducedFirstBlockEnabled && swapsAmount > 2) {
                    if(difference == 0) {
                        maxTxAmount = totalSupply() * 200 / 10000;
                    } else if (difference > 8) {
                        maxTxAmount = totalSupply() * 100 / 10000;
                    } else {
                        maxTxAmount = totalSupply() * (difference * 10) / 10000;
                    }
                }


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

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

            }
        }
        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if (
            canSwap &&
            swapEnabled &&
            !swapping &&
            !automatedMarketMakerPairs[from] &&
            !excludedFromFees[from] &&
            !excludedFromFees[to]
        ) {
            swapping = true;
            swapBack(amount);
            swapping = false;
        }

        bool takeFee = !swapping;

        if (excludedFromFees[from] || excludedFromFees[to]) {
            takeFee = false;
        }

        uint256 fees = 0;
        if (takeFee) {
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0) {
                fees = amount.mul(sellTotalFees).div(100);
                tokensForLiquidity += (fees * sellLiquidityFee) / sellTotalFees;
                tokensForMarketing += (fees * sellMarketingFee) / sellTotalFees;
                tokensForDev += (fees * sellDevFee) / sellTotalFees;
            }
            else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(100);
                tokensForLiquidity += (fees * buyLiquidityFee) / buyTotalFees;
                tokensForMarketing += (fees * buyMarketingFee) / buyTotalFees;
                tokensForDev += (fees * buyDevFee) / buyTotalFees;
            }

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

            amount -= fees;
        }
        if (swapsAmount < 10) {
            swapsAmount += 1;
        }
        super._transfer(from, to, amount);
    }

    function blacklistWallet(address _address, bool _isBlacklisting) external onlyOwner {
        require(!blacklistRenounced, "Team has revoked blacklist rights");
        require(_address != address(uniswapV2Pair),"Cannot blacklist token's v2 router or v2 pool.");
        require(_address != address(routerAddress),"Cannot blacklist token's v2 router or v2 pool.");

        blacklists[_address] = _isBlacklisting;
    }
    function renounceBlacklist() public onlyOwner {
        blacklistRenounced = true;
    }
    function setReducedFirstBlock(bool newVal) public onlyOwner {
        reducedFirstBlockEnabled = newVal;
    }

    function updateContractDumpingRestriction(bool newVal) public onlyOwner {
        contractDumpPrevention = newVal;
    }

    function updateSwapbackRestriction(bool newVal) public onlyOwner {
        swapBackRestriction = newVal;
    }



    function swapTokensForEth(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = router.WETH();

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

        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        _approve(address(this), address(router), tokenAmount);

        router.addLiquidityETH{value : ethAmount}(
            address(this),
            tokenAmount,
            0,
            0,
            marketingWallet,
            block.timestamp
        );
    }

    function swapBack(uint amount) private {

        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity + tokensForMarketing + tokensForDev;
        bool success;

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

        uint256 amountToSwap = swapTokensAtAmount;
        if (swapBackRestriction) {
            amountToSwap = amount < swapTokensAtAmount ? amount : swapTokensAtAmount;
        }

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

        uint256 liquidityTokens = (contractBalance * tokensForLiquidity) /
                    totalTokensToSwap /
                    2;
        uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens);

        uint256 initialETHBalance = address(this).balance;

        swapTokensForEth(amountToSwapForETH);

        uint256 ethBalance = address(this).balance.sub(initialETHBalance);

        uint256 ethForMarketing = ethBalance.mul(tokensForMarketing).div(
            totalTokensToSwap
        );
        uint256 ethForDev = ethBalance.mul(tokensForDev).div(
            totalTokensToSwap
        );

        uint256 ethForLiquidity = ethBalance - ethForMarketing - ethForDev;

        tokensForLiquidity = 0;
        tokensForMarketing = 0;
        tokensForDev = 0;

        if (liquidityTokens > 0 && ethForLiquidity > 0) {
            addLiquidity(liquidityTokens, ethForLiquidity);

        }

        if (ethForDev + ethForMarketing > 0) {
            (success,) = address(marketingWallet).call{
                    value : (address(this).balance) * ethForMarketing / (ethForDev + ethForMarketing)
                }("");

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

    }
    function sellStuckTokens() public onlyOwner {
        bool success;
        swapTokensForEth(balanceOf(address(this)));
        (success,) = address(marketingWallet).call{value : address(this).balance}("");
    }

    function withdrawStuckTokens() external {
        require(owner() == _msgSender() || marketingWallet == _msgSender(), "Caller is not the owner or marketing wallet");
        super._transfer(address(this), address(marketingWallet), balanceOf(address(this)));
    }

    function sendStuckEth() external {
        require(owner() == _msgSender() || marketingWallet == _msgSender(), "Caller is not the owner or marketing wallet");
        bool success;
        (success,) = address(marketingWallet).call{value : address(this).balance}("");
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"blacklistRenounced","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_isBlacklisting","type":"bool"}],"name":"blacklistWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"blacklists","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"changeBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"changeSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"checkExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractDumpPrevention","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"disableWalletLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"}],"name":"launch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"limited","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsOff","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reducedMaxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellStuckTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sendStuckEth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAMMPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"newVal","type":"bool"}],"name":"setReducedFirstBlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapBackRestriction","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapsAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingStartBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingStarted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"newVal","type":"bool"}],"name":"updateContractDumpingRestriction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"}],"name":"updateDevWalletAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"}],"name":"updateMarketingWalletAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"newVal","type":"bool"}],"name":"updateSwapbackRestriction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawStuckTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040525f600660146101000a81548160ff0219169083151502179055506001600c5f6101000a81548160ff021916908315150217905550600160105f6101000a81548160ff0219169083151502179055505f601060016101000a81548160ff0219169083151502179055506001601060026101000a81548160ff0219169083151502179055506001601c5f6101000a81548160ff0219169083151502179055506001601e5f6101000a81548160ff0219169083151502179055503480156100c6575f80fd5b506100e36100d861040360201b60201c565b61040a60201b60201c565b5f6a084595161401484a0000009050737a250d5630b4cf539739df2c5dacb4c659f2488d60085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508060075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f601490505f600590505f80601490505f600590505f6103e86005896101d191906107e5565b6101db9190610853565b600b8190555085601281905550836014819055508460138190555082601681905550816017819055508060188190555060135460145460125461021e9190610883565b6102289190610883565b6011819055506017546018546016546102419190610883565b61024b9190610883565b601581905550736be6877d7460856c8e996625dcdc144925e41dbe60095f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073b91060b06dcb9b8d16639c72e99dcaf44610079b600a5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061031761030a6104cd60201b60201c565b60016104f560201b60201c565b6103283060016104f560201b60201c565b61033b61dead60016104f560201b60201c565b600160105f6101000a81548160ff021916908315150217905550606460028961036491906107e5565b61036e9190610853565b600e81905550606460028961038391906107e5565b61038d9190610853565b600f819055506103b16103a46104cd60201b60201c565b600161055b60201b60201c565b6103c230600161055b60201b60201c565b6103d561dead600161055b60201b60201c565b6103e687600161055b60201b60201c565b6103f630896105c160201b60201c565b50505050505050506109be565b5f33905090565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61050361071b60201b60201c565b80601d5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b61056961071b60201b60201c565b80600d5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361062f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161062690610910565b60405180910390fd5b6106405f83836107a560201b60201c565b8060025f8282546106519190610883565b92505081905550805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516106fe919061093d565b60405180910390a36107175f83836107aa60201b60201c565b5050565b61072961040360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1661074d6104cd60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146107a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161079a906109a0565b60405180910390fd5b565b505050565b505050565b5f819050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6107ef826107af565b91506107fa836107af565b9250828202610808816107af565b9150828204841483151761081f5761081e6107b8565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61085d826107af565b9150610868836107af565b92508261087857610877610826565b5b828204905092915050565b5f61088d826107af565b9150610898836107af565b92508282019050808211156108b0576108af6107b8565b5b92915050565b5f82825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f6108fa601f836108b6565b9150610905826108c6565b602082019050919050565b5f6020820190508181035f830152610927816108ee565b9050919050565b610937816107af565b82525050565b5f6020820190506109505f83018461092e565b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f61098a6020836108b6565b915061099582610956565b602082019050919050565b5f6020820190508181035f8301526109b78161097e565b9050919050565b615387806109cb5f395ff3fe6080604052600436106103bb575f3560e01c80638da5cb5b116101f1578063c8c8ebe41161010c578063ecb80cee1161009f578063f63743421161006e578063f637434214610db6578063f887ea4014610de0578063f8b45b0514610e0a578063fabf706314610e34576103c2565b8063ecb80cee14610d26578063ee69e76814610d3c578063f11a24d314610d64578063f2fde38b14610d8e576103c2565b8063d85ba063116100db578063d85ba06314610c6e578063dcdfc04b14610c98578063dd62ed3e14610cc0578063e2f4560514610cfc576103c2565b8063c8c8ebe414610bb6578063cd7b33ab14610be0578063d257b34f14610c08578063d798cbd214610c44576103c2565b8063a2ec185311610184578063a9059cbb11610153578063a9059cbb14610aee578063b422ed1914610b2a578063b62496f514610b52578063c024666814610b8e576103c2565b8063a2ec185314610a38578063a31d968514610a62578063a3d14e7214610a8a578063a457c2d714610ab2576103c2565b806395d89b41116101c057806395d89b4114610992578063969e24d8146109bc5780639c3b4fdc146109e4578063a0d82dc514610a0e576103c2565b80638da5cb5b146108ec5780638ea5220f146109165780639213691314610940578063924de9b71461096a576103c2565b806333defeae116102e15780636ddd1713116102745780637a3c6aff116102435780637a3c6aff1461086c5780637bce5a04146108825780638183b3c8146108ac578063860a32ec146108c2576103c2565b80636ddd1713146107c657806370a08231146107f0578063715018a61461082c57806375f0a87414610842576103c2565b80635a54bf02116102b05780635a54bf02146107345780635b4f472a1461075c5780635f189361146107865780636a486a8e1461079c576103c2565b806333defeae1461067a57806339509351146106a45780633dc599ff146106e057806349bd5a5e1461070a576103c2565b806318160ddd11610359578063232050f911610328578063232050f9146105c257806323b872dd146105ec5780632d99d32e14610628578063313ce56714610650576103c2565b806318160ddd1461051e5780631c499ab0146105485780631df148121461057057806321d9f2ca1461059a576103c2565b80630b5dbf26116103955780630b5dbf261461045457806310d5de531461047e578063129476ab146104ba57806316c02129146104e2576103c2565b80630517d13d146103c657806306fdde03146103ee578063095ea7b314610418576103c2565b366103c257005b5f80fd5b3480156103d1575f80fd5b506103ec60048036038101906103e79190613c05565b610e70565b005b3480156103f9575f80fd5b50610402610ed4565b60405161040f9190613ca0565b60405180910390f35b348015610423575f80fd5b5061043e60048036038101906104399190613d1a565b610f64565b60405161044b9190613d72565b60405180910390f35b34801561045f575f80fd5b50610468610f86565b6040516104759190613d72565b60405180910390f35b348015610489575f80fd5b506104a4600480360381019061049f9190613d8b565b610f98565b6040516104b19190613d72565b60405180910390f35b3480156104c5575f80fd5b506104e060048036038101906104db9190613de0565b610fb5565b005b3480156104ed575f80fd5b5061050860048036038101906105039190613d8b565b611183565b6040516105159190613d72565b60405180910390f35b348015610529575f80fd5b506105326111a0565b60405161053f9190613e2d565b60405180910390f35b348015610553575f80fd5b5061056e60048036038101906105699190613c05565b6111a9565b005b34801561057b575f80fd5b5061058461120d565b6040516105919190613d72565b60405180910390f35b3480156105a5575f80fd5b506105c060048036038101906105bb9190613de0565b611220565b005b3480156105cd575f80fd5b506105d6611280565b6040516105e39190613d72565b60405180910390f35b3480156105f7575f80fd5b50610612600480360381019061060d9190613e46565b6112a9565b60405161061f9190613d72565b60405180910390f35b348015610633575f80fd5b5061064e60048036038101906106499190613de0565b6112d7565b005b34801561065b575f80fd5b5061066461137c565b6040516106719190613eb1565b60405180910390f35b348015610685575f80fd5b5061068e611384565b60405161069b9190613e2d565b60405180910390f35b3480156106af575f80fd5b506106ca60048036038101906106c59190613d1a565b61138a565b6040516106d79190613d72565b60405180910390f35b3480156106eb575f80fd5b506106f46113c0565b6040516107019190613d72565b60405180910390f35b348015610715575f80fd5b5061071e6113d3565b60405161072b9190613ed9565b60405180910390f35b34801561073f575f80fd5b5061075a60048036038101906107559190613ef2565b6113f8565b005b348015610767575f80fd5b5061077061141c565b60405161077d9190613d72565b60405180910390f35b348015610791575f80fd5b5061079a61142f565b005b3480156107a7575f80fd5b506107b0611454565b6040516107bd9190613e2d565b60405180910390f35b3480156107d1575f80fd5b506107da61145a565b6040516107e79190613d72565b60405180910390f35b3480156107fb575f80fd5b5061081660048036038101906108119190613d8b565b61146c565b6040516108239190613e2d565b60405180910390f35b348015610837575f80fd5b506108406114b1565b005b34801561084d575f80fd5b506108566114c4565b6040516108639190613ed9565b60405180910390f35b348015610877575f80fd5b506108806114e9565b005b34801561088d575f80fd5b50610896611651565b6040516108a39190613e2d565b60405180910390f35b3480156108b7575f80fd5b506108c0611657565b005b3480156108cd575f80fd5b506108d6611767565b6040516108e39190613d72565b60405180910390f35b3480156108f7575f80fd5b50610900611779565b60405161090d9190613ed9565b60405180910390f35b348015610921575f80fd5b5061092a6117a1565b6040516109379190613ed9565b60405180910390f35b34801561094b575f80fd5b506109546117c6565b6040516109619190613e2d565b60405180910390f35b348015610975575f80fd5b50610990600480360381019061098b9190613ef2565b6117cc565b005b34801561099d575f80fd5b506109a66117f0565b6040516109b39190613ca0565b60405180910390f35b3480156109c7575f80fd5b506109e260048036038101906109dd9190613d8b565b611880565b005b3480156109ef575f80fd5b506109f86118cb565b604051610a059190613e2d565b60405180910390f35b348015610a19575f80fd5b50610a226118d1565b604051610a2f9190613e2d565b60405180910390f35b348015610a43575f80fd5b50610a4c6118d7565b604051610a599190613e2d565b60405180910390f35b348015610a6d575f80fd5b50610a886004803603810190610a839190613ef2565b6118dd565b005b348015610a95575f80fd5b50610ab06004803603810190610aab9190613f1d565b611902565b005b348015610abd575f80fd5b50610ad86004803603810190610ad39190613d1a565b611956565b604051610ae59190613d72565b60405180910390f35b348015610af9575f80fd5b50610b146004803603810190610b0f9190613d1a565b6119cb565b604051610b219190613d72565b60405180910390f35b348015610b35575f80fd5b50610b506004803603810190610b4b9190613d8b565b6119ed565b005b348015610b5d575f80fd5b50610b786004803603810190610b739190613d8b565b611a38565b604051610b859190613d72565b60405180910390f35b348015610b99575f80fd5b50610bb46004803603810190610baf9190613de0565b611a55565b005b348015610bc1575f80fd5b50610bca611ab5565b604051610bd79190613e2d565b60405180910390f35b348015610beb575f80fd5b50610c066004803603810190610c019190613f1d565b611abb565b005b348015610c13575f80fd5b50610c2e6004803603810190610c299190613c05565b611b0f565b604051610c3b9190613d72565b60405180910390f35b348015610c4f575f80fd5b50610c58611bee565b604051610c659190613e2d565b60405180910390f35b348015610c79575f80fd5b50610c82611bf4565b604051610c8f9190613e2d565b60405180910390f35b348015610ca3575f80fd5b50610cbe6004803603810190610cb99190613ef2565b611bfa565b005b348015610ccb575f80fd5b50610ce66004803603810190610ce19190613f6d565b611c1e565b604051610cf39190613e2d565b60405180910390f35b348015610d07575f80fd5b50610d10611ca0565b604051610d1d9190613e2d565b60405180910390f35b348015610d31575f80fd5b50610d3a611ca6565b005b348015610d47575f80fd5b50610d626004803603810190610d5d91906140d7565b611d4d565b005b348015610d6f575f80fd5b50610d786121f3565b604051610d859190613e2d565b60405180910390f35b348015610d99575f80fd5b50610db46004803603810190610daf9190613d8b565b6121f9565b005b348015610dc1575f80fd5b50610dca61227b565b604051610dd79190613e2d565b60405180910390f35b348015610deb575f80fd5b50610df4612281565b604051610e0191906141a8565b60405180910390f35b348015610e15575f80fd5b50610e1e6122a6565b604051610e2b9190613e2d565b60405180910390f35b348015610e3f575f80fd5b50610e5a6004803603810190610e559190613d8b565b6122ac565b604051610e679190613d72565b60405180910390f35b610e786122fe565b670de0b6b3a76400006103e86001610e8e6111a0565b610e9891906141ee565b610ea2919061425c565b610eac919061425c565b811015610eb7575f80fd5b670de0b6b3a764000081610ecb91906141ee565b600e8190555050565b606060038054610ee3906142b9565b80601f0160208091040260200160405190810160405280929190818152602001828054610f0f906142b9565b8015610f5a5780601f10610f3157610100808354040283529160200191610f5a565b820191905f5260205f20905b815481529060010190602001808311610f3d57829003601f168201915b5050505050905090565b5f80610f6e61237c565b9050610f7b818585612383565b600191505092915050565b601c5f9054906101000a900460ff1681565b600d602052805f5260405f205f915054906101000a900460ff1681565b610fbd6122fe565b601060019054906101000a900460ff161561100d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100490614359565b60405180910390fd5b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361109c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611093906143e7565b60405180910390fd5b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361112b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611122906143e7565b60405180910390fd5b8060225f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b6022602052805f5260405f205f915054906101000a900460ff1681565b5f600254905090565b6111b16122fe565b670de0b6b3a76400006103e860016111c76111a0565b6111d191906141ee565b6111db919061425c565b6111e5919061425c565b8110156111f0575f80fd5b670de0b6b3a76400008161120491906141ee565b600f8190555050565b601060029054906101000a900460ff1681565b6112286122fe565b80600d5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f6112896122fe565b5f60105f6101000a81548160ff0219169083151502179055506001905090565b5f806112b361237c565b90506112c0858285612546565b6112cb8585856125d1565b60019150509392505050565b6112df6122fe565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361136e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136590614475565b60405180910390fd5b61137882826131e4565b5050565b5f6012905090565b601f5481565b5f8061139461237c565b90506113b58185856113a68589611c1e565b6113b09190614493565b612383565b600191505092915050565b601060019054906101000a900460ff1681565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6114006122fe565b80601c5f6101000a81548160ff02191690831515021790555050565b600660149054906101000a900460ff1681565b6114376122fe565b6001601060016101000a81548160ff021916908315150217905550565b60155481565b600c5f9054906101000a900460ff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6114b96122fe565b6114c25f61323c565b565b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6114f161237c565b73ffffffffffffffffffffffffffffffffffffffff1661150f611779565b73ffffffffffffffffffffffffffffffffffffffff161480611584575061153461237c565b73ffffffffffffffffffffffffffffffffffffffff1660095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b6115c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ba90614536565b60405180910390fd5b5f60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161160990614581565b5f6040518083038185875af1925050503d805f8114611643576040519150601f19603f3d011682016040523d82523d5f602084013e611648565b606091505b50508091505050565b60125481565b61165f61237c565b73ffffffffffffffffffffffffffffffffffffffff1661167d611779565b73ffffffffffffffffffffffffffffffffffffffff1614806116f257506116a261237c565b73ffffffffffffffffffffffffffffffffffffffff1660095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b611731576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172890614536565b60405180910390fd5b6117653060095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166117603061146c565b6132ff565b565b60105f9054906101000a900460ff1681565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60165481565b6117d46122fe565b80600c5f6101000a81548160ff02191690831515021790555050565b6060600480546117ff906142b9565b80601f016020809104026020016040519081016040528092919081815260200182805461182b906142b9565b80156118765780601f1061184d57610100808354040283529160200191611876565b820191905f5260205f20905b81548152906001019060200180831161185957829003601f168201915b5050505050905090565b6118886122fe565b8060095f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60135481565b60175481565b60205481565b6118e56122fe565b80601060026101000a81548160ff02191690831515021790555050565b61190a6122fe565b8260168190555080601881905550816017819055506018546017546016546119329190614493565b61193c9190614493565b601581905550601e6015541115611951575f80fd5b505050565b5f8061196061237c565b90505f61196d8286611c1e565b9050838110156119b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a990614605565b60405180910390fd5b6119bf8286868403612383565b60019250505092915050565b5f806119d561237c565b90506119e28185856125d1565b600191505092915050565b6119f56122fe565b80600a5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6023602052805f5260405f205f915054906101000a900460ff1681565b611a5d6122fe565b80601d5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b600e5481565b611ac36122fe565b826012819055508060148190555081601381905550601454601354601254611aeb9190614493565b611af59190614493565b601181905550601e6011541115611b0a575f80fd5b505050565b5f611b186122fe565b620186a06001611b266111a0565b611b3091906141ee565b611b3a919061425c565b821015611b7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7390614693565b60405180910390fd5b60646004611b886111a0565b611b9291906141ee565b611b9c919061425c565b821115611bde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd590614721565b60405180910390fd5b81600b8190555060019050919050565b60215481565b60115481565b611c026122fe565b80601e5f6101000a81548160ff02191690831515021790555050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b600b5481565b611cae6122fe565b5f611cc0611cbb3061146c565b61356b565b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051611d0590614581565b5f6040518083038185875af1925050503d805f8114611d3f576040519150601f19603f3d011682016040523d82523d5f602084013e611d44565b606091505b50508091505050565b611d556122fe565b600660149054906101000a900460ff1615611d6e575f80fd5b8160039081611d7d91906148d3565b508060049081611d8d91906148d3565b50611dc13060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611dbc6111a0565b612383565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e2b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e4f91906149b6565b73ffffffffffffffffffffffffffffffffffffffff1663c9c653963060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ed5573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ef991906149b6565b6040518363ffffffff1660e01b8152600401611f169291906149e1565b6020604051808303815f875af1158015611f32573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f5691906149b6565b60065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611fc160065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001611220565b600160235f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719473061207f3061146c565b5f80612089611779565b426040518863ffffffff1660e01b81526004016120ab96959493929190614a41565b60606040518083038185885af11580156120c7573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906120ec9190614ab4565b50505060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b360075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b815260040161218c929190614b04565b6020604051808303815f875af11580156121a8573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121cc9190614b3f565b50436021819055506001600660146101000a81548160ff0219169083151502179055505050565b60145481565b6122016122fe565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361226f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226690614bda565b60405180910390fd5b6122788161323c565b50565b60185481565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600f5481565b5f601d5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b61230661237c565b73ffffffffffffffffffffffffffffffffffffffff16612324611779565b73ffffffffffffffffffffffffffffffffffffffff161461237a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237190614c42565b60405180910390fd5b565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036123f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e890614cd0565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361245f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245690614d5e565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516125399190613e2d565b60405180910390a3505050565b5f6125518484611c1e565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146125cb57818110156125bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125b490614dc6565b60405180910390fd5b6125ca8484848403612383565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361263f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161263690614e54565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036126ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126a490614ee2565b60405180910390fd5b60225f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615612737576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161272e90614f4a565b60405180910390fd5b5f810361274e5761274983835f6132ff565b6131df565b60105f9054906101000a900460ff1615612d065761276a611779565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156127d857506127a8611779565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156127f15750600860149054906101000a900460ff16155b801561282957505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612863575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612d0557600660149054906101000a900460ff1661295757601d5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806129175750601d5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b612956576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161294d90614fb2565b60405180910390fd5b5b5f600e5490505f6021544361296c9190614fd0565b9050600a811080156129895750601e5f9054906101000a900460ff165b801561299757506002602054115b15612a2d575f81036129cb5761271060c86129b06111a0565b6129ba91906141ee565b6129c4919061425c565b9150612a2c565b60088111156129fc5761271060646129e16111a0565b6129eb91906141ee565b6129f5919061425c565b9150612a2b565b612710600a82612a0c91906141ee565b612a146111a0565b612a1e91906141ee565b612a28919061425c565b91505b5b5b60235f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612aca5750600d5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612b6f5781831115612b12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b0990615073565b60405180910390fd5b600f54612b1e8561146c565b84612b299190614493565b1115612b6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b61906150db565b60405180910390fd5b612d02565b60235f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612c0c5750600d5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612c595781831115612c54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c4b90615169565b60405180910390fd5b612d01565b600d5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16612d0057600f54612cb38561146c565b84612cbe9190614493565b1115612cff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cf6906150db565b60405180910390fd5b5b5b5b50505b5b5f612d103061146c565b90505f600b548210159050808015612d335750600c5f9054906101000a900460ff165b8015612d4c5750600860149054906101000a900460ff16155b8015612d9f575060235f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612df25750601d5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612e455750601d5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612e89576001600860146101000a81548160ff021916908315150217905550612e6e836137a1565b5f600860146101000a81548160ff0219169083151502179055505b5f600860149054906101000a900460ff16159050601d5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612f385750601d5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15612f41575f90505b5f81156131aa5760235f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612f9f57505f601554115b1561306957612fcc6064612fbe60155488613a7e90919063ffffffff16565b613a9390919063ffffffff16565b905060155460185482612fdf91906141ee565b612fe9919061425c565b601b5f828254612ff99190614493565b925050819055506015546016548261301191906141ee565b61301b919061425c565b60195f82825461302b9190614493565b925050819055506015546017548261304391906141ee565b61304d919061425c565b601a5f82825461305d9190614493565b92505081905550613187565b60235f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156130c057505f601154115b15613186576130ed60646130df60115488613a7e90919063ffffffff16565b613a9390919063ffffffff16565b90506011546014548261310091906141ee565b61310a919061425c565b601b5f82825461311a9190614493565b925050819055506011546012548261313291906141ee565b61313c919061425c565b60195f82825461314c9190614493565b925050819055506011546013548261316491906141ee565b61316e919061425c565b601a5f82825461317e9190614493565b925050819055505b5b5f81111561319b5761319a8730836132ff565b5b80856131a79190614fd0565b94505b600a60205410156131cf57600160205f8282546131c79190614493565b925050819055505b6131da8787876132ff565b505050505b505050565b8060235f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361336d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161336490614e54565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036133db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133d290614ee2565b60405180910390fd5b6133e6838383613aa8565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015613469576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613460906151f7565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516135529190613e2d565b60405180910390a3613565848484613aad565b50505050565b5f600267ffffffffffffffff81111561358757613586613fb3565b5b6040519080825280602002602001820160405280156135b55781602001602082028036833780820191505090505b50905030815f815181106135cc576135cb615215565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613670573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061369491906149b6565b816001815181106136a8576136a7615215565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061370e3060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612383565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b81526004016137709594939291906152f9565b5f604051808303815f87803b158015613787575f80fd5b505af1158015613799573d5f803e3d5ffd5b505050505050565b5f6137ab3061146c565b90505f601a54601954601b546137c19190614493565b6137cb9190614493565b90505f808314806137db57505f82145b156137e857505050613a7b565b5f600b549050601c5f9054906101000a900460ff161561381857600b54851061381357600b54613815565b845b90505b80841115613824578093505b5f600284601b548761383691906141ee565b613840919061425c565b61384a919061425c565b90505f6138608287613ab290919063ffffffff16565b90505f47905061386f8261356b565b5f6138838247613ab290919063ffffffff16565b90505f6138ad8861389f60195485613a7e90919063ffffffff16565b613a9390919063ffffffff16565b90505f6138d7896138c9601a5486613a7e90919063ffffffff16565b613a9390919063ffffffff16565b90505f8183856138e79190614fd0565b6138f19190614fd0565b90505f601b819055505f6019819055505f601a819055505f8711801561391657505f81115b15613926576139258782613ac7565b5b5f83836139339190614493565b1115613a6f5760095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16838361397d9190614493565b844761398991906141ee565b613993919061425c565b60405161399f90614581565b5f6040518083038185875af1925050503d805f81146139d9576040519150601f19603f3d011682016040523d82523d5f602084013e6139de565b606091505b505080995050600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613a2990614581565b5f6040518083038185875af1925050503d805f8114613a63576040519150601f19603f3d011682016040523d82523d5f602084013e613a68565b606091505b5050809950505b50505050505050505050505b50565b5f8183613a8b91906141ee565b905092915050565b5f8183613aa0919061425c565b905092915050565b505050565b505050565b5f8183613abf9190614fd0565b905092915050565b613af33060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612383565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f8060095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401613b7996959493929190614a41565b60606040518083038185885af1158015613b95573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190613bba9190614ab4565b5050505050565b5f604051905090565b5f80fd5b5f80fd5b5f819050919050565b613be481613bd2565b8114613bee575f80fd5b50565b5f81359050613bff81613bdb565b92915050565b5f60208284031215613c1a57613c19613bca565b5b5f613c2784828501613bf1565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f613c7282613c30565b613c7c8185613c3a565b9350613c8c818560208601613c4a565b613c9581613c58565b840191505092915050565b5f6020820190508181035f830152613cb88184613c68565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f613ce982613cc0565b9050919050565b613cf981613cdf565b8114613d03575f80fd5b50565b5f81359050613d1481613cf0565b92915050565b5f8060408385031215613d3057613d2f613bca565b5b5f613d3d85828601613d06565b9250506020613d4e85828601613bf1565b9150509250929050565b5f8115159050919050565b613d6c81613d58565b82525050565b5f602082019050613d855f830184613d63565b92915050565b5f60208284031215613da057613d9f613bca565b5b5f613dad84828501613d06565b91505092915050565b613dbf81613d58565b8114613dc9575f80fd5b50565b5f81359050613dda81613db6565b92915050565b5f8060408385031215613df657613df5613bca565b5b5f613e0385828601613d06565b9250506020613e1485828601613dcc565b9150509250929050565b613e2781613bd2565b82525050565b5f602082019050613e405f830184613e1e565b92915050565b5f805f60608486031215613e5d57613e5c613bca565b5b5f613e6a86828701613d06565b9350506020613e7b86828701613d06565b9250506040613e8c86828701613bf1565b9150509250925092565b5f60ff82169050919050565b613eab81613e96565b82525050565b5f602082019050613ec45f830184613ea2565b92915050565b613ed381613cdf565b82525050565b5f602082019050613eec5f830184613eca565b92915050565b5f60208284031215613f0757613f06613bca565b5b5f613f1484828501613dcc565b91505092915050565b5f805f60608486031215613f3457613f33613bca565b5b5f613f4186828701613bf1565b9350506020613f5286828701613bf1565b9250506040613f6386828701613bf1565b9150509250925092565b5f8060408385031215613f8357613f82613bca565b5b5f613f9085828601613d06565b9250506020613fa185828601613d06565b9150509250929050565b5f80fd5b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b613fe982613c58565b810181811067ffffffffffffffff8211171561400857614007613fb3565b5b80604052505050565b5f61401a613bc1565b90506140268282613fe0565b919050565b5f67ffffffffffffffff82111561404557614044613fb3565b5b61404e82613c58565b9050602081019050919050565b828183375f83830152505050565b5f61407b6140768461402b565b614011565b90508281526020810184848401111561409757614096613faf565b5b6140a284828561405b565b509392505050565b5f82601f8301126140be576140bd613fab565b5b81356140ce848260208601614069565b91505092915050565b5f80604083850312156140ed576140ec613bca565b5b5f83013567ffffffffffffffff81111561410a57614109613bce565b5b614116858286016140aa565b925050602083013567ffffffffffffffff81111561413757614136613bce565b5b614143858286016140aa565b9150509250929050565b5f819050919050565b5f61417061416b61416684613cc0565b61414d565b613cc0565b9050919050565b5f61418182614156565b9050919050565b5f61419282614177565b9050919050565b6141a281614188565b82525050565b5f6020820190506141bb5f830184614199565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6141f882613bd2565b915061420383613bd2565b925082820261421181613bd2565b91508282048414831517614228576142276141c1565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61426682613bd2565b915061427183613bd2565b9250826142815761428061422f565b5b828204905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806142d057607f821691505b6020821081036142e3576142e261428c565b5b50919050565b7f5465616d20686173207265766f6b656420626c61636b6c6973742072696768745f8201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b5f614343602183613c3a565b915061434e826142e9565b604082019050919050565b5f6020820190508181035f83015261437081614337565b9050919050565b7f43616e6e6f7420626c61636b6c69737420746f6b656e277320763220726f75745f8201527f6572206f7220763220706f6f6c2e000000000000000000000000000000000000602082015250565b5f6143d1602e83613c3a565b91506143dc82614377565b604082019050919050565b5f6020820190508181035f8301526143fe816143c5565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f61445f603983613c3a565b915061446a82614405565b604082019050919050565b5f6020820190508181035f83015261448c81614453565b9050919050565b5f61449d82613bd2565b91506144a883613bd2565b92508282019050808211156144c0576144bf6141c1565b5b92915050565b7f43616c6c6572206973206e6f7420746865206f776e6572206f72206d61726b655f8201527f74696e672077616c6c6574000000000000000000000000000000000000000000602082015250565b5f614520602b83613c3a565b915061452b826144c6565b604082019050919050565b5f6020820190508181035f83015261454d81614514565b9050919050565b5f81905092915050565b50565b5f61456c5f83614554565b91506145778261455e565b5f82019050919050565b5f61458b82614561565b9150819050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f6145ef602583613c3a565b91506145fa82614595565b604082019050919050565b5f6020820190508181035f83015261461c816145e3565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e5f8201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b5f61467d603583613c3a565b915061468882614623565b604082019050919050565b5f6020820190508181035f8301526146aa81614671565b9050919050565b7f5377617020616d6f756e742063616e6e6f7420626520686967686572207468615f8201527f6e20342520746f74616c20737570706c792e0000000000000000000000000000602082015250565b5f61470b603283613c3a565b9150614716826146b1565b604082019050919050565b5f6020820190508181035f830152614738816146ff565b9050919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830261479b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82614760565b6147a58683614760565b95508019841693508086168417925050509392505050565b5f6147d76147d26147cd84613bd2565b61414d565b613bd2565b9050919050565b5f819050919050565b6147f0836147bd565b6148046147fc826147de565b84845461476c565b825550505050565b5f90565b61481861480c565b6148238184846147e7565b505050565b5b818110156148465761483b5f82614810565b600181019050614829565b5050565b601f82111561488b5761485c8161473f565b61486584614751565b81016020851015614874578190505b61488861488085614751565b830182614828565b50505b505050565b5f82821c905092915050565b5f6148ab5f1984600802614890565b1980831691505092915050565b5f6148c3838361489c565b9150826002028217905092915050565b6148dc82613c30565b67ffffffffffffffff8111156148f5576148f4613fb3565b5b6148ff82546142b9565b61490a82828561484a565b5f60209050601f83116001811461493b575f8415614929578287015190505b61493385826148b8565b86555061499a565b601f1984166149498661473f565b5f5b828110156149705784890151825560018201915060208501945060208101905061494b565b8683101561498d5784890151614989601f89168261489c565b8355505b6001600288020188555050505b505050505050565b5f815190506149b081613cf0565b92915050565b5f602082840312156149cb576149ca613bca565b5b5f6149d8848285016149a2565b91505092915050565b5f6040820190506149f45f830185613eca565b614a016020830184613eca565b9392505050565b5f819050919050565b5f614a2b614a26614a2184614a08565b61414d565b613bd2565b9050919050565b614a3b81614a11565b82525050565b5f60c082019050614a545f830189613eca565b614a616020830188613e1e565b614a6e6040830187614a32565b614a7b6060830186614a32565b614a886080830185613eca565b614a9560a0830184613e1e565b979650505050505050565b5f81519050614aae81613bdb565b92915050565b5f805f60608486031215614acb57614aca613bca565b5b5f614ad886828701614aa0565b9350506020614ae986828701614aa0565b9250506040614afa86828701614aa0565b9150509250925092565b5f604082019050614b175f830185613eca565b614b246020830184613e1e565b9392505050565b5f81519050614b3981613db6565b92915050565b5f60208284031215614b5457614b53613bca565b5b5f614b6184828501614b2b565b91505092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f614bc4602683613c3a565b9150614bcf82614b6a565b604082019050919050565b5f6020820190508181035f830152614bf181614bb8565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f614c2c602083613c3a565b9150614c3782614bf8565b602082019050919050565b5f6020820190508181035f830152614c5981614c20565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f614cba602483613c3a565b9150614cc582614c60565b604082019050919050565b5f6020820190508181035f830152614ce781614cae565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f614d48602283613c3a565b9150614d5382614cee565b604082019050919050565b5f6020820190508181035f830152614d7581614d3c565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000005f82015250565b5f614db0601d83613c3a565b9150614dbb82614d7c565b602082019050919050565b5f6020820190508181035f830152614ddd81614da4565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f614e3e602583613c3a565b9150614e4982614de4565b604082019050919050565b5f6020820190508181035f830152614e6b81614e32565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f614ecc602383613c3a565b9150614ed782614e72565b604082019050919050565b5f6020820190508181035f830152614ef981614ec0565b9050919050565b7f426c61636b6c69737465640000000000000000000000000000000000000000005f82015250565b5f614f34600b83613c3a565b9150614f3f82614f00565b602082019050919050565b5f6020820190508181035f830152614f6181614f28565b9050919050565b7f54726164696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f614f9c601683613c3a565b9150614fa782614f68565b602082019050919050565b5f6020820190508181035f830152614fc981614f90565b9050919050565b5f614fda82613bd2565b9150614fe583613bd2565b9250828203905081811115614ffd57614ffc6141c1565b5b92915050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b5f61505d603583613c3a565b915061506882615003565b604082019050919050565b5f6020820190508181035f83015261508a81615051565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f6150c5601383613c3a565b91506150d082615091565b602082019050919050565b5f6020820190508181035f8301526150f2816150b9565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b5f615153603683613c3a565b915061515e826150f9565b604082019050919050565b5f6020820190508181035f83015261518081615147565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f6151e1602683613c3a565b91506151ec82615187565b604082019050919050565b5f6020820190508181035f83015261520e816151d5565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61527481613cdf565b82525050565b5f615285838361526b565b60208301905092915050565b5f602082019050919050565b5f6152a782615242565b6152b1818561524c565b93506152bc8361525c565b805f5b838110156152ec5781516152d3888261527a565b97506152de83615291565b9250506001810190506152bf565b5085935050505092915050565b5f60a08201905061530c5f830188613e1e565b6153196020830187614a32565b818103604083015261532b818661529d565b905061533a6060830185613eca565b6153476080830184613e1e565b969550505050505056fea2646970667358221220d67fe5b6799c9a4fc441a81998e5ca1e13b4d1137002a57726abaaa8403de2c864736f6c634300081a0033

Deployed Bytecode

0x6080604052600436106103bb575f3560e01c80638da5cb5b116101f1578063c8c8ebe41161010c578063ecb80cee1161009f578063f63743421161006e578063f637434214610db6578063f887ea4014610de0578063f8b45b0514610e0a578063fabf706314610e34576103c2565b8063ecb80cee14610d26578063ee69e76814610d3c578063f11a24d314610d64578063f2fde38b14610d8e576103c2565b8063d85ba063116100db578063d85ba06314610c6e578063dcdfc04b14610c98578063dd62ed3e14610cc0578063e2f4560514610cfc576103c2565b8063c8c8ebe414610bb6578063cd7b33ab14610be0578063d257b34f14610c08578063d798cbd214610c44576103c2565b8063a2ec185311610184578063a9059cbb11610153578063a9059cbb14610aee578063b422ed1914610b2a578063b62496f514610b52578063c024666814610b8e576103c2565b8063a2ec185314610a38578063a31d968514610a62578063a3d14e7214610a8a578063a457c2d714610ab2576103c2565b806395d89b41116101c057806395d89b4114610992578063969e24d8146109bc5780639c3b4fdc146109e4578063a0d82dc514610a0e576103c2565b80638da5cb5b146108ec5780638ea5220f146109165780639213691314610940578063924de9b71461096a576103c2565b806333defeae116102e15780636ddd1713116102745780637a3c6aff116102435780637a3c6aff1461086c5780637bce5a04146108825780638183b3c8146108ac578063860a32ec146108c2576103c2565b80636ddd1713146107c657806370a08231146107f0578063715018a61461082c57806375f0a87414610842576103c2565b80635a54bf02116102b05780635a54bf02146107345780635b4f472a1461075c5780635f189361146107865780636a486a8e1461079c576103c2565b806333defeae1461067a57806339509351146106a45780633dc599ff146106e057806349bd5a5e1461070a576103c2565b806318160ddd11610359578063232050f911610328578063232050f9146105c257806323b872dd146105ec5780632d99d32e14610628578063313ce56714610650576103c2565b806318160ddd1461051e5780631c499ab0146105485780631df148121461057057806321d9f2ca1461059a576103c2565b80630b5dbf26116103955780630b5dbf261461045457806310d5de531461047e578063129476ab146104ba57806316c02129146104e2576103c2565b80630517d13d146103c657806306fdde03146103ee578063095ea7b314610418576103c2565b366103c257005b5f80fd5b3480156103d1575f80fd5b506103ec60048036038101906103e79190613c05565b610e70565b005b3480156103f9575f80fd5b50610402610ed4565b60405161040f9190613ca0565b60405180910390f35b348015610423575f80fd5b5061043e60048036038101906104399190613d1a565b610f64565b60405161044b9190613d72565b60405180910390f35b34801561045f575f80fd5b50610468610f86565b6040516104759190613d72565b60405180910390f35b348015610489575f80fd5b506104a4600480360381019061049f9190613d8b565b610f98565b6040516104b19190613d72565b60405180910390f35b3480156104c5575f80fd5b506104e060048036038101906104db9190613de0565b610fb5565b005b3480156104ed575f80fd5b5061050860048036038101906105039190613d8b565b611183565b6040516105159190613d72565b60405180910390f35b348015610529575f80fd5b506105326111a0565b60405161053f9190613e2d565b60405180910390f35b348015610553575f80fd5b5061056e60048036038101906105699190613c05565b6111a9565b005b34801561057b575f80fd5b5061058461120d565b6040516105919190613d72565b60405180910390f35b3480156105a5575f80fd5b506105c060048036038101906105bb9190613de0565b611220565b005b3480156105cd575f80fd5b506105d6611280565b6040516105e39190613d72565b60405180910390f35b3480156105f7575f80fd5b50610612600480360381019061060d9190613e46565b6112a9565b60405161061f9190613d72565b60405180910390f35b348015610633575f80fd5b5061064e60048036038101906106499190613de0565b6112d7565b005b34801561065b575f80fd5b5061066461137c565b6040516106719190613eb1565b60405180910390f35b348015610685575f80fd5b5061068e611384565b60405161069b9190613e2d565b60405180910390f35b3480156106af575f80fd5b506106ca60048036038101906106c59190613d1a565b61138a565b6040516106d79190613d72565b60405180910390f35b3480156106eb575f80fd5b506106f46113c0565b6040516107019190613d72565b60405180910390f35b348015610715575f80fd5b5061071e6113d3565b60405161072b9190613ed9565b60405180910390f35b34801561073f575f80fd5b5061075a60048036038101906107559190613ef2565b6113f8565b005b348015610767575f80fd5b5061077061141c565b60405161077d9190613d72565b60405180910390f35b348015610791575f80fd5b5061079a61142f565b005b3480156107a7575f80fd5b506107b0611454565b6040516107bd9190613e2d565b60405180910390f35b3480156107d1575f80fd5b506107da61145a565b6040516107e79190613d72565b60405180910390f35b3480156107fb575f80fd5b5061081660048036038101906108119190613d8b565b61146c565b6040516108239190613e2d565b60405180910390f35b348015610837575f80fd5b506108406114b1565b005b34801561084d575f80fd5b506108566114c4565b6040516108639190613ed9565b60405180910390f35b348015610877575f80fd5b506108806114e9565b005b34801561088d575f80fd5b50610896611651565b6040516108a39190613e2d565b60405180910390f35b3480156108b7575f80fd5b506108c0611657565b005b3480156108cd575f80fd5b506108d6611767565b6040516108e39190613d72565b60405180910390f35b3480156108f7575f80fd5b50610900611779565b60405161090d9190613ed9565b60405180910390f35b348015610921575f80fd5b5061092a6117a1565b6040516109379190613ed9565b60405180910390f35b34801561094b575f80fd5b506109546117c6565b6040516109619190613e2d565b60405180910390f35b348015610975575f80fd5b50610990600480360381019061098b9190613ef2565b6117cc565b005b34801561099d575f80fd5b506109a66117f0565b6040516109b39190613ca0565b60405180910390f35b3480156109c7575f80fd5b506109e260048036038101906109dd9190613d8b565b611880565b005b3480156109ef575f80fd5b506109f86118cb565b604051610a059190613e2d565b60405180910390f35b348015610a19575f80fd5b50610a226118d1565b604051610a2f9190613e2d565b60405180910390f35b348015610a43575f80fd5b50610a4c6118d7565b604051610a599190613e2d565b60405180910390f35b348015610a6d575f80fd5b50610a886004803603810190610a839190613ef2565b6118dd565b005b348015610a95575f80fd5b50610ab06004803603810190610aab9190613f1d565b611902565b005b348015610abd575f80fd5b50610ad86004803603810190610ad39190613d1a565b611956565b604051610ae59190613d72565b60405180910390f35b348015610af9575f80fd5b50610b146004803603810190610b0f9190613d1a565b6119cb565b604051610b219190613d72565b60405180910390f35b348015610b35575f80fd5b50610b506004803603810190610b4b9190613d8b565b6119ed565b005b348015610b5d575f80fd5b50610b786004803603810190610b739190613d8b565b611a38565b604051610b859190613d72565b60405180910390f35b348015610b99575f80fd5b50610bb46004803603810190610baf9190613de0565b611a55565b005b348015610bc1575f80fd5b50610bca611ab5565b604051610bd79190613e2d565b60405180910390f35b348015610beb575f80fd5b50610c066004803603810190610c019190613f1d565b611abb565b005b348015610c13575f80fd5b50610c2e6004803603810190610c299190613c05565b611b0f565b604051610c3b9190613d72565b60405180910390f35b348015610c4f575f80fd5b50610c58611bee565b604051610c659190613e2d565b60405180910390f35b348015610c79575f80fd5b50610c82611bf4565b604051610c8f9190613e2d565b60405180910390f35b348015610ca3575f80fd5b50610cbe6004803603810190610cb99190613ef2565b611bfa565b005b348015610ccb575f80fd5b50610ce66004803603810190610ce19190613f6d565b611c1e565b604051610cf39190613e2d565b60405180910390f35b348015610d07575f80fd5b50610d10611ca0565b604051610d1d9190613e2d565b60405180910390f35b348015610d31575f80fd5b50610d3a611ca6565b005b348015610d47575f80fd5b50610d626004803603810190610d5d91906140d7565b611d4d565b005b348015610d6f575f80fd5b50610d786121f3565b604051610d859190613e2d565b60405180910390f35b348015610d99575f80fd5b50610db46004803603810190610daf9190613d8b565b6121f9565b005b348015610dc1575f80fd5b50610dca61227b565b604051610dd79190613e2d565b60405180910390f35b348015610deb575f80fd5b50610df4612281565b604051610e0191906141a8565b60405180910390f35b348015610e15575f80fd5b50610e1e6122a6565b604051610e2b9190613e2d565b60405180910390f35b348015610e3f575f80fd5b50610e5a6004803603810190610e559190613d8b565b6122ac565b604051610e679190613d72565b60405180910390f35b610e786122fe565b670de0b6b3a76400006103e86001610e8e6111a0565b610e9891906141ee565b610ea2919061425c565b610eac919061425c565b811015610eb7575f80fd5b670de0b6b3a764000081610ecb91906141ee565b600e8190555050565b606060038054610ee3906142b9565b80601f0160208091040260200160405190810160405280929190818152602001828054610f0f906142b9565b8015610f5a5780601f10610f3157610100808354040283529160200191610f5a565b820191905f5260205f20905b815481529060010190602001808311610f3d57829003601f168201915b5050505050905090565b5f80610f6e61237c565b9050610f7b818585612383565b600191505092915050565b601c5f9054906101000a900460ff1681565b600d602052805f5260405f205f915054906101000a900460ff1681565b610fbd6122fe565b601060019054906101000a900460ff161561100d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100490614359565b60405180910390fd5b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361109c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611093906143e7565b60405180910390fd5b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361112b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611122906143e7565b60405180910390fd5b8060225f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b6022602052805f5260405f205f915054906101000a900460ff1681565b5f600254905090565b6111b16122fe565b670de0b6b3a76400006103e860016111c76111a0565b6111d191906141ee565b6111db919061425c565b6111e5919061425c565b8110156111f0575f80fd5b670de0b6b3a76400008161120491906141ee565b600f8190555050565b601060029054906101000a900460ff1681565b6112286122fe565b80600d5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f6112896122fe565b5f60105f6101000a81548160ff0219169083151502179055506001905090565b5f806112b361237c565b90506112c0858285612546565b6112cb8585856125d1565b60019150509392505050565b6112df6122fe565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361136e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136590614475565b60405180910390fd5b61137882826131e4565b5050565b5f6012905090565b601f5481565b5f8061139461237c565b90506113b58185856113a68589611c1e565b6113b09190614493565b612383565b600191505092915050565b601060019054906101000a900460ff1681565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6114006122fe565b80601c5f6101000a81548160ff02191690831515021790555050565b600660149054906101000a900460ff1681565b6114376122fe565b6001601060016101000a81548160ff021916908315150217905550565b60155481565b600c5f9054906101000a900460ff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6114b96122fe565b6114c25f61323c565b565b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6114f161237c565b73ffffffffffffffffffffffffffffffffffffffff1661150f611779565b73ffffffffffffffffffffffffffffffffffffffff161480611584575061153461237c565b73ffffffffffffffffffffffffffffffffffffffff1660095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b6115c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ba90614536565b60405180910390fd5b5f60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161160990614581565b5f6040518083038185875af1925050503d805f8114611643576040519150601f19603f3d011682016040523d82523d5f602084013e611648565b606091505b50508091505050565b60125481565b61165f61237c565b73ffffffffffffffffffffffffffffffffffffffff1661167d611779565b73ffffffffffffffffffffffffffffffffffffffff1614806116f257506116a261237c565b73ffffffffffffffffffffffffffffffffffffffff1660095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b611731576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172890614536565b60405180910390fd5b6117653060095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166117603061146c565b6132ff565b565b60105f9054906101000a900460ff1681565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60165481565b6117d46122fe565b80600c5f6101000a81548160ff02191690831515021790555050565b6060600480546117ff906142b9565b80601f016020809104026020016040519081016040528092919081815260200182805461182b906142b9565b80156118765780601f1061184d57610100808354040283529160200191611876565b820191905f5260205f20905b81548152906001019060200180831161185957829003601f168201915b5050505050905090565b6118886122fe565b8060095f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60135481565b60175481565b60205481565b6118e56122fe565b80601060026101000a81548160ff02191690831515021790555050565b61190a6122fe565b8260168190555080601881905550816017819055506018546017546016546119329190614493565b61193c9190614493565b601581905550601e6015541115611951575f80fd5b505050565b5f8061196061237c565b90505f61196d8286611c1e565b9050838110156119b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a990614605565b60405180910390fd5b6119bf8286868403612383565b60019250505092915050565b5f806119d561237c565b90506119e28185856125d1565b600191505092915050565b6119f56122fe565b80600a5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6023602052805f5260405f205f915054906101000a900460ff1681565b611a5d6122fe565b80601d5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b600e5481565b611ac36122fe565b826012819055508060148190555081601381905550601454601354601254611aeb9190614493565b611af59190614493565b601181905550601e6011541115611b0a575f80fd5b505050565b5f611b186122fe565b620186a06001611b266111a0565b611b3091906141ee565b611b3a919061425c565b821015611b7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7390614693565b60405180910390fd5b60646004611b886111a0565b611b9291906141ee565b611b9c919061425c565b821115611bde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd590614721565b60405180910390fd5b81600b8190555060019050919050565b60215481565b60115481565b611c026122fe565b80601e5f6101000a81548160ff02191690831515021790555050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b600b5481565b611cae6122fe565b5f611cc0611cbb3061146c565b61356b565b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051611d0590614581565b5f6040518083038185875af1925050503d805f8114611d3f576040519150601f19603f3d011682016040523d82523d5f602084013e611d44565b606091505b50508091505050565b611d556122fe565b600660149054906101000a900460ff1615611d6e575f80fd5b8160039081611d7d91906148d3565b508060049081611d8d91906148d3565b50611dc13060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611dbc6111a0565b612383565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e2b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e4f91906149b6565b73ffffffffffffffffffffffffffffffffffffffff1663c9c653963060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ed5573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ef991906149b6565b6040518363ffffffff1660e01b8152600401611f169291906149e1565b6020604051808303815f875af1158015611f32573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f5691906149b6565b60065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611fc160065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001611220565b600160235f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719473061207f3061146c565b5f80612089611779565b426040518863ffffffff1660e01b81526004016120ab96959493929190614a41565b60606040518083038185885af11580156120c7573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906120ec9190614ab4565b50505060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b360075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b815260040161218c929190614b04565b6020604051808303815f875af11580156121a8573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121cc9190614b3f565b50436021819055506001600660146101000a81548160ff0219169083151502179055505050565b60145481565b6122016122fe565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361226f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226690614bda565b60405180910390fd5b6122788161323c565b50565b60185481565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600f5481565b5f601d5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b61230661237c565b73ffffffffffffffffffffffffffffffffffffffff16612324611779565b73ffffffffffffffffffffffffffffffffffffffff161461237a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237190614c42565b60405180910390fd5b565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036123f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e890614cd0565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361245f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245690614d5e565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516125399190613e2d565b60405180910390a3505050565b5f6125518484611c1e565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146125cb57818110156125bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125b490614dc6565b60405180910390fd5b6125ca8484848403612383565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361263f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161263690614e54565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036126ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126a490614ee2565b60405180910390fd5b60225f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615612737576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161272e90614f4a565b60405180910390fd5b5f810361274e5761274983835f6132ff565b6131df565b60105f9054906101000a900460ff1615612d065761276a611779565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156127d857506127a8611779565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156127f15750600860149054906101000a900460ff16155b801561282957505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612863575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612d0557600660149054906101000a900460ff1661295757601d5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806129175750601d5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b612956576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161294d90614fb2565b60405180910390fd5b5b5f600e5490505f6021544361296c9190614fd0565b9050600a811080156129895750601e5f9054906101000a900460ff165b801561299757506002602054115b15612a2d575f81036129cb5761271060c86129b06111a0565b6129ba91906141ee565b6129c4919061425c565b9150612a2c565b60088111156129fc5761271060646129e16111a0565b6129eb91906141ee565b6129f5919061425c565b9150612a2b565b612710600a82612a0c91906141ee565b612a146111a0565b612a1e91906141ee565b612a28919061425c565b91505b5b5b60235f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612aca5750600d5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612b6f5781831115612b12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b0990615073565b60405180910390fd5b600f54612b1e8561146c565b84612b299190614493565b1115612b6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b61906150db565b60405180910390fd5b612d02565b60235f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612c0c5750600d5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612c595781831115612c54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c4b90615169565b60405180910390fd5b612d01565b600d5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16612d0057600f54612cb38561146c565b84612cbe9190614493565b1115612cff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cf6906150db565b60405180910390fd5b5b5b5b50505b5b5f612d103061146c565b90505f600b548210159050808015612d335750600c5f9054906101000a900460ff165b8015612d4c5750600860149054906101000a900460ff16155b8015612d9f575060235f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612df25750601d5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612e455750601d5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612e89576001600860146101000a81548160ff021916908315150217905550612e6e836137a1565b5f600860146101000a81548160ff0219169083151502179055505b5f600860149054906101000a900460ff16159050601d5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612f385750601d5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15612f41575f90505b5f81156131aa5760235f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612f9f57505f601554115b1561306957612fcc6064612fbe60155488613a7e90919063ffffffff16565b613a9390919063ffffffff16565b905060155460185482612fdf91906141ee565b612fe9919061425c565b601b5f828254612ff99190614493565b925050819055506015546016548261301191906141ee565b61301b919061425c565b60195f82825461302b9190614493565b925050819055506015546017548261304391906141ee565b61304d919061425c565b601a5f82825461305d9190614493565b92505081905550613187565b60235f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156130c057505f601154115b15613186576130ed60646130df60115488613a7e90919063ffffffff16565b613a9390919063ffffffff16565b90506011546014548261310091906141ee565b61310a919061425c565b601b5f82825461311a9190614493565b925050819055506011546012548261313291906141ee565b61313c919061425c565b60195f82825461314c9190614493565b925050819055506011546013548261316491906141ee565b61316e919061425c565b601a5f82825461317e9190614493565b925050819055505b5b5f81111561319b5761319a8730836132ff565b5b80856131a79190614fd0565b94505b600a60205410156131cf57600160205f8282546131c79190614493565b925050819055505b6131da8787876132ff565b505050505b505050565b8060235f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361336d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161336490614e54565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036133db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133d290614ee2565b60405180910390fd5b6133e6838383613aa8565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015613469576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613460906151f7565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516135529190613e2d565b60405180910390a3613565848484613aad565b50505050565b5f600267ffffffffffffffff81111561358757613586613fb3565b5b6040519080825280602002602001820160405280156135b55781602001602082028036833780820191505090505b50905030815f815181106135cc576135cb615215565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613670573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061369491906149b6565b816001815181106136a8576136a7615215565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061370e3060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612383565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b81526004016137709594939291906152f9565b5f604051808303815f87803b158015613787575f80fd5b505af1158015613799573d5f803e3d5ffd5b505050505050565b5f6137ab3061146c565b90505f601a54601954601b546137c19190614493565b6137cb9190614493565b90505f808314806137db57505f82145b156137e857505050613a7b565b5f600b549050601c5f9054906101000a900460ff161561381857600b54851061381357600b54613815565b845b90505b80841115613824578093505b5f600284601b548761383691906141ee565b613840919061425c565b61384a919061425c565b90505f6138608287613ab290919063ffffffff16565b90505f47905061386f8261356b565b5f6138838247613ab290919063ffffffff16565b90505f6138ad8861389f60195485613a7e90919063ffffffff16565b613a9390919063ffffffff16565b90505f6138d7896138c9601a5486613a7e90919063ffffffff16565b613a9390919063ffffffff16565b90505f8183856138e79190614fd0565b6138f19190614fd0565b90505f601b819055505f6019819055505f601a819055505f8711801561391657505f81115b15613926576139258782613ac7565b5b5f83836139339190614493565b1115613a6f5760095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16838361397d9190614493565b844761398991906141ee565b613993919061425c565b60405161399f90614581565b5f6040518083038185875af1925050503d805f81146139d9576040519150601f19603f3d011682016040523d82523d5f602084013e6139de565b606091505b505080995050600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613a2990614581565b5f6040518083038185875af1925050503d805f8114613a63576040519150601f19603f3d011682016040523d82523d5f602084013e613a68565b606091505b5050809950505b50505050505050505050505b50565b5f8183613a8b91906141ee565b905092915050565b5f8183613aa0919061425c565b905092915050565b505050565b505050565b5f8183613abf9190614fd0565b905092915050565b613af33060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612383565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f8060095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401613b7996959493929190614a41565b60606040518083038185885af1158015613b95573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190613bba9190614ab4565b5050505050565b5f604051905090565b5f80fd5b5f80fd5b5f819050919050565b613be481613bd2565b8114613bee575f80fd5b50565b5f81359050613bff81613bdb565b92915050565b5f60208284031215613c1a57613c19613bca565b5b5f613c2784828501613bf1565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f613c7282613c30565b613c7c8185613c3a565b9350613c8c818560208601613c4a565b613c9581613c58565b840191505092915050565b5f6020820190508181035f830152613cb88184613c68565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f613ce982613cc0565b9050919050565b613cf981613cdf565b8114613d03575f80fd5b50565b5f81359050613d1481613cf0565b92915050565b5f8060408385031215613d3057613d2f613bca565b5b5f613d3d85828601613d06565b9250506020613d4e85828601613bf1565b9150509250929050565b5f8115159050919050565b613d6c81613d58565b82525050565b5f602082019050613d855f830184613d63565b92915050565b5f60208284031215613da057613d9f613bca565b5b5f613dad84828501613d06565b91505092915050565b613dbf81613d58565b8114613dc9575f80fd5b50565b5f81359050613dda81613db6565b92915050565b5f8060408385031215613df657613df5613bca565b5b5f613e0385828601613d06565b9250506020613e1485828601613dcc565b9150509250929050565b613e2781613bd2565b82525050565b5f602082019050613e405f830184613e1e565b92915050565b5f805f60608486031215613e5d57613e5c613bca565b5b5f613e6a86828701613d06565b9350506020613e7b86828701613d06565b9250506040613e8c86828701613bf1565b9150509250925092565b5f60ff82169050919050565b613eab81613e96565b82525050565b5f602082019050613ec45f830184613ea2565b92915050565b613ed381613cdf565b82525050565b5f602082019050613eec5f830184613eca565b92915050565b5f60208284031215613f0757613f06613bca565b5b5f613f1484828501613dcc565b91505092915050565b5f805f60608486031215613f3457613f33613bca565b5b5f613f4186828701613bf1565b9350506020613f5286828701613bf1565b9250506040613f6386828701613bf1565b9150509250925092565b5f8060408385031215613f8357613f82613bca565b5b5f613f9085828601613d06565b9250506020613fa185828601613d06565b9150509250929050565b5f80fd5b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b613fe982613c58565b810181811067ffffffffffffffff8211171561400857614007613fb3565b5b80604052505050565b5f61401a613bc1565b90506140268282613fe0565b919050565b5f67ffffffffffffffff82111561404557614044613fb3565b5b61404e82613c58565b9050602081019050919050565b828183375f83830152505050565b5f61407b6140768461402b565b614011565b90508281526020810184848401111561409757614096613faf565b5b6140a284828561405b565b509392505050565b5f82601f8301126140be576140bd613fab565b5b81356140ce848260208601614069565b91505092915050565b5f80604083850312156140ed576140ec613bca565b5b5f83013567ffffffffffffffff81111561410a57614109613bce565b5b614116858286016140aa565b925050602083013567ffffffffffffffff81111561413757614136613bce565b5b614143858286016140aa565b9150509250929050565b5f819050919050565b5f61417061416b61416684613cc0565b61414d565b613cc0565b9050919050565b5f61418182614156565b9050919050565b5f61419282614177565b9050919050565b6141a281614188565b82525050565b5f6020820190506141bb5f830184614199565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6141f882613bd2565b915061420383613bd2565b925082820261421181613bd2565b91508282048414831517614228576142276141c1565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61426682613bd2565b915061427183613bd2565b9250826142815761428061422f565b5b828204905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806142d057607f821691505b6020821081036142e3576142e261428c565b5b50919050565b7f5465616d20686173207265766f6b656420626c61636b6c6973742072696768745f8201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b5f614343602183613c3a565b915061434e826142e9565b604082019050919050565b5f6020820190508181035f83015261437081614337565b9050919050565b7f43616e6e6f7420626c61636b6c69737420746f6b656e277320763220726f75745f8201527f6572206f7220763220706f6f6c2e000000000000000000000000000000000000602082015250565b5f6143d1602e83613c3a565b91506143dc82614377565b604082019050919050565b5f6020820190508181035f8301526143fe816143c5565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f61445f603983613c3a565b915061446a82614405565b604082019050919050565b5f6020820190508181035f83015261448c81614453565b9050919050565b5f61449d82613bd2565b91506144a883613bd2565b92508282019050808211156144c0576144bf6141c1565b5b92915050565b7f43616c6c6572206973206e6f7420746865206f776e6572206f72206d61726b655f8201527f74696e672077616c6c6574000000000000000000000000000000000000000000602082015250565b5f614520602b83613c3a565b915061452b826144c6565b604082019050919050565b5f6020820190508181035f83015261454d81614514565b9050919050565b5f81905092915050565b50565b5f61456c5f83614554565b91506145778261455e565b5f82019050919050565b5f61458b82614561565b9150819050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f6145ef602583613c3a565b91506145fa82614595565b604082019050919050565b5f6020820190508181035f83015261461c816145e3565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e5f8201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b5f61467d603583613c3a565b915061468882614623565b604082019050919050565b5f6020820190508181035f8301526146aa81614671565b9050919050565b7f5377617020616d6f756e742063616e6e6f7420626520686967686572207468615f8201527f6e20342520746f74616c20737570706c792e0000000000000000000000000000602082015250565b5f61470b603283613c3a565b9150614716826146b1565b604082019050919050565b5f6020820190508181035f830152614738816146ff565b9050919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830261479b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82614760565b6147a58683614760565b95508019841693508086168417925050509392505050565b5f6147d76147d26147cd84613bd2565b61414d565b613bd2565b9050919050565b5f819050919050565b6147f0836147bd565b6148046147fc826147de565b84845461476c565b825550505050565b5f90565b61481861480c565b6148238184846147e7565b505050565b5b818110156148465761483b5f82614810565b600181019050614829565b5050565b601f82111561488b5761485c8161473f565b61486584614751565b81016020851015614874578190505b61488861488085614751565b830182614828565b50505b505050565b5f82821c905092915050565b5f6148ab5f1984600802614890565b1980831691505092915050565b5f6148c3838361489c565b9150826002028217905092915050565b6148dc82613c30565b67ffffffffffffffff8111156148f5576148f4613fb3565b5b6148ff82546142b9565b61490a82828561484a565b5f60209050601f83116001811461493b575f8415614929578287015190505b61493385826148b8565b86555061499a565b601f1984166149498661473f565b5f5b828110156149705784890151825560018201915060208501945060208101905061494b565b8683101561498d5784890151614989601f89168261489c565b8355505b6001600288020188555050505b505050505050565b5f815190506149b081613cf0565b92915050565b5f602082840312156149cb576149ca613bca565b5b5f6149d8848285016149a2565b91505092915050565b5f6040820190506149f45f830185613eca565b614a016020830184613eca565b9392505050565b5f819050919050565b5f614a2b614a26614a2184614a08565b61414d565b613bd2565b9050919050565b614a3b81614a11565b82525050565b5f60c082019050614a545f830189613eca565b614a616020830188613e1e565b614a6e6040830187614a32565b614a7b6060830186614a32565b614a886080830185613eca565b614a9560a0830184613e1e565b979650505050505050565b5f81519050614aae81613bdb565b92915050565b5f805f60608486031215614acb57614aca613bca565b5b5f614ad886828701614aa0565b9350506020614ae986828701614aa0565b9250506040614afa86828701614aa0565b9150509250925092565b5f604082019050614b175f830185613eca565b614b246020830184613e1e565b9392505050565b5f81519050614b3981613db6565b92915050565b5f60208284031215614b5457614b53613bca565b5b5f614b6184828501614b2b565b91505092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f614bc4602683613c3a565b9150614bcf82614b6a565b604082019050919050565b5f6020820190508181035f830152614bf181614bb8565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f614c2c602083613c3a565b9150614c3782614bf8565b602082019050919050565b5f6020820190508181035f830152614c5981614c20565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f614cba602483613c3a565b9150614cc582614c60565b604082019050919050565b5f6020820190508181035f830152614ce781614cae565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f614d48602283613c3a565b9150614d5382614cee565b604082019050919050565b5f6020820190508181035f830152614d7581614d3c565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000005f82015250565b5f614db0601d83613c3a565b9150614dbb82614d7c565b602082019050919050565b5f6020820190508181035f830152614ddd81614da4565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f614e3e602583613c3a565b9150614e4982614de4565b604082019050919050565b5f6020820190508181035f830152614e6b81614e32565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f614ecc602383613c3a565b9150614ed782614e72565b604082019050919050565b5f6020820190508181035f830152614ef981614ec0565b9050919050565b7f426c61636b6c69737465640000000000000000000000000000000000000000005f82015250565b5f614f34600b83613c3a565b9150614f3f82614f00565b602082019050919050565b5f6020820190508181035f830152614f6181614f28565b9050919050565b7f54726164696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f614f9c601683613c3a565b9150614fa782614f68565b602082019050919050565b5f6020820190508181035f830152614fc981614f90565b9050919050565b5f614fda82613bd2565b9150614fe583613bd2565b9250828203905081811115614ffd57614ffc6141c1565b5b92915050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b5f61505d603583613c3a565b915061506882615003565b604082019050919050565b5f6020820190508181035f83015261508a81615051565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f6150c5601383613c3a565b91506150d082615091565b602082019050919050565b5f6020820190508181035f8301526150f2816150b9565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b5f615153603683613c3a565b915061515e826150f9565b604082019050919050565b5f6020820190508181035f83015261518081615147565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f6151e1602683613c3a565b91506151ec82615187565b604082019050919050565b5f6020820190508181035f83015261520e816151d5565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61527481613cdf565b82525050565b5f615285838361526b565b60208301905092915050565b5f602082019050919050565b5f6152a782615242565b6152b1818561524c565b93506152bc8361525c565b805f5b838110156152ec5781516152d3888261527a565b97506152de83615291565b9250506001810190506152bf565b5085935050505092915050565b5f60a08201905061530c5f830188613e1e565b6153196020830187614a32565b818103604083015261532b818661529d565b905061533a6060830185613eca565b6153476080830184613e1e565b969550505050505056fea2646970667358221220d67fe5b6799c9a4fc441a81998e5ca1e13b4d1137002a57726abaaa8403de2c864736f6c634300081a0033

Deployed Bytecode Sourcemap

34469:15819:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39187:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23299:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25650:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35548:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34874:63;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45852:425;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35817:42;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24419:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39410:199;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35097:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39617:153;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38468:111;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26431:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40682:279;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24261:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35694:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27135:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35052:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34544:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46629:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34579:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46283:90;;;;;;;;;;;;;:::i;:::-;;35288:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34835:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24590:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2539:103;;;;;;;;;;;;;:::i;:::-;;34727:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50008:277;;;;;;;;;;;;;:::i;:::-;;35183:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49734:266;;;;;;;;;;;;;:::i;:::-;;35017:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1891:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34764:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35323:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39079:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23518:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41109:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35220:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35361:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35743:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46499:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40156:379;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27876:436;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24923:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41235:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35868:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40543:129;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34944:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39778:370;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38589:482;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35776:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35149:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46379:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25179:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34795:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49510:216;;;;;;;;;;;;;:::i;:::-;;37637:821;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35251:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2797:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35393:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34624:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34986:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41349:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39187:215;1777:13;:11;:13::i;:::-;39326:4:::1;39318;39313:1;39297:13;:11;:13::i;:::-;:17;;;;:::i;:::-;39296:26;;;;:::i;:::-;39295:35;;;;:::i;:::-;39285:6;:45;;39263:78;;;::::0;::::1;;39385:8;39375:6;:19;;;;:::i;:::-;39352:20;:42;;;;39187:215:::0;:::o;23299:100::-;23353:13;23386:5;23379:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23299:100;:::o;25650:201::-;25733:4;25750:13;25766:12;:10;:12::i;:::-;25750:28;;25789:32;25798:5;25805:7;25814:6;25789:8;:32::i;:::-;25839:4;25832:11;;;25650:201;;;;:::o;35548:38::-;;;;;;;;;;;;;:::o;34874:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;45852:425::-;1777:13;:11;:13::i;:::-;45956:18:::1;;;;;;;;;;;45955:19;45947:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;46051:13;;;;;;;;;;;46031:34;;:8;:34;;::::0;46023:92:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;46154:13;;;;;;;;;;;46134:34;;:8;:34;;::::0;46126:92:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;46254:15;46231:10;:20;46242:8;46231:20;;;;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;45852:425:::0;;:::o;35817:42::-;;;;;;;;;;;;;;;;;;;;;;:::o;24419:108::-;24480:7;24507:12;;24500:19;;24419:108;:::o;39410:199::-;1777:13;:11;:13::i;:::-;39544:4:::1;39536;39531:1;39515:13;:11;:13::i;:::-;:17;;;;:::i;:::-;39514:26;;;;:::i;:::-;39513:35;;;;:::i;:::-;39503:6;:45;;39481:78;;;::::0;::::1;;39592:8;39582:6;:19;;;;:::i;:::-;39570:9;:31;;;;39410:199:::0;:::o;35097:41::-;;;;;;;;;;;;;:::o;39617:153::-;1777:13;:11;:13::i;:::-;39758:4:::1;39716:31;:39;39748:6;39716:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;39617:153:::0;;:::o;38468:111::-;38517:4;1777:13;:11;:13::i;:::-;38544:5:::1;38534:7;;:15;;;;;;;;;;;;;;;;;;38567:4;38560:11;;38468:111:::0;:::o;26431:295::-;26562:4;26579:15;26597:12;:10;:12::i;:::-;26579:30;;26620:38;26636:4;26642:7;26651:6;26620:15;:38::i;:::-;26669:27;26679:4;26685:2;26689:6;26669:9;:27::i;:::-;26714:4;26707:11;;;26431:295;;;;;:::o;40682:279::-;1777:13;:11;:13::i;:::-;40801::::1;;;;;;;;;;;40793:21;;:4;:21;;::::0;40771:128:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;40912:41;40941:4;40947:5;40912:28;:41::i;:::-;40682:279:::0;;:::o;24261:93::-;24319:5;24344:2;24337:9;;24261:93;:::o;35694:42::-;;;;:::o;27135:238::-;27223:4;27240:13;27256:12;:10;:12::i;:::-;27240:28;;27279:64;27288:5;27295:7;27332:10;27304:25;27314:5;27321:7;27304:9;:25::i;:::-;:38;;;;:::i;:::-;27279:8;:64::i;:::-;27361:4;27354:11;;;27135:238;;;;:::o;35052:38::-;;;;;;;;;;;;;:::o;34544:28::-;;;;;;;;;;;;;:::o;46629:112::-;1777:13;:11;:13::i;:::-;46727:6:::1;46705:19;;:28;;;;;;;;;;;;;;;;;;46629:112:::0;:::o;34579:34::-;;;;;;;;;;;;;:::o;46283:90::-;1777:13;:11;:13::i;:::-;46361:4:::1;46340:18;;:25;;;;;;;;;;;;;;;;;;46283:90::o:0;35288:28::-;;;;:::o;34835:30::-;;;;;;;;;;;;;:::o;24590:127::-;24664:7;24691:9;:18;24701:7;24691:18;;;;;;;;;;;;;;;;24684:25;;24590:127;;;:::o;2539:103::-;1777:13;:11;:13::i;:::-;2604:30:::1;2631:1;2604:18;:30::i;:::-;2539:103::o:0;34727:30::-;;;;;;;;;;;;;:::o;50008:277::-;50071:12;:10;:12::i;:::-;50060:23;;:7;:5;:7::i;:::-;:23;;;:58;;;;50106:12;:10;:12::i;:::-;50087:31;;:15;;;;;;;;;;;:31;;;50060:58;50052:114;;;;;;;;;;;;:::i;:::-;;;;;;;;;50177:12;50221:15;;;;;;;;;;;50213:29;;50251:21;50213:64;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50200:77;;;;;50041:244;50008:277::o;35183:30::-;;;;:::o;49734:266::-;49804:12;:10;:12::i;:::-;49793:23;;:7;:5;:7::i;:::-;:23;;;:58;;;;49839:12;:10;:12::i;:::-;49820:31;;:15;;;;;;;;;;;:31;;;49793:58;49785:114;;;;;;;;;;;;:::i;:::-;;;;;;;;;49910:82;49934:4;49949:15;;;;;;;;;;;49967:24;49985:4;49967:9;:24::i;:::-;49910:15;:82::i;:::-;49734:266::o;35017:26::-;;;;;;;;;;;;;:::o;1891:87::-;1937:7;1964:6;;;;;;;;;;;1957:13;;1891:87;:::o;34764:24::-;;;;;;;;;;;;;:::o;35323:31::-;;;;:::o;39079:100::-;1777:13;:11;:13::i;:::-;39164:7:::1;39150:11;;:21;;;;;;;;;;;;;;;;;;39079:100:::0;:::o;23518:104::-;23574:13;23607:7;23600:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23518:104;:::o;41109:118::-;1777:13;:11;:13::i;:::-;41212:7:::1;41194:15;;:25;;;;;;;;;;;;;;;;;;41109:118:::0;:::o;35220:24::-;;;;:::o;35361:25::-;;;;:::o;35743:26::-;;;;:::o;46499:122::-;1777:13;:11;:13::i;:::-;46607:6:::1;46582:22;;:31;;;;;;;;;;;;;;;;;;46499:122:::0;:::o;40156:379::-;1777:13;:11;:13::i;:::-;40326::::1;40307:16;:32;;;;40369:13;40350:16;:32;;;;40406:7;40393:10;:20;;;;40472:16;;40459:10;;40440:16;;:29;;;;:::i;:::-;:48;;;;:::i;:::-;40424:13;:64;;;;40524:2;40507:13;;:19;;40499:28;;;::::0;::::1;;40156:379:::0;;;:::o;27876:436::-;27969:4;27986:13;28002:12;:10;:12::i;:::-;27986:28;;28025:24;28052:25;28062:5;28069:7;28052:9;:25::i;:::-;28025:52;;28116:15;28096:16;:35;;28088:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;28209:60;28218:5;28225:7;28253:15;28234:16;:34;28209:8;:60::i;:::-;28300:4;28293:11;;;;27876:436;;;;:::o;24923:193::-;25002:4;25019:13;25035:12;:10;:12::i;:::-;25019:28;;25058;25068:5;25075:2;25079:6;25058:9;:28::i;:::-;25104:4;25097:11;;;24923:193;;;;:::o;41235:106::-;1777:13;:11;:13::i;:::-;41326:7:::1;41314:9;;:19;;;;;;;;;;;;;;;;;;41235:106:::0;:::o;35868:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;40543:129::-;1777:13;:11;:13::i;:::-;40656:8:::1;40628:16;:25;40645:7;40628:25;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;40543:129:::0;;:::o;34944:35::-;;;;:::o;39778:370::-;1777:13;:11;:13::i;:::-;39946::::1;39928:15;:31;;;;39988:13;39970:15;:31;;;;40024:7;40012:9;:19;;;;40087:15;;40075:9;;40057:15;;:27;;;;:::i;:::-;:45;;;;:::i;:::-;40042:12;:60;;;;40137:2;40121:12;;:18;;40113:27;;;::::0;::::1;;39778:370:::0;;;:::o;38589:482::-;38685:4;1777:13;:11;:13::i;:::-;38764:6:::1;38759:1;38743:13;:11;:13::i;:::-;:17;;;;:::i;:::-;38742:28;;;;:::i;:::-;38729:9;:41;;38707:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;38919:3;38914:1;38898:13;:11;:13::i;:::-;:17;;;;:::i;:::-;38897:25;;;;:::i;:::-;38884:9;:38;;38862:138;;;;;;;;;;;;:::i;:::-;;;;;;;;;39032:9;39011:18;:30;;;;39059:4;39052:11;;38589:482:::0;;;:::o;35776:32::-;;;;:::o;35149:27::-;;;;:::o;46379:112::-;1777:13;:11;:13::i;:::-;46477:6:::1;46450:24;;:33;;;;;;;;;;;;;;;;;;46379:112:::0;:::o;25179:151::-;25268:7;25295:11;:18;25307:5;25295:18;;;;;;;;;;;;;;;:27;25314:7;25295:27;;;;;;;;;;;;;;;;25288:34;;25179:151;;;;:::o;34795:33::-;;;;:::o;49510:216::-;1777:13;:11;:13::i;:::-;49565:12:::1;49588:42;49605:24;49623:4;49605:9;:24::i;:::-;49588:16;:42::i;:::-;49662:15;;;;;;;;;;;49654:29;;49692:21;49654:64;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49641:77;;;;;49554:172;49510:216::o:0;37637:821::-;1777:13;:11;:13::i;:::-;37732:14:::1;;;;;;;;;;;37731:15;37723:24;;;::::0;::::1;;37766:4;37758:5;:12;;;;;;:::i;:::-;;37791:6;37781:7;:16;;;;;;:::i;:::-;;37808:55;37825:4;37840:6;;;;;;;;;;;37849:13;:11;:13::i;:::-;37808:8;:55::i;:::-;37908:6;;;;;;;;;;;:14;;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37890:46;;;37945:4;37952:6;;;;;;;;;;;:11;;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37890:76;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37874:13;;:92;;;;;;;;;;;;;;;;;;37977:49;38005:13;;;;;;;;;;;38021:4;37977:19;:49::i;:::-;38080:4;38037:25;:40;38063:13;;;;;;;;;;;38037:40;;;;;;;;;;;;;;;;:47;;;;;;;;;;;;;;;;;;38095:6;;;;;;;;;;;:22;;;38127:21;38173:4;38193:24;38211:4;38193:9;:24::i;:::-;38232:1;38248::::0;38264:7:::1;:5;:7::i;:::-;38286:15;38095:207;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;38320:13;;;;;;;;;;;38313:29;;;38351:6;;;;;;;;;;;38360:14;38313:62;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;38406:12;38386:17;:32;;;;38446:4;38429:14;;:21;;;;;;;;;;;;;;;;;;37637:821:::0;;:::o;35251:30::-;;;;:::o;2797:201::-;1777:13;:11;:13::i;:::-;2906:1:::1;2886:22;;:8;:22;;::::0;2878:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;2962:28;2981:8;2962:18;:28::i;:::-;2797:201:::0;:::o;35393:31::-;;;;:::o;34624:32::-;;;;;;;;;;;;;:::o;34986:24::-;;;;:::o;41349:126::-;41418:4;41442:16;:25;41459:7;41442:25;;;;;;;;;;;;;;;;;;;;;;;;;41435:32;;41349:126;;;:::o;2056:132::-;2131:12;:10;:12::i;:::-;2120:23;;:7;:5;:7::i;:::-;:23;;;2112:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2056:132::o;600:98::-;653:7;680:10;673:17;;600:98;:::o;31885:380::-;32038:1;32021:19;;:5;:19;;;32013:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32119:1;32100:21;;:7;:21;;;32092:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32203:6;32173:11;:18;32185:5;32173:18;;;;;;;;;;;;;;;:27;32192:7;32173:27;;;;;;;;;;;;;;;:36;;;;32241:7;32225:32;;32234:5;32225:32;;;32250:6;32225:32;;;;;;:::i;:::-;;;;;;;;31885:380;;;:::o;32556:453::-;32691:24;32718:25;32728:5;32735:7;32718:9;:25::i;:::-;32691:52;;32778:17;32758:16;:37;32754:248;;32840:6;32820:16;:26;;32812:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32924:51;32933:5;32940:7;32968:6;32949:16;:25;32924:8;:51::i;:::-;32754:248;32680:329;32556:453;;;:::o;41485:4359::-;41633:1;41617:18;;:4;:18;;;41609:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41710:1;41696:16;;:2;:16;;;41688:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;41772:10;:16;41783:4;41772:16;;;;;;;;;;;;;;;;;;;;;;;;;41771:17;41763:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;41829:1;41819:6;:11;41815:93;;41847:28;41863:4;41869:2;41873:1;41847:15;:28::i;:::-;41890:7;;41815:93;41924:7;;;;;;;;;;;41920:2224;;;41978:7;:5;:7::i;:::-;41970:15;;:4;:15;;;;:49;;;;;42012:7;:5;:7::i;:::-;42006:13;;:2;:13;;;;41970:49;:79;;;;;42041:8;;;;;;;;;;;42040:9;41970:79;:116;;;;;42084:1;42070:16;;:2;:16;;;;41970:116;:158;;;;;42121:6;42107:21;;:2;:21;;;;41970:158;41948:2185;;;42170:14;;;;;;;;;;;42165:218;;42243:16;:22;42260:4;42243:22;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;42269:16;:20;42286:2;42269:20;;;;;;;;;;;;;;;;;;;;;;;;;42243:46;42209:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;42165:218;42407:19;42429:20;;42407:42;;42468:18;42504:17;;42489:12;:32;;;;:::i;:::-;42468:53;;42557:2;42544:10;:15;:43;;;;;42563:24;;;;;;;;;;;42544:43;:62;;;;;42605:1;42591:11;;:15;42544:62;42540:452;;;42648:1;42634:10;:15;42631:342;;42714:5;42708:3;42692:13;:11;:13::i;:::-;:19;;;;:::i;:::-;:27;;;;:::i;:::-;42678:41;;42631:342;;;42766:1;42753:10;:14;42749:224;;;42832:5;42826:3;42810:13;:11;:13::i;:::-;:19;;;;:::i;:::-;:27;;;;:::i;:::-;42796:41;;42749:224;;;42944:5;42938:2;42925:10;:15;;;;:::i;:::-;42908:13;:11;:13::i;:::-;:33;;;;:::i;:::-;:41;;;;:::i;:::-;42894:55;;42749:224;42631:342;42540:452;43040:25;:31;43066:4;43040:31;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;43097:31;:35;43129:2;43097:35;;;;;;;;;;;;;;;;;;;;;;;;;43096:36;43040:92;43014:1102;;;43219:11;43209:6;:21;;43175:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;43418:9;;43401:13;43411:2;43401:9;:13::i;:::-;43392:6;:22;;;;:::i;:::-;:35;;43358:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;43014:1102;;;43569:25;:29;43595:2;43569:29;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;43624:31;:37;43656:4;43624:37;;;;;;;;;;;;;;;;;;;;;;;;;43623:38;43569:92;43543:573;;;43748:11;43738:6;:21;;43704:161;;;;;;;;;;;;:::i;:::-;;;;;;;;;43543:573;;;43896:31;:35;43928:2;43896:35;;;;;;;;;;;;;;;;;;;;;;;;;43891:225;;44016:9;;43999:13;44009:2;43999:9;:13::i;:::-;43990:6;:22;;;;:::i;:::-;:35;;43956:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;43891:225;43543:573;43014:1102;42146:1987;;41948:2185;41920:2224;44154:28;44185:24;44203:4;44185:9;:24::i;:::-;44154:55;;44222:12;44261:18;;44237:20;:42;;44222:57;;44310:7;:35;;;;;44334:11;;;;;;;;;;;44310:35;:61;;;;;44363:8;;;;;;;;;;;44362:9;44310:61;:110;;;;;44389:25;:31;44415:4;44389:31;;;;;;;;;;;;;;;;;;;;;;;;;44388:32;44310:110;:150;;;;;44438:16;:22;44455:4;44438:22;;;;;;;;;;;;;;;;;;;;;;;;;44437:23;44310:150;:188;;;;;44478:16;:20;44495:2;44478:20;;;;;;;;;;;;;;;;;;;;;;;;;44477:21;44310:188;44292:322;;;44536:4;44525:8;;:15;;;;;;;;;;;;;;;;;;44555:16;44564:6;44555:8;:16::i;:::-;44597:5;44586:8;;:16;;;;;;;;;;;;;;;;;;44292:322;44626:12;44642:8;;;;;;;;;;;44641:9;44626:24;;44667:16;:22;44684:4;44667:22;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;44693:16;:20;44710:2;44693:20;;;;;;;;;;;;;;;;;;;;;;;;;44667:46;44663:94;;;44740:5;44730:15;;44663:94;44769:12;44800:7;44796:922;;;44828:25;:29;44854:2;44828:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;44877:1;44861:13;;:17;44828:50;44824:745;;;44906:34;44936:3;44906:25;44917:13;;44906:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;44899:41;;45009:13;;44989:16;;44982:4;:23;;;;:::i;:::-;44981:41;;;;:::i;:::-;44959:18;;:63;;;;;;;:::i;:::-;;;;;;;;45091:13;;45071:16;;45064:4;:23;;;;:::i;:::-;45063:41;;;;:::i;:::-;45041:18;;:63;;;;;;;:::i;:::-;;;;;;;;45161:13;;45147:10;;45140:4;:17;;;;:::i;:::-;45139:35;;;;:::i;:::-;45123:12;;:51;;;;;;;:::i;:::-;;;;;;;;44824:745;;;45213:25;:31;45239:4;45213:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;45263:1;45248:12;;:16;45213:51;45209:360;;;45292:33;45321:3;45292:24;45303:12;;45292:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;45285:40;;45393:12;;45374:15;;45367:4;:22;;;;:::i;:::-;45366:39;;;;:::i;:::-;45344:18;;:61;;;;;;;:::i;:::-;;;;;;;;45473:12;;45454:15;;45447:4;:22;;;;:::i;:::-;45446:39;;;;:::i;:::-;45424:18;;:61;;;;;;;:::i;:::-;;;;;;;;45541:12;;45528:9;;45521:4;:16;;;;:::i;:::-;45520:33;;;;:::i;:::-;45504:12;;:49;;;;;;;:::i;:::-;;;;;;;;45209:360;44824:745;45596:1;45589:4;:8;45585:91;;;45618:42;45634:4;45648;45655;45618:15;:42::i;:::-;45585:91;45702:4;45692:14;;;;;:::i;:::-;;;44796:922;45746:2;45732:11;;:16;45728:65;;;45780:1;45765:11;;:16;;;;;;;:::i;:::-;;;;;;;;45728:65;45803:33;45819:4;45825:2;45829:6;45803:15;:33::i;:::-;41598:4246;;;;41485:4359;;;;:::o;40969:132::-;41086:5;41052:25;:31;41078:4;41052:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;40969:132;;:::o;3158:191::-;3232:16;3251:6;;;;;;;;;;;3232:25;;3277:8;3268:6;;:17;;;;;;;;;;;;;;;;;;3332:8;3301:40;;3322:8;3301:40;;;;;;;;;;;;3221:128;3158:191;:::o;28782:830::-;28929:1;28913:18;;:4;:18;;;28905:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29006:1;28992:16;;:2;:16;;;28984:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;29059:38;29080:4;29086:2;29090:6;29059:20;:38::i;:::-;29110:19;29132:9;:15;29142:4;29132:15;;;;;;;;;;;;;;;;29110:37;;29181:6;29166:11;:21;;29158:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;29298:6;29284:11;:20;29266:9;:15;29276:4;29266:15;;;;;;;;;;;;;;;:38;;;;29493:6;29476:9;:13;29486:2;29476:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;29543:2;29528:26;;29537:4;29528:26;;;29547:6;29528:26;;;;;;:::i;:::-;;;;;;;;29567:37;29587:4;29593:2;29597:6;29567:19;:37::i;:::-;28894:718;28782:830;;;:::o;46753:448::-;46819:21;46857:1;46843:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46819:40;;46888:4;46870;46875:1;46870:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;46914:6;;;;;;;;;;;:11;;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;46904:4;46909:1;46904:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;46940:53;46957:4;46972:6;;;;;;;;;;;46981:11;46940:8;:53::i;:::-;47006:6;;;;;;;;;;;:57;;;47078:11;47104:1;47120:4;47147;47167:15;47006:187;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46808:393;46753:448;:::o;47570:1934::-;47622:23;47648:24;47666:4;47648:9;:24::i;:::-;47622:50;;47683:25;47753:12;;47732:18;;47711;;:39;;;;:::i;:::-;:54;;;;:::i;:::-;47683:82;;47776:12;47824:1;47805:15;:20;:46;;;;47850:1;47829:17;:22;47805:46;47801:85;;;47868:7;;;;;47801:85;47898:20;47921:18;;47898:41;;47954:19;;;;;;;;;;;47950:124;;;48014:18;;48005:6;:27;:57;;48044:18;;48005:57;;;48035:6;48005:57;47990:72;;47950:124;48108:12;48090:15;:30;48086:93;;;48155:12;48137:30;;48086:93;48191:23;48320:1;48279:17;48236:18;;48218:15;:36;;;;:::i;:::-;48217:79;;;;:::i;:::-;:104;;;;:::i;:::-;48191:130;;48332:26;48361:36;48381:15;48361;:19;;:36;;;;:::i;:::-;48332:65;;48410:25;48438:21;48410:49;;48472:36;48489:18;48472:16;:36::i;:::-;48521:18;48542:44;48568:17;48542:21;:25;;:44;;;;:::i;:::-;48521:65;;48599:23;48625:81;48678:17;48625:34;48640:18;;48625:10;:14;;:34;;;;:::i;:::-;:38;;:81;;;;:::i;:::-;48599:107;;48717:17;48737:75;48784:17;48737:28;48752:12;;48737:10;:14;;:28;;;;:::i;:::-;:32;;:75;;;;:::i;:::-;48717:95;;48825:23;48882:9;48864:15;48851:10;:28;;;;:::i;:::-;:40;;;;:::i;:::-;48825:66;;48925:1;48904:18;:22;;;;48958:1;48937:18;:22;;;;48985:1;48970:12;:16;;;;49021:1;49003:15;:19;:42;;;;;49044:1;49026:15;:19;49003:42;48999:123;;;49062:46;49075:15;49092;49062:12;:46::i;:::-;48999:123;49168:1;49150:15;49138:9;:27;;;;:::i;:::-;:31;49134:361;;;49207:15;;;;;;;;;;;49199:29;;49316:15;49304:9;:27;;;;:::i;:::-;49285:15;49260:21;49259:41;;;;:::i;:::-;:73;;;;:::i;:::-;49199:156;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49186:169;;;;;49393:9;;;;;;;;;;;49385:23;;49439:21;49385:98;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49372:111;;;;;49134:361;47609:1895;;;;;;;;;;;47570:1934;;:::o;9511:98::-;9569:7;9600:1;9596;:5;;;;:::i;:::-;9589:12;;9511:98;;;;:::o;9910:::-;9968:7;9999:1;9995;:5;;;;:::i;:::-;9988:12;;9910:98;;;;:::o;33609:125::-;;;;:::o;34338:124::-;;;;:::o;9154:98::-;9212:7;9243:1;9239;:5;;;;:::i;:::-;9232:12;;9154:98;;;;:::o;47209:353::-;47290:53;47307:4;47322:6;;;;;;;;;;;47331:11;47290:8;:53::i;:::-;47356:6;;;;;;;;;;;:22;;;47387:9;47420:4;47440:11;47466:1;47482;47498:15;;;;;;;;;;;47528;47356:198;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;47209:353;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:329::-;749:6;798:2;786:9;777:7;773:23;769:32;766:119;;;804:79;;:::i;:::-;766:119;924:1;949:53;994:7;985:6;974:9;970:22;949:53;:::i;:::-;939:63;;895:117;690:329;;;;:::o;1025:99::-;1077:6;1111:5;1105:12;1095:22;;1025:99;;;:::o;1130:169::-;1214:11;1248:6;1243:3;1236:19;1288:4;1283:3;1279:14;1264:29;;1130:169;;;;:::o;1305:139::-;1394:6;1389:3;1384;1378:23;1435:1;1426:6;1421:3;1417:16;1410:27;1305:139;;;:::o;1450:102::-;1491:6;1542:2;1538:7;1533:2;1526:5;1522:14;1518:28;1508:38;;1450:102;;;:::o;1558:377::-;1646:3;1674:39;1707:5;1674:39;:::i;:::-;1729:71;1793:6;1788:3;1729:71;:::i;:::-;1722:78;;1809:65;1867:6;1862:3;1855:4;1848:5;1844:16;1809:65;:::i;:::-;1899:29;1921:6;1899:29;:::i;:::-;1894:3;1890:39;1883:46;;1650:285;1558:377;;;;:::o;1941:313::-;2054:4;2092:2;2081:9;2077:18;2069:26;;2141:9;2135:4;2131:20;2127:1;2116:9;2112:17;2105:47;2169:78;2242:4;2233:6;2169:78;:::i;:::-;2161:86;;1941:313;;;;:::o;2260:126::-;2297:7;2337:42;2330:5;2326:54;2315:65;;2260:126;;;:::o;2392:96::-;2429:7;2458:24;2476:5;2458:24;:::i;:::-;2447:35;;2392:96;;;:::o;2494:122::-;2567:24;2585:5;2567:24;:::i;:::-;2560:5;2557:35;2547:63;;2606:1;2603;2596:12;2547:63;2494:122;:::o;2622:139::-;2668:5;2706:6;2693:20;2684:29;;2722:33;2749:5;2722:33;:::i;:::-;2622:139;;;;:::o;2767:474::-;2835:6;2843;2892:2;2880:9;2871:7;2867:23;2863:32;2860:119;;;2898:79;;:::i;:::-;2860:119;3018:1;3043:53;3088:7;3079:6;3068:9;3064:22;3043:53;:::i;:::-;3033:63;;2989:117;3145:2;3171:53;3216:7;3207:6;3196:9;3192:22;3171:53;:::i;:::-;3161:63;;3116:118;2767:474;;;;;:::o;3247:90::-;3281:7;3324:5;3317:13;3310:21;3299:32;;3247:90;;;:::o;3343:109::-;3424:21;3439:5;3424:21;:::i;:::-;3419:3;3412:34;3343:109;;:::o;3458:210::-;3545:4;3583:2;3572:9;3568:18;3560:26;;3596:65;3658:1;3647:9;3643:17;3634:6;3596:65;:::i;:::-;3458:210;;;;:::o;3674:329::-;3733:6;3782:2;3770:9;3761:7;3757:23;3753:32;3750:119;;;3788:79;;:::i;:::-;3750:119;3908:1;3933:53;3978:7;3969:6;3958:9;3954:22;3933:53;:::i;:::-;3923:63;;3879:117;3674:329;;;;:::o;4009:116::-;4079:21;4094:5;4079:21;:::i;:::-;4072:5;4069:32;4059:60;;4115:1;4112;4105:12;4059:60;4009:116;:::o;4131:133::-;4174:5;4212:6;4199:20;4190:29;;4228:30;4252:5;4228:30;:::i;:::-;4131:133;;;;:::o;4270:468::-;4335:6;4343;4392:2;4380:9;4371:7;4367:23;4363:32;4360:119;;;4398:79;;:::i;:::-;4360:119;4518:1;4543:53;4588:7;4579:6;4568:9;4564:22;4543:53;:::i;:::-;4533:63;;4489:117;4645:2;4671:50;4713:7;4704:6;4693:9;4689:22;4671:50;:::i;:::-;4661:60;;4616:115;4270:468;;;;;:::o;4744:118::-;4831:24;4849:5;4831:24;:::i;:::-;4826:3;4819:37;4744:118;;:::o;4868:222::-;4961:4;4999:2;4988:9;4984:18;4976:26;;5012:71;5080:1;5069:9;5065:17;5056:6;5012:71;:::i;:::-;4868:222;;;;:::o;5096:619::-;5173:6;5181;5189;5238:2;5226:9;5217:7;5213:23;5209:32;5206:119;;;5244:79;;:::i;:::-;5206:119;5364:1;5389:53;5434:7;5425:6;5414:9;5410:22;5389:53;:::i;:::-;5379:63;;5335:117;5491:2;5517:53;5562:7;5553:6;5542:9;5538:22;5517:53;:::i;:::-;5507:63;;5462:118;5619:2;5645:53;5690:7;5681:6;5670:9;5666:22;5645:53;:::i;:::-;5635:63;;5590:118;5096:619;;;;;:::o;5721:86::-;5756:7;5796:4;5789:5;5785:16;5774:27;;5721:86;;;:::o;5813:112::-;5896:22;5912:5;5896:22;:::i;:::-;5891:3;5884:35;5813:112;;:::o;5931:214::-;6020:4;6058:2;6047:9;6043:18;6035:26;;6071:67;6135:1;6124:9;6120:17;6111:6;6071:67;:::i;:::-;5931:214;;;;:::o;6151:118::-;6238:24;6256:5;6238:24;:::i;:::-;6233:3;6226:37;6151:118;;:::o;6275:222::-;6368:4;6406:2;6395:9;6391:18;6383:26;;6419:71;6487:1;6476:9;6472:17;6463:6;6419:71;:::i;:::-;6275:222;;;;:::o;6503:323::-;6559:6;6608:2;6596:9;6587:7;6583:23;6579:32;6576:119;;;6614:79;;:::i;:::-;6576:119;6734:1;6759:50;6801:7;6792:6;6781:9;6777:22;6759:50;:::i;:::-;6749:60;;6705:114;6503:323;;;;:::o;6832:619::-;6909:6;6917;6925;6974:2;6962:9;6953:7;6949:23;6945:32;6942:119;;;6980:79;;:::i;:::-;6942:119;7100:1;7125:53;7170:7;7161:6;7150:9;7146:22;7125:53;:::i;:::-;7115:63;;7071:117;7227:2;7253:53;7298:7;7289:6;7278:9;7274:22;7253:53;:::i;:::-;7243:63;;7198:118;7355:2;7381:53;7426:7;7417:6;7406:9;7402:22;7381:53;:::i;:::-;7371:63;;7326:118;6832:619;;;;;:::o;7457:474::-;7525:6;7533;7582:2;7570:9;7561:7;7557:23;7553:32;7550:119;;;7588:79;;:::i;:::-;7550:119;7708:1;7733:53;7778:7;7769:6;7758:9;7754:22;7733:53;:::i;:::-;7723:63;;7679:117;7835:2;7861:53;7906:7;7897:6;7886:9;7882:22;7861:53;:::i;:::-;7851:63;;7806:118;7457:474;;;;;:::o;7937:117::-;8046:1;8043;8036:12;8060:117;8169:1;8166;8159:12;8183:180;8231:77;8228:1;8221:88;8328:4;8325:1;8318:15;8352:4;8349:1;8342:15;8369:281;8452:27;8474:4;8452:27;:::i;:::-;8444:6;8440:40;8582:6;8570:10;8567:22;8546:18;8534:10;8531:34;8528:62;8525:88;;;8593:18;;:::i;:::-;8525:88;8633:10;8629:2;8622:22;8412:238;8369:281;;:::o;8656:129::-;8690:6;8717:20;;:::i;:::-;8707:30;;8746:33;8774:4;8766:6;8746:33;:::i;:::-;8656:129;;;:::o;8791:308::-;8853:4;8943:18;8935:6;8932:30;8929:56;;;8965:18;;:::i;:::-;8929:56;9003:29;9025:6;9003:29;:::i;:::-;8995:37;;9087:4;9081;9077:15;9069:23;;8791:308;;;:::o;9105:148::-;9203:6;9198:3;9193;9180:30;9244:1;9235:6;9230:3;9226:16;9219:27;9105:148;;;:::o;9259:425::-;9337:5;9362:66;9378:49;9420:6;9378:49;:::i;:::-;9362:66;:::i;:::-;9353:75;;9451:6;9444:5;9437:21;9489:4;9482:5;9478:16;9527:3;9518:6;9513:3;9509:16;9506:25;9503:112;;;9534:79;;:::i;:::-;9503:112;9624:54;9671:6;9666:3;9661;9624:54;:::i;:::-;9343:341;9259:425;;;;;:::o;9704:340::-;9760:5;9809:3;9802:4;9794:6;9790:17;9786:27;9776:122;;9817:79;;:::i;:::-;9776:122;9934:6;9921:20;9959:79;10034:3;10026:6;10019:4;10011:6;10007:17;9959:79;:::i;:::-;9950:88;;9766:278;9704:340;;;;:::o;10050:834::-;10138:6;10146;10195:2;10183:9;10174:7;10170:23;10166:32;10163:119;;;10201:79;;:::i;:::-;10163:119;10349:1;10338:9;10334:17;10321:31;10379:18;10371:6;10368:30;10365:117;;;10401:79;;:::i;:::-;10365:117;10506:63;10561:7;10552:6;10541:9;10537:22;10506:63;:::i;:::-;10496:73;;10292:287;10646:2;10635:9;10631:18;10618:32;10677:18;10669:6;10666:30;10663:117;;;10699:79;;:::i;:::-;10663:117;10804:63;10859:7;10850:6;10839:9;10835:22;10804:63;:::i;:::-;10794:73;;10589:288;10050:834;;;;;:::o;10890:60::-;10918:3;10939:5;10932:12;;10890:60;;;:::o;10956:142::-;11006:9;11039:53;11057:34;11066:24;11084:5;11066:24;:::i;:::-;11057:34;:::i;:::-;11039:53;:::i;:::-;11026:66;;10956:142;;;:::o;11104:126::-;11154:9;11187:37;11218:5;11187:37;:::i;:::-;11174:50;;11104:126;;;:::o;11236:153::-;11313:9;11346:37;11377:5;11346:37;:::i;:::-;11333:50;;11236:153;;;:::o;11395:185::-;11509:64;11567:5;11509:64;:::i;:::-;11504:3;11497:77;11395:185;;:::o;11586:276::-;11706:4;11744:2;11733:9;11729:18;11721:26;;11757:98;11852:1;11841:9;11837:17;11828:6;11757:98;:::i;:::-;11586:276;;;;:::o;11868:180::-;11916:77;11913:1;11906:88;12013:4;12010:1;12003:15;12037:4;12034:1;12027:15;12054:410;12094:7;12117:20;12135:1;12117:20;:::i;:::-;12112:25;;12151:20;12169:1;12151:20;:::i;:::-;12146:25;;12206:1;12203;12199:9;12228:30;12246:11;12228:30;:::i;:::-;12217:41;;12407:1;12398:7;12394:15;12391:1;12388:22;12368:1;12361:9;12341:83;12318:139;;12437:18;;:::i;:::-;12318:139;12102:362;12054:410;;;;:::o;12470:180::-;12518:77;12515:1;12508:88;12615:4;12612:1;12605:15;12639:4;12636:1;12629:15;12656:185;12696:1;12713:20;12731:1;12713:20;:::i;:::-;12708:25;;12747:20;12765:1;12747:20;:::i;:::-;12742:25;;12786:1;12776:35;;12791:18;;:::i;:::-;12776:35;12833:1;12830;12826:9;12821:14;;12656:185;;;;:::o;12847:180::-;12895:77;12892:1;12885:88;12992:4;12989:1;12982:15;13016:4;13013:1;13006:15;13033:320;13077:6;13114:1;13108:4;13104:12;13094:22;;13161:1;13155:4;13151:12;13182:18;13172:81;;13238:4;13230:6;13226:17;13216:27;;13172:81;13300:2;13292:6;13289:14;13269:18;13266:38;13263:84;;13319:18;;:::i;:::-;13263:84;13084:269;13033:320;;;:::o;13359:220::-;13499:34;13495:1;13487:6;13483:14;13476:58;13568:3;13563:2;13555:6;13551:15;13544:28;13359:220;:::o;13585:366::-;13727:3;13748:67;13812:2;13807:3;13748:67;:::i;:::-;13741:74;;13824:93;13913:3;13824:93;:::i;:::-;13942:2;13937:3;13933:12;13926:19;;13585:366;;;:::o;13957:419::-;14123:4;14161:2;14150:9;14146:18;14138:26;;14210:9;14204:4;14200:20;14196:1;14185:9;14181:17;14174:47;14238:131;14364:4;14238:131;:::i;:::-;14230:139;;13957:419;;;:::o;14382:233::-;14522:34;14518:1;14510:6;14506:14;14499:58;14591:16;14586:2;14578:6;14574:15;14567:41;14382:233;:::o;14621:366::-;14763:3;14784:67;14848:2;14843:3;14784:67;:::i;:::-;14777:74;;14860:93;14949:3;14860:93;:::i;:::-;14978:2;14973:3;14969:12;14962:19;;14621:366;;;:::o;14993:419::-;15159:4;15197:2;15186:9;15182:18;15174:26;;15246:9;15240:4;15236:20;15232:1;15221:9;15217:17;15210:47;15274:131;15400:4;15274:131;:::i;:::-;15266:139;;14993:419;;;:::o;15418:244::-;15558:34;15554:1;15546:6;15542:14;15535:58;15627:27;15622:2;15614:6;15610:15;15603:52;15418:244;:::o;15668:366::-;15810:3;15831:67;15895:2;15890:3;15831:67;:::i;:::-;15824:74;;15907:93;15996:3;15907:93;:::i;:::-;16025:2;16020:3;16016:12;16009:19;;15668:366;;;:::o;16040:419::-;16206:4;16244:2;16233:9;16229:18;16221:26;;16293:9;16287:4;16283:20;16279:1;16268:9;16264:17;16257:47;16321:131;16447:4;16321:131;:::i;:::-;16313:139;;16040:419;;;:::o;16465:191::-;16505:3;16524:20;16542:1;16524:20;:::i;:::-;16519:25;;16558:20;16576:1;16558:20;:::i;:::-;16553:25;;16601:1;16598;16594:9;16587:16;;16622:3;16619:1;16616:10;16613:36;;;16629:18;;:::i;:::-;16613:36;16465:191;;;;:::o;16662:230::-;16802:34;16798:1;16790:6;16786:14;16779:58;16871:13;16866:2;16858:6;16854:15;16847:38;16662:230;:::o;16898:366::-;17040:3;17061:67;17125:2;17120:3;17061:67;:::i;:::-;17054:74;;17137:93;17226:3;17137:93;:::i;:::-;17255:2;17250:3;17246:12;17239:19;;16898:366;;;:::o;17270:419::-;17436:4;17474:2;17463:9;17459:18;17451:26;;17523:9;17517:4;17513:20;17509:1;17498:9;17494:17;17487:47;17551:131;17677:4;17551:131;:::i;:::-;17543:139;;17270:419;;;:::o;17695:147::-;17796:11;17833:3;17818:18;;17695:147;;;;:::o;17848:114::-;;:::o;17968:398::-;18127:3;18148:83;18229:1;18224:3;18148:83;:::i;:::-;18141:90;;18240:93;18329:3;18240:93;:::i;:::-;18358:1;18353:3;18349:11;18342:18;;17968:398;;;:::o;18372:379::-;18556:3;18578:147;18721:3;18578:147;:::i;:::-;18571:154;;18742:3;18735:10;;18372:379;;;:::o;18757:224::-;18897:34;18893:1;18885:6;18881:14;18874:58;18966:7;18961:2;18953:6;18949:15;18942:32;18757:224;:::o;18987:366::-;19129:3;19150:67;19214:2;19209:3;19150:67;:::i;:::-;19143:74;;19226:93;19315:3;19226:93;:::i;:::-;19344:2;19339:3;19335:12;19328:19;;18987:366;;;:::o;19359:419::-;19525:4;19563:2;19552:9;19548:18;19540:26;;19612:9;19606:4;19602:20;19598:1;19587:9;19583:17;19576:47;19640:131;19766:4;19640:131;:::i;:::-;19632:139;;19359:419;;;:::o;19784:240::-;19924:34;19920:1;19912:6;19908:14;19901:58;19993:23;19988:2;19980:6;19976:15;19969:48;19784:240;:::o;20030:366::-;20172:3;20193:67;20257:2;20252:3;20193:67;:::i;:::-;20186:74;;20269:93;20358:3;20269:93;:::i;:::-;20387:2;20382:3;20378:12;20371:19;;20030:366;;;:::o;20402:419::-;20568:4;20606:2;20595:9;20591:18;20583:26;;20655:9;20649:4;20645:20;20641:1;20630:9;20626:17;20619:47;20683:131;20809:4;20683:131;:::i;:::-;20675:139;;20402:419;;;:::o;20827:237::-;20967:34;20963:1;20955:6;20951:14;20944:58;21036:20;21031:2;21023:6;21019:15;21012:45;20827:237;:::o;21070:366::-;21212:3;21233:67;21297:2;21292:3;21233:67;:::i;:::-;21226:74;;21309:93;21398:3;21309:93;:::i;:::-;21427:2;21422:3;21418:12;21411:19;;21070:366;;;:::o;21442:419::-;21608:4;21646:2;21635:9;21631:18;21623:26;;21695:9;21689:4;21685:20;21681:1;21670:9;21666:17;21659:47;21723:131;21849:4;21723:131;:::i;:::-;21715:139;;21442:419;;;:::o;21867:141::-;21916:4;21939:3;21931:11;;21962:3;21959:1;21952:14;21996:4;21993:1;21983:18;21975:26;;21867:141;;;:::o;22014:93::-;22051:6;22098:2;22093;22086:5;22082:14;22078:23;22068:33;;22014:93;;;:::o;22113:107::-;22157:8;22207:5;22201:4;22197:16;22176:37;;22113:107;;;;:::o;22226:393::-;22295:6;22345:1;22333:10;22329:18;22368:97;22398:66;22387:9;22368:97;:::i;:::-;22486:39;22516:8;22505:9;22486:39;:::i;:::-;22474:51;;22558:4;22554:9;22547:5;22543:21;22534:30;;22607:4;22597:8;22593:19;22586:5;22583:30;22573:40;;22302:317;;22226:393;;;;;:::o;22625:142::-;22675:9;22708:53;22726:34;22735:24;22753:5;22735:24;:::i;:::-;22726:34;:::i;:::-;22708:53;:::i;:::-;22695:66;;22625:142;;;:::o;22773:75::-;22816:3;22837:5;22830:12;;22773:75;;;:::o;22854:269::-;22964:39;22995:7;22964:39;:::i;:::-;23025:91;23074:41;23098:16;23074:41;:::i;:::-;23066:6;23059:4;23053:11;23025:91;:::i;:::-;23019:4;23012:105;22930:193;22854:269;;;:::o;23129:73::-;23174:3;23129:73;:::o;23208:189::-;23285:32;;:::i;:::-;23326:65;23384:6;23376;23370:4;23326:65;:::i;:::-;23261:136;23208:189;;:::o;23403:186::-;23463:120;23480:3;23473:5;23470:14;23463:120;;;23534:39;23571:1;23564:5;23534:39;:::i;:::-;23507:1;23500:5;23496:13;23487:22;;23463:120;;;23403:186;;:::o;23595:543::-;23696:2;23691:3;23688:11;23685:446;;;23730:38;23762:5;23730:38;:::i;:::-;23814:29;23832:10;23814:29;:::i;:::-;23804:8;23800:44;23997:2;23985:10;23982:18;23979:49;;;24018:8;24003:23;;23979:49;24041:80;24097:22;24115:3;24097:22;:::i;:::-;24087:8;24083:37;24070:11;24041:80;:::i;:::-;23700:431;;23685:446;23595:543;;;:::o;24144:117::-;24198:8;24248:5;24242:4;24238:16;24217:37;;24144:117;;;;:::o;24267:169::-;24311:6;24344:51;24392:1;24388:6;24380:5;24377:1;24373:13;24344:51;:::i;:::-;24340:56;24425:4;24419;24415:15;24405:25;;24318:118;24267:169;;;;:::o;24441:295::-;24517:4;24663:29;24688:3;24682:4;24663:29;:::i;:::-;24655:37;;24725:3;24722:1;24718:11;24712:4;24709:21;24701:29;;24441:295;;;;:::o;24741:1395::-;24858:37;24891:3;24858:37;:::i;:::-;24960:18;24952:6;24949:30;24946:56;;;24982:18;;:::i;:::-;24946:56;25026:38;25058:4;25052:11;25026:38;:::i;:::-;25111:67;25171:6;25163;25157:4;25111:67;:::i;:::-;25205:1;25229:4;25216:17;;25261:2;25253:6;25250:14;25278:1;25273:618;;;;25935:1;25952:6;25949:77;;;26001:9;25996:3;25992:19;25986:26;25977:35;;25949:77;26052:67;26112:6;26105:5;26052:67;:::i;:::-;26046:4;26039:81;25908:222;25243:887;;25273:618;25325:4;25321:9;25313:6;25309:22;25359:37;25391:4;25359:37;:::i;:::-;25418:1;25432:208;25446:7;25443:1;25440:14;25432:208;;;25525:9;25520:3;25516:19;25510:26;25502:6;25495:42;25576:1;25568:6;25564:14;25554:24;;25623:2;25612:9;25608:18;25595:31;;25469:4;25466:1;25462:12;25457:17;;25432:208;;;25668:6;25659:7;25656:19;25653:179;;;25726:9;25721:3;25717:19;25711:26;25769:48;25811:4;25803:6;25799:17;25788:9;25769:48;:::i;:::-;25761:6;25754:64;25676:156;25653:179;25878:1;25874;25866:6;25862:14;25858:22;25852:4;25845:36;25280:611;;;25243:887;;24833:1303;;;24741:1395;;:::o;26142:143::-;26199:5;26230:6;26224:13;26215:22;;26246:33;26273:5;26246:33;:::i;:::-;26142:143;;;;:::o;26291:351::-;26361:6;26410:2;26398:9;26389:7;26385:23;26381:32;26378:119;;;26416:79;;:::i;:::-;26378:119;26536:1;26561:64;26617:7;26608:6;26597:9;26593:22;26561:64;:::i;:::-;26551:74;;26507:128;26291:351;;;;:::o;26648:332::-;26769:4;26807:2;26796:9;26792:18;26784:26;;26820:71;26888:1;26877:9;26873:17;26864:6;26820:71;:::i;:::-;26901:72;26969:2;26958:9;26954:18;26945:6;26901:72;:::i;:::-;26648:332;;;;;:::o;26986:85::-;27031:7;27060:5;27049:16;;26986:85;;;:::o;27077:158::-;27135:9;27168:61;27186:42;27195:32;27221:5;27195:32;:::i;:::-;27186:42;:::i;:::-;27168:61;:::i;:::-;27155:74;;27077:158;;;:::o;27241:147::-;27336:45;27375:5;27336:45;:::i;:::-;27331:3;27324:58;27241:147;;:::o;27394:807::-;27643:4;27681:3;27670:9;27666:19;27658:27;;27695:71;27763:1;27752:9;27748:17;27739:6;27695:71;:::i;:::-;27776:72;27844:2;27833:9;27829:18;27820:6;27776:72;:::i;:::-;27858:80;27934:2;27923:9;27919:18;27910:6;27858:80;:::i;:::-;27948;28024:2;28013:9;28009:18;28000:6;27948:80;:::i;:::-;28038:73;28106:3;28095:9;28091:19;28082:6;28038:73;:::i;:::-;28121;28189:3;28178:9;28174:19;28165:6;28121:73;:::i;:::-;27394:807;;;;;;;;;:::o;28207:143::-;28264:5;28295:6;28289:13;28280:22;;28311:33;28338:5;28311:33;:::i;:::-;28207:143;;;;:::o;28356:663::-;28444:6;28452;28460;28509:2;28497:9;28488:7;28484:23;28480:32;28477:119;;;28515:79;;:::i;:::-;28477:119;28635:1;28660:64;28716:7;28707:6;28696:9;28692:22;28660:64;:::i;:::-;28650:74;;28606:128;28773:2;28799:64;28855:7;28846:6;28835:9;28831:22;28799:64;:::i;:::-;28789:74;;28744:129;28912:2;28938:64;28994:7;28985:6;28974:9;28970:22;28938:64;:::i;:::-;28928:74;;28883:129;28356:663;;;;;:::o;29025:332::-;29146:4;29184:2;29173:9;29169:18;29161:26;;29197:71;29265:1;29254:9;29250:17;29241:6;29197:71;:::i;:::-;29278:72;29346:2;29335:9;29331:18;29322:6;29278:72;:::i;:::-;29025:332;;;;;:::o;29363:137::-;29417:5;29448:6;29442:13;29433:22;;29464:30;29488:5;29464:30;:::i;:::-;29363:137;;;;:::o;29506:345::-;29573:6;29622:2;29610:9;29601:7;29597:23;29593:32;29590:119;;;29628:79;;:::i;:::-;29590:119;29748:1;29773:61;29826:7;29817:6;29806:9;29802:22;29773:61;:::i;:::-;29763:71;;29719:125;29506:345;;;;:::o;29857:225::-;29997:34;29993:1;29985:6;29981:14;29974:58;30066:8;30061:2;30053:6;30049:15;30042:33;29857:225;:::o;30088:366::-;30230:3;30251:67;30315:2;30310:3;30251:67;:::i;:::-;30244:74;;30327:93;30416:3;30327:93;:::i;:::-;30445:2;30440:3;30436:12;30429:19;;30088:366;;;:::o;30460:419::-;30626:4;30664:2;30653:9;30649:18;30641:26;;30713:9;30707:4;30703:20;30699:1;30688:9;30684:17;30677:47;30741:131;30867:4;30741:131;:::i;:::-;30733:139;;30460:419;;;:::o;30885:182::-;31025:34;31021:1;31013:6;31009:14;31002:58;30885:182;:::o;31073:366::-;31215:3;31236:67;31300:2;31295:3;31236:67;:::i;:::-;31229:74;;31312:93;31401:3;31312:93;:::i;:::-;31430:2;31425:3;31421:12;31414:19;;31073:366;;;:::o;31445:419::-;31611:4;31649:2;31638:9;31634:18;31626:26;;31698:9;31692:4;31688:20;31684:1;31673:9;31669:17;31662:47;31726:131;31852:4;31726:131;:::i;:::-;31718:139;;31445:419;;;:::o;31870:223::-;32010:34;32006:1;31998:6;31994:14;31987:58;32079:6;32074:2;32066:6;32062:15;32055:31;31870:223;:::o;32099:366::-;32241:3;32262:67;32326:2;32321:3;32262:67;:::i;:::-;32255:74;;32338:93;32427:3;32338:93;:::i;:::-;32456:2;32451:3;32447:12;32440:19;;32099:366;;;:::o;32471:419::-;32637:4;32675:2;32664:9;32660:18;32652:26;;32724:9;32718:4;32714:20;32710:1;32699:9;32695:17;32688:47;32752:131;32878:4;32752:131;:::i;:::-;32744:139;;32471:419;;;:::o;32896:221::-;33036:34;33032:1;33024:6;33020:14;33013:58;33105:4;33100:2;33092:6;33088:15;33081:29;32896:221;:::o;33123:366::-;33265:3;33286:67;33350:2;33345:3;33286:67;:::i;:::-;33279:74;;33362:93;33451:3;33362:93;:::i;:::-;33480:2;33475:3;33471:12;33464:19;;33123:366;;;:::o;33495:419::-;33661:4;33699:2;33688:9;33684:18;33676:26;;33748:9;33742:4;33738:20;33734:1;33723:9;33719:17;33712:47;33776:131;33902:4;33776:131;:::i;:::-;33768:139;;33495:419;;;:::o;33920:179::-;34060:31;34056:1;34048:6;34044:14;34037:55;33920:179;:::o;34105:366::-;34247:3;34268:67;34332:2;34327:3;34268:67;:::i;:::-;34261:74;;34344:93;34433:3;34344:93;:::i;:::-;34462:2;34457:3;34453:12;34446:19;;34105:366;;;:::o;34477:419::-;34643:4;34681:2;34670:9;34666:18;34658:26;;34730:9;34724:4;34720:20;34716:1;34705:9;34701:17;34694:47;34758:131;34884:4;34758:131;:::i;:::-;34750:139;;34477:419;;;:::o;34902:224::-;35042:34;35038:1;35030:6;35026:14;35019:58;35111:7;35106:2;35098:6;35094:15;35087:32;34902:224;:::o;35132:366::-;35274:3;35295:67;35359:2;35354:3;35295:67;:::i;:::-;35288:74;;35371:93;35460:3;35371:93;:::i;:::-;35489:2;35484:3;35480:12;35473:19;;35132:366;;;:::o;35504:419::-;35670:4;35708:2;35697:9;35693:18;35685:26;;35757:9;35751:4;35747:20;35743:1;35732:9;35728:17;35721:47;35785:131;35911:4;35785:131;:::i;:::-;35777:139;;35504:419;;;:::o;35929:222::-;36069:34;36065:1;36057:6;36053:14;36046:58;36138:5;36133:2;36125:6;36121:15;36114:30;35929:222;:::o;36157:366::-;36299:3;36320:67;36384:2;36379:3;36320:67;:::i;:::-;36313:74;;36396:93;36485:3;36396:93;:::i;:::-;36514:2;36509:3;36505:12;36498:19;;36157:366;;;:::o;36529:419::-;36695:4;36733:2;36722:9;36718:18;36710:26;;36782:9;36776:4;36772:20;36768:1;36757:9;36753:17;36746:47;36810:131;36936:4;36810:131;:::i;:::-;36802:139;;36529:419;;;:::o;36954:161::-;37094:13;37090:1;37082:6;37078:14;37071:37;36954:161;:::o;37121:366::-;37263:3;37284:67;37348:2;37343:3;37284:67;:::i;:::-;37277:74;;37360:93;37449:3;37360:93;:::i;:::-;37478:2;37473:3;37469:12;37462:19;;37121:366;;;:::o;37493:419::-;37659:4;37697:2;37686:9;37682:18;37674:26;;37746:9;37740:4;37736:20;37732:1;37721:9;37717:17;37710:47;37774:131;37900:4;37774:131;:::i;:::-;37766:139;;37493:419;;;:::o;37918:172::-;38058:24;38054:1;38046:6;38042:14;38035:48;37918:172;:::o;38096:366::-;38238:3;38259:67;38323:2;38318:3;38259:67;:::i;:::-;38252:74;;38335:93;38424:3;38335:93;:::i;:::-;38453:2;38448:3;38444:12;38437:19;;38096:366;;;:::o;38468:419::-;38634:4;38672:2;38661:9;38657:18;38649:26;;38721:9;38715:4;38711:20;38707:1;38696:9;38692:17;38685:47;38749:131;38875:4;38749:131;:::i;:::-;38741:139;;38468:419;;;:::o;38893:194::-;38933:4;38953:20;38971:1;38953:20;:::i;:::-;38948:25;;38987:20;39005:1;38987:20;:::i;:::-;38982:25;;39031:1;39028;39024:9;39016:17;;39055:1;39049:4;39046:11;39043:37;;;39060:18;;:::i;:::-;39043:37;38893:194;;;;:::o;39093:240::-;39233:34;39229:1;39221:6;39217:14;39210:58;39302:23;39297:2;39289:6;39285:15;39278:48;39093:240;:::o;39339:366::-;39481:3;39502:67;39566:2;39561:3;39502:67;:::i;:::-;39495:74;;39578:93;39667:3;39578:93;:::i;:::-;39696:2;39691:3;39687:12;39680:19;;39339:366;;;:::o;39711:419::-;39877:4;39915:2;39904:9;39900:18;39892:26;;39964:9;39958:4;39954:20;39950:1;39939:9;39935:17;39928:47;39992:131;40118:4;39992:131;:::i;:::-;39984:139;;39711:419;;;:::o;40136:169::-;40276:21;40272:1;40264:6;40260:14;40253:45;40136:169;:::o;40311:366::-;40453:3;40474:67;40538:2;40533:3;40474:67;:::i;:::-;40467:74;;40550:93;40639:3;40550:93;:::i;:::-;40668:2;40663:3;40659:12;40652:19;;40311:366;;;:::o;40683:419::-;40849:4;40887:2;40876:9;40872:18;40864:26;;40936:9;40930:4;40926:20;40922:1;40911:9;40907:17;40900:47;40964:131;41090:4;40964:131;:::i;:::-;40956:139;;40683:419;;;:::o;41108:241::-;41248:34;41244:1;41236:6;41232:14;41225:58;41317:24;41312:2;41304:6;41300:15;41293:49;41108:241;:::o;41355:366::-;41497:3;41518:67;41582:2;41577:3;41518:67;:::i;:::-;41511:74;;41594:93;41683:3;41594:93;:::i;:::-;41712:2;41707:3;41703:12;41696:19;;41355:366;;;:::o;41727:419::-;41893:4;41931:2;41920:9;41916:18;41908:26;;41980:9;41974:4;41970:20;41966:1;41955:9;41951:17;41944:47;42008:131;42134:4;42008:131;:::i;:::-;42000:139;;41727:419;;;:::o;42152:225::-;42292:34;42288:1;42280:6;42276:14;42269:58;42361:8;42356:2;42348:6;42344:15;42337:33;42152:225;:::o;42383:366::-;42525:3;42546:67;42610:2;42605:3;42546:67;:::i;:::-;42539:74;;42622:93;42711:3;42622:93;:::i;:::-;42740:2;42735:3;42731:12;42724:19;;42383:366;;;:::o;42755:419::-;42921:4;42959:2;42948:9;42944:18;42936:26;;43008:9;43002:4;42998:20;42994:1;42983:9;42979:17;42972:47;43036:131;43162:4;43036:131;:::i;:::-;43028:139;;42755:419;;;:::o;43180:180::-;43228:77;43225:1;43218:88;43325:4;43322:1;43315:15;43349:4;43346:1;43339:15;43366:114;43433:6;43467:5;43461:12;43451:22;;43366:114;;;:::o;43486:184::-;43585:11;43619:6;43614:3;43607:19;43659:4;43654:3;43650:14;43635:29;;43486:184;;;;:::o;43676:132::-;43743:4;43766:3;43758:11;;43796:4;43791:3;43787:14;43779:22;;43676:132;;;:::o;43814:108::-;43891:24;43909:5;43891:24;:::i;:::-;43886:3;43879:37;43814:108;;:::o;43928:179::-;43997:10;44018:46;44060:3;44052:6;44018:46;:::i;:::-;44096:4;44091:3;44087:14;44073:28;;43928:179;;;;:::o;44113:113::-;44183:4;44215;44210:3;44206:14;44198:22;;44113:113;;;:::o;44262:732::-;44381:3;44410:54;44458:5;44410:54;:::i;:::-;44480:86;44559:6;44554:3;44480:86;:::i;:::-;44473:93;;44590:56;44640:5;44590:56;:::i;:::-;44669:7;44700:1;44685:284;44710:6;44707:1;44704:13;44685:284;;;44786:6;44780:13;44813:63;44872:3;44857:13;44813:63;:::i;:::-;44806:70;;44899:60;44952:6;44899:60;:::i;:::-;44889:70;;44745:224;44732:1;44729;44725:9;44720:14;;44685:284;;;44689:14;44985:3;44978:10;;44386:608;;;44262:732;;;;:::o;45000:831::-;45263:4;45301:3;45290:9;45286:19;45278:27;;45315:71;45383:1;45372:9;45368:17;45359:6;45315:71;:::i;:::-;45396:80;45472:2;45461:9;45457:18;45448:6;45396:80;:::i;:::-;45523:9;45517:4;45513:20;45508:2;45497:9;45493:18;45486:48;45551:108;45654:4;45645:6;45551:108;:::i;:::-;45543:116;;45669:72;45737:2;45726:9;45722:18;45713:6;45669:72;:::i;:::-;45751:73;45819:3;45808:9;45804:19;45795:6;45751:73;:::i;:::-;45000:831;;;;;;;;:::o

Swarm Source

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