ETH Price: $3,617.53 (+4.97%)
Gas: 8.15 Gwei
 

Overview

Max Total Supply

69,420,000,000,000 DAFUQ

Holders

24

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
dontyellatmeimpoor.eth
Balance
0.000098065864189694 DAFUQ

Value
$0.00
0x2dc488ae3a773584f9c3c8d52777f93daf88f9d1
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:
Dafuq

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-04-21
*/

// 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 private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

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

        return true;
    }

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

        _beforeTokenTransfer(from, to, amount);

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

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, amount);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    address public constant deadAddress = address(0xdead);

    bool private swapping;

    address public marketingWallet;
    address public devWallet;

    uint256 public maxTransactionAmount;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;


    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = true;

    mapping(address => uint256) private _holderLastTransferTimestamp;
    bool public transferDelayEnabled = false;

    uint256 public buyTotalFees;
    uint256 public buyMarketingFee;
    uint256 public buyLiquidityFee;
    uint256 public buyDevFee;

    uint256 public sellTotalFees;
    uint256 public sellMarketingFee;
    uint256 public sellLiquidityFee;
    uint256 public sellDevFee;

    uint256 public tokensForMarketing;
    uint256 public tokensForLiquidity;
    uint256 public tokensForDev;

    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) public _isExcludedMaxTransactionAmount;


    mapping(address => uint256) public blocksOfTrades;
    bool public antiMEVEnabled = false;
    bool public antiContractSellEnabled = false;
    uint256 public mevBlocks = 1;

    mapping (address => bool) public botsOfMEV;
    mapping (address => bool) public whitelistedMEV;

    mapping(address => bool) public automatedMarketMakerPairs;

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

    event ExcludeFromFees(address indexed account, bool isExcluded);

    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);

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

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

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

    event AutoNukeLP();

    event ManualNukeLP();

    constructor() ERC20("Dafuq", "DAFUQ") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );

        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;

        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
        .createPair(address(this), _uniswapV2Router.WETH());
        excludeFromMaxTransaction(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);

        uint256 _buyMarketingFee = 20;
        uint256 _buyLiquidityFee = 0;
        uint256 _buyDevFee = 0;

        uint256 _sellMarketingFee = 80;
        uint256 _sellLiquidityFee = 0;
        uint256 _sellDevFee = 0;

        uint256 totalSupply = 69_420_000_000_000 * 1e18;

        maxTransactionAmount = 1_388_400_000_000  * 1e18;
        maxWallet = 1_388_400_000_000 * 1e18;
        swapTokensAtAmount = (totalSupply * 5) / 1000;

        buyMarketingFee = _buyMarketingFee;
        buyLiquidityFee = _buyLiquidityFee;
        buyDevFee = _buyDevFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee;

        sellMarketingFee = _sellMarketingFee;
        sellLiquidityFee = _sellLiquidityFee;
        sellDevFee = _sellDevFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;

        marketingWallet = owner();
        devWallet = owner();

        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);

        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);

        /*
            _mint is an internal function in ERC20.sol that is only called here,
            and CANNOT be called ever again
        */
        _mint(msg.sender, totalSupply);
        tradingActive = true;
    }

    receive() external payable {}


    function removeLimits() external onlyOwner returns (bool) {
        limitsInEffect = false;
        return true;
    }

    function disableTransferDelay() external onlyOwner returns (bool) {
        transferDelayEnabled = 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 updateMaxTxnAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 1) / 1000) / 1e18,
            "Cannot set maxTransactionAmount lower than 0.1%"
        );
        maxTransactionAmount = newNum * (10 ** 18);
    }

    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 1) / 1000) / 1e18,
            "Cannot set maxWallet lower than 0.1%"
        );
        maxWallet = newNum * (10 ** 18);
    }

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

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

    function updateBuyFees(
        uint256 _marketingFee,
        uint256 _liquidityFee,
        uint256 _devFee
    ) external onlyOwner {
        uint256 previousFees = buyTotalFees;
        buyMarketingFee = _marketingFee;
        buyLiquidityFee = _liquidityFee;
        buyDevFee = _devFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee;
        require(buyTotalFees <= 20 || buyTotalFees < previousFees, "Must keep fees at 20% or less");
    }

    function updateSellFees(
        uint256 _marketingFee,
        uint256 _liquidityFee,
        uint256 _devFee
    ) external onlyOwner {
        uint256 previousFees = sellTotalFees;
        sellMarketingFee = _marketingFee;
        sellLiquidityFee = _liquidityFee;
        sellDevFee = _devFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;
        require(sellTotalFees <= 20 || sellTotalFees < previousFees, "Must keep fees at 20% or less");
    }

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

    function setAutomatedMarketMakerPair(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;

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function setAntiMEVMode(bool setting) external onlyOwner {
        antiMEVEnabled = setting;
    }

    function setMev(address addr, bool value) private {
        botsOfMEV[addr] = value;
    }

    function updateMarketingWallet(address newMarketingWallet)
    external
    onlyOwner
    {
        emit marketingWalletUpdated(newMarketingWallet, marketingWallet);
        marketingWallet = newMarketingWallet;
    }

    function updateDevWallet(address newWallet) external onlyOwner {
        emit devWalletUpdated(newWallet, devWallet);
        devWallet = newWallet;
    }

    function isExcludedFromFees(address account) public view returns (bool) {
        return _isExcludedFromFees[account];
    }

    event BoughtEarly(address indexed sniper);

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        }

        if (limitsInEffect) {
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !swapping
            ) {
                if (!tradingActive) {
                    require(
                        _isExcludedFromFees[from] || _isExcludedFromFees[to],
                        "Trading is not active."
                    );
                }

                if (transferDelayEnabled) {
                    if (
                        to != owner() &&
                        to != address(uniswapV2Router) &&
                        to != address(uniswapV2Pair)
                    ) {
                        require(
                            _holderLastTransferTimestamp[tx.origin] <
                            block.number,
                            "_transfer:: Transfer Delay enabled.  Only one purchase per block allowed."
                        );
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                    }
                }

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

                else if (
                    automatedMarketMakerPairs[to] &&
                    !_isExcludedMaxTransactionAmount[from]
                ) {
                    require(
                        amount <= maxTransactionAmount,
                        "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] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            swapping = true;

            swapBack();

            swapping = false;
        }

        bool takeFee = !swapping;

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

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

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

            amount -= fees;
        }

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

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

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

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

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

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

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

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

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

        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;

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

        if (liquidityTokens > 0 && ethForLiquidity > 0) {
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(
                amountToSwapForETH,
                ethForLiquidity,
                tokensForLiquidity
            );
        }

        (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":[],"name":"AutoNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sniper","type":"address"}],"name":"BoughtEarly","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[],"name":"ManualNukeLP","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":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"devWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","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":[],"name":"antiContractSellEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"antiMEVEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[{"internalType":"address","name":"","type":"address"}],"name":"blocksOfTrades","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"botsOfMEV","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":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"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":[],"name":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"mevBlocks","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":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","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":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"setting","type":"bool"}],"name":"setAntiMEVMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"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":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","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":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateSellFees","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":"address","name":"","type":"address"}],"name":"whitelistedMEV","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526001600b60006101000a81548160ff0219169083151502179055506000600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff0219169083151502179055506000600d60006101000a81548160ff0219169083151502179055506000601c60006101000a81548160ff0219169083151502179055506000601c60016101000a81548160ff0219169083151502179055506001601d55348015620000b857600080fd5b506040518060400160405280600581526020017f44616675710000000000000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f4441465551000000000000000000000000000000000000000000000000000000815250816003908162000136919062000d26565b50806004908162000148919062000d26565b5050506200016b6200015f620005e560201b60201c565b620005ed60201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d905062000197816001620006b360201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000217573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200023d919062000e77565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002a5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002cb919062000e77565b6040518363ffffffff1660e01b8152600401620002ea92919062000eba565b6020604051808303816000875af11580156200030a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000330919062000e77565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200037860a0516001620006b360201b60201c565b6200038d60a05160016200071e60201b60201c565b60006014905060008060006050905060008060006d036c341e1f992f96840fe000000090506c1186298ffdf1977d85700000006008819055506c1186298ffdf1977d8570000000600a819055506103e8600582620003ec919062000f16565b620003f8919062000f90565b60098190555086600f819055508560108190555084601181905550601154601054600f5462000428919062000fc8565b62000434919062000fc8565b600e8190555083601381905550826014819055508160158190555060155460145460135462000464919062000fc8565b62000470919062000fc8565b60128190555062000486620007bf60201b60201c565b600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620004d6620007bf60201b60201c565b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620005386200052a620007bf60201b60201c565b6001620007e960201b60201c565b6200054b306001620007e960201b60201c565b6200056061dead6001620007e960201b60201c565b6200058262000574620007bf60201b60201c565b6001620006b360201b60201c565b62000595306001620006b360201b60201c565b620005aa61dead6001620006b360201b60201c565b620005bc3382620008a460201b60201c565b6001600b60016101000a81548160ff021916908315150217905550505050505050505062001160565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620006c362000a1160201b60201c565b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620007f962000a1160201b60201c565b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000898919062001020565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000916576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200090d906200109e565b60405180910390fd5b6200092a6000838362000aa260201b60201c565b80600260008282546200093e919062000fc8565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620009f19190620010d1565b60405180910390a362000a0d6000838362000aa760201b60201c565b5050565b62000a21620005e560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000a47620007bf60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000aa0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a97906200113e565b60405180910390fd5b565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000b2e57607f821691505b60208210810362000b445762000b4362000ae6565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000bae7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000b6f565b62000bba868362000b6f565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000c0762000c0162000bfb8462000bd2565b62000bdc565b62000bd2565b9050919050565b6000819050919050565b62000c238362000be6565b62000c3b62000c328262000c0e565b84845462000b7c565b825550505050565b600090565b62000c5262000c43565b62000c5f81848462000c18565b505050565b5b8181101562000c875762000c7b60008262000c48565b60018101905062000c65565b5050565b601f82111562000cd65762000ca08162000b4a565b62000cab8462000b5f565b8101602085101562000cbb578190505b62000cd362000cca8562000b5f565b83018262000c64565b50505b505050565b600082821c905092915050565b600062000cfb6000198460080262000cdb565b1980831691505092915050565b600062000d16838362000ce8565b9150826002028217905092915050565b62000d318262000aac565b67ffffffffffffffff81111562000d4d5762000d4c62000ab7565b5b62000d59825462000b15565b62000d6682828562000c8b565b600060209050601f83116001811462000d9e576000841562000d89578287015190505b62000d95858262000d08565b86555062000e05565b601f19841662000dae8662000b4a565b60005b8281101562000dd85784890151825560018201915060208501945060208101905062000db1565b8683101562000df8578489015162000df4601f89168262000ce8565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000e3f8262000e12565b9050919050565b62000e518162000e32565b811462000e5d57600080fd5b50565b60008151905062000e718162000e46565b92915050565b60006020828403121562000e905762000e8f62000e0d565b5b600062000ea08482850162000e60565b91505092915050565b62000eb48162000e32565b82525050565b600060408201905062000ed1600083018562000ea9565b62000ee0602083018462000ea9565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000f238262000bd2565b915062000f308362000bd2565b925082820262000f408162000bd2565b9150828204841483151762000f5a5762000f5962000ee7565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000f9d8262000bd2565b915062000faa8362000bd2565b92508262000fbd5762000fbc62000f61565b5b828204905092915050565b600062000fd58262000bd2565b915062000fe28362000bd2565b925082820190508082111562000ffd5762000ffc62000ee7565b5b92915050565b60008115159050919050565b6200101a8162001003565b82525050565b60006020820190506200103760008301846200100f565b92915050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062001086601f836200103d565b915062001093826200104e565b602082019050919050565b60006020820190508181036000830152620010b98162001077565b9050919050565b620010cb8162000bd2565b82525050565b6000602082019050620010e86000830184620010c0565b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000620011266020836200103d565b91506200113382620010ee565b602082019050919050565b60006020820190508181036000830152620011598162001117565b9050919050565b60805160a051614a00620011be600039600081816111ba015281816115310152612296015260008181610f880152818161223e0152818161330f015281816133f001528181613417015281816134b301526134da0152614a006000f3fe60806040526004361061039b5760003560e01c80638ea5220f116101dc578063c17b5b8c11610102578063dd62ed3e116100a0578063f25744f11161006f578063f25744f114610de3578063f2fde38b14610e0c578063f637434214610e35578063f8b45b0514610e60576103a2565b8063dd62ed3e14610d25578063e2f4560514610d62578063e884f26014610d8d578063f11a24d314610db8576103a2565b8063c8c8ebe4116100dc578063c8c8ebe414610c55578063d257b34f14610c80578063d3bef90614610cbd578063d85ba06314610cfa576103a2565b8063c17b5b8c14610bd8578063c18bc19514610c01578063c876d0b914610c2a576103a2565b8063a0d82dc51161017a578063aacebbe311610149578063aacebbe314610b1e578063b62496f514610b47578063bbc0c74214610b84578063c024666814610baf576103a2565b8063a0d82dc514610a3c578063a200c88d14610a67578063a457c2d714610aa4578063a9059cbb14610ae1576103a2565b806395d89b41116101b657806395d89b41146109925780639a7a23d6146109bd5780639c3b4fdc146109e65780639fccce3214610a11576103a2565b80638ea5220f14610913578063921369131461093e578063924de9b714610969576103a2565b806339be1a1f116102c1578063715018a61161025f578063773e0d9c1161022e578063773e0d9c146108695780637bce5a04146108945780638095d564146108bf5780638da5cb5b146108e8576103a2565b8063715018a6146107d3578063751039fc146107ea5780637571336a1461081557806375f0a8741461083e576103a2565b80634fbee1931161029b5780634fbee193146107035780636a486a8e146107405780636ddd17131461076b57806370a0823114610796576103a2565b806339be1a1f1461067057806349bd5a5e146106ad5780634a62bb65146106d8576103a2565b80631816467f1161033957806323b872dd1161030857806323b872dd146105a057806327c8f835146105dd578063313ce567146106085780633950935114610633576103a2565b80631816467f146104f85780631a8145bb146105215780631f3fed8f1461054c578063203e727e14610577576103a2565b806310d5de531161037557806310d5de531461043a5780631564336e146104775780631694505e146104a257806318160ddd146104cd576103a2565b806304113890146103a757806306fdde03146103d2578063095ea7b3146103fd576103a2565b366103a257005b600080fd5b3480156103b357600080fd5b506103bc610e8b565b6040516103c991906135a4565b60405180910390f35b3480156103de57600080fd5b506103e7610e9e565b6040516103f4919061364f565b60405180910390f35b34801561040957600080fd5b50610424600480360381019061041f919061370a565b610f30565b60405161043191906135a4565b60405180910390f35b34801561044657600080fd5b50610461600480360381019061045c919061374a565b610f53565b60405161046e91906135a4565b60405180910390f35b34801561048357600080fd5b5061048c610f73565b60405161049991906135a4565b60405180910390f35b3480156104ae57600080fd5b506104b7610f86565b6040516104c491906137d6565b60405180910390f35b3480156104d957600080fd5b506104e2610faa565b6040516104ef9190613800565b60405180910390f35b34801561050457600080fd5b5061051f600480360381019061051a919061374a565b610fb4565b005b34801561052d57600080fd5b5061053661107c565b6040516105439190613800565b60405180910390f35b34801561055857600080fd5b50610561611082565b60405161056e9190613800565b60405180910390f35b34801561058357600080fd5b5061059e6004803603810190610599919061381b565b611088565b005b3480156105ac57600080fd5b506105c760048036038101906105c29190613848565b611123565b6040516105d491906135a4565b60405180910390f35b3480156105e957600080fd5b506105f2611152565b6040516105ff91906138aa565b60405180910390f35b34801561061457600080fd5b5061061d611158565b60405161062a91906138e1565b60405180910390f35b34801561063f57600080fd5b5061065a6004803603810190610655919061370a565b611161565b60405161066791906135a4565b60405180910390f35b34801561067c57600080fd5b506106976004803603810190610692919061374a565b611198565b6040516106a491906135a4565b60405180910390f35b3480156106b957600080fd5b506106c26111b8565b6040516106cf91906138aa565b60405180910390f35b3480156106e457600080fd5b506106ed6111dc565b6040516106fa91906135a4565b60405180910390f35b34801561070f57600080fd5b5061072a6004803603810190610725919061374a565b6111ef565b60405161073791906135a4565b60405180910390f35b34801561074c57600080fd5b50610755611245565b6040516107629190613800565b60405180910390f35b34801561077757600080fd5b5061078061124b565b60405161078d91906135a4565b60405180910390f35b3480156107a257600080fd5b506107bd60048036038101906107b8919061374a565b61125e565b6040516107ca9190613800565b60405180910390f35b3480156107df57600080fd5b506107e86112a6565b005b3480156107f657600080fd5b506107ff6112ba565b60405161080c91906135a4565b60405180910390f35b34801561082157600080fd5b5061083c60048036038101906108379190613928565b6112e6565b005b34801561084a57600080fd5b50610853611349565b60405161086091906138aa565b60405180910390f35b34801561087557600080fd5b5061087e61136f565b60405161088b9190613800565b60405180910390f35b3480156108a057600080fd5b506108a9611375565b6040516108b69190613800565b60405180910390f35b3480156108cb57600080fd5b506108e660048036038101906108e19190613968565b61137b565b005b3480156108f457600080fd5b506108fd61141a565b60405161090a91906138aa565b60405180910390f35b34801561091f57600080fd5b50610928611444565b60405161093591906138aa565b60405180910390f35b34801561094a57600080fd5b5061095361146a565b6040516109609190613800565b60405180910390f35b34801561097557600080fd5b50610990600480360381019061098b91906139bb565b611470565b005b34801561099e57600080fd5b506109a7611495565b6040516109b4919061364f565b60405180910390f35b3480156109c957600080fd5b506109e460048036038101906109df9190613928565b611527565b005b3480156109f257600080fd5b506109fb6115cb565b604051610a089190613800565b60405180910390f35b348015610a1d57600080fd5b50610a266115d1565b604051610a339190613800565b60405180910390f35b348015610a4857600080fd5b50610a516115d7565b604051610a5e9190613800565b60405180910390f35b348015610a7357600080fd5b50610a8e6004803603810190610a89919061374a565b6115dd565b604051610a9b91906135a4565b60405180910390f35b348015610ab057600080fd5b50610acb6004803603810190610ac6919061370a565b6115fd565b604051610ad891906135a4565b60405180910390f35b348015610aed57600080fd5b50610b086004803603810190610b03919061370a565b611674565b604051610b1591906135a4565b60405180910390f35b348015610b2a57600080fd5b50610b456004803603810190610b40919061374a565b611697565b005b348015610b5357600080fd5b50610b6e6004803603810190610b69919061374a565b61175f565b604051610b7b91906135a4565b60405180910390f35b348015610b9057600080fd5b50610b9961177e565b604051610ba691906135a4565b60405180910390f35b348015610bbb57600080fd5b50610bd66004803603810190610bd19190613928565b611791565b005b348015610be457600080fd5b50610bff6004803603810190610bfa9190613968565b611842565b005b348015610c0d57600080fd5b50610c286004803603810190610c23919061381b565b6118e1565b005b348015610c3657600080fd5b50610c3f61197c565b604051610c4c91906135a4565b60405180910390f35b348015610c6157600080fd5b50610c6a61198f565b604051610c779190613800565b60405180910390f35b348015610c8c57600080fd5b50610ca76004803603810190610ca2919061381b565b611995565b604051610cb491906135a4565b60405180910390f35b348015610cc957600080fd5b50610ce46004803603810190610cdf919061374a565b611a75565b604051610cf19190613800565b60405180910390f35b348015610d0657600080fd5b50610d0f611a8d565b604051610d1c9190613800565b60405180910390f35b348015610d3157600080fd5b50610d4c6004803603810190610d4791906139e8565b611a93565b604051610d599190613800565b60405180910390f35b348015610d6e57600080fd5b50610d77611b1a565b604051610d849190613800565b60405180910390f35b348015610d9957600080fd5b50610da2611b20565b604051610daf91906135a4565b60405180910390f35b348015610dc457600080fd5b50610dcd611b4c565b604051610dda9190613800565b60405180910390f35b348015610def57600080fd5b50610e0a6004803603810190610e0591906139bb565b611b52565b005b348015610e1857600080fd5b50610e336004803603810190610e2e919061374a565b611b77565b005b348015610e4157600080fd5b50610e4a611bfa565b604051610e579190613800565b60405180910390f35b348015610e6c57600080fd5b50610e75611c00565b604051610e829190613800565b60405180910390f35b601c60009054906101000a900460ff1681565b606060038054610ead90613a57565b80601f0160208091040260200160405190810160405280929190818152602001828054610ed990613a57565b8015610f265780601f10610efb57610100808354040283529160200191610f26565b820191906000526020600020905b815481529060010190602001808311610f0957829003601f168201915b5050505050905090565b600080610f3b611c06565b9050610f48818585611c0e565b600191505092915050565b601a6020528060005260406000206000915054906101000a900460ff1681565b601c60019054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b610fbc611dd7565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60175481565b60165481565b611090611dd7565b670de0b6b3a76400006103e860016110a6610faa565b6110b09190613ab7565b6110ba9190613b28565b6110c49190613b28565b811015611106576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110fd90613bcb565b60405180910390fd5b670de0b6b3a76400008161111a9190613ab7565b60088190555050565b60008061112e611c06565b905061113b858285611e55565b611146858585611ee1565b60019150509392505050565b61dead81565b60006012905090565b60008061116c611c06565b905061118d81858561117e8589611a93565b6111889190613beb565b611c0e565b600191505092915050565b601f6020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b600b60009054906101000a900460ff1681565b6000601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60125481565b600b60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6112ae611dd7565b6112b86000612b78565b565b60006112c4611dd7565b6000600b60006101000a81548160ff0219169083151502179055506001905090565b6112ee611dd7565b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601d5481565b600f5481565b611383611dd7565b6000600e54905083600f819055508260108190555081601181905550601154601054600f546113b29190613beb565b6113bc9190613beb565b600e819055506014600e541115806113d5575080600e54105b611414576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140b90613c6b565b60405180910390fd5b50505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60135481565b611478611dd7565b80600b60026101000a81548160ff02191690831515021790555050565b6060600480546114a490613a57565b80601f01602080910402602001604051908101604052809291908181526020018280546114d090613a57565b801561151d5780601f106114f25761010080835404028352916020019161151d565b820191906000526020600020905b81548152906001019060200180831161150057829003601f168201915b5050505050905090565b61152f611dd7565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036115bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b490613cfd565b60405180910390fd5b6115c78282612c3e565b5050565b60115481565b60185481565b60155481565b601e6020528060005260406000206000915054906101000a900460ff1681565b600080611608611c06565b905060006116168286611a93565b90508381101561165b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165290613d8f565b60405180910390fd5b6116688286868403611c0e565b60019250505092915050565b60008061167f611c06565b905061168c818585611ee1565b600191505092915050565b61169f611dd7565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b602080528060005260406000206000915054906101000a900460ff1681565b600b60019054906101000a900460ff1681565b611799611dd7565b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161183691906135a4565b60405180910390a25050565b61184a611dd7565b600060125490508360138190555082601481905550816015819055506015546014546013546118799190613beb565b6118839190613beb565b601281905550601460125411158061189c575080601254105b6118db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d290613c6b565b60405180910390fd5b50505050565b6118e9611dd7565b670de0b6b3a76400006103e860016118ff610faa565b6119099190613ab7565b6119139190613b28565b61191d9190613b28565b81101561195f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195690613e21565b60405180910390fd5b670de0b6b3a7640000816119739190613ab7565b600a8190555050565b600d60009054906101000a900460ff1681565b60085481565b600061199f611dd7565b620186a060016119ad610faa565b6119b79190613ab7565b6119c19190613b28565b821015611a03576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119fa90613eb3565b60405180910390fd5b60646004611a0f610faa565b611a199190613ab7565b611a239190613b28565b821115611a65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5c90613f45565b60405180910390fd5b8160098190555060019050919050565b601b6020528060005260406000206000915090505481565b600e5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b6000611b2a611dd7565b6000600d60006101000a81548160ff0219169083151502179055506001905090565b60105481565b611b5a611dd7565b80601c60006101000a81548160ff02191690831515021790555050565b611b7f611dd7565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611bee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be590613fd7565b60405180910390fd5b611bf781612b78565b50565b60145481565b600a5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611c7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7490614069565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611cec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce3906140fb565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611dca9190613800565b60405180910390a3505050565b611ddf611c06565b73ffffffffffffffffffffffffffffffffffffffff16611dfd61141a565b73ffffffffffffffffffffffffffffffffffffffff1614611e53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4a90614167565b60405180910390fd5b565b6000611e618484611a93565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611edb5781811015611ecd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec4906141d3565b60405180910390fd5b611eda8484848403611c0e565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611f50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4790614265565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611fbf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb6906142f7565b60405180910390fd5b60008103611fd857611fd383836000612cdf565b612b73565b600b60009054906101000a900460ff161561269b57611ff561141a565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612063575061203361141a565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561209c5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156120d6575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156120ef5750600560149054906101000a900460ff16155b1561269a57600b60019054906101000a900460ff166121e957601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806121a95750601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6121e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121df90614363565b60405180910390fd5b5b600d60009054906101000a900460ff16156123b15761220661141a565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415801561228d57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156122e557507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156123b05743600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541061236b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123629061441b565b60405180910390fd5b43600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156124545750601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156124fb5760085481111561249e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612495906144ad565b60405180910390fd5b600a546124aa8361125e565b826124b59190613beb565b11156124f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ed90614519565b60405180910390fd5b612699565b602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561259e5750601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156125ed576008548111156125e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125df906145ab565b60405180910390fd5b612698565b601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661269757600a5461264a8361125e565b826126559190613beb565b1115612696576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268d90614519565b60405180910390fd5b5b5b5b5b5b60006126a63061125e565b9050600060095482101590508080156126cb5750600b60029054906101000a900460ff165b80156126e45750600560149054906101000a900460ff16155b801561273a5750602060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156127905750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156127e65750601960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561282a576001600560146101000a81548160ff02191690831515021790555061280e612f55565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806128e05750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156128ea57600090505b60008115612b6357602060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561294d57506000601254115b15612a1a5761297a606461296c6012548861322490919063ffffffff16565b61323a90919063ffffffff16565b90506012546014548261298d9190613ab7565b6129979190613b28565b601760008282546129a89190613beb565b92505081905550601254601554826129c09190613ab7565b6129ca9190613b28565b601860008282546129db9190613beb565b92505081905550601254601354826129f39190613ab7565b6129fd9190613b28565b60166000828254612a0e9190613beb565b92505081905550612b3f565b602060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612a7557506000600e54115b15612b3e57612aa26064612a94600e548861322490919063ffffffff16565b61323a90919063ffffffff16565b9050600e5460105482612ab59190613ab7565b612abf9190613b28565b60176000828254612ad09190613beb565b92505081905550600e5460115482612ae89190613ab7565b612af29190613b28565b60186000828254612b039190613beb565b92505081905550600e54600f5482612b1b9190613ab7565b612b259190613b28565b60166000828254612b369190613beb565b925050819055505b5b6000811115612b5457612b53873083612cdf565b5b8085612b6091906145cb565b94505b612b6e878787612cdf565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612d4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d4590614265565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612dbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612db4906142f7565b60405180910390fd5b612dc8838383613250565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612e4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e4590614671565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612f3c9190613800565b60405180910390a3612f4f848484613255565b50505050565b6000612f603061125e565b90506000601854601654601754612f779190613beb565b612f819190613beb565b9050600080831480612f935750600082145b15612fa057505050613222565b600954831115612fb05760095492505b600060028360175486612fc39190613ab7565b612fcd9190613b28565b612fd79190613b28565b90506000612fee828661325a90919063ffffffff16565b90506000479050612ffe82613270565b6000613013824761325a90919063ffffffff16565b9050600061303e876130306016548561322490919063ffffffff16565b61323a90919063ffffffff16565b905060006130698861305b6018548661322490919063ffffffff16565b61323a90919063ffffffff16565b9050600081838561307a91906145cb565b61308491906145cb565b9050600060178190555060006016819055506000601881905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16826040516130e4906146c2565b60006040518083038185875af1925050503d8060008114613121576040519150601f19603f3d011682016040523d82523d6000602084013e613126565b606091505b50508098505060008711801561313c5750600081115b156131895761314b87826134ad565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682601754604051613180939291906146d7565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516131cf906146c2565b60006040518083038185875af1925050503d806000811461320c576040519150601f19603f3d011682016040523d82523d6000602084013e613211565b606091505b505080985050505050505050505050505b565b600081836132329190613ab7565b905092915050565b600081836132489190613b28565b905092915050565b505050565b505050565b6000818361326891906145cb565b905092915050565b6000600267ffffffffffffffff81111561328d5761328c61470e565b5b6040519080825280602002602001820160405280156132bb5781602001602082028036833780820191505090505b50905030816000815181106132d3576132d261473d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613378573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061339c9190614781565b816001815181106133b0576133af61473d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613415307f000000000000000000000000000000000000000000000000000000000000000084611c0e565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016134779594939291906148a7565b600060405180830381600087803b15801561349157600080fd5b505af11580156134a5573d6000803e3d6000fd5b505050505050565b6134d8307f000000000000000000000000000000000000000000000000000000000000000084611c0e565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b815260040161353f96959493929190614901565b60606040518083038185885af115801561355d573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906135829190614977565b5050505050565b60008115159050919050565b61359e81613589565b82525050565b60006020820190506135b96000830184613595565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156135f95780820151818401526020810190506135de565b60008484015250505050565b6000601f19601f8301169050919050565b6000613621826135bf565b61362b81856135ca565b935061363b8185602086016135db565b61364481613605565b840191505092915050565b600060208201905081810360008301526136698184613616565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006136a182613676565b9050919050565b6136b181613696565b81146136bc57600080fd5b50565b6000813590506136ce816136a8565b92915050565b6000819050919050565b6136e7816136d4565b81146136f257600080fd5b50565b600081359050613704816136de565b92915050565b6000806040838503121561372157613720613671565b5b600061372f858286016136bf565b9250506020613740858286016136f5565b9150509250929050565b6000602082840312156137605761375f613671565b5b600061376e848285016136bf565b91505092915050565b6000819050919050565b600061379c61379761379284613676565b613777565b613676565b9050919050565b60006137ae82613781565b9050919050565b60006137c0826137a3565b9050919050565b6137d0816137b5565b82525050565b60006020820190506137eb60008301846137c7565b92915050565b6137fa816136d4565b82525050565b600060208201905061381560008301846137f1565b92915050565b60006020828403121561383157613830613671565b5b600061383f848285016136f5565b91505092915050565b60008060006060848603121561386157613860613671565b5b600061386f868287016136bf565b9350506020613880868287016136bf565b9250506040613891868287016136f5565b9150509250925092565b6138a481613696565b82525050565b60006020820190506138bf600083018461389b565b92915050565b600060ff82169050919050565b6138db816138c5565b82525050565b60006020820190506138f660008301846138d2565b92915050565b61390581613589565b811461391057600080fd5b50565b600081359050613922816138fc565b92915050565b6000806040838503121561393f5761393e613671565b5b600061394d858286016136bf565b925050602061395e85828601613913565b9150509250929050565b60008060006060848603121561398157613980613671565b5b600061398f868287016136f5565b93505060206139a0868287016136f5565b92505060406139b1868287016136f5565b9150509250925092565b6000602082840312156139d1576139d0613671565b5b60006139df84828501613913565b91505092915050565b600080604083850312156139ff576139fe613671565b5b6000613a0d858286016136bf565b9250506020613a1e858286016136bf565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613a6f57607f821691505b602082108103613a8257613a81613a28565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613ac2826136d4565b9150613acd836136d4565b9250828202613adb816136d4565b91508282048414831517613af257613af1613a88565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613b33826136d4565b9150613b3e836136d4565b925082613b4e57613b4d613af9565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b6000613bb5602f836135ca565b9150613bc082613b59565b604082019050919050565b60006020820190508181036000830152613be481613ba8565b9050919050565b6000613bf6826136d4565b9150613c01836136d4565b9250828201905080821115613c1957613c18613a88565b5b92915050565b7f4d757374206b656570206665657320617420323025206f72206c657373000000600082015250565b6000613c55601d836135ca565b9150613c6082613c1f565b602082019050919050565b60006020820190508181036000830152613c8481613c48565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000613ce76039836135ca565b9150613cf282613c8b565b604082019050919050565b60006020820190508181036000830152613d1681613cda565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613d796025836135ca565b9150613d8482613d1d565b604082019050919050565b60006020820190508181036000830152613da881613d6c565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e312500000000000000000000000000000000000000000000000000000000602082015250565b6000613e0b6024836135ca565b9150613e1682613daf565b604082019050919050565b60006020820190508181036000830152613e3a81613dfe565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000613e9d6035836135ca565b9150613ea882613e41565b604082019050919050565b60006020820190508181036000830152613ecc81613e90565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20342520746f74616c20737570706c792e0000000000000000000000000000602082015250565b6000613f2f6032836135ca565b9150613f3a82613ed3565b604082019050919050565b60006020820190508181036000830152613f5e81613f22565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613fc16026836135ca565b9150613fcc82613f65565b604082019050919050565b60006020820190508181036000830152613ff081613fb4565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006140536024836135ca565b915061405e82613ff7565b604082019050919050565b6000602082019050818103600083015261408281614046565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006140e56022836135ca565b91506140f082614089565b604082019050919050565b60006020820190508181036000830152614114816140d8565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006141516020836135ca565b915061415c8261411b565b602082019050919050565b6000602082019050818103600083015261418081614144565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b60006141bd601d836135ca565b91506141c882614187565b602082019050919050565b600060208201905081810360008301526141ec816141b0565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061424f6025836135ca565b915061425a826141f3565b604082019050919050565b6000602082019050818103600083015261427e81614242565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006142e16023836135ca565b91506142ec82614285565b604082019050919050565b60006020820190508181036000830152614310816142d4565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b600061434d6016836135ca565b915061435882614317565b602082019050919050565b6000602082019050818103600083015261437c81614340565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b60006144056049836135ca565b915061441082614383565b606082019050919050565b60006020820190508181036000830152614434816143f8565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b60006144976035836135ca565b91506144a28261443b565b604082019050919050565b600060208201905081810360008301526144c68161448a565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006145036013836135ca565b915061450e826144cd565b602082019050919050565b60006020820190508181036000830152614532816144f6565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b60006145956036836135ca565b91506145a082614539565b604082019050919050565b600060208201905081810360008301526145c481614588565b9050919050565b60006145d6826136d4565b91506145e1836136d4565b92508282039050818111156145f9576145f8613a88565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b600061465b6026836135ca565b9150614666826145ff565b604082019050919050565b6000602082019050818103600083015261468a8161464e565b9050919050565b600081905092915050565b50565b60006146ac600083614691565b91506146b78261469c565b600082019050919050565b60006146cd8261469f565b9150819050919050565b60006060820190506146ec60008301866137f1565b6146f960208301856137f1565b61470660408301846137f1565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061477b816136a8565b92915050565b60006020828403121561479757614796613671565b5b60006147a58482850161476c565b91505092915050565b6000819050919050565b60006147d36147ce6147c9846147ae565b613777565b6136d4565b9050919050565b6147e3816147b8565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61481e81613696565b82525050565b60006148308383614815565b60208301905092915050565b6000602082019050919050565b6000614854826147e9565b61485e81856147f4565b935061486983614805565b8060005b8381101561489a5781516148818882614824565b975061488c8361483c565b92505060018101905061486d565b5085935050505092915050565b600060a0820190506148bc60008301886137f1565b6148c960208301876147da565b81810360408301526148db8186614849565b90506148ea606083018561389b565b6148f760808301846137f1565b9695505050505050565b600060c082019050614916600083018961389b565b61492360208301886137f1565b61493060408301876147da565b61493d60608301866147da565b61494a608083018561389b565b61495760a08301846137f1565b979650505050505050565b600081519050614971816136de565b92915050565b6000806000606084860312156149905761498f613671565b5b600061499e86828701614962565b93505060206149af86828701614962565b92505060406149c086828701614962565b915050925092509256fea26469706673582212203dcbd0f415ad4821804e1075d2e5e2272fe5c83c945a06115639251e529c862564736f6c63430008130033

Deployed Bytecode

0x60806040526004361061039b5760003560e01c80638ea5220f116101dc578063c17b5b8c11610102578063dd62ed3e116100a0578063f25744f11161006f578063f25744f114610de3578063f2fde38b14610e0c578063f637434214610e35578063f8b45b0514610e60576103a2565b8063dd62ed3e14610d25578063e2f4560514610d62578063e884f26014610d8d578063f11a24d314610db8576103a2565b8063c8c8ebe4116100dc578063c8c8ebe414610c55578063d257b34f14610c80578063d3bef90614610cbd578063d85ba06314610cfa576103a2565b8063c17b5b8c14610bd8578063c18bc19514610c01578063c876d0b914610c2a576103a2565b8063a0d82dc51161017a578063aacebbe311610149578063aacebbe314610b1e578063b62496f514610b47578063bbc0c74214610b84578063c024666814610baf576103a2565b8063a0d82dc514610a3c578063a200c88d14610a67578063a457c2d714610aa4578063a9059cbb14610ae1576103a2565b806395d89b41116101b657806395d89b41146109925780639a7a23d6146109bd5780639c3b4fdc146109e65780639fccce3214610a11576103a2565b80638ea5220f14610913578063921369131461093e578063924de9b714610969576103a2565b806339be1a1f116102c1578063715018a61161025f578063773e0d9c1161022e578063773e0d9c146108695780637bce5a04146108945780638095d564146108bf5780638da5cb5b146108e8576103a2565b8063715018a6146107d3578063751039fc146107ea5780637571336a1461081557806375f0a8741461083e576103a2565b80634fbee1931161029b5780634fbee193146107035780636a486a8e146107405780636ddd17131461076b57806370a0823114610796576103a2565b806339be1a1f1461067057806349bd5a5e146106ad5780634a62bb65146106d8576103a2565b80631816467f1161033957806323b872dd1161030857806323b872dd146105a057806327c8f835146105dd578063313ce567146106085780633950935114610633576103a2565b80631816467f146104f85780631a8145bb146105215780631f3fed8f1461054c578063203e727e14610577576103a2565b806310d5de531161037557806310d5de531461043a5780631564336e146104775780631694505e146104a257806318160ddd146104cd576103a2565b806304113890146103a757806306fdde03146103d2578063095ea7b3146103fd576103a2565b366103a257005b600080fd5b3480156103b357600080fd5b506103bc610e8b565b6040516103c991906135a4565b60405180910390f35b3480156103de57600080fd5b506103e7610e9e565b6040516103f4919061364f565b60405180910390f35b34801561040957600080fd5b50610424600480360381019061041f919061370a565b610f30565b60405161043191906135a4565b60405180910390f35b34801561044657600080fd5b50610461600480360381019061045c919061374a565b610f53565b60405161046e91906135a4565b60405180910390f35b34801561048357600080fd5b5061048c610f73565b60405161049991906135a4565b60405180910390f35b3480156104ae57600080fd5b506104b7610f86565b6040516104c491906137d6565b60405180910390f35b3480156104d957600080fd5b506104e2610faa565b6040516104ef9190613800565b60405180910390f35b34801561050457600080fd5b5061051f600480360381019061051a919061374a565b610fb4565b005b34801561052d57600080fd5b5061053661107c565b6040516105439190613800565b60405180910390f35b34801561055857600080fd5b50610561611082565b60405161056e9190613800565b60405180910390f35b34801561058357600080fd5b5061059e6004803603810190610599919061381b565b611088565b005b3480156105ac57600080fd5b506105c760048036038101906105c29190613848565b611123565b6040516105d491906135a4565b60405180910390f35b3480156105e957600080fd5b506105f2611152565b6040516105ff91906138aa565b60405180910390f35b34801561061457600080fd5b5061061d611158565b60405161062a91906138e1565b60405180910390f35b34801561063f57600080fd5b5061065a6004803603810190610655919061370a565b611161565b60405161066791906135a4565b60405180910390f35b34801561067c57600080fd5b506106976004803603810190610692919061374a565b611198565b6040516106a491906135a4565b60405180910390f35b3480156106b957600080fd5b506106c26111b8565b6040516106cf91906138aa565b60405180910390f35b3480156106e457600080fd5b506106ed6111dc565b6040516106fa91906135a4565b60405180910390f35b34801561070f57600080fd5b5061072a6004803603810190610725919061374a565b6111ef565b60405161073791906135a4565b60405180910390f35b34801561074c57600080fd5b50610755611245565b6040516107629190613800565b60405180910390f35b34801561077757600080fd5b5061078061124b565b60405161078d91906135a4565b60405180910390f35b3480156107a257600080fd5b506107bd60048036038101906107b8919061374a565b61125e565b6040516107ca9190613800565b60405180910390f35b3480156107df57600080fd5b506107e86112a6565b005b3480156107f657600080fd5b506107ff6112ba565b60405161080c91906135a4565b60405180910390f35b34801561082157600080fd5b5061083c60048036038101906108379190613928565b6112e6565b005b34801561084a57600080fd5b50610853611349565b60405161086091906138aa565b60405180910390f35b34801561087557600080fd5b5061087e61136f565b60405161088b9190613800565b60405180910390f35b3480156108a057600080fd5b506108a9611375565b6040516108b69190613800565b60405180910390f35b3480156108cb57600080fd5b506108e660048036038101906108e19190613968565b61137b565b005b3480156108f457600080fd5b506108fd61141a565b60405161090a91906138aa565b60405180910390f35b34801561091f57600080fd5b50610928611444565b60405161093591906138aa565b60405180910390f35b34801561094a57600080fd5b5061095361146a565b6040516109609190613800565b60405180910390f35b34801561097557600080fd5b50610990600480360381019061098b91906139bb565b611470565b005b34801561099e57600080fd5b506109a7611495565b6040516109b4919061364f565b60405180910390f35b3480156109c957600080fd5b506109e460048036038101906109df9190613928565b611527565b005b3480156109f257600080fd5b506109fb6115cb565b604051610a089190613800565b60405180910390f35b348015610a1d57600080fd5b50610a266115d1565b604051610a339190613800565b60405180910390f35b348015610a4857600080fd5b50610a516115d7565b604051610a5e9190613800565b60405180910390f35b348015610a7357600080fd5b50610a8e6004803603810190610a89919061374a565b6115dd565b604051610a9b91906135a4565b60405180910390f35b348015610ab057600080fd5b50610acb6004803603810190610ac6919061370a565b6115fd565b604051610ad891906135a4565b60405180910390f35b348015610aed57600080fd5b50610b086004803603810190610b03919061370a565b611674565b604051610b1591906135a4565b60405180910390f35b348015610b2a57600080fd5b50610b456004803603810190610b40919061374a565b611697565b005b348015610b5357600080fd5b50610b6e6004803603810190610b69919061374a565b61175f565b604051610b7b91906135a4565b60405180910390f35b348015610b9057600080fd5b50610b9961177e565b604051610ba691906135a4565b60405180910390f35b348015610bbb57600080fd5b50610bd66004803603810190610bd19190613928565b611791565b005b348015610be457600080fd5b50610bff6004803603810190610bfa9190613968565b611842565b005b348015610c0d57600080fd5b50610c286004803603810190610c23919061381b565b6118e1565b005b348015610c3657600080fd5b50610c3f61197c565b604051610c4c91906135a4565b60405180910390f35b348015610c6157600080fd5b50610c6a61198f565b604051610c779190613800565b60405180910390f35b348015610c8c57600080fd5b50610ca76004803603810190610ca2919061381b565b611995565b604051610cb491906135a4565b60405180910390f35b348015610cc957600080fd5b50610ce46004803603810190610cdf919061374a565b611a75565b604051610cf19190613800565b60405180910390f35b348015610d0657600080fd5b50610d0f611a8d565b604051610d1c9190613800565b60405180910390f35b348015610d3157600080fd5b50610d4c6004803603810190610d4791906139e8565b611a93565b604051610d599190613800565b60405180910390f35b348015610d6e57600080fd5b50610d77611b1a565b604051610d849190613800565b60405180910390f35b348015610d9957600080fd5b50610da2611b20565b604051610daf91906135a4565b60405180910390f35b348015610dc457600080fd5b50610dcd611b4c565b604051610dda9190613800565b60405180910390f35b348015610def57600080fd5b50610e0a6004803603810190610e0591906139bb565b611b52565b005b348015610e1857600080fd5b50610e336004803603810190610e2e919061374a565b611b77565b005b348015610e4157600080fd5b50610e4a611bfa565b604051610e579190613800565b60405180910390f35b348015610e6c57600080fd5b50610e75611c00565b604051610e829190613800565b60405180910390f35b601c60009054906101000a900460ff1681565b606060038054610ead90613a57565b80601f0160208091040260200160405190810160405280929190818152602001828054610ed990613a57565b8015610f265780601f10610efb57610100808354040283529160200191610f26565b820191906000526020600020905b815481529060010190602001808311610f0957829003601f168201915b5050505050905090565b600080610f3b611c06565b9050610f48818585611c0e565b600191505092915050565b601a6020528060005260406000206000915054906101000a900460ff1681565b601c60019054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b610fbc611dd7565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60175481565b60165481565b611090611dd7565b670de0b6b3a76400006103e860016110a6610faa565b6110b09190613ab7565b6110ba9190613b28565b6110c49190613b28565b811015611106576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110fd90613bcb565b60405180910390fd5b670de0b6b3a76400008161111a9190613ab7565b60088190555050565b60008061112e611c06565b905061113b858285611e55565b611146858585611ee1565b60019150509392505050565b61dead81565b60006012905090565b60008061116c611c06565b905061118d81858561117e8589611a93565b6111889190613beb565b611c0e565b600191505092915050565b601f6020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000009beef8da188a65f067473115ac58d47c220d6b5681565b600b60009054906101000a900460ff1681565b6000601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60125481565b600b60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6112ae611dd7565b6112b86000612b78565b565b60006112c4611dd7565b6000600b60006101000a81548160ff0219169083151502179055506001905090565b6112ee611dd7565b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601d5481565b600f5481565b611383611dd7565b6000600e54905083600f819055508260108190555081601181905550601154601054600f546113b29190613beb565b6113bc9190613beb565b600e819055506014600e541115806113d5575080600e54105b611414576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140b90613c6b565b60405180910390fd5b50505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60135481565b611478611dd7565b80600b60026101000a81548160ff02191690831515021790555050565b6060600480546114a490613a57565b80601f01602080910402602001604051908101604052809291908181526020018280546114d090613a57565b801561151d5780601f106114f25761010080835404028352916020019161151d565b820191906000526020600020905b81548152906001019060200180831161150057829003601f168201915b5050505050905090565b61152f611dd7565b7f0000000000000000000000009beef8da188a65f067473115ac58d47c220d6b5673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036115bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b490613cfd565b60405180910390fd5b6115c78282612c3e565b5050565b60115481565b60185481565b60155481565b601e6020528060005260406000206000915054906101000a900460ff1681565b600080611608611c06565b905060006116168286611a93565b90508381101561165b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165290613d8f565b60405180910390fd5b6116688286868403611c0e565b60019250505092915050565b60008061167f611c06565b905061168c818585611ee1565b600191505092915050565b61169f611dd7565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b602080528060005260406000206000915054906101000a900460ff1681565b600b60019054906101000a900460ff1681565b611799611dd7565b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161183691906135a4565b60405180910390a25050565b61184a611dd7565b600060125490508360138190555082601481905550816015819055506015546014546013546118799190613beb565b6118839190613beb565b601281905550601460125411158061189c575080601254105b6118db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d290613c6b565b60405180910390fd5b50505050565b6118e9611dd7565b670de0b6b3a76400006103e860016118ff610faa565b6119099190613ab7565b6119139190613b28565b61191d9190613b28565b81101561195f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195690613e21565b60405180910390fd5b670de0b6b3a7640000816119739190613ab7565b600a8190555050565b600d60009054906101000a900460ff1681565b60085481565b600061199f611dd7565b620186a060016119ad610faa565b6119b79190613ab7565b6119c19190613b28565b821015611a03576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119fa90613eb3565b60405180910390fd5b60646004611a0f610faa565b611a199190613ab7565b611a239190613b28565b821115611a65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5c90613f45565b60405180910390fd5b8160098190555060019050919050565b601b6020528060005260406000206000915090505481565b600e5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b6000611b2a611dd7565b6000600d60006101000a81548160ff0219169083151502179055506001905090565b60105481565b611b5a611dd7565b80601c60006101000a81548160ff02191690831515021790555050565b611b7f611dd7565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611bee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be590613fd7565b60405180910390fd5b611bf781612b78565b50565b60145481565b600a5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611c7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7490614069565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611cec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce3906140fb565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611dca9190613800565b60405180910390a3505050565b611ddf611c06565b73ffffffffffffffffffffffffffffffffffffffff16611dfd61141a565b73ffffffffffffffffffffffffffffffffffffffff1614611e53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4a90614167565b60405180910390fd5b565b6000611e618484611a93565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611edb5781811015611ecd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec4906141d3565b60405180910390fd5b611eda8484848403611c0e565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611f50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4790614265565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611fbf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb6906142f7565b60405180910390fd5b60008103611fd857611fd383836000612cdf565b612b73565b600b60009054906101000a900460ff161561269b57611ff561141a565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612063575061203361141a565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561209c5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156120d6575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156120ef5750600560149054906101000a900460ff16155b1561269a57600b60019054906101000a900460ff166121e957601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806121a95750601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6121e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121df90614363565b60405180910390fd5b5b600d60009054906101000a900460ff16156123b15761220661141a565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415801561228d57507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156122e557507f0000000000000000000000009beef8da188a65f067473115ac58d47c220d6b5673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156123b05743600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541061236b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123629061441b565b60405180910390fd5b43600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156124545750601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156124fb5760085481111561249e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612495906144ad565b60405180910390fd5b600a546124aa8361125e565b826124b59190613beb565b11156124f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ed90614519565b60405180910390fd5b612699565b602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561259e5750601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156125ed576008548111156125e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125df906145ab565b60405180910390fd5b612698565b601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661269757600a5461264a8361125e565b826126559190613beb565b1115612696576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268d90614519565b60405180910390fd5b5b5b5b5b5b60006126a63061125e565b9050600060095482101590508080156126cb5750600b60029054906101000a900460ff165b80156126e45750600560149054906101000a900460ff16155b801561273a5750602060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156127905750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156127e65750601960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561282a576001600560146101000a81548160ff02191690831515021790555061280e612f55565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806128e05750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156128ea57600090505b60008115612b6357602060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561294d57506000601254115b15612a1a5761297a606461296c6012548861322490919063ffffffff16565b61323a90919063ffffffff16565b90506012546014548261298d9190613ab7565b6129979190613b28565b601760008282546129a89190613beb565b92505081905550601254601554826129c09190613ab7565b6129ca9190613b28565b601860008282546129db9190613beb565b92505081905550601254601354826129f39190613ab7565b6129fd9190613b28565b60166000828254612a0e9190613beb565b92505081905550612b3f565b602060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612a7557506000600e54115b15612b3e57612aa26064612a94600e548861322490919063ffffffff16565b61323a90919063ffffffff16565b9050600e5460105482612ab59190613ab7565b612abf9190613b28565b60176000828254612ad09190613beb565b92505081905550600e5460115482612ae89190613ab7565b612af29190613b28565b60186000828254612b039190613beb565b92505081905550600e54600f5482612b1b9190613ab7565b612b259190613b28565b60166000828254612b369190613beb565b925050819055505b5b6000811115612b5457612b53873083612cdf565b5b8085612b6091906145cb565b94505b612b6e878787612cdf565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612d4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d4590614265565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612dbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612db4906142f7565b60405180910390fd5b612dc8838383613250565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612e4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e4590614671565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612f3c9190613800565b60405180910390a3612f4f848484613255565b50505050565b6000612f603061125e565b90506000601854601654601754612f779190613beb565b612f819190613beb565b9050600080831480612f935750600082145b15612fa057505050613222565b600954831115612fb05760095492505b600060028360175486612fc39190613ab7565b612fcd9190613b28565b612fd79190613b28565b90506000612fee828661325a90919063ffffffff16565b90506000479050612ffe82613270565b6000613013824761325a90919063ffffffff16565b9050600061303e876130306016548561322490919063ffffffff16565b61323a90919063ffffffff16565b905060006130698861305b6018548661322490919063ffffffff16565b61323a90919063ffffffff16565b9050600081838561307a91906145cb565b61308491906145cb565b9050600060178190555060006016819055506000601881905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16826040516130e4906146c2565b60006040518083038185875af1925050503d8060008114613121576040519150601f19603f3d011682016040523d82523d6000602084013e613126565b606091505b50508098505060008711801561313c5750600081115b156131895761314b87826134ad565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682601754604051613180939291906146d7565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516131cf906146c2565b60006040518083038185875af1925050503d806000811461320c576040519150601f19603f3d011682016040523d82523d6000602084013e613211565b606091505b505080985050505050505050505050505b565b600081836132329190613ab7565b905092915050565b600081836132489190613b28565b905092915050565b505050565b505050565b6000818361326891906145cb565b905092915050565b6000600267ffffffffffffffff81111561328d5761328c61470e565b5b6040519080825280602002602001820160405280156132bb5781602001602082028036833780820191505090505b50905030816000815181106132d3576132d261473d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613378573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061339c9190614781565b816001815181106133b0576133af61473d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613415307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611c0e565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016134779594939291906148a7565b600060405180830381600087803b15801561349157600080fd5b505af11580156134a5573d6000803e3d6000fd5b505050505050565b6134d8307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611c0e565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b815260040161353f96959493929190614901565b60606040518083038185885af115801561355d573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906135829190614977565b5050505050565b60008115159050919050565b61359e81613589565b82525050565b60006020820190506135b96000830184613595565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156135f95780820151818401526020810190506135de565b60008484015250505050565b6000601f19601f8301169050919050565b6000613621826135bf565b61362b81856135ca565b935061363b8185602086016135db565b61364481613605565b840191505092915050565b600060208201905081810360008301526136698184613616565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006136a182613676565b9050919050565b6136b181613696565b81146136bc57600080fd5b50565b6000813590506136ce816136a8565b92915050565b6000819050919050565b6136e7816136d4565b81146136f257600080fd5b50565b600081359050613704816136de565b92915050565b6000806040838503121561372157613720613671565b5b600061372f858286016136bf565b9250506020613740858286016136f5565b9150509250929050565b6000602082840312156137605761375f613671565b5b600061376e848285016136bf565b91505092915050565b6000819050919050565b600061379c61379761379284613676565b613777565b613676565b9050919050565b60006137ae82613781565b9050919050565b60006137c0826137a3565b9050919050565b6137d0816137b5565b82525050565b60006020820190506137eb60008301846137c7565b92915050565b6137fa816136d4565b82525050565b600060208201905061381560008301846137f1565b92915050565b60006020828403121561383157613830613671565b5b600061383f848285016136f5565b91505092915050565b60008060006060848603121561386157613860613671565b5b600061386f868287016136bf565b9350506020613880868287016136bf565b9250506040613891868287016136f5565b9150509250925092565b6138a481613696565b82525050565b60006020820190506138bf600083018461389b565b92915050565b600060ff82169050919050565b6138db816138c5565b82525050565b60006020820190506138f660008301846138d2565b92915050565b61390581613589565b811461391057600080fd5b50565b600081359050613922816138fc565b92915050565b6000806040838503121561393f5761393e613671565b5b600061394d858286016136bf565b925050602061395e85828601613913565b9150509250929050565b60008060006060848603121561398157613980613671565b5b600061398f868287016136f5565b93505060206139a0868287016136f5565b92505060406139b1868287016136f5565b9150509250925092565b6000602082840312156139d1576139d0613671565b5b60006139df84828501613913565b91505092915050565b600080604083850312156139ff576139fe613671565b5b6000613a0d858286016136bf565b9250506020613a1e858286016136bf565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613a6f57607f821691505b602082108103613a8257613a81613a28565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613ac2826136d4565b9150613acd836136d4565b9250828202613adb816136d4565b91508282048414831517613af257613af1613a88565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613b33826136d4565b9150613b3e836136d4565b925082613b4e57613b4d613af9565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b6000613bb5602f836135ca565b9150613bc082613b59565b604082019050919050565b60006020820190508181036000830152613be481613ba8565b9050919050565b6000613bf6826136d4565b9150613c01836136d4565b9250828201905080821115613c1957613c18613a88565b5b92915050565b7f4d757374206b656570206665657320617420323025206f72206c657373000000600082015250565b6000613c55601d836135ca565b9150613c6082613c1f565b602082019050919050565b60006020820190508181036000830152613c8481613c48565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000613ce76039836135ca565b9150613cf282613c8b565b604082019050919050565b60006020820190508181036000830152613d1681613cda565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613d796025836135ca565b9150613d8482613d1d565b604082019050919050565b60006020820190508181036000830152613da881613d6c565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e312500000000000000000000000000000000000000000000000000000000602082015250565b6000613e0b6024836135ca565b9150613e1682613daf565b604082019050919050565b60006020820190508181036000830152613e3a81613dfe565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000613e9d6035836135ca565b9150613ea882613e41565b604082019050919050565b60006020820190508181036000830152613ecc81613e90565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20342520746f74616c20737570706c792e0000000000000000000000000000602082015250565b6000613f2f6032836135ca565b9150613f3a82613ed3565b604082019050919050565b60006020820190508181036000830152613f5e81613f22565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613fc16026836135ca565b9150613fcc82613f65565b604082019050919050565b60006020820190508181036000830152613ff081613fb4565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006140536024836135ca565b915061405e82613ff7565b604082019050919050565b6000602082019050818103600083015261408281614046565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006140e56022836135ca565b91506140f082614089565b604082019050919050565b60006020820190508181036000830152614114816140d8565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006141516020836135ca565b915061415c8261411b565b602082019050919050565b6000602082019050818103600083015261418081614144565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b60006141bd601d836135ca565b91506141c882614187565b602082019050919050565b600060208201905081810360008301526141ec816141b0565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061424f6025836135ca565b915061425a826141f3565b604082019050919050565b6000602082019050818103600083015261427e81614242565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006142e16023836135ca565b91506142ec82614285565b604082019050919050565b60006020820190508181036000830152614310816142d4565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b600061434d6016836135ca565b915061435882614317565b602082019050919050565b6000602082019050818103600083015261437c81614340565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b60006144056049836135ca565b915061441082614383565b606082019050919050565b60006020820190508181036000830152614434816143f8565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b60006144976035836135ca565b91506144a28261443b565b604082019050919050565b600060208201905081810360008301526144c68161448a565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006145036013836135ca565b915061450e826144cd565b602082019050919050565b60006020820190508181036000830152614532816144f6565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b60006145956036836135ca565b91506145a082614539565b604082019050919050565b600060208201905081810360008301526145c481614588565b9050919050565b60006145d6826136d4565b91506145e1836136d4565b92508282039050818111156145f9576145f8613a88565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b600061465b6026836135ca565b9150614666826145ff565b604082019050919050565b6000602082019050818103600083015261468a8161464e565b9050919050565b600081905092915050565b50565b60006146ac600083614691565b91506146b78261469c565b600082019050919050565b60006146cd8261469f565b9150819050919050565b60006060820190506146ec60008301866137f1565b6146f960208301856137f1565b61470660408301846137f1565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061477b816136a8565b92915050565b60006020828403121561479757614796613671565b5b60006147a58482850161476c565b91505092915050565b6000819050919050565b60006147d36147ce6147c9846147ae565b613777565b6136d4565b9050919050565b6147e3816147b8565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61481e81613696565b82525050565b60006148308383614815565b60208301905092915050565b6000602082019050919050565b6000614854826147e9565b61485e81856147f4565b935061486983614805565b8060005b8381101561489a5781516148818882614824565b975061488c8361483c565b92505060018101905061486d565b5085935050505092915050565b600060a0820190506148bc60008301886137f1565b6148c960208301876147da565b81810360408301526148db8186614849565b90506148ea606083018561389b565b6148f760808301846137f1565b9695505050505050565b600060c082019050614916600083018961389b565b61492360208301886137f1565b61493060408301876147da565b61493d60608301866147da565b61494a608083018561389b565b61495760a08301846137f1565b979650505050505050565b600081519050614971816136de565b92915050565b6000806000606084860312156149905761498f613671565b5b600061499e86828701614962565b93505060206149af86828701614962565b92505060406149c086828701614962565b915050925092509256fea26469706673582212203dcbd0f415ad4821804e1075d2e5e2272fe5c83c945a06115639251e529c862564736f6c63430008130033

Deployed Bytecode Sourcemap

34345:15272:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35632:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23249:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25600:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35502:63;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35673:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34420:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24369:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42398:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35367:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35327;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39456:277;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26381:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34523:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24211:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27085:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35809:47;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34478:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34802:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42563:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35182:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34882:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24540:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2541:103;;;;;;;;;;;;;:::i;:::-;;38694:121;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40007:159;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34615:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35723:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35075:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40282:480;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1893:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34652:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35217:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40174:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23468:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41459:296;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35149:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35407:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35293:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35760:42;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27826:424;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24873:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42167:223;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35865:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34842:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41269:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40770:491;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39741:258;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34992:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34685:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38966:482;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35576:49;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35041:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25129:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34727:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38823:135;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35112:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41959:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2799:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35255:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34767:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35632:34;;;;;;;;;;;;;:::o;23249:100::-;23303:13;23336:5;23329:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23249:100;:::o;25600:201::-;25683:4;25700:13;25716:12;:10;:12::i;:::-;25700:28;;25739:32;25748:5;25755:7;25764:6;25739:8;:32::i;:::-;25789:4;25782:11;;;25600:201;;;;:::o;35502:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;35673:43::-;;;;;;;;;;;;;:::o;34420:51::-;;;:::o;24369:108::-;24430:7;24457:12;;24450:19;;24369:108;:::o;42398:157::-;1779:13;:11;:13::i;:::-;42505:9:::1;;;;;;;;;;;42477:38;;42494:9;42477:38;;;;;;;;;;;;42538:9;42526;;:21;;;;;;;;;;;;;;;;;;42398:157:::0;:::o;35367:33::-;;;;:::o;35327:::-;;;;:::o;39456:277::-;1779:13;:11;:13::i;:::-;39593:4:::1;39585;39580:1;39564:13;:11;:13::i;:::-;:17;;;;:::i;:::-;39563:26;;;;:::i;:::-;39562:35;;;;:::i;:::-;39552:6;:45;;39530:142;;;;;;;;;;;;:::i;:::-;;;;;;;;;39716:8;39706:6;:19;;;;:::i;:::-;39683:20;:42;;;;39456:277:::0;:::o;26381:295::-;26512:4;26529:15;26547:12;:10;:12::i;:::-;26529:30;;26570:38;26586:4;26592:7;26601:6;26570:15;:38::i;:::-;26619:27;26629:4;26635:2;26639:6;26619:9;:27::i;:::-;26664:4;26657:11;;;26381:295;;;;;:::o;34523:53::-;34569:6;34523:53;:::o;24211:93::-;24269:5;24294:2;24287:9;;24211:93;:::o;27085:238::-;27173:4;27190:13;27206:12;:10;:12::i;:::-;27190:28;;27229:64;27238:5;27245:7;27282:10;27254:25;27264:5;27271:7;27254:9;:25::i;:::-;:38;;;;:::i;:::-;27229:8;:64::i;:::-;27311:4;27304:11;;;27085:238;;;;:::o;35809:47::-;;;;;;;;;;;;;;;;;;;;;;:::o;34478:38::-;;;:::o;34802:33::-;;;;;;;;;;;;;:::o;42563:126::-;42629:4;42653:19;:28;42673:7;42653:28;;;;;;;;;;;;;;;;;;;;;;;;;42646:35;;42563:126;;;:::o;35182:28::-;;;;:::o;34882:30::-;;;;;;;;;;;;;:::o;24540:127::-;24614:7;24641:9;:18;24651:7;24641:18;;;;;;;;;;;;;;;;24634:25;;24540:127;;;:::o;2541:103::-;1779:13;:11;:13::i;:::-;2606:30:::1;2633:1;2606:18;:30::i;:::-;2541:103::o:0;38694:121::-;38746:4;1779:13;:11;:13::i;:::-;38780:5:::1;38763:14;;:22;;;;;;;;;;;;;;;;;;38803:4;38796:11;;38694:121:::0;:::o;40007:159::-;1779:13;:11;:13::i;:::-;40154:4:::1;40112:31;:39;40144:6;40112:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;40007:159:::0;;:::o;34615:30::-;;;;;;;;;;;;;:::o;35723:28::-;;;;:::o;35075:30::-;;;;:::o;40282:480::-;1779:13;:11;:13::i;:::-;40432:20:::1;40455:12;;40432:35;;40496:13;40478:15;:31;;;;40538:13;40520:15;:31;;;;40574:7;40562:9;:19;;;;40643:9;;40625:15;;40607;;:33;;;;:::i;:::-;:45;;;;:::i;:::-;40592:12;:60;;;;40687:2;40671:12;;:18;;:49;;;;40708:12;40693;;:27;40671:49;40663:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;40421:341;40282:480:::0;;;:::o;1893:87::-;1939:7;1966:6;;;;;;;;;;;1959:13;;1893:87;:::o;34652:24::-;;;;;;;;;;;;;:::o;35217:31::-;;;;:::o;40174:100::-;1779:13;:11;:13::i;:::-;40259:7:::1;40245:11;;:21;;;;;;;;;;;;;;;;;;40174:100:::0;:::o;23468:104::-;23524:13;23557:7;23550:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23468:104;:::o;41459:296::-;1779:13;:11;:13::i;:::-;41595::::1;41587:21;;:4;:21;;::::0;41565:128:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;41706:41;41735:4;41741:5;41706:28;:41::i;:::-;41459:296:::0;;:::o;35149:24::-;;;;:::o;35407:27::-;;;;:::o;35293:25::-;;;;:::o;35760:42::-;;;;;;;;;;;;;;;;;;;;;;:::o;27826:424::-;27919:4;27936:13;27952:12;:10;:12::i;:::-;27936:28;;27975:24;28002:25;28012:5;28019:7;28002:9;:25::i;:::-;27975:52;;28066:15;28046:16;:35;;28038:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;28151:60;28160:5;28167:7;28195:15;28176:16;:34;28151:8;:60::i;:::-;28238:4;28231:11;;;;27826:424;;;;:::o;24873:193::-;24952:4;24969:13;24985:12;:10;:12::i;:::-;24969:28;;25008;25018:5;25025:2;25029:6;25008:9;:28::i;:::-;25054:4;25047:11;;;24873:193;;;;:::o;42167:223::-;1779:13;:11;:13::i;:::-;42319:15:::1;;;;;;;;;;;42276:59;;42299:18;42276:59;;;;;;;;;;;;42364:18;42346:15;;:36;;;;;;;;;;;;;;;;;;42167:223:::0;:::o;35865:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;34842:33::-;;;;;;;;;;;;;:::o;41269:182::-;1779:13;:11;:13::i;:::-;41385:8:::1;41354:19;:28;41374:7;41354:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;41425:7;41409:34;;;41434:8;41409:34;;;;;;:::i;:::-;;;;;;;;41269:182:::0;;:::o;40770:491::-;1779:13;:11;:13::i;:::-;40921:20:::1;40944:13;;40921:36;;40987:13;40968:16;:32;;;;41030:13;41011:16;:32;;;;41067:7;41054:10;:20;;;;41139:10;;41120:16;;41101;;:35;;;;:::i;:::-;:48;;;;:::i;:::-;41085:13;:64;;;;41185:2;41168:13;;:19;;:51;;;;41207:12;41191:13;;:28;41168:51;41160:93;;;;;;;;;;;;:::i;:::-;;;;;;;;;40910:351;40770:491:::0;;;:::o;39741:258::-;1779:13;:11;:13::i;:::-;39881:4:::1;39873;39868:1;39852:13;:11;:13::i;:::-;:17;;;;:::i;:::-;39851:26;;;;:::i;:::-;39850:35;;;;:::i;:::-;39840:6;:45;;39818:131;;;;;;;;;;;;:::i;:::-;;;;;;;;;39982:8;39972:6;:19;;;;:::i;:::-;39960:9;:31;;;;39741:258:::0;:::o;34992:40::-;;;;;;;;;;;;;:::o;34685:35::-;;;;:::o;38966:482::-;39062:4;1779:13;:11;:13::i;:::-;39141:6:::1;39136:1;39120:13;:11;:13::i;:::-;:17;;;;:::i;:::-;39119:28;;;;:::i;:::-;39106:9;:41;;39084:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;39296:3;39291:1;39275:13;:11;:13::i;:::-;:17;;;;:::i;:::-;39274:25;;;;:::i;:::-;39261:9;:38;;39239:138;;;;;;;;;;;;:::i;:::-;;;;;;;;;39409:9;39388:18;:30;;;;39436:4;39429:11;;38966:482:::0;;;:::o;35576:49::-;;;;;;;;;;;;;;;;;:::o;35041:27::-;;;;:::o;25129:151::-;25218:7;25245:11;:18;25257:5;25245:18;;;;;;;;;;;;;;;:27;25264:7;25245:27;;;;;;;;;;;;;;;;25238:34;;25129:151;;;;:::o;34727:33::-;;;;:::o;38823:135::-;38883:4;1779:13;:11;:13::i;:::-;38923:5:::1;38900:20;;:28;;;;;;;;;;;;;;;;;;38946:4;38939:11;;38823:135:::0;:::o;35112:30::-;;;;:::o;41959:100::-;1779:13;:11;:13::i;:::-;42044:7:::1;42027:14;;:24;;;;;;;;;;;;;;;;;;41959:100:::0;:::o;2799:201::-;1779:13;:11;:13::i;:::-;2908:1:::1;2888:22;;:8;:22;;::::0;2880:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;2964:28;2983:8;2964:18;:28::i;:::-;2799:201:::0;:::o;35255:31::-;;;;:::o;34767:24::-;;;;:::o;602:98::-;655:7;682:10;675:17;;602:98;:::o;31781:380::-;31934:1;31917:19;;:5;:19;;;31909:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32015:1;31996:21;;:7;:21;;;31988:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32099:6;32069:11;:18;32081:5;32069:18;;;;;;;;;;;;;;;:27;32088:7;32069:27;;;;;;;;;;;;;;;:36;;;;32137:7;32121:32;;32130:5;32121:32;;;32146:6;32121:32;;;;;;:::i;:::-;;;;;;;;31781:380;;;:::o;2058:132::-;2133:12;:10;:12::i;:::-;2122:23;;:7;:5;:7::i;:::-;:23;;;2114:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2058:132::o;32452:433::-;32587:24;32614:25;32624:5;32631:7;32614:9;:25::i;:::-;32587:52;;32674:17;32654:16;:37;32650:228;;32732:6;32712:16;:26;;32704:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32804:51;32813:5;32820:7;32848:6;32829:16;:25;32804:8;:51::i;:::-;32650:228;32576:309;32452:433;;;:::o;42747:4320::-;42895:1;42879:18;;:4;:18;;;42871:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42972:1;42958:16;;:2;:16;;;42950:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;43041:1;43031:6;:11;43027:93;;43059:28;43075:4;43081:2;43085:1;43059:15;:28::i;:::-;43102:7;;43027:93;43136:14;;;;;;;;;;;43132:2296;;;43197:7;:5;:7::i;:::-;43189:15;;:4;:15;;;;:49;;;;;43231:7;:5;:7::i;:::-;43225:13;;:2;:13;;;;43189:49;:86;;;;;43273:1;43259:16;;:2;:16;;;;43189:86;:128;;;;;43310:6;43296:21;;:2;:21;;;;43189:128;:158;;;;;43339:8;;;;;;;;;;;43338:9;43189:158;43167:2250;;;43387:13;;;;;;;;;;;43382:223;;43459:19;:25;43479:4;43459:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;43488:19;:23;43508:2;43488:23;;;;;;;;;;;;;;;;;;;;;;;;;43459:52;43425:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;43382:223;43629:20;;;;;;;;;;;43625:637;;;43710:7;:5;:7::i;:::-;43704:13;;:2;:13;;;;:72;;;;;43760:15;43746:30;;:2;:30;;;;43704:72;:129;;;;;43819:13;43805:28;;:2;:28;;;;43704:129;43674:569;;;43993:12;43922:28;:39;43951:9;43922:39;;;;;;;;;;;;;;;;:83;43884:254;;;;;;;;;;;;:::i;:::-;;;;;;;;;44207:12;44165:28;:39;44194:9;44165:39;;;;;;;;;;;;;;;:54;;;;43674:569;43625:637;44308:25;:31;44334:4;44308:31;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;44365:31;:35;44397:2;44365:35;;;;;;;;;;;;;;;;;;;;;;;;;44364:36;44308:92;44282:1120;;;44487:20;;44477:6;:30;;44443:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;44695:9;;44678:13;44688:2;44678:9;:13::i;:::-;44669:6;:22;;;;:::i;:::-;:35;;44635:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;44282:1120;;;44846:25;:29;44872:2;44846:29;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;44901:31;:37;44933:4;44901:37;;;;;;;;;;;;;;;;;;;;;;;;;44900:38;44846:92;44820:582;;;45025:20;;45015:6;:30;;44981:170;;;;;;;;;;;;:::i;:::-;;;;;;;;;44820:582;;;45182:31;:35;45214:2;45182:35;;;;;;;;;;;;;;;;;;;;;;;;;45177:225;;45302:9;;45285:13;45295:2;45285:9;:13::i;:::-;45276:6;:22;;;;:::i;:::-;:35;;45242:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;45177:225;44820:582;44282:1120;43167:2250;43132:2296;45440:28;45471:24;45489:4;45471:9;:24::i;:::-;45440:55;;45508:12;45547:18;;45523:20;:42;;45508:57;;45596:7;:35;;;;;45620:11;;;;;;;;;;;45596:35;:61;;;;;45649:8;;;;;;;;;;;45648:9;45596:61;:110;;;;;45675:25;:31;45701:4;45675:31;;;;;;;;;;;;;;;;;;;;;;;;;45674:32;45596:110;:153;;;;;45724:19;:25;45744:4;45724:25;;;;;;;;;;;;;;;;;;;;;;;;;45723:26;45596:153;:194;;;;;45767:19;:23;45787:2;45767:23;;;;;;;;;;;;;;;;;;;;;;;;;45766:24;45596:194;45578:326;;;45828:4;45817:8;;:15;;;;;;;;;;;;;;;;;;45849:10;:8;:10::i;:::-;45887:5;45876:8;;:16;;;;;;;;;;;;;;;;;;45578:326;45916:12;45932:8;;;;;;;;;;;45931:9;45916:24;;45957:19;:25;45977:4;45957:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;45986:19;:23;46006:2;45986:23;;;;;;;;;;;;;;;;;;;;;;;;;45957:52;45953:100;;;46036:5;46026:15;;45953:100;46065:12;46096:7;46092:922;;;46124:25;:29;46150:2;46124:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;46173:1;46157:13;;:17;46124:50;46120:745;;;46202:34;46232:3;46202:25;46213:13;;46202:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;46195:41;;46305:13;;46285:16;;46278:4;:23;;;;:::i;:::-;46277:41;;;;:::i;:::-;46255:18;;:63;;;;;;;:::i;:::-;;;;;;;;46375:13;;46361:10;;46354:4;:17;;;;:::i;:::-;46353:35;;;;:::i;:::-;46337:12;;:51;;;;;;;:::i;:::-;;;;;;;;46457:13;;46437:16;;46430:4;:23;;;;:::i;:::-;46429:41;;;;:::i;:::-;46407:18;;:63;;;;;;;:::i;:::-;;;;;;;;46120:745;;;46509:25;:31;46535:4;46509:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;46559:1;46544:12;;:16;46509:51;46505:360;;;46588:33;46617:3;46588:24;46599:12;;46588:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;46581:40;;46689:12;;46670:15;;46663:4;:22;;;;:::i;:::-;46662:39;;;;:::i;:::-;46640:18;;:61;;;;;;;:::i;:::-;;;;;;;;46757:12;;46744:9;;46737:4;:16;;;;:::i;:::-;46736:33;;;;:::i;:::-;46720:12;;:49;;;;;;;:::i;:::-;;;;;;;;46837:12;;46818:15;;46811:4;:22;;;;:::i;:::-;46810:39;;;;:::i;:::-;46788:18;;:61;;;;;;;:::i;:::-;;;;;;;;46505:360;46120:745;46892:1;46885:4;:8;46881:91;;;46914:42;46930:4;46944;46951;46914:15;:42::i;:::-;46881:91;46998:4;46988:14;;;;;:::i;:::-;;;46092:922;47026:33;47042:4;47048:2;47052:6;47026:15;:33::i;:::-;42860:4207;;;;42747:4320;;;;:::o;3160:191::-;3234:16;3253:6;;;;;;;;;;;3234:25;;3279:8;3270:6;;:17;;;;;;;;;;;;;;;;;;3334:8;3303:40;;3324:8;3303:40;;;;;;;;;;;;3223:128;3160:191;:::o;41763:188::-;41880:5;41846:25;:31;41872:4;41846:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;41937:5;41903:40;;41931:4;41903:40;;;;;;;;;;;;41763:188;;:::o;28720:816::-;28867:1;28851:18;;:4;:18;;;28843:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28944:1;28930:16;;:2;:16;;;28922:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;28999:38;29020:4;29026:2;29030:6;28999:20;:38::i;:::-;29050:19;29072:9;:15;29082:4;29072:15;;;;;;;;;;;;;;;;29050:37;;29121:6;29106:11;:21;;29098:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;29230:6;29216:11;:20;29198:9;:15;29208:4;29198:15;;;;;;;;;;;;;;;:38;;;;29421:6;29404:9;:13;29414:2;29404:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;29467:2;29452:26;;29461:4;29452:26;;;29471:6;29452:26;;;;;;:::i;:::-;;;;;;;;29491:37;29511:4;29517:2;29521:6;29491:19;:37::i;:::-;28832:704;28720:816;;;:::o;47933:1677::-;47972:23;47998:24;48016:4;47998:9;:24::i;:::-;47972:50;;48033:25;48121:12;;48091:18;;48061;;:48;;;;:::i;:::-;:72;;;;:::i;:::-;48033:100;;48144:12;48192:1;48173:15;:20;:46;;;;48218:1;48197:17;:22;48173:46;48169:85;;;48236:7;;;;;48169:85;48288:18;;48270:15;:36;48266:105;;;48341:18;;48323:36;;48266:105;48383:23;48488:1;48459:17;48428:18;;48410:15;:36;;;;:::i;:::-;48409:67;;;;:::i;:::-;:80;;;;:::i;:::-;48383:106;;48500:26;48529:36;48549:15;48529;:19;;:36;;;;:::i;:::-;48500:65;;48578:25;48606:21;48578:49;;48640:36;48657:18;48640:16;:36::i;:::-;48689:18;48710:44;48736:17;48710:21;:25;;:44;;;;:::i;:::-;48689:65;;48767:23;48793:81;48846:17;48793:34;48808:18;;48793:10;:14;;:34;;;;:::i;:::-;:38;;:81;;;;:::i;:::-;48767:107;;48885:17;48905:51;48938:17;48905:28;48920:12;;48905:10;:14;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;48885:71;;48969:23;49026:9;49008:15;48995:10;:28;;;;:::i;:::-;:40;;;;:::i;:::-;48969:66;;49069:1;49048:18;:22;;;;49102:1;49081:18;:22;;;;49129:1;49114:12;:16;;;;49164:9;;;;;;;;;;;49156:23;;49188:9;49156:46;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49143:59;;;;;49237:1;49219:15;:19;:42;;;;;49260:1;49242:15;:19;49219:42;49215:278;;;49278:46;49291:15;49308;49278:12;:46::i;:::-;49344:137;49377:18;49414:15;49448:18;;49344:137;;;;;;;;:::i;:::-;;;;;;;;49215:278;49526:15;;;;;;;;;;;49518:29;;49566:21;49518:84;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49505:97;;;;;47961:1649;;;;;;;;;;47933:1677;:::o;9421:98::-;9479:7;9510:1;9506;:5;;;;:::i;:::-;9499:12;;9421:98;;;;:::o;9820:::-;9878:7;9909:1;9905;:5;;;;:::i;:::-;9898:12;;9820:98;;;;:::o;33485:125::-;;;;:::o;34214:124::-;;;;:::o;9064:98::-;9122:7;9153:1;9149;:5;;;;:::i;:::-;9142:12;;9064:98;;;;:::o;47075:475::-;47141:21;47179:1;47165:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47141:40;;47210:4;47192;47197:1;47192:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;47236:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;47226:4;47231:1;47226:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;47271:62;47288:4;47303:15;47321:11;47271:8;:62::i;:::-;47346:15;:66;;;47427:11;47453:1;47469:4;47496;47516:15;47346:196;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47130:420;47075:475;:::o;47558:367::-;47639:62;47656:4;47671:15;47689:11;47639:8;:62::i;:::-;47714:15;:31;;;47754:9;47787:4;47807:11;47833:1;47849;34569:6;47891:15;47714:203;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;47558:367;;:::o;7:90:1:-;41:7;84:5;77:13;70:21;59:32;;7:90;;;:::o;103:109::-;184:21;199:5;184:21;:::i;:::-;179:3;172:34;103:109;;:::o;218:210::-;305:4;343:2;332:9;328:18;320:26;;356:65;418:1;407:9;403:17;394:6;356:65;:::i;:::-;218:210;;;;:::o;434:99::-;486:6;520:5;514:12;504:22;;434:99;;;:::o;539:169::-;623:11;657:6;652:3;645:19;697:4;692:3;688:14;673:29;;539:169;;;;:::o;714:246::-;795:1;805:113;819:6;816:1;813:13;805:113;;;904:1;899:3;895:11;889:18;885:1;880:3;876:11;869:39;841:2;838:1;834:10;829:15;;805:113;;;952:1;943:6;938:3;934:16;927:27;776:184;714:246;;;:::o;966:102::-;1007:6;1058:2;1054:7;1049:2;1042:5;1038:14;1034:28;1024:38;;966:102;;;:::o;1074:377::-;1162:3;1190:39;1223:5;1190:39;:::i;:::-;1245:71;1309:6;1304:3;1245:71;:::i;:::-;1238:78;;1325:65;1383:6;1378:3;1371:4;1364:5;1360:16;1325:65;:::i;:::-;1415:29;1437:6;1415:29;:::i;:::-;1410:3;1406:39;1399:46;;1166:285;1074:377;;;;:::o;1457:313::-;1570:4;1608:2;1597:9;1593:18;1585:26;;1657:9;1651:4;1647:20;1643:1;1632:9;1628:17;1621:47;1685:78;1758:4;1749:6;1685:78;:::i;:::-;1677:86;;1457:313;;;;:::o;1857:117::-;1966:1;1963;1956:12;2103:126;2140:7;2180:42;2173:5;2169:54;2158:65;;2103:126;;;:::o;2235:96::-;2272:7;2301:24;2319:5;2301:24;:::i;:::-;2290:35;;2235:96;;;:::o;2337:122::-;2410:24;2428:5;2410:24;:::i;:::-;2403:5;2400:35;2390:63;;2449:1;2446;2439:12;2390:63;2337:122;:::o;2465:139::-;2511:5;2549:6;2536:20;2527:29;;2565:33;2592:5;2565:33;:::i;:::-;2465:139;;;;:::o;2610:77::-;2647:7;2676:5;2665:16;;2610:77;;;:::o;2693:122::-;2766:24;2784:5;2766:24;:::i;:::-;2759:5;2756:35;2746:63;;2805:1;2802;2795:12;2746:63;2693:122;:::o;2821:139::-;2867:5;2905:6;2892:20;2883:29;;2921:33;2948:5;2921:33;:::i;:::-;2821:139;;;;:::o;2966:474::-;3034:6;3042;3091:2;3079:9;3070:7;3066:23;3062:32;3059:119;;;3097:79;;:::i;:::-;3059:119;3217:1;3242:53;3287:7;3278:6;3267:9;3263:22;3242:53;:::i;:::-;3232:63;;3188:117;3344:2;3370:53;3415:7;3406:6;3395:9;3391:22;3370:53;:::i;:::-;3360:63;;3315:118;2966:474;;;;;:::o;3446:329::-;3505:6;3554:2;3542:9;3533:7;3529:23;3525:32;3522:119;;;3560:79;;:::i;:::-;3522:119;3680:1;3705:53;3750:7;3741:6;3730:9;3726:22;3705:53;:::i;:::-;3695:63;;3651:117;3446:329;;;;:::o;3781:60::-;3809:3;3830:5;3823:12;;3781:60;;;:::o;3847:142::-;3897:9;3930:53;3948:34;3957:24;3975:5;3957:24;:::i;:::-;3948:34;:::i;:::-;3930:53;:::i;:::-;3917:66;;3847:142;;;:::o;3995:126::-;4045:9;4078:37;4109:5;4078:37;:::i;:::-;4065:50;;3995:126;;;:::o;4127:153::-;4204:9;4237:37;4268:5;4237:37;:::i;:::-;4224:50;;4127:153;;;:::o;4286:185::-;4400:64;4458:5;4400:64;:::i;:::-;4395:3;4388:77;4286:185;;:::o;4477:276::-;4597:4;4635:2;4624:9;4620:18;4612:26;;4648:98;4743:1;4732:9;4728:17;4719:6;4648:98;:::i;:::-;4477:276;;;;:::o;4759:118::-;4846:24;4864:5;4846:24;:::i;:::-;4841:3;4834:37;4759:118;;:::o;4883:222::-;4976:4;5014:2;5003:9;4999:18;4991:26;;5027:71;5095:1;5084:9;5080:17;5071:6;5027:71;:::i;:::-;4883:222;;;;:::o;5111:329::-;5170:6;5219:2;5207:9;5198:7;5194:23;5190:32;5187:119;;;5225:79;;:::i;:::-;5187:119;5345:1;5370:53;5415:7;5406:6;5395:9;5391:22;5370:53;:::i;:::-;5360:63;;5316:117;5111:329;;;;:::o;5446:619::-;5523:6;5531;5539;5588:2;5576:9;5567:7;5563:23;5559:32;5556:119;;;5594:79;;:::i;:::-;5556:119;5714:1;5739:53;5784:7;5775:6;5764:9;5760:22;5739:53;:::i;:::-;5729:63;;5685:117;5841:2;5867:53;5912:7;5903:6;5892:9;5888:22;5867:53;:::i;:::-;5857:63;;5812:118;5969:2;5995:53;6040:7;6031:6;6020:9;6016:22;5995:53;:::i;:::-;5985:63;;5940:118;5446:619;;;;;:::o;6071:118::-;6158:24;6176:5;6158:24;:::i;:::-;6153:3;6146:37;6071:118;;:::o;6195:222::-;6288:4;6326:2;6315:9;6311:18;6303:26;;6339:71;6407:1;6396:9;6392:17;6383:6;6339:71;:::i;:::-;6195:222;;;;:::o;6423:86::-;6458:7;6498:4;6491:5;6487:16;6476:27;;6423:86;;;:::o;6515:112::-;6598:22;6614:5;6598:22;:::i;:::-;6593:3;6586:35;6515:112;;:::o;6633:214::-;6722:4;6760:2;6749:9;6745:18;6737:26;;6773:67;6837:1;6826:9;6822:17;6813:6;6773:67;:::i;:::-;6633:214;;;;:::o;6853:116::-;6923:21;6938:5;6923:21;:::i;:::-;6916:5;6913:32;6903:60;;6959:1;6956;6949:12;6903:60;6853:116;:::o;6975:133::-;7018:5;7056:6;7043:20;7034:29;;7072:30;7096:5;7072:30;:::i;:::-;6975:133;;;;:::o;7114:468::-;7179:6;7187;7236:2;7224:9;7215:7;7211:23;7207:32;7204:119;;;7242:79;;:::i;:::-;7204:119;7362:1;7387:53;7432:7;7423:6;7412:9;7408:22;7387:53;:::i;:::-;7377:63;;7333:117;7489:2;7515:50;7557:7;7548:6;7537:9;7533:22;7515:50;:::i;:::-;7505:60;;7460:115;7114:468;;;;;:::o;7588:619::-;7665:6;7673;7681;7730:2;7718:9;7709:7;7705:23;7701:32;7698:119;;;7736:79;;:::i;:::-;7698:119;7856:1;7881:53;7926:7;7917:6;7906:9;7902:22;7881:53;:::i;:::-;7871:63;;7827:117;7983:2;8009:53;8054:7;8045:6;8034:9;8030:22;8009:53;:::i;:::-;7999:63;;7954:118;8111:2;8137:53;8182:7;8173:6;8162:9;8158:22;8137:53;:::i;:::-;8127:63;;8082:118;7588:619;;;;;:::o;8213:323::-;8269:6;8318:2;8306:9;8297:7;8293:23;8289:32;8286:119;;;8324:79;;:::i;:::-;8286:119;8444:1;8469:50;8511:7;8502:6;8491:9;8487:22;8469:50;:::i;:::-;8459:60;;8415:114;8213:323;;;;:::o;8542:474::-;8610:6;8618;8667:2;8655:9;8646:7;8642:23;8638:32;8635:119;;;8673:79;;:::i;:::-;8635:119;8793:1;8818:53;8863:7;8854:6;8843:9;8839:22;8818:53;:::i;:::-;8808:63;;8764:117;8920:2;8946:53;8991:7;8982:6;8971:9;8967:22;8946:53;:::i;:::-;8936:63;;8891:118;8542:474;;;;;:::o;9022:180::-;9070:77;9067:1;9060:88;9167:4;9164:1;9157:15;9191:4;9188:1;9181:15;9208:320;9252:6;9289:1;9283:4;9279:12;9269:22;;9336:1;9330:4;9326:12;9357:18;9347:81;;9413:4;9405:6;9401:17;9391:27;;9347:81;9475:2;9467:6;9464:14;9444:18;9441:38;9438:84;;9494:18;;:::i;:::-;9438:84;9259:269;9208:320;;;:::o;9534:180::-;9582:77;9579:1;9572:88;9679:4;9676:1;9669:15;9703:4;9700:1;9693:15;9720:410;9760:7;9783:20;9801:1;9783:20;:::i;:::-;9778:25;;9817:20;9835:1;9817:20;:::i;:::-;9812:25;;9872:1;9869;9865:9;9894:30;9912:11;9894:30;:::i;:::-;9883:41;;10073:1;10064:7;10060:15;10057:1;10054:22;10034:1;10027:9;10007:83;9984:139;;10103:18;;:::i;:::-;9984:139;9768:362;9720:410;;;;:::o;10136:180::-;10184:77;10181:1;10174:88;10281:4;10278:1;10271:15;10305:4;10302:1;10295:15;10322:185;10362:1;10379:20;10397:1;10379:20;:::i;:::-;10374:25;;10413:20;10431:1;10413:20;:::i;:::-;10408:25;;10452:1;10442:35;;10457:18;;:::i;:::-;10442:35;10499:1;10496;10492:9;10487:14;;10322:185;;;;:::o;10513:234::-;10653:34;10649:1;10641:6;10637:14;10630:58;10722:17;10717:2;10709:6;10705:15;10698:42;10513:234;:::o;10753:366::-;10895:3;10916:67;10980:2;10975:3;10916:67;:::i;:::-;10909:74;;10992:93;11081:3;10992:93;:::i;:::-;11110:2;11105:3;11101:12;11094:19;;10753:366;;;:::o;11125:419::-;11291:4;11329:2;11318:9;11314:18;11306:26;;11378:9;11372:4;11368:20;11364:1;11353:9;11349:17;11342:47;11406:131;11532:4;11406:131;:::i;:::-;11398:139;;11125:419;;;:::o;11550:191::-;11590:3;11609:20;11627:1;11609:20;:::i;:::-;11604:25;;11643:20;11661:1;11643:20;:::i;:::-;11638:25;;11686:1;11683;11679:9;11672:16;;11707:3;11704:1;11701:10;11698:36;;;11714:18;;:::i;:::-;11698:36;11550:191;;;;:::o;11747:179::-;11887:31;11883:1;11875:6;11871:14;11864:55;11747:179;:::o;11932:366::-;12074:3;12095:67;12159:2;12154:3;12095:67;:::i;:::-;12088:74;;12171:93;12260:3;12171:93;:::i;:::-;12289:2;12284:3;12280:12;12273:19;;11932:366;;;:::o;12304:419::-;12470:4;12508:2;12497:9;12493:18;12485:26;;12557:9;12551:4;12547:20;12543:1;12532:9;12528:17;12521:47;12585:131;12711:4;12585:131;:::i;:::-;12577:139;;12304:419;;;:::o;12729:244::-;12869:34;12865:1;12857:6;12853:14;12846:58;12938:27;12933:2;12925:6;12921:15;12914:52;12729:244;:::o;12979:366::-;13121:3;13142:67;13206:2;13201:3;13142:67;:::i;:::-;13135:74;;13218:93;13307:3;13218:93;:::i;:::-;13336:2;13331:3;13327:12;13320:19;;12979:366;;;:::o;13351:419::-;13517:4;13555:2;13544:9;13540:18;13532:26;;13604:9;13598:4;13594:20;13590:1;13579:9;13575:17;13568:47;13632:131;13758:4;13632:131;:::i;:::-;13624:139;;13351:419;;;:::o;13776:224::-;13916:34;13912:1;13904:6;13900:14;13893:58;13985:7;13980:2;13972:6;13968:15;13961:32;13776:224;:::o;14006:366::-;14148:3;14169:67;14233:2;14228:3;14169:67;:::i;:::-;14162:74;;14245:93;14334:3;14245:93;:::i;:::-;14363:2;14358:3;14354:12;14347:19;;14006:366;;;:::o;14378:419::-;14544:4;14582:2;14571:9;14567:18;14559:26;;14631:9;14625:4;14621:20;14617:1;14606:9;14602:17;14595:47;14659:131;14785:4;14659:131;:::i;:::-;14651:139;;14378:419;;;:::o;14803:223::-;14943:34;14939:1;14931:6;14927:14;14920:58;15012:6;15007:2;14999:6;14995:15;14988:31;14803:223;:::o;15032:366::-;15174:3;15195:67;15259:2;15254:3;15195:67;:::i;:::-;15188:74;;15271:93;15360:3;15271:93;:::i;:::-;15389:2;15384:3;15380:12;15373:19;;15032:366;;;:::o;15404:419::-;15570:4;15608:2;15597:9;15593:18;15585:26;;15657:9;15651:4;15647:20;15643:1;15632:9;15628:17;15621:47;15685:131;15811:4;15685:131;:::i;:::-;15677:139;;15404:419;;;:::o;15829:240::-;15969:34;15965:1;15957:6;15953:14;15946:58;16038:23;16033:2;16025:6;16021:15;16014:48;15829:240;:::o;16075:366::-;16217:3;16238:67;16302:2;16297:3;16238:67;:::i;:::-;16231:74;;16314:93;16403:3;16314:93;:::i;:::-;16432:2;16427:3;16423:12;16416:19;;16075:366;;;:::o;16447:419::-;16613:4;16651:2;16640:9;16636:18;16628:26;;16700:9;16694:4;16690:20;16686:1;16675:9;16671:17;16664:47;16728:131;16854:4;16728:131;:::i;:::-;16720:139;;16447:419;;;:::o;16872:237::-;17012:34;17008:1;17000:6;16996:14;16989:58;17081:20;17076:2;17068:6;17064:15;17057:45;16872:237;:::o;17115:366::-;17257:3;17278:67;17342:2;17337:3;17278:67;:::i;:::-;17271:74;;17354:93;17443:3;17354:93;:::i;:::-;17472:2;17467:3;17463:12;17456:19;;17115:366;;;:::o;17487:419::-;17653:4;17691:2;17680:9;17676:18;17668:26;;17740:9;17734:4;17730:20;17726:1;17715:9;17711:17;17704:47;17768:131;17894:4;17768:131;:::i;:::-;17760:139;;17487:419;;;:::o;17912:225::-;18052:34;18048:1;18040:6;18036:14;18029:58;18121:8;18116:2;18108:6;18104:15;18097:33;17912:225;:::o;18143:366::-;18285:3;18306:67;18370:2;18365:3;18306:67;:::i;:::-;18299:74;;18382:93;18471:3;18382:93;:::i;:::-;18500:2;18495:3;18491:12;18484:19;;18143:366;;;:::o;18515:419::-;18681:4;18719:2;18708:9;18704:18;18696:26;;18768:9;18762:4;18758:20;18754:1;18743:9;18739:17;18732:47;18796:131;18922:4;18796:131;:::i;:::-;18788:139;;18515:419;;;:::o;18940:223::-;19080:34;19076:1;19068:6;19064:14;19057:58;19149:6;19144:2;19136:6;19132:15;19125:31;18940:223;:::o;19169:366::-;19311:3;19332:67;19396:2;19391:3;19332:67;:::i;:::-;19325:74;;19408:93;19497:3;19408:93;:::i;:::-;19526:2;19521:3;19517:12;19510:19;;19169:366;;;:::o;19541:419::-;19707:4;19745:2;19734:9;19730:18;19722:26;;19794:9;19788:4;19784:20;19780:1;19769:9;19765:17;19758:47;19822:131;19948:4;19822:131;:::i;:::-;19814:139;;19541:419;;;:::o;19966:221::-;20106:34;20102:1;20094:6;20090:14;20083:58;20175:4;20170:2;20162:6;20158:15;20151:29;19966:221;:::o;20193:366::-;20335:3;20356:67;20420:2;20415:3;20356:67;:::i;:::-;20349:74;;20432:93;20521:3;20432:93;:::i;:::-;20550:2;20545:3;20541:12;20534:19;;20193:366;;;:::o;20565:419::-;20731:4;20769:2;20758:9;20754:18;20746:26;;20818:9;20812:4;20808:20;20804:1;20793:9;20789:17;20782:47;20846:131;20972:4;20846:131;:::i;:::-;20838:139;;20565:419;;;:::o;20990:182::-;21130:34;21126:1;21118:6;21114:14;21107:58;20990:182;:::o;21178:366::-;21320:3;21341:67;21405:2;21400:3;21341:67;:::i;:::-;21334:74;;21417:93;21506:3;21417:93;:::i;:::-;21535:2;21530:3;21526:12;21519:19;;21178:366;;;:::o;21550:419::-;21716:4;21754:2;21743:9;21739:18;21731:26;;21803:9;21797:4;21793:20;21789:1;21778:9;21774:17;21767:47;21831:131;21957:4;21831:131;:::i;:::-;21823:139;;21550:419;;;:::o;21975:179::-;22115:31;22111:1;22103:6;22099:14;22092:55;21975:179;:::o;22160:366::-;22302:3;22323:67;22387:2;22382:3;22323:67;:::i;:::-;22316:74;;22399:93;22488:3;22399:93;:::i;:::-;22517:2;22512:3;22508:12;22501:19;;22160:366;;;:::o;22532:419::-;22698:4;22736:2;22725:9;22721:18;22713:26;;22785:9;22779:4;22775:20;22771:1;22760:9;22756:17;22749:47;22813:131;22939:4;22813:131;:::i;:::-;22805:139;;22532:419;;;:::o;22957:224::-;23097:34;23093:1;23085:6;23081:14;23074:58;23166:7;23161:2;23153:6;23149:15;23142:32;22957:224;:::o;23187:366::-;23329:3;23350:67;23414:2;23409:3;23350:67;:::i;:::-;23343:74;;23426:93;23515:3;23426:93;:::i;:::-;23544:2;23539:3;23535:12;23528:19;;23187:366;;;:::o;23559:419::-;23725:4;23763:2;23752:9;23748:18;23740:26;;23812:9;23806:4;23802:20;23798:1;23787:9;23783:17;23776:47;23840:131;23966:4;23840:131;:::i;:::-;23832:139;;23559:419;;;:::o;23984:222::-;24124:34;24120:1;24112:6;24108:14;24101:58;24193:5;24188:2;24180:6;24176:15;24169:30;23984:222;:::o;24212:366::-;24354:3;24375:67;24439:2;24434:3;24375:67;:::i;:::-;24368:74;;24451:93;24540:3;24451:93;:::i;:::-;24569:2;24564:3;24560:12;24553:19;;24212:366;;;:::o;24584:419::-;24750:4;24788:2;24777:9;24773:18;24765:26;;24837:9;24831:4;24827:20;24823:1;24812:9;24808:17;24801:47;24865:131;24991:4;24865:131;:::i;:::-;24857:139;;24584:419;;;:::o;25009:172::-;25149:24;25145:1;25137:6;25133:14;25126:48;25009:172;:::o;25187:366::-;25329:3;25350:67;25414:2;25409:3;25350:67;:::i;:::-;25343:74;;25426:93;25515:3;25426:93;:::i;:::-;25544:2;25539:3;25535:12;25528:19;;25187:366;;;:::o;25559:419::-;25725:4;25763:2;25752:9;25748:18;25740:26;;25812:9;25806:4;25802:20;25798:1;25787:9;25783:17;25776:47;25840:131;25966:4;25840:131;:::i;:::-;25832:139;;25559:419;;;:::o;25984:297::-;26124:34;26120:1;26112:6;26108:14;26101:58;26193:34;26188:2;26180:6;26176:15;26169:59;26262:11;26257:2;26249:6;26245:15;26238:36;25984:297;:::o;26287:366::-;26429:3;26450:67;26514:2;26509:3;26450:67;:::i;:::-;26443:74;;26526:93;26615:3;26526:93;:::i;:::-;26644:2;26639:3;26635:12;26628:19;;26287:366;;;:::o;26659:419::-;26825:4;26863:2;26852:9;26848:18;26840:26;;26912:9;26906:4;26902:20;26898:1;26887:9;26883:17;26876:47;26940:131;27066:4;26940:131;:::i;:::-;26932:139;;26659:419;;;:::o;27084:240::-;27224:34;27220:1;27212:6;27208:14;27201:58;27293:23;27288:2;27280:6;27276:15;27269:48;27084:240;:::o;27330:366::-;27472:3;27493:67;27557:2;27552:3;27493:67;:::i;:::-;27486:74;;27569:93;27658:3;27569:93;:::i;:::-;27687:2;27682:3;27678:12;27671:19;;27330:366;;;:::o;27702:419::-;27868:4;27906:2;27895:9;27891:18;27883:26;;27955:9;27949:4;27945:20;27941:1;27930:9;27926:17;27919:47;27983:131;28109:4;27983:131;:::i;:::-;27975:139;;27702:419;;;:::o;28127:169::-;28267:21;28263:1;28255:6;28251:14;28244:45;28127:169;:::o;28302:366::-;28444:3;28465:67;28529:2;28524:3;28465:67;:::i;:::-;28458:74;;28541:93;28630:3;28541:93;:::i;:::-;28659:2;28654:3;28650:12;28643:19;;28302:366;;;:::o;28674:419::-;28840:4;28878:2;28867:9;28863:18;28855:26;;28927:9;28921:4;28917:20;28913:1;28902:9;28898:17;28891:47;28955:131;29081:4;28955:131;:::i;:::-;28947:139;;28674:419;;;:::o;29099:241::-;29239:34;29235:1;29227:6;29223:14;29216:58;29308:24;29303:2;29295:6;29291:15;29284:49;29099:241;:::o;29346:366::-;29488:3;29509:67;29573:2;29568:3;29509:67;:::i;:::-;29502:74;;29585:93;29674:3;29585:93;:::i;:::-;29703:2;29698:3;29694:12;29687:19;;29346:366;;;:::o;29718:419::-;29884:4;29922:2;29911:9;29907:18;29899:26;;29971:9;29965:4;29961:20;29957:1;29946:9;29942:17;29935:47;29999:131;30125:4;29999:131;:::i;:::-;29991:139;;29718:419;;;:::o;30143:194::-;30183:4;30203:20;30221:1;30203:20;:::i;:::-;30198:25;;30237:20;30255:1;30237:20;:::i;:::-;30232:25;;30281:1;30278;30274:9;30266:17;;30305:1;30299:4;30296:11;30293:37;;;30310:18;;:::i;:::-;30293:37;30143:194;;;;:::o;30343:225::-;30483:34;30479:1;30471:6;30467:14;30460:58;30552:8;30547:2;30539:6;30535:15;30528:33;30343:225;:::o;30574:366::-;30716:3;30737:67;30801:2;30796:3;30737:67;:::i;:::-;30730:74;;30813:93;30902:3;30813:93;:::i;:::-;30931:2;30926:3;30922:12;30915:19;;30574:366;;;:::o;30946:419::-;31112:4;31150:2;31139:9;31135:18;31127:26;;31199:9;31193:4;31189:20;31185:1;31174:9;31170:17;31163:47;31227:131;31353:4;31227:131;:::i;:::-;31219:139;;30946:419;;;:::o;31371:147::-;31472:11;31509:3;31494:18;;31371:147;;;;:::o;31524:114::-;;:::o;31644:398::-;31803:3;31824:83;31905:1;31900:3;31824:83;:::i;:::-;31817:90;;31916:93;32005:3;31916:93;:::i;:::-;32034:1;32029:3;32025:11;32018:18;;31644:398;;;:::o;32048:379::-;32232:3;32254:147;32397:3;32254:147;:::i;:::-;32247:154;;32418:3;32411:10;;32048:379;;;:::o;32433:442::-;32582:4;32620:2;32609:9;32605:18;32597:26;;32633:71;32701:1;32690:9;32686:17;32677:6;32633:71;:::i;:::-;32714:72;32782:2;32771:9;32767:18;32758:6;32714:72;:::i;:::-;32796;32864:2;32853:9;32849:18;32840:6;32796:72;:::i;:::-;32433:442;;;;;;:::o;32881:180::-;32929:77;32926:1;32919:88;33026:4;33023:1;33016:15;33050:4;33047:1;33040:15;33067:180;33115:77;33112:1;33105:88;33212:4;33209:1;33202:15;33236:4;33233:1;33226:15;33253:143;33310:5;33341:6;33335:13;33326:22;;33357:33;33384:5;33357:33;:::i;:::-;33253:143;;;;:::o;33402:351::-;33472:6;33521:2;33509:9;33500:7;33496:23;33492:32;33489:119;;;33527:79;;:::i;:::-;33489:119;33647:1;33672:64;33728:7;33719:6;33708:9;33704:22;33672:64;:::i;:::-;33662:74;;33618:128;33402:351;;;;:::o;33759:85::-;33804:7;33833:5;33822:16;;33759:85;;;:::o;33850:158::-;33908:9;33941:61;33959:42;33968:32;33994:5;33968:32;:::i;:::-;33959:42;:::i;:::-;33941:61;:::i;:::-;33928:74;;33850:158;;;:::o;34014:147::-;34109:45;34148:5;34109:45;:::i;:::-;34104:3;34097:58;34014:147;;:::o;34167:114::-;34234:6;34268:5;34262:12;34252:22;;34167:114;;;:::o;34287:184::-;34386:11;34420:6;34415:3;34408:19;34460:4;34455:3;34451:14;34436:29;;34287:184;;;;:::o;34477:132::-;34544:4;34567:3;34559:11;;34597:4;34592:3;34588:14;34580:22;;34477:132;;;:::o;34615:108::-;34692:24;34710:5;34692:24;:::i;:::-;34687:3;34680:37;34615:108;;:::o;34729:179::-;34798:10;34819:46;34861:3;34853:6;34819:46;:::i;:::-;34897:4;34892:3;34888:14;34874:28;;34729:179;;;;:::o;34914:113::-;34984:4;35016;35011:3;35007:14;34999:22;;34914:113;;;:::o;35063:732::-;35182:3;35211:54;35259:5;35211:54;:::i;:::-;35281:86;35360:6;35355:3;35281:86;:::i;:::-;35274:93;;35391:56;35441:5;35391:56;:::i;:::-;35470:7;35501:1;35486:284;35511:6;35508:1;35505:13;35486:284;;;35587:6;35581:13;35614:63;35673:3;35658:13;35614:63;:::i;:::-;35607:70;;35700:60;35753:6;35700:60;:::i;:::-;35690:70;;35546:224;35533:1;35530;35526:9;35521:14;;35486:284;;;35490:14;35786:3;35779:10;;35187:608;;;35063:732;;;;:::o;35801:831::-;36064:4;36102:3;36091:9;36087:19;36079:27;;36116:71;36184:1;36173:9;36169:17;36160:6;36116:71;:::i;:::-;36197:80;36273:2;36262:9;36258:18;36249:6;36197:80;:::i;:::-;36324:9;36318:4;36314:20;36309:2;36298:9;36294:18;36287:48;36352:108;36455:4;36446:6;36352:108;:::i;:::-;36344:116;;36470:72;36538:2;36527:9;36523:18;36514:6;36470:72;:::i;:::-;36552:73;36620:3;36609:9;36605:19;36596:6;36552:73;:::i;:::-;35801:831;;;;;;;;:::o;36638:807::-;36887:4;36925:3;36914:9;36910:19;36902:27;;36939:71;37007:1;36996:9;36992:17;36983:6;36939:71;:::i;:::-;37020:72;37088:2;37077:9;37073:18;37064:6;37020:72;:::i;:::-;37102:80;37178:2;37167:9;37163:18;37154:6;37102:80;:::i;:::-;37192;37268:2;37257:9;37253:18;37244:6;37192:80;:::i;:::-;37282:73;37350:3;37339:9;37335:19;37326:6;37282:73;:::i;:::-;37365;37433:3;37422:9;37418:19;37409:6;37365:73;:::i;:::-;36638:807;;;;;;;;;:::o;37451:143::-;37508:5;37539:6;37533:13;37524:22;;37555:33;37582:5;37555:33;:::i;:::-;37451:143;;;;:::o;37600:663::-;37688:6;37696;37704;37753:2;37741:9;37732:7;37728:23;37724:32;37721:119;;;37759:79;;:::i;:::-;37721:119;37879:1;37904:64;37960:7;37951:6;37940:9;37936:22;37904:64;:::i;:::-;37894:74;;37850:128;38017:2;38043:64;38099:7;38090:6;38079:9;38075:22;38043:64;:::i;:::-;38033:74;;37988:129;38156:2;38182:64;38238:7;38229:6;38218:9;38214:22;38182:64;:::i;:::-;38172:74;;38127:129;37600:663;;;;;:::o

Swarm Source

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