ETH Price: $2,966.56 (+3.55%)
Gas: 2 Gwei

Token

Fuck SBF (FSBF)
 

Overview

Max Total Supply

1,000,000,000 FSBF

Holders

193

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
FuckSBF

Compiler Version
v0.8.10+commit.fc410830

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-10-22
*/

// File: @openzeppelin/contracts/utils/math/SafeMath.sol


// OpenZeppelin Contracts (last updated v4.6.0) (utils/math/SafeMath.sol)

pragma solidity ^0.8.0;

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

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


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

pragma solidity ^0.8.0;

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

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

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


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

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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

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


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

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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


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

pragma solidity ^0.8.0;


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

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

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

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


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

pragma solidity ^0.8.0;




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

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, amount);
    }

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

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

        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);

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

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

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

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

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

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

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

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

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

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

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

// File: @uniswap/v2-core/contracts/interfaces/IUniswapV2Pair.sol

pragma solidity >=0.5.0;

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

// File: @uniswap/v2-core/contracts/interfaces/IUniswapV2Factory.sol

pragma solidity >=0.5.0;

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

// File: https://github.com/Uniswap/uniswap-v2-periphery/blob/master/contracts/interfaces/IUniswapV2Router01.sol

pragma solidity >=0.6.2;

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

// File: https://github.com/Uniswap/uniswap-v2-periphery/blob/master/contracts/interfaces/IUniswapV2Router02.sol

pragma solidity >=0.6.2;


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

// File: FuckSBF.sol


 
pragma solidity >=0.8.10; 








contract  FuckSBF 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;

    uint256 public percentForLPBurn = 25; // 25 = .25%
    bool public lpBurnEnabled = true;
    uint256 public lpBurnFrequency = 3600 seconds;
    uint256 public lastLpBurnTime;

    uint256 public manualBurnFrequency = 30 minutes;
    uint256 public lastManualLpBurnTime;

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

    // Anti-bot and anti-whale mappings and variables
    mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch
    bool public transferDelayEnabled = true;

    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;

    /******************/

    // exlcude from fees and max transaction amount
    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) public _isExcludedMaxTransactionAmount;

    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount
    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("Fuck SBF", "FSBF") {
        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 = 0;
        uint256 _buyLiquidityFee = 0;
        uint256 _buyDevFee = 0;

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

        uint256 totalSupply = 1_000_000_000 * 1e18;

        maxTransactionAmount = 20_000_000 * 1e18; // 2% from total supply maxTransactionAmountTxn
        maxWallet = 20_000_000 * 1e18; // 3% from total supply maxWallet
        swapTokensAtAmount = (totalSupply * 5) / 10000; // 0.05% swap wallet

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

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

        marketingWallet = address(0x6B39Bf4cdce67464251559B9a5C4Edb20c63087e); // set as marketing wallet
        devWallet = address(0x6B39Bf4cdce67464251559B9a5C4Edb20c63087e); // set as dev wallet

        // exclude from paying fees or having max transaction amount
        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);
    }

    receive() external payable {}

    // once enabled, can never be turned off
    function enableTrading() external onlyOwner {
        tradingActive = true;
        swapEnabled = true;
        lastLpBurnTime = block.timestamp;
    }

    // remove limits after token is stable
    function removeLimits() external onlyOwner returns (bool) {
        limitsInEffect = false;
        return true;
    }

    // disable Transfer delay - cannot be reenabled
    function disableTransferDelay() external onlyOwner returns (bool) {
        transferDelayEnabled = false;
        return true;
    }

    // change the minimum amount of tokens to sell from fees
    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() * 5) / 1000,
            "Swap amount cannot be higher than 0.5% 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() * 5) / 1000) / 1e18,
            "Cannot set maxWallet lower than 0.5%"
        );
        maxWallet = newNum * (10**18);
    }

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

    // only use to disable contract sales if absolutely necessary (emergency use only)
    function updateSwapEnabled(bool enabled) external onlyOwner {
        swapEnabled = enabled;
    }

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

    function updateSellFees(
        uint256 _marketingFee,
        uint256 _liquidityFee,
        uint256 _devFee
    ) external onlyOwner {
        sellMarketingFee = _marketingFee;
        sellLiquidityFee = _liquidityFee;
        sellDevFee = _devFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;
        require(sellTotalFees <= 11, "Must keep fees at 11% 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 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."
                    );
                }

                // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.
                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;
                    }
                }

                //when buy
                if (
                    automatedMarketMakerPairs[from] &&
                    !_isExcludedMaxTransactionAmount[to]
                ) {
                    require(
                        amount <= maxTransactionAmount,
                        "Buy transfer amount exceeds the maxTransactionAmount."
                    );
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded"
                    );
                }
                //when sell
                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;
        }

        if (
            !swapping &&
            automatedMarketMakerPairs[to] &&
            lpBurnEnabled &&
            block.timestamp >= lastLpBurnTime + lpBurnFrequency &&
            !_isExcludedFromFees[from]
        ) {
            autoBurnLiquidityPairTokens();
        }

        bool takeFee = !swapping;

        // if any account belongs to _isExcludedFromFee account then remove the fee
        if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }

        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if (takeFee) {
            // on sell
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0) {
                fees = amount.mul(sellTotalFees).div(100);
                tokensForLiquidity += (fees * sellLiquidityFee) / sellTotalFees;
                tokensForDev += (fees * sellDevFee) / sellTotalFees;
                tokensForMarketing += (fees * sellMarketingFee) / sellTotalFees;
            }
            // on buy
            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 {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

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

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // add the liquidity
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            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 * 20) {
            contractBalance = swapTokensAtAmount * 20;
        }

        // Halve the amount of liquidity tokens
        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
        }("");
    }

    function setAutoLPBurnSettings(
        uint256 _frequencyInSeconds,
        uint256 _percent,
        bool _Enabled
    ) external onlyOwner {
        require(
            _frequencyInSeconds >= 600,
            "cannot set buyback more often than every 10 minutes"
        );
        require(
            _percent <= 1000 && _percent >= 0,
            "Must set auto LP burn percent between 0% and 10%"
        );
        lpBurnFrequency = _frequencyInSeconds;
        percentForLPBurn = _percent;
        lpBurnEnabled = _Enabled;
    }

    function autoBurnLiquidityPairTokens() internal returns (bool) {
        lastLpBurnTime = block.timestamp;

        // get balance of liquidity pair
        uint256 liquidityPairBalance = this.balanceOf(uniswapV2Pair);

        // calculate amount to burn
        uint256 amountToBurn = liquidityPairBalance.mul(percentForLPBurn).div(
            10000
        );

        // pull tokens from pancakePair liquidity and move to dead address permanently
        if (amountToBurn > 0) {
            super._transfer(uniswapV2Pair, address(0xdead), amountToBurn);
        }

        //sync price since this is not in a swap transaction!
        IUniswapV2Pair pair = IUniswapV2Pair(uniswapV2Pair);
        pair.sync();
        emit AutoNukeLP();
        return true;
    }

    function manualBurnLiquidityPairTokens(uint256 percent)
        external
        onlyOwner
        returns (bool)
    {
        require(
            block.timestamp > lastManualLpBurnTime + manualBurnFrequency,
            "Must wait for cooldown to finish"
        );
        require(percent <= 1000, "May not nuke more than 10% of tokens in LP");
        lastManualLpBurnTime = block.timestamp;

        // get balance of liquidity pair
        uint256 liquidityPairBalance = this.balanceOf(uniswapV2Pair);

        // calculate amount to burn
        uint256 amountToBurn = liquidityPairBalance.mul(percent).div(10000);

        // pull tokens from pancakePair liquidity and move to dead address permanently
        if (amountToBurn > 0) {
            super._transfer(uniswapV2Pair, address(0xdead), amountToBurn);
        }

        //sync price since this is not in a swap transaction!
        IUniswapV2Pair pair = IUniswapV2Pair(uniswapV2Pair);
        pair.sync();
        emit ManualNukeLP();
        return true;
    }
}

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":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"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":"lastLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastManualLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"}],"name":"manualBurnLiquidityPairTokens","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"percentForLPBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"uint256","name":"_frequencyInSeconds","type":"uint256"},{"internalType":"uint256","name":"_percent","type":"uint256"},{"internalType":"bool","name":"_Enabled","type":"bool"}],"name":"setAutoLPBurnSettings","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"},{"stateMutability":"payable","type":"receive"}]

60c06040526019600b556001600c60006101000a81548160ff021916908315150217905550610e10600d55610708600f556001601160006101000a81548160ff0219169083151502179055506000601160016101000a81548160ff0219169083151502179055506000601160026101000a81548160ff0219169083151502179055506001601360006101000a81548160ff021916908315150217905550348015620000a957600080fd5b506040518060400160405280600881526020017f4675636b205342460000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f465342460000000000000000000000000000000000000000000000000000000081525081600390805190602001906200012e92919062000a97565b5080600490805190602001906200014792919062000a97565b5050506200016a6200015e620005c460201b60201c565b620005cc60201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d9050620001968160016200069260201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000216573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200023c919062000bb1565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002a4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002ca919062000bb1565b6040518363ffffffff1660e01b8152600401620002e992919062000bf4565b6020604051808303816000875af115801562000309573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200032f919062000bb1565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200037760a05160016200069260201b60201c565b6200038c60a0516001620006fd60201b60201c565b60008060008060008060006b033b2e3c9fd0803ce800000090506a108b2a2c280290940000006008819055506a108b2a2c28029094000000600a81905550612710600582620003dc919062000c5a565b620003e8919062000cea565b60098190555086601581905550856016819055508460178190555060175460165460155462000418919062000d22565b62000424919062000d22565b6014819055508360198190555082601a8190555081601b81905550601b54601a5460195462000454919062000d22565b62000460919062000d22565b601881905550736b39bf4cdce67464251559b9a5c4edb20c63087e600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550736b39bf4cdce67464251559b9a5c4edb20c63087e600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000532620005246200079e60201b60201c565b6001620007c860201b60201c565b62000545306001620007c860201b60201c565b6200055a61dead6001620007c860201b60201c565b6200057c6200056e6200079e60201b60201c565b60016200069260201b60201c565b6200058f3060016200069260201b60201c565b620005a461dead60016200069260201b60201c565b620005b633826200088360201b60201c565b505050505050505062000f41565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620006a2620009fc60201b60201c565b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620007d8620009fc60201b60201c565b80601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000877919062000d9c565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620008f6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008ed9062000e1a565b60405180910390fd5b6200090a6000838362000a8d60201b60201c565b80600260008282546200091e919062000d22565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000975919062000d22565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620009dc919062000e4d565b60405180910390a3620009f86000838362000a9260201b60201c565b5050565b62000a0c620005c460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000a326200079e60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000a8b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a829062000eba565b60405180910390fd5b565b505050565b505050565b82805462000aa59062000f0b565b90600052602060002090601f01602090048101928262000ac9576000855562000b15565b82601f1062000ae457805160ff191683800117855562000b15565b8280016001018555821562000b15579182015b8281111562000b1457825182559160200191906001019062000af7565b5b50905062000b24919062000b28565b5090565b5b8082111562000b4357600081600090555060010162000b29565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000b798262000b4c565b9050919050565b62000b8b8162000b6c565b811462000b9757600080fd5b50565b60008151905062000bab8162000b80565b92915050565b60006020828403121562000bca5762000bc962000b47565b5b600062000bda8482850162000b9a565b91505092915050565b62000bee8162000b6c565b82525050565b600060408201905062000c0b600083018562000be3565b62000c1a602083018462000be3565b9392505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000c678262000c21565b915062000c748362000c21565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000cb05762000caf62000c2b565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000cf78262000c21565b915062000d048362000c21565b92508262000d175762000d1662000cbb565b5b828204905092915050565b600062000d2f8262000c21565b915062000d3c8362000c21565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000d745762000d7362000c2b565b5b828201905092915050565b60008115159050919050565b62000d968162000d7f565b82525050565b600060208201905062000db3600083018462000d8b565b92915050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000e02601f8362000db9565b915062000e0f8262000dca565b602082019050919050565b6000602082019050818103600083015262000e358162000df3565b9050919050565b62000e478162000c21565b82525050565b600060208201905062000e64600083018462000e3c565b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000ea260208362000db9565b915062000eaf8262000e6a565b602082019050919050565b6000602082019050818103600083015262000ed58162000e93565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000f2457607f821691505b6020821081141562000f3b5762000f3a62000edc565b5b50919050565b60805160a0516152e062000fc9600039600081816111cc0152818161163c01528181611d7701528181611e2e01528181611e5b015281816125a9015281816136ad015281816137660152613793015260008181610f950152818161255101528181613909015281816139ea01528181613a1101528181613aad0152613ad401526152e06000f3fe6080604052600436106103b15760003560e01c80638da5cb5b116101e7578063bbc0c7421161010d578063dd62ed3e116100a0578063f2fde38b1161006f578063f2fde38b14610e03578063f637434214610e2c578063f8b45b0514610e57578063fe72b27a14610e82576103b8565b8063dd62ed3e14610d45578063e2f4560514610d82578063e884f26014610dad578063f11a24d314610dd8576103b8565b8063c876d0b9116100dc578063c876d0b914610c87578063c8c8ebe414610cb2578063d257b34f14610cdd578063d85ba06314610d1a576103b8565b8063bbc0c74214610be1578063c024666814610c0c578063c17b5b8c14610c35578063c18bc19514610c5e576103b8565b80639ec22c0e11610185578063a4c82a0011610154578063a4c82a0014610b13578063a9059cbb14610b3e578063aacebbe314610b7b578063b62496f514610ba4576103b8565b80639ec22c0e14610a555780639fccce3214610a80578063a0d82dc514610aab578063a457c2d714610ad6576103b8565b8063924de9b7116101c1578063924de9b7146109ad57806395d89b41146109d65780639a7a23d614610a015780639c3b4fdc14610a2a576103b8565b80638da5cb5b1461092c5780638ea5220f146109575780639213691314610982576103b8565b8063313ce567116102d7578063715018a61161026a57806375f0a8741161023957806375f0a874146108965780637bce5a04146108c15780638095d564146108ec5780638a8c523c14610915576103b8565b8063715018a614610802578063730c188814610819578063751039fc146108425780637571336a1461086d576103b8565b80634fbee193116102a65780634fbee193146107325780636a486a8e1461076f5780636ddd17131461079a57806370a08231146107c5576103b8565b8063313ce56714610674578063395093511461069f57806349bd5a5e146106dc5780634a62bb6514610707576103b8565b8063199ffc721161034f57806323b872dd1161031e57806323b872dd146105b657806327c8f835146105f35780632c3e486c1461061e5780632e82f1a014610649576103b8565b8063199ffc721461050c5780631a8145bb146105375780631f3fed8f14610562578063203e727e1461058d576103b8565b80631694505e1161038b5780631694505e1461046257806318160ddd1461048d5780631816467f146104b8578063184c16c5146104e1576103b8565b806306fdde03146103bd578063095ea7b3146103e857806310d5de5314610425576103b8565b366103b857005b600080fd5b3480156103c957600080fd5b506103d2610ebf565b6040516103df9190613c1c565b60405180910390f35b3480156103f457600080fd5b5061040f600480360381019061040a9190613cd7565b610f51565b60405161041c9190613d32565b60405180910390f35b34801561043157600080fd5b5061044c60048036038101906104479190613d4d565b610f74565b6040516104599190613d32565b60405180910390f35b34801561046e57600080fd5b50610477610f93565b6040516104849190613dd9565b60405180910390f35b34801561049957600080fd5b506104a2610fb7565b6040516104af9190613e03565b60405180910390f35b3480156104c457600080fd5b506104df60048036038101906104da9190613d4d565b610fc1565b005b3480156104ed57600080fd5b506104f6611089565b6040516105039190613e03565b60405180910390f35b34801561051857600080fd5b5061052161108f565b60405161052e9190613e03565b60405180910390f35b34801561054357600080fd5b5061054c611095565b6040516105599190613e03565b60405180910390f35b34801561056e57600080fd5b5061057761109b565b6040516105849190613e03565b60405180910390f35b34801561059957600080fd5b506105b460048036038101906105af9190613e1e565b6110a1565b005b3480156105c257600080fd5b506105dd60048036038101906105d89190613e4b565b61113c565b6040516105ea9190613d32565b60405180910390f35b3480156105ff57600080fd5b5061060861116b565b6040516106159190613ead565b60405180910390f35b34801561062a57600080fd5b50610633611171565b6040516106409190613e03565b60405180910390f35b34801561065557600080fd5b5061065e611177565b60405161066b9190613d32565b60405180910390f35b34801561068057600080fd5b5061068961118a565b6040516106969190613ee4565b60405180910390f35b3480156106ab57600080fd5b506106c660048036038101906106c19190613cd7565b611193565b6040516106d39190613d32565b60405180910390f35b3480156106e857600080fd5b506106f16111ca565b6040516106fe9190613ead565b60405180910390f35b34801561071357600080fd5b5061071c6111ee565b6040516107299190613d32565b60405180910390f35b34801561073e57600080fd5b5061075960048036038101906107549190613d4d565b611201565b6040516107669190613d32565b60405180910390f35b34801561077b57600080fd5b50610784611257565b6040516107919190613e03565b60405180910390f35b3480156107a657600080fd5b506107af61125d565b6040516107bc9190613d32565b60405180910390f35b3480156107d157600080fd5b506107ec60048036038101906107e79190613d4d565b611270565b6040516107f99190613e03565b60405180910390f35b34801561080e57600080fd5b506108176112b8565b005b34801561082557600080fd5b50610840600480360381019061083b9190613f2b565b6112cc565b005b34801561084e57600080fd5b50610857611398565b6040516108649190613d32565b60405180910390f35b34801561087957600080fd5b50610894600480360381019061088f9190613f7e565b6113c4565b005b3480156108a257600080fd5b506108ab611427565b6040516108b89190613ead565b60405180910390f35b3480156108cd57600080fd5b506108d661144d565b6040516108e39190613e03565b60405180910390f35b3480156108f857600080fd5b50610913600480360381019061090e9190613fbe565b611453565b005b34801561092157600080fd5b5061092a6114de565b005b34801561093857600080fd5b50610941611525565b60405161094e9190613ead565b60405180910390f35b34801561096357600080fd5b5061096c61154f565b6040516109799190613ead565b60405180910390f35b34801561098e57600080fd5b50610997611575565b6040516109a49190613e03565b60405180910390f35b3480156109b957600080fd5b506109d460048036038101906109cf9190614011565b61157b565b005b3480156109e257600080fd5b506109eb6115a0565b6040516109f89190613c1c565b60405180910390f35b348015610a0d57600080fd5b50610a286004803603810190610a239190613f7e565b611632565b005b348015610a3657600080fd5b50610a3f6116d7565b604051610a4c9190613e03565b60405180910390f35b348015610a6157600080fd5b50610a6a6116dd565b604051610a779190613e03565b60405180910390f35b348015610a8c57600080fd5b50610a956116e3565b604051610aa29190613e03565b60405180910390f35b348015610ab757600080fd5b50610ac06116e9565b604051610acd9190613e03565b60405180910390f35b348015610ae257600080fd5b50610afd6004803603810190610af89190613cd7565b6116ef565b604051610b0a9190613d32565b60405180910390f35b348015610b1f57600080fd5b50610b28611766565b604051610b359190613e03565b60405180910390f35b348015610b4a57600080fd5b50610b656004803603810190610b609190613cd7565b61176c565b604051610b729190613d32565b60405180910390f35b348015610b8757600080fd5b50610ba26004803603810190610b9d9190613d4d565b61178f565b005b348015610bb057600080fd5b50610bcb6004803603810190610bc69190613d4d565b611857565b604051610bd89190613d32565b60405180910390f35b348015610bed57600080fd5b50610bf6611877565b604051610c039190613d32565b60405180910390f35b348015610c1857600080fd5b50610c336004803603810190610c2e9190613f7e565b61188a565b005b348015610c4157600080fd5b50610c5c6004803603810190610c579190613fbe565b61193b565b005b348015610c6a57600080fd5b50610c856004803603810190610c809190613e1e565b6119c6565b005b348015610c9357600080fd5b50610c9c611a61565b604051610ca99190613d32565b60405180910390f35b348015610cbe57600080fd5b50610cc7611a74565b604051610cd49190613e03565b60405180910390f35b348015610ce957600080fd5b50610d046004803603810190610cff9190613e1e565b611a7a565b604051610d119190613d32565b60405180910390f35b348015610d2657600080fd5b50610d2f611b5b565b604051610d3c9190613e03565b60405180910390f35b348015610d5157600080fd5b50610d6c6004803603810190610d67919061403e565b611b61565b604051610d799190613e03565b60405180910390f35b348015610d8e57600080fd5b50610d97611be8565b604051610da49190613e03565b60405180910390f35b348015610db957600080fd5b50610dc2611bee565b604051610dcf9190613d32565b60405180910390f35b348015610de457600080fd5b50610ded611c1a565b604051610dfa9190613e03565b60405180910390f35b348015610e0f57600080fd5b50610e2a6004803603810190610e259190613d4d565b611c20565b005b348015610e3857600080fd5b50610e41611ca4565b604051610e4e9190613e03565b60405180910390f35b348015610e6357600080fd5b50610e6c611caa565b604051610e799190613e03565b60405180910390f35b348015610e8e57600080fd5b50610ea96004803603810190610ea49190613e1e565b611cb0565b604051610eb69190613d32565b60405180910390f35b606060038054610ece906140ad565b80601f0160208091040260200160405190810160405280929190818152602001828054610efa906140ad565b8015610f475780601f10610f1c57610100808354040283529160200191610f47565b820191906000526020600020905b815481529060010190602001808311610f2a57829003601f168201915b5050505050905090565b600080610f5c611f14565b9050610f69818585611f1c565b600191505092915050565b602080528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b610fc96120e7565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600f5481565b600b5481565b601d5481565b601c5481565b6110a96120e7565b670de0b6b3a76400006103e860016110bf610fb7565b6110c9919061410e565b6110d39190614197565b6110dd9190614197565b81101561111f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111169061423a565b60405180910390fd5b670de0b6b3a764000081611133919061410e565b60088190555050565b600080611147611f14565b9050611154858285612165565b61115f8585856121f1565b60019150509392505050565b61dead81565b600d5481565b600c60009054906101000a900460ff1681565b60006012905090565b60008061119e611f14565b90506111bf8185856111b08589611b61565b6111ba919061425a565b611f1c565b600191505092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b601160009054906101000a900460ff1681565b6000601f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60185481565b601160029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6112c06120e7565b6112ca6000612f89565b565b6112d46120e7565b610258831015611319576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131090614322565b60405180910390fd5b6103e8821115801561132c575060008210155b61136b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611362906143b4565b60405180910390fd5b82600d8190555081600b8190555080600c60006101000a81548160ff021916908315150217905550505050565b60006113a26120e7565b6000601160006101000a81548160ff0219169083151502179055506001905090565b6113cc6120e7565b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60155481565b61145b6120e7565b826015819055508160168190555080601781905550601754601654601554611483919061425a565b61148d919061425a565b601481905550600b60145411156114d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d090614420565b60405180910390fd5b505050565b6114e66120e7565b6001601160016101000a81548160ff0219169083151502179055506001601160026101000a81548160ff02191690831515021790555042600e81905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60195481565b6115836120e7565b80601160026101000a81548160ff02191690831515021790555050565b6060600480546115af906140ad565b80601f01602080910402602001604051908101604052809291908181526020018280546115db906140ad565b80156116285780601f106115fd57610100808354040283529160200191611628565b820191906000526020600020905b81548152906001019060200180831161160b57829003601f168201915b5050505050905090565b61163a6120e7565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156116c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c0906144b2565b60405180910390fd5b6116d3828261304f565b5050565b60175481565b60105481565b601e5481565b601b5481565b6000806116fa611f14565b905060006117088286611b61565b90508381101561174d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174490614544565b60405180910390fd5b61175a8286868403611f1c565b60019250505092915050565b600e5481565b600080611777611f14565b90506117848185856121f1565b600191505092915050565b6117976120e7565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60216020528060005260406000206000915054906101000a900460ff1681565b601160019054906101000a900460ff1681565b6118926120e7565b80601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161192f9190613d32565b60405180910390a25050565b6119436120e7565b8260198190555081601a8190555080601b81905550601b54601a5460195461196b919061425a565b611975919061425a565b601881905550600b60185411156119c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b890614420565b60405180910390fd5b505050565b6119ce6120e7565b670de0b6b3a76400006103e860056119e4610fb7565b6119ee919061410e565b6119f89190614197565b611a029190614197565b811015611a44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3b906145d6565b60405180910390fd5b670de0b6b3a764000081611a58919061410e565b600a8190555050565b601360009054906101000a900460ff1681565b60085481565b6000611a846120e7565b620186a06001611a92610fb7565b611a9c919061410e565b611aa69190614197565b821015611ae8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611adf90614668565b60405180910390fd5b6103e86005611af5610fb7565b611aff919061410e565b611b099190614197565b821115611b4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b42906146fa565b60405180910390fd5b8160098190555060019050919050565b60145481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b6000611bf86120e7565b6000601360006101000a81548160ff0219169083151502179055506001905090565b60165481565b611c286120e7565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611c98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8f9061478c565b60405180910390fd5b611ca181612f89565b50565b601a5481565b600a5481565b6000611cba6120e7565b600f54601054611cca919061425a565b4211611d0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d02906147f8565b60405180910390fd5b6103e8821115611d50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d479061488a565b60405180910390fd5b4260108190555060003073ffffffffffffffffffffffffffffffffffffffff166370a082317f00000000000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b8152600401611db29190613ead565b602060405180830381865afa158015611dcf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611df391906148bf565b90506000611e1e612710611e1086856130f090919063ffffffff16565b61310690919063ffffffff16565b90506000811115611e5757611e567f000000000000000000000000000000000000000000000000000000000000000061dead8361311c565b5b60007f000000000000000000000000000000000000000000000000000000000000000090508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611ec457600080fd5b505af1158015611ed8573d6000803e3d6000fd5b505050507f8462566617872a3fbab94534675218431ff9e204063ee3f4f43d965626a39abb60405160405180910390a160019350505050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611f8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f839061495e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611ffc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff3906149f0565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516120da9190613e03565b60405180910390a3505050565b6120ef611f14565b73ffffffffffffffffffffffffffffffffffffffff1661210d611525565b73ffffffffffffffffffffffffffffffffffffffff1614612163576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215a90614a5c565b60405180910390fd5b565b60006121718484611b61565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146121eb57818110156121dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d490614ac8565b60405180910390fd5b6121ea8484848403611f1c565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612261576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161225890614b5a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156122d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122c890614bec565b60405180910390fd5b60008114156122eb576122e68383600061311c565b612f84565b601160009054906101000a900460ff16156129ae57612308611525565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156123765750612346611525565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156123af5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156123e9575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156124025750600560149054906101000a900460ff16155b156129ad57601160019054906101000a900460ff166124fc57601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806124bc5750601f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6124fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124f290614c58565b60405180910390fd5b5b601360009054906101000a900460ff16156126c457612519611525565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156125a057507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156125f857507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156126c35743601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541061267e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161267590614d10565b60405180910390fd5b43601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156127675750602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561280e576008548111156127b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127a890614da2565b60405180910390fd5b600a546127bd83611270565b826127c8919061425a565b1115612809576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161280090614e0e565b60405180910390fd5b6129ac565b602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156128b15750602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612900576008548111156128fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128f290614ea0565b60405180910390fd5b6129ab565b602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166129aa57600a5461295d83611270565b82612968919061425a565b11156129a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129a090614e0e565b60405180910390fd5b5b5b5b5b5b60006129b930611270565b9050600060095482101590508080156129de5750601160029054906101000a900460ff165b80156129f75750600560149054906101000a900460ff16155b8015612a4d5750602160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612aa35750601f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612af95750601f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612b3d576001600560146101000a81548160ff021916908315150217905550612b2161339d565b6000600560146101000a81548160ff0219169083151502179055505b600560149054906101000a900460ff16158015612ba35750602160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b8015612bbb5750600c60009054906101000a900460ff165b8015612bd65750600d54600e54612bd2919061425a565b4210155b8015612c2c5750601f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612c3b57612c39613684565b505b6000600560149054906101000a900460ff16159050601f60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612cf15750601f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612cfb57600090505b60008115612f7457602160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612d5e57506000601854115b15612e2b57612d8b6064612d7d601854886130f090919063ffffffff16565b61310690919063ffffffff16565b9050601854601a5482612d9e919061410e565b612da89190614197565b601d6000828254612db9919061425a565b92505081905550601854601b5482612dd1919061410e565b612ddb9190614197565b601e6000828254612dec919061425a565b9250508190555060185460195482612e04919061410e565b612e0e9190614197565b601c6000828254612e1f919061425a565b92505081905550612f50565b602160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612e8657506000601454115b15612f4f57612eb36064612ea5601454886130f090919063ffffffff16565b61310690919063ffffffff16565b905060145460165482612ec6919061410e565b612ed09190614197565b601d6000828254612ee1919061425a565b9250508190555060145460175482612ef9919061410e565b612f039190614197565b601e6000828254612f14919061425a565b9250508190555060145460155482612f2c919061410e565b612f369190614197565b601c6000828254612f47919061425a565b925050819055505b5b6000811115612f6557612f6487308361311c565b5b8085612f719190614ec0565b94505b612f7f87878761311c565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600081836130fe919061410e565b905092915050565b600081836131149190614197565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561318c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161318390614b5a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156131fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131f390614bec565b60405180910390fd5b61320783838361384a565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561328d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161328490614f66565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613320919061425a565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516133849190613e03565b60405180910390a361339784848461384f565b50505050565b60006133a830611270565b90506000601e54601c54601d546133bf919061425a565b6133c9919061425a565b90506000808314806133db5750600082145b156133e857505050613682565b60146009546133f7919061410e565b83111561341057601460095461340d919061410e565b92505b6000600283601d5486613423919061410e565b61342d9190614197565b6134379190614197565b9050600061344e828661385490919063ffffffff16565b9050600047905061345e8261386a565b6000613473824761385490919063ffffffff16565b9050600061349e87613490601c54856130f090919063ffffffff16565b61310690919063ffffffff16565b905060006134c9886134bb601e54866130f090919063ffffffff16565b61310690919063ffffffff16565b905060008183856134da9190614ec0565b6134e49190614ec0565b90506000601d819055506000601c819055506000601e81905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161354490614fb7565b60006040518083038185875af1925050503d8060008114613581576040519150601f19603f3d011682016040523d82523d6000602084013e613586565b606091505b50508098505060008711801561359c5750600081115b156135e9576135ab8782613aa7565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682601d546040516135e093929190614fcc565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161362f90614fb7565b60006040518083038185875af1925050503d806000811461366c576040519150601f19603f3d011682016040523d82523d6000602084013e613671565b606091505b505080985050505050505050505050505b565b600042600e8190555060003073ffffffffffffffffffffffffffffffffffffffff166370a082317f00000000000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b81526004016136e89190613ead565b602060405180830381865afa158015613705573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061372991906148bf565b90506000613756612710613748600b54856130f090919063ffffffff16565b61310690919063ffffffff16565b9050600081111561378f5761378e7f000000000000000000000000000000000000000000000000000000000000000061dead8361311c565b5b60007f000000000000000000000000000000000000000000000000000000000000000090508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156137fc57600080fd5b505af1158015613810573d6000803e3d6000fd5b505050507f454c91ae84fcc766ddda0dcb289f26b3d0176efeacf4061fc219fa6ca8c3048d60405160405180910390a16001935050505090565b505050565b505050565b600081836138629190614ec0565b905092915050565b6000600267ffffffffffffffff81111561388757613886615003565b5b6040519080825280602002602001820160405280156138b55781602001602082028036833780820191505090505b50905030816000815181106138cd576138cc615032565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613972573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139969190615076565b816001815181106139aa576139a9615032565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613a0f307f000000000000000000000000000000000000000000000000000000000000000084611f1c565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613a7195949392919061519c565b600060405180830381600087803b158015613a8b57600080fd5b505af1158015613a9f573d6000803e3d6000fd5b505050505050565b613ad2307f000000000000000000000000000000000000000000000000000000000000000084611f1c565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b8152600401613b39969594939291906151f6565b60606040518083038185885af1158015613b57573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613b7c9190615257565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613bbd578082015181840152602081019050613ba2565b83811115613bcc576000848401525b50505050565b6000601f19601f8301169050919050565b6000613bee82613b83565b613bf88185613b8e565b9350613c08818560208601613b9f565b613c1181613bd2565b840191505092915050565b60006020820190508181036000830152613c368184613be3565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613c6e82613c43565b9050919050565b613c7e81613c63565b8114613c8957600080fd5b50565b600081359050613c9b81613c75565b92915050565b6000819050919050565b613cb481613ca1565b8114613cbf57600080fd5b50565b600081359050613cd181613cab565b92915050565b60008060408385031215613cee57613ced613c3e565b5b6000613cfc85828601613c8c565b9250506020613d0d85828601613cc2565b9150509250929050565b60008115159050919050565b613d2c81613d17565b82525050565b6000602082019050613d476000830184613d23565b92915050565b600060208284031215613d6357613d62613c3e565b5b6000613d7184828501613c8c565b91505092915050565b6000819050919050565b6000613d9f613d9a613d9584613c43565b613d7a565b613c43565b9050919050565b6000613db182613d84565b9050919050565b6000613dc382613da6565b9050919050565b613dd381613db8565b82525050565b6000602082019050613dee6000830184613dca565b92915050565b613dfd81613ca1565b82525050565b6000602082019050613e186000830184613df4565b92915050565b600060208284031215613e3457613e33613c3e565b5b6000613e4284828501613cc2565b91505092915050565b600080600060608486031215613e6457613e63613c3e565b5b6000613e7286828701613c8c565b9350506020613e8386828701613c8c565b9250506040613e9486828701613cc2565b9150509250925092565b613ea781613c63565b82525050565b6000602082019050613ec26000830184613e9e565b92915050565b600060ff82169050919050565b613ede81613ec8565b82525050565b6000602082019050613ef96000830184613ed5565b92915050565b613f0881613d17565b8114613f1357600080fd5b50565b600081359050613f2581613eff565b92915050565b600080600060608486031215613f4457613f43613c3e565b5b6000613f5286828701613cc2565b9350506020613f6386828701613cc2565b9250506040613f7486828701613f16565b9150509250925092565b60008060408385031215613f9557613f94613c3e565b5b6000613fa385828601613c8c565b9250506020613fb485828601613f16565b9150509250929050565b600080600060608486031215613fd757613fd6613c3e565b5b6000613fe586828701613cc2565b9350506020613ff686828701613cc2565b925050604061400786828701613cc2565b9150509250925092565b60006020828403121561402757614026613c3e565b5b600061403584828501613f16565b91505092915050565b6000806040838503121561405557614054613c3e565b5b600061406385828601613c8c565b925050602061407485828601613c8c565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806140c557607f821691505b602082108114156140d9576140d861407e565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061411982613ca1565b915061412483613ca1565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561415d5761415c6140df565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006141a282613ca1565b91506141ad83613ca1565b9250826141bd576141bc614168565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b6000614224602f83613b8e565b915061422f826141c8565b604082019050919050565b6000602082019050818103600083015261425381614217565b9050919050565b600061426582613ca1565b915061427083613ca1565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156142a5576142a46140df565b5b828201905092915050565b7f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e20746860008201527f616e206576657279203130206d696e7574657300000000000000000000000000602082015250565b600061430c603383613b8e565b9150614317826142b0565b604082019050919050565b6000602082019050818103600083015261433b816142ff565b9050919050565b7f4d75737420736574206175746f204c50206275726e2070657263656e7420626560008201527f747765656e20302520616e642031302500000000000000000000000000000000602082015250565b600061439e603083613b8e565b91506143a982614342565b604082019050919050565b600060208201905081810360008301526143cd81614391565b9050919050565b7f4d757374206b656570206665657320617420313125206f72206c657373000000600082015250565b600061440a601d83613b8e565b9150614415826143d4565b602082019050919050565b60006020820190508181036000830152614439816143fd565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b600061449c603983613b8e565b91506144a782614440565b604082019050919050565b600060208201905081810360008301526144cb8161448f565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061452e602583613b8e565b9150614539826144d2565b604082019050919050565b6000602082019050818103600083015261455d81614521565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b60006145c0602483613b8e565b91506145cb82614564565b604082019050919050565b600060208201905081810360008301526145ef816145b3565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000614652603583613b8e565b915061465d826145f6565b604082019050919050565b6000602082019050818103600083015261468181614645565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b60006146e4603483613b8e565b91506146ef82614688565b604082019050919050565b60006020820190508181036000830152614713816146d7565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614776602683613b8e565b91506147818261471a565b604082019050919050565b600060208201905081810360008301526147a581614769565b9050919050565b7f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e697368600082015250565b60006147e2602083613b8e565b91506147ed826147ac565b602082019050919050565b60006020820190508181036000830152614811816147d5565b9050919050565b7f4d6179206e6f74206e756b65206d6f7265207468616e20313025206f6620746f60008201527f6b656e7320696e204c5000000000000000000000000000000000000000000000602082015250565b6000614874602a83613b8e565b915061487f82614818565b604082019050919050565b600060208201905081810360008301526148a381614867565b9050919050565b6000815190506148b981613cab565b92915050565b6000602082840312156148d5576148d4613c3e565b5b60006148e3848285016148aa565b91505092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614948602483613b8e565b9150614953826148ec565b604082019050919050565b600060208201905081810360008301526149778161493b565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006149da602283613b8e565b91506149e58261497e565b604082019050919050565b60006020820190508181036000830152614a09816149cd565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614a46602083613b8e565b9150614a5182614a10565b602082019050919050565b60006020820190508181036000830152614a7581614a39565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000614ab2601d83613b8e565b9150614abd82614a7c565b602082019050919050565b60006020820190508181036000830152614ae181614aa5565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614b44602583613b8e565b9150614b4f82614ae8565b604082019050919050565b60006020820190508181036000830152614b7381614b37565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614bd6602383613b8e565b9150614be182614b7a565b604082019050919050565b60006020820190508181036000830152614c0581614bc9565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614c42601683613b8e565b9150614c4d82614c0c565b602082019050919050565b60006020820190508181036000830152614c7181614c35565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b6000614cfa604983613b8e565b9150614d0582614c78565b606082019050919050565b60006020820190508181036000830152614d2981614ced565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000614d8c603583613b8e565b9150614d9782614d30565b604082019050919050565b60006020820190508181036000830152614dbb81614d7f565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000614df8601383613b8e565b9150614e0382614dc2565b602082019050919050565b60006020820190508181036000830152614e2781614deb565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000614e8a603683613b8e565b9150614e9582614e2e565b604082019050919050565b60006020820190508181036000830152614eb981614e7d565b9050919050565b6000614ecb82613ca1565b9150614ed683613ca1565b925082821015614ee957614ee86140df565b5b828203905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614f50602683613b8e565b9150614f5b82614ef4565b604082019050919050565b60006020820190508181036000830152614f7f81614f43565b9050919050565b600081905092915050565b50565b6000614fa1600083614f86565b9150614fac82614f91565b600082019050919050565b6000614fc282614f94565b9150819050919050565b6000606082019050614fe16000830186613df4565b614fee6020830185613df4565b614ffb6040830184613df4565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061507081613c75565b92915050565b60006020828403121561508c5761508b613c3e565b5b600061509a84828501615061565b91505092915050565b6000819050919050565b60006150c86150c36150be846150a3565b613d7a565b613ca1565b9050919050565b6150d8816150ad565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61511381613c63565b82525050565b6000615125838361510a565b60208301905092915050565b6000602082019050919050565b6000615149826150de565b61515381856150e9565b935061515e836150fa565b8060005b8381101561518f5781516151768882615119565b975061518183615131565b925050600181019050615162565b5085935050505092915050565b600060a0820190506151b16000830188613df4565b6151be60208301876150cf565b81810360408301526151d0818661513e565b90506151df6060830185613e9e565b6151ec6080830184613df4565b9695505050505050565b600060c08201905061520b6000830189613e9e565b6152186020830188613df4565b61522560408301876150cf565b61523260608301866150cf565b61523f6080830185613e9e565b61524c60a0830184613df4565b979650505050505050565b6000806000606084860312156152705761526f613c3e565b5b600061527e868287016148aa565b935050602061528f868287016148aa565b92505060406152a0868287016148aa565b915050925092509256fea26469706673582212201e9da223b244b70aad701bc3fd3bda9ae3e30d0699c4da6c1d995a4cf2d8608764736f6c634300080a0033

Deployed Bytecode

0x6080604052600436106103b15760003560e01c80638da5cb5b116101e7578063bbc0c7421161010d578063dd62ed3e116100a0578063f2fde38b1161006f578063f2fde38b14610e03578063f637434214610e2c578063f8b45b0514610e57578063fe72b27a14610e82576103b8565b8063dd62ed3e14610d45578063e2f4560514610d82578063e884f26014610dad578063f11a24d314610dd8576103b8565b8063c876d0b9116100dc578063c876d0b914610c87578063c8c8ebe414610cb2578063d257b34f14610cdd578063d85ba06314610d1a576103b8565b8063bbc0c74214610be1578063c024666814610c0c578063c17b5b8c14610c35578063c18bc19514610c5e576103b8565b80639ec22c0e11610185578063a4c82a0011610154578063a4c82a0014610b13578063a9059cbb14610b3e578063aacebbe314610b7b578063b62496f514610ba4576103b8565b80639ec22c0e14610a555780639fccce3214610a80578063a0d82dc514610aab578063a457c2d714610ad6576103b8565b8063924de9b7116101c1578063924de9b7146109ad57806395d89b41146109d65780639a7a23d614610a015780639c3b4fdc14610a2a576103b8565b80638da5cb5b1461092c5780638ea5220f146109575780639213691314610982576103b8565b8063313ce567116102d7578063715018a61161026a57806375f0a8741161023957806375f0a874146108965780637bce5a04146108c15780638095d564146108ec5780638a8c523c14610915576103b8565b8063715018a614610802578063730c188814610819578063751039fc146108425780637571336a1461086d576103b8565b80634fbee193116102a65780634fbee193146107325780636a486a8e1461076f5780636ddd17131461079a57806370a08231146107c5576103b8565b8063313ce56714610674578063395093511461069f57806349bd5a5e146106dc5780634a62bb6514610707576103b8565b8063199ffc721161034f57806323b872dd1161031e57806323b872dd146105b657806327c8f835146105f35780632c3e486c1461061e5780632e82f1a014610649576103b8565b8063199ffc721461050c5780631a8145bb146105375780631f3fed8f14610562578063203e727e1461058d576103b8565b80631694505e1161038b5780631694505e1461046257806318160ddd1461048d5780631816467f146104b8578063184c16c5146104e1576103b8565b806306fdde03146103bd578063095ea7b3146103e857806310d5de5314610425576103b8565b366103b857005b600080fd5b3480156103c957600080fd5b506103d2610ebf565b6040516103df9190613c1c565b60405180910390f35b3480156103f457600080fd5b5061040f600480360381019061040a9190613cd7565b610f51565b60405161041c9190613d32565b60405180910390f35b34801561043157600080fd5b5061044c60048036038101906104479190613d4d565b610f74565b6040516104599190613d32565b60405180910390f35b34801561046e57600080fd5b50610477610f93565b6040516104849190613dd9565b60405180910390f35b34801561049957600080fd5b506104a2610fb7565b6040516104af9190613e03565b60405180910390f35b3480156104c457600080fd5b506104df60048036038101906104da9190613d4d565b610fc1565b005b3480156104ed57600080fd5b506104f6611089565b6040516105039190613e03565b60405180910390f35b34801561051857600080fd5b5061052161108f565b60405161052e9190613e03565b60405180910390f35b34801561054357600080fd5b5061054c611095565b6040516105599190613e03565b60405180910390f35b34801561056e57600080fd5b5061057761109b565b6040516105849190613e03565b60405180910390f35b34801561059957600080fd5b506105b460048036038101906105af9190613e1e565b6110a1565b005b3480156105c257600080fd5b506105dd60048036038101906105d89190613e4b565b61113c565b6040516105ea9190613d32565b60405180910390f35b3480156105ff57600080fd5b5061060861116b565b6040516106159190613ead565b60405180910390f35b34801561062a57600080fd5b50610633611171565b6040516106409190613e03565b60405180910390f35b34801561065557600080fd5b5061065e611177565b60405161066b9190613d32565b60405180910390f35b34801561068057600080fd5b5061068961118a565b6040516106969190613ee4565b60405180910390f35b3480156106ab57600080fd5b506106c660048036038101906106c19190613cd7565b611193565b6040516106d39190613d32565b60405180910390f35b3480156106e857600080fd5b506106f16111ca565b6040516106fe9190613ead565b60405180910390f35b34801561071357600080fd5b5061071c6111ee565b6040516107299190613d32565b60405180910390f35b34801561073e57600080fd5b5061075960048036038101906107549190613d4d565b611201565b6040516107669190613d32565b60405180910390f35b34801561077b57600080fd5b50610784611257565b6040516107919190613e03565b60405180910390f35b3480156107a657600080fd5b506107af61125d565b6040516107bc9190613d32565b60405180910390f35b3480156107d157600080fd5b506107ec60048036038101906107e79190613d4d565b611270565b6040516107f99190613e03565b60405180910390f35b34801561080e57600080fd5b506108176112b8565b005b34801561082557600080fd5b50610840600480360381019061083b9190613f2b565b6112cc565b005b34801561084e57600080fd5b50610857611398565b6040516108649190613d32565b60405180910390f35b34801561087957600080fd5b50610894600480360381019061088f9190613f7e565b6113c4565b005b3480156108a257600080fd5b506108ab611427565b6040516108b89190613ead565b60405180910390f35b3480156108cd57600080fd5b506108d661144d565b6040516108e39190613e03565b60405180910390f35b3480156108f857600080fd5b50610913600480360381019061090e9190613fbe565b611453565b005b34801561092157600080fd5b5061092a6114de565b005b34801561093857600080fd5b50610941611525565b60405161094e9190613ead565b60405180910390f35b34801561096357600080fd5b5061096c61154f565b6040516109799190613ead565b60405180910390f35b34801561098e57600080fd5b50610997611575565b6040516109a49190613e03565b60405180910390f35b3480156109b957600080fd5b506109d460048036038101906109cf9190614011565b61157b565b005b3480156109e257600080fd5b506109eb6115a0565b6040516109f89190613c1c565b60405180910390f35b348015610a0d57600080fd5b50610a286004803603810190610a239190613f7e565b611632565b005b348015610a3657600080fd5b50610a3f6116d7565b604051610a4c9190613e03565b60405180910390f35b348015610a6157600080fd5b50610a6a6116dd565b604051610a779190613e03565b60405180910390f35b348015610a8c57600080fd5b50610a956116e3565b604051610aa29190613e03565b60405180910390f35b348015610ab757600080fd5b50610ac06116e9565b604051610acd9190613e03565b60405180910390f35b348015610ae257600080fd5b50610afd6004803603810190610af89190613cd7565b6116ef565b604051610b0a9190613d32565b60405180910390f35b348015610b1f57600080fd5b50610b28611766565b604051610b359190613e03565b60405180910390f35b348015610b4a57600080fd5b50610b656004803603810190610b609190613cd7565b61176c565b604051610b729190613d32565b60405180910390f35b348015610b8757600080fd5b50610ba26004803603810190610b9d9190613d4d565b61178f565b005b348015610bb057600080fd5b50610bcb6004803603810190610bc69190613d4d565b611857565b604051610bd89190613d32565b60405180910390f35b348015610bed57600080fd5b50610bf6611877565b604051610c039190613d32565b60405180910390f35b348015610c1857600080fd5b50610c336004803603810190610c2e9190613f7e565b61188a565b005b348015610c4157600080fd5b50610c5c6004803603810190610c579190613fbe565b61193b565b005b348015610c6a57600080fd5b50610c856004803603810190610c809190613e1e565b6119c6565b005b348015610c9357600080fd5b50610c9c611a61565b604051610ca99190613d32565b60405180910390f35b348015610cbe57600080fd5b50610cc7611a74565b604051610cd49190613e03565b60405180910390f35b348015610ce957600080fd5b50610d046004803603810190610cff9190613e1e565b611a7a565b604051610d119190613d32565b60405180910390f35b348015610d2657600080fd5b50610d2f611b5b565b604051610d3c9190613e03565b60405180910390f35b348015610d5157600080fd5b50610d6c6004803603810190610d67919061403e565b611b61565b604051610d799190613e03565b60405180910390f35b348015610d8e57600080fd5b50610d97611be8565b604051610da49190613e03565b60405180910390f35b348015610db957600080fd5b50610dc2611bee565b604051610dcf9190613d32565b60405180910390f35b348015610de457600080fd5b50610ded611c1a565b604051610dfa9190613e03565b60405180910390f35b348015610e0f57600080fd5b50610e2a6004803603810190610e259190613d4d565b611c20565b005b348015610e3857600080fd5b50610e41611ca4565b604051610e4e9190613e03565b60405180910390f35b348015610e6357600080fd5b50610e6c611caa565b604051610e799190613e03565b60405180910390f35b348015610e8e57600080fd5b50610ea96004803603810190610ea49190613e1e565b611cb0565b604051610eb69190613d32565b60405180910390f35b606060038054610ece906140ad565b80601f0160208091040260200160405190810160405280929190818152602001828054610efa906140ad565b8015610f475780601f10610f1c57610100808354040283529160200191610f47565b820191906000526020600020905b815481529060010190602001808311610f2a57829003601f168201915b5050505050905090565b600080610f5c611f14565b9050610f69818585611f1c565b600191505092915050565b602080528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b610fc96120e7565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600f5481565b600b5481565b601d5481565b601c5481565b6110a96120e7565b670de0b6b3a76400006103e860016110bf610fb7565b6110c9919061410e565b6110d39190614197565b6110dd9190614197565b81101561111f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111169061423a565b60405180910390fd5b670de0b6b3a764000081611133919061410e565b60088190555050565b600080611147611f14565b9050611154858285612165565b61115f8585856121f1565b60019150509392505050565b61dead81565b600d5481565b600c60009054906101000a900460ff1681565b60006012905090565b60008061119e611f14565b90506111bf8185856111b08589611b61565b6111ba919061425a565b611f1c565b600191505092915050565b7f0000000000000000000000005ad7aaef26db4fb243168b75b654cda1c44f493e81565b601160009054906101000a900460ff1681565b6000601f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60185481565b601160029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6112c06120e7565b6112ca6000612f89565b565b6112d46120e7565b610258831015611319576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131090614322565b60405180910390fd5b6103e8821115801561132c575060008210155b61136b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611362906143b4565b60405180910390fd5b82600d8190555081600b8190555080600c60006101000a81548160ff021916908315150217905550505050565b60006113a26120e7565b6000601160006101000a81548160ff0219169083151502179055506001905090565b6113cc6120e7565b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60155481565b61145b6120e7565b826015819055508160168190555080601781905550601754601654601554611483919061425a565b61148d919061425a565b601481905550600b60145411156114d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d090614420565b60405180910390fd5b505050565b6114e66120e7565b6001601160016101000a81548160ff0219169083151502179055506001601160026101000a81548160ff02191690831515021790555042600e81905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60195481565b6115836120e7565b80601160026101000a81548160ff02191690831515021790555050565b6060600480546115af906140ad565b80601f01602080910402602001604051908101604052809291908181526020018280546115db906140ad565b80156116285780601f106115fd57610100808354040283529160200191611628565b820191906000526020600020905b81548152906001019060200180831161160b57829003601f168201915b5050505050905090565b61163a6120e7565b7f0000000000000000000000005ad7aaef26db4fb243168b75b654cda1c44f493e73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156116c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c0906144b2565b60405180910390fd5b6116d3828261304f565b5050565b60175481565b60105481565b601e5481565b601b5481565b6000806116fa611f14565b905060006117088286611b61565b90508381101561174d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174490614544565b60405180910390fd5b61175a8286868403611f1c565b60019250505092915050565b600e5481565b600080611777611f14565b90506117848185856121f1565b600191505092915050565b6117976120e7565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60216020528060005260406000206000915054906101000a900460ff1681565b601160019054906101000a900460ff1681565b6118926120e7565b80601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161192f9190613d32565b60405180910390a25050565b6119436120e7565b8260198190555081601a8190555080601b81905550601b54601a5460195461196b919061425a565b611975919061425a565b601881905550600b60185411156119c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b890614420565b60405180910390fd5b505050565b6119ce6120e7565b670de0b6b3a76400006103e860056119e4610fb7565b6119ee919061410e565b6119f89190614197565b611a029190614197565b811015611a44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3b906145d6565b60405180910390fd5b670de0b6b3a764000081611a58919061410e565b600a8190555050565b601360009054906101000a900460ff1681565b60085481565b6000611a846120e7565b620186a06001611a92610fb7565b611a9c919061410e565b611aa69190614197565b821015611ae8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611adf90614668565b60405180910390fd5b6103e86005611af5610fb7565b611aff919061410e565b611b099190614197565b821115611b4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b42906146fa565b60405180910390fd5b8160098190555060019050919050565b60145481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b6000611bf86120e7565b6000601360006101000a81548160ff0219169083151502179055506001905090565b60165481565b611c286120e7565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611c98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8f9061478c565b60405180910390fd5b611ca181612f89565b50565b601a5481565b600a5481565b6000611cba6120e7565b600f54601054611cca919061425a565b4211611d0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d02906147f8565b60405180910390fd5b6103e8821115611d50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d479061488a565b60405180910390fd5b4260108190555060003073ffffffffffffffffffffffffffffffffffffffff166370a082317f0000000000000000000000005ad7aaef26db4fb243168b75b654cda1c44f493e6040518263ffffffff1660e01b8152600401611db29190613ead565b602060405180830381865afa158015611dcf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611df391906148bf565b90506000611e1e612710611e1086856130f090919063ffffffff16565b61310690919063ffffffff16565b90506000811115611e5757611e567f0000000000000000000000005ad7aaef26db4fb243168b75b654cda1c44f493e61dead8361311c565b5b60007f0000000000000000000000005ad7aaef26db4fb243168b75b654cda1c44f493e90508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611ec457600080fd5b505af1158015611ed8573d6000803e3d6000fd5b505050507f8462566617872a3fbab94534675218431ff9e204063ee3f4f43d965626a39abb60405160405180910390a160019350505050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611f8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f839061495e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611ffc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff3906149f0565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516120da9190613e03565b60405180910390a3505050565b6120ef611f14565b73ffffffffffffffffffffffffffffffffffffffff1661210d611525565b73ffffffffffffffffffffffffffffffffffffffff1614612163576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215a90614a5c565b60405180910390fd5b565b60006121718484611b61565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146121eb57818110156121dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d490614ac8565b60405180910390fd5b6121ea8484848403611f1c565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612261576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161225890614b5a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156122d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122c890614bec565b60405180910390fd5b60008114156122eb576122e68383600061311c565b612f84565b601160009054906101000a900460ff16156129ae57612308611525565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156123765750612346611525565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156123af5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156123e9575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156124025750600560149054906101000a900460ff16155b156129ad57601160019054906101000a900460ff166124fc57601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806124bc5750601f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6124fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124f290614c58565b60405180910390fd5b5b601360009054906101000a900460ff16156126c457612519611525565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156125a057507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156125f857507f0000000000000000000000005ad7aaef26db4fb243168b75b654cda1c44f493e73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156126c35743601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541061267e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161267590614d10565b60405180910390fd5b43601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156127675750602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561280e576008548111156127b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127a890614da2565b60405180910390fd5b600a546127bd83611270565b826127c8919061425a565b1115612809576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161280090614e0e565b60405180910390fd5b6129ac565b602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156128b15750602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612900576008548111156128fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128f290614ea0565b60405180910390fd5b6129ab565b602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166129aa57600a5461295d83611270565b82612968919061425a565b11156129a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129a090614e0e565b60405180910390fd5b5b5b5b5b5b60006129b930611270565b9050600060095482101590508080156129de5750601160029054906101000a900460ff165b80156129f75750600560149054906101000a900460ff16155b8015612a4d5750602160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612aa35750601f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612af95750601f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612b3d576001600560146101000a81548160ff021916908315150217905550612b2161339d565b6000600560146101000a81548160ff0219169083151502179055505b600560149054906101000a900460ff16158015612ba35750602160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b8015612bbb5750600c60009054906101000a900460ff165b8015612bd65750600d54600e54612bd2919061425a565b4210155b8015612c2c5750601f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612c3b57612c39613684565b505b6000600560149054906101000a900460ff16159050601f60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612cf15750601f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612cfb57600090505b60008115612f7457602160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612d5e57506000601854115b15612e2b57612d8b6064612d7d601854886130f090919063ffffffff16565b61310690919063ffffffff16565b9050601854601a5482612d9e919061410e565b612da89190614197565b601d6000828254612db9919061425a565b92505081905550601854601b5482612dd1919061410e565b612ddb9190614197565b601e6000828254612dec919061425a565b9250508190555060185460195482612e04919061410e565b612e0e9190614197565b601c6000828254612e1f919061425a565b92505081905550612f50565b602160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612e8657506000601454115b15612f4f57612eb36064612ea5601454886130f090919063ffffffff16565b61310690919063ffffffff16565b905060145460165482612ec6919061410e565b612ed09190614197565b601d6000828254612ee1919061425a565b9250508190555060145460175482612ef9919061410e565b612f039190614197565b601e6000828254612f14919061425a565b9250508190555060145460155482612f2c919061410e565b612f369190614197565b601c6000828254612f47919061425a565b925050819055505b5b6000811115612f6557612f6487308361311c565b5b8085612f719190614ec0565b94505b612f7f87878761311c565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600081836130fe919061410e565b905092915050565b600081836131149190614197565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561318c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161318390614b5a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156131fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131f390614bec565b60405180910390fd5b61320783838361384a565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561328d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161328490614f66565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613320919061425a565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516133849190613e03565b60405180910390a361339784848461384f565b50505050565b60006133a830611270565b90506000601e54601c54601d546133bf919061425a565b6133c9919061425a565b90506000808314806133db5750600082145b156133e857505050613682565b60146009546133f7919061410e565b83111561341057601460095461340d919061410e565b92505b6000600283601d5486613423919061410e565b61342d9190614197565b6134379190614197565b9050600061344e828661385490919063ffffffff16565b9050600047905061345e8261386a565b6000613473824761385490919063ffffffff16565b9050600061349e87613490601c54856130f090919063ffffffff16565b61310690919063ffffffff16565b905060006134c9886134bb601e54866130f090919063ffffffff16565b61310690919063ffffffff16565b905060008183856134da9190614ec0565b6134e49190614ec0565b90506000601d819055506000601c819055506000601e81905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161354490614fb7565b60006040518083038185875af1925050503d8060008114613581576040519150601f19603f3d011682016040523d82523d6000602084013e613586565b606091505b50508098505060008711801561359c5750600081115b156135e9576135ab8782613aa7565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682601d546040516135e093929190614fcc565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161362f90614fb7565b60006040518083038185875af1925050503d806000811461366c576040519150601f19603f3d011682016040523d82523d6000602084013e613671565b606091505b505080985050505050505050505050505b565b600042600e8190555060003073ffffffffffffffffffffffffffffffffffffffff166370a082317f0000000000000000000000005ad7aaef26db4fb243168b75b654cda1c44f493e6040518263ffffffff1660e01b81526004016136e89190613ead565b602060405180830381865afa158015613705573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061372991906148bf565b90506000613756612710613748600b54856130f090919063ffffffff16565b61310690919063ffffffff16565b9050600081111561378f5761378e7f0000000000000000000000005ad7aaef26db4fb243168b75b654cda1c44f493e61dead8361311c565b5b60007f0000000000000000000000005ad7aaef26db4fb243168b75b654cda1c44f493e90508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156137fc57600080fd5b505af1158015613810573d6000803e3d6000fd5b505050507f454c91ae84fcc766ddda0dcb289f26b3d0176efeacf4061fc219fa6ca8c3048d60405160405180910390a16001935050505090565b505050565b505050565b600081836138629190614ec0565b905092915050565b6000600267ffffffffffffffff81111561388757613886615003565b5b6040519080825280602002602001820160405280156138b55781602001602082028036833780820191505090505b50905030816000815181106138cd576138cc615032565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613972573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139969190615076565b816001815181106139aa576139a9615032565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613a0f307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611f1c565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613a7195949392919061519c565b600060405180830381600087803b158015613a8b57600080fd5b505af1158015613a9f573d6000803e3d6000fd5b505050505050565b613ad2307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611f1c565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b8152600401613b39969594939291906151f6565b60606040518083038185885af1158015613b57573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613b7c9190615257565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613bbd578082015181840152602081019050613ba2565b83811115613bcc576000848401525b50505050565b6000601f19601f8301169050919050565b6000613bee82613b83565b613bf88185613b8e565b9350613c08818560208601613b9f565b613c1181613bd2565b840191505092915050565b60006020820190508181036000830152613c368184613be3565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613c6e82613c43565b9050919050565b613c7e81613c63565b8114613c8957600080fd5b50565b600081359050613c9b81613c75565b92915050565b6000819050919050565b613cb481613ca1565b8114613cbf57600080fd5b50565b600081359050613cd181613cab565b92915050565b60008060408385031215613cee57613ced613c3e565b5b6000613cfc85828601613c8c565b9250506020613d0d85828601613cc2565b9150509250929050565b60008115159050919050565b613d2c81613d17565b82525050565b6000602082019050613d476000830184613d23565b92915050565b600060208284031215613d6357613d62613c3e565b5b6000613d7184828501613c8c565b91505092915050565b6000819050919050565b6000613d9f613d9a613d9584613c43565b613d7a565b613c43565b9050919050565b6000613db182613d84565b9050919050565b6000613dc382613da6565b9050919050565b613dd381613db8565b82525050565b6000602082019050613dee6000830184613dca565b92915050565b613dfd81613ca1565b82525050565b6000602082019050613e186000830184613df4565b92915050565b600060208284031215613e3457613e33613c3e565b5b6000613e4284828501613cc2565b91505092915050565b600080600060608486031215613e6457613e63613c3e565b5b6000613e7286828701613c8c565b9350506020613e8386828701613c8c565b9250506040613e9486828701613cc2565b9150509250925092565b613ea781613c63565b82525050565b6000602082019050613ec26000830184613e9e565b92915050565b600060ff82169050919050565b613ede81613ec8565b82525050565b6000602082019050613ef96000830184613ed5565b92915050565b613f0881613d17565b8114613f1357600080fd5b50565b600081359050613f2581613eff565b92915050565b600080600060608486031215613f4457613f43613c3e565b5b6000613f5286828701613cc2565b9350506020613f6386828701613cc2565b9250506040613f7486828701613f16565b9150509250925092565b60008060408385031215613f9557613f94613c3e565b5b6000613fa385828601613c8c565b9250506020613fb485828601613f16565b9150509250929050565b600080600060608486031215613fd757613fd6613c3e565b5b6000613fe586828701613cc2565b9350506020613ff686828701613cc2565b925050604061400786828701613cc2565b9150509250925092565b60006020828403121561402757614026613c3e565b5b600061403584828501613f16565b91505092915050565b6000806040838503121561405557614054613c3e565b5b600061406385828601613c8c565b925050602061407485828601613c8c565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806140c557607f821691505b602082108114156140d9576140d861407e565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061411982613ca1565b915061412483613ca1565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561415d5761415c6140df565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006141a282613ca1565b91506141ad83613ca1565b9250826141bd576141bc614168565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b6000614224602f83613b8e565b915061422f826141c8565b604082019050919050565b6000602082019050818103600083015261425381614217565b9050919050565b600061426582613ca1565b915061427083613ca1565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156142a5576142a46140df565b5b828201905092915050565b7f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e20746860008201527f616e206576657279203130206d696e7574657300000000000000000000000000602082015250565b600061430c603383613b8e565b9150614317826142b0565b604082019050919050565b6000602082019050818103600083015261433b816142ff565b9050919050565b7f4d75737420736574206175746f204c50206275726e2070657263656e7420626560008201527f747765656e20302520616e642031302500000000000000000000000000000000602082015250565b600061439e603083613b8e565b91506143a982614342565b604082019050919050565b600060208201905081810360008301526143cd81614391565b9050919050565b7f4d757374206b656570206665657320617420313125206f72206c657373000000600082015250565b600061440a601d83613b8e565b9150614415826143d4565b602082019050919050565b60006020820190508181036000830152614439816143fd565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b600061449c603983613b8e565b91506144a782614440565b604082019050919050565b600060208201905081810360008301526144cb8161448f565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061452e602583613b8e565b9150614539826144d2565b604082019050919050565b6000602082019050818103600083015261455d81614521565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b60006145c0602483613b8e565b91506145cb82614564565b604082019050919050565b600060208201905081810360008301526145ef816145b3565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000614652603583613b8e565b915061465d826145f6565b604082019050919050565b6000602082019050818103600083015261468181614645565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b60006146e4603483613b8e565b91506146ef82614688565b604082019050919050565b60006020820190508181036000830152614713816146d7565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614776602683613b8e565b91506147818261471a565b604082019050919050565b600060208201905081810360008301526147a581614769565b9050919050565b7f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e697368600082015250565b60006147e2602083613b8e565b91506147ed826147ac565b602082019050919050565b60006020820190508181036000830152614811816147d5565b9050919050565b7f4d6179206e6f74206e756b65206d6f7265207468616e20313025206f6620746f60008201527f6b656e7320696e204c5000000000000000000000000000000000000000000000602082015250565b6000614874602a83613b8e565b915061487f82614818565b604082019050919050565b600060208201905081810360008301526148a381614867565b9050919050565b6000815190506148b981613cab565b92915050565b6000602082840312156148d5576148d4613c3e565b5b60006148e3848285016148aa565b91505092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614948602483613b8e565b9150614953826148ec565b604082019050919050565b600060208201905081810360008301526149778161493b565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006149da602283613b8e565b91506149e58261497e565b604082019050919050565b60006020820190508181036000830152614a09816149cd565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614a46602083613b8e565b9150614a5182614a10565b602082019050919050565b60006020820190508181036000830152614a7581614a39565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000614ab2601d83613b8e565b9150614abd82614a7c565b602082019050919050565b60006020820190508181036000830152614ae181614aa5565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614b44602583613b8e565b9150614b4f82614ae8565b604082019050919050565b60006020820190508181036000830152614b7381614b37565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614bd6602383613b8e565b9150614be182614b7a565b604082019050919050565b60006020820190508181036000830152614c0581614bc9565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614c42601683613b8e565b9150614c4d82614c0c565b602082019050919050565b60006020820190508181036000830152614c7181614c35565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b6000614cfa604983613b8e565b9150614d0582614c78565b606082019050919050565b60006020820190508181036000830152614d2981614ced565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000614d8c603583613b8e565b9150614d9782614d30565b604082019050919050565b60006020820190508181036000830152614dbb81614d7f565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000614df8601383613b8e565b9150614e0382614dc2565b602082019050919050565b60006020820190508181036000830152614e2781614deb565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000614e8a603683613b8e565b9150614e9582614e2e565b604082019050919050565b60006020820190508181036000830152614eb981614e7d565b9050919050565b6000614ecb82613ca1565b9150614ed683613ca1565b925082821015614ee957614ee86140df565b5b828203905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614f50602683613b8e565b9150614f5b82614ef4565b604082019050919050565b60006020820190508181036000830152614f7f81614f43565b9050919050565b600081905092915050565b50565b6000614fa1600083614f86565b9150614fac82614f91565b600082019050919050565b6000614fc282614f94565b9150819050919050565b6000606082019050614fe16000830186613df4565b614fee6020830185613df4565b614ffb6040830184613df4565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061507081613c75565b92915050565b60006020828403121561508c5761508b613c3e565b5b600061509a84828501615061565b91505092915050565b6000819050919050565b60006150c86150c36150be846150a3565b613d7a565b613ca1565b9050919050565b6150d8816150ad565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61511381613c63565b82525050565b6000615125838361510a565b60208301905092915050565b6000602082019050919050565b6000615149826150de565b61515381856150e9565b935061515e836150fa565b8060005b8381101561518f5781516151768882615119565b975061518183615131565b925050600181019050615162565b5085935050505092915050565b600060a0820190506151b16000830188613df4565b6151be60208301876150cf565b81810360408301526151d0818661513e565b90506151df6060830185613e9e565b6151ec6080830184613df4565b9695505050505050565b600060c08201905061520b6000830189613e9e565b6152186020830188613df4565b61522560408301876150cf565b61523260608301866150cf565b61523f6080830185613e9e565b61524c60a0830184613df4565b979650505050505050565b6000806000606084860312156152705761526f613c3e565b5b600061527e868287016148aa565b935050602061528f868287016148aa565b92505060406152a0868287016148aa565b915050925092509256fea26469706673582212201e9da223b244b70aad701bc3fd3bda9ae3e30d0699c4da6c1d995a4cf2d8608764736f6c634300080a0033

Deployed Bytecode Sourcemap

35703:19443:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16394:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18745:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37332:63;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35781:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17514:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44474:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36346:47;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36161:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37116:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37076;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41788:275;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19526:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35884:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36256:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36217:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17356:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20230:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35839:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36444:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44639:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36931:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36524:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17685:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9817:103;;;;;;;;;;;;;:::i;:::-;;52728:555;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40896:121;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42335:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35976:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36824;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42706:403;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40689:155;;;;;;;;;;;;;:::i;:::-;;9169:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36013:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36966:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42598:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16613:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43727:304;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36898:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36400:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37156:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37042:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20971:436;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36308:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18018:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44235:231;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37553:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36484:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43537:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43117:412;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42071:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36742:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36046:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41283:497;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36790:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18274:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36088:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41078:135;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36861:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10075:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37004:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36128:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54087:1056;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16394:100;16448:13;16481:5;16474:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16394:100;:::o;18745:201::-;18828:4;18845:13;18861:12;:10;:12::i;:::-;18845:28;;18884:32;18893:5;18900:7;18909:6;18884:8;:32::i;:::-;18934:4;18927:11;;;18745:201;;;;:::o;37332:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;35781:51::-;;;:::o;17514:108::-;17575:7;17602:12;;17595:19;;17514:108;:::o;44474:157::-;9055:13;:11;:13::i;:::-;44581:9:::1;;;;;;;;;;;44553:38;;44570:9;44553:38;;;;;;;;;;;;44614:9;44602;;:21;;;;;;;;;;;;;;;;;;44474:157:::0;:::o;36346:47::-;;;;:::o;36161:36::-;;;;:::o;37116:33::-;;;;:::o;37076:::-;;;;:::o;41788:275::-;9055:13;:11;:13::i;:::-;41925:4:::1;41917;41912:1;41896:13;:11;:13::i;:::-;:17;;;;:::i;:::-;41895:26;;;;:::i;:::-;41894:35;;;;:::i;:::-;41884:6;:45;;41862:142;;;;;;;;;;;;:::i;:::-;;;;;;;;;42048:6;42038;:17;;;;:::i;:::-;42015:20;:40;;;;41788:275:::0;:::o;19526:295::-;19657:4;19674:15;19692:12;:10;:12::i;:::-;19674:30;;19715:38;19731:4;19737:7;19746:6;19715:15;:38::i;:::-;19764:27;19774:4;19780:2;19784:6;19764:9;:27::i;:::-;19809:4;19802:11;;;19526:295;;;;;:::o;35884:53::-;35930:6;35884:53;:::o;36256:45::-;;;;:::o;36217:32::-;;;;;;;;;;;;;:::o;17356:93::-;17414:5;17439:2;17432:9;;17356:93;:::o;20230:238::-;20318:4;20335:13;20351:12;:10;:12::i;:::-;20335:28;;20374:64;20383:5;20390:7;20427:10;20399:25;20409:5;20416:7;20399:9;:25::i;:::-;:38;;;;:::i;:::-;20374:8;:64::i;:::-;20456:4;20449:11;;;20230:238;;;;:::o;35839:38::-;;;:::o;36444:33::-;;;;;;;;;;;;;:::o;44639:126::-;44705:4;44729:19;:28;44749:7;44729:28;;;;;;;;;;;;;;;;;;;;;;;;;44722:35;;44639:126;;;:::o;36931:28::-;;;;:::o;36524:31::-;;;;;;;;;;;;;:::o;17685:127::-;17759:7;17786:9;:18;17796:7;17786:18;;;;;;;;;;;;;;;;17779:25;;17685:127;;;:::o;9817:103::-;9055:13;:11;:13::i;:::-;9882:30:::1;9909:1;9882:18;:30::i;:::-;9817:103::o:0;52728:555::-;9055:13;:11;:13::i;:::-;52930:3:::1;52907:19;:26;;52885:127;;;;;;;;;;;;:::i;:::-;;;;;;;;;53057:4;53045:8;:16;;:33;;;;;53077:1;53065:8;:13;;53045:33;53023:131;;;;;;;;;;;;:::i;:::-;;;;;;;;;53183:19;53165:15;:37;;;;53232:8;53213:16;:27;;;;53267:8;53251:13;;:24;;;;;;;;;;;;;;;;;;52728:555:::0;;;:::o;40896:121::-;40948:4;9055:13;:11;:13::i;:::-;40982:5:::1;40965:14;;:22;;;;;;;;;;;;;;;;;;41005:4;40998:11;;40896:121:::0;:::o;42335:167::-;9055:13;:11;:13::i;:::-;42490:4:::1;42448:31;:39;42480:6;42448:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;42335:167:::0;;:::o;35976:30::-;;;;;;;;;;;;;:::o;36824:::-;;;;:::o;42706:403::-;9055:13;:11;:13::i;:::-;42874::::1;42856:15;:31;;;;42916:13;42898:15;:31;;;;42952:7;42940:9;:19;;;;43021:9;;43003:15;;42985;;:33;;;;:::i;:::-;:45;;;;:::i;:::-;42970:12;:60;;;;43065:2;43049:12;;:18;;43041:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;42706:403:::0;;;:::o;40689:155::-;9055:13;:11;:13::i;:::-;40760:4:::1;40744:13;;:20;;;;;;;;;;;;;;;;;;40789:4;40775:11;;:18;;;;;;;;;;;;;;;;;;40821:15;40804:14;:32;;;;40689:155::o:0;9169:87::-;9215:7;9242:6;;;;;;;;;;;9235:13;;9169:87;:::o;36013:24::-;;;;;;;;;;;;;:::o;36966:31::-;;;;:::o;42598:100::-;9055:13;:11;:13::i;:::-;42683:7:::1;42669:11;;:21;;;;;;;;;;;;;;;;;;42598:100:::0;:::o;16613:104::-;16669:13;16702:7;16695:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16613:104;:::o;43727:304::-;9055:13;:11;:13::i;:::-;43871::::1;43863:21;;:4;:21;;;;43841:128;;;;;;;;;;;;:::i;:::-;;;;;;;;;43982:41;44011:4;44017:5;43982:28;:41::i;:::-;43727:304:::0;;:::o;36898:24::-;;;;:::o;36400:35::-;;;;:::o;37156:27::-;;;;:::o;37042:25::-;;;;:::o;20971:436::-;21064:4;21081:13;21097:12;:10;:12::i;:::-;21081:28;;21120:24;21147:25;21157:5;21164:7;21147:9;:25::i;:::-;21120:52;;21211:15;21191:16;:35;;21183:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;21304:60;21313:5;21320:7;21348:15;21329:16;:34;21304:8;:60::i;:::-;21395:4;21388:11;;;;20971:436;;;;:::o;36308:29::-;;;;:::o;18018:193::-;18097:4;18114:13;18130:12;:10;:12::i;:::-;18114:28;;18153;18163:5;18170:2;18174:6;18153:9;:28::i;:::-;18199:4;18192:11;;;18018:193;;;;:::o;44235:231::-;9055:13;:11;:13::i;:::-;44395:15:::1;;;;;;;;;;;44352:59;;44375:18;44352:59;;;;;;;;;;;;44440:18;44422:15;;:36;;;;;;;;;;;;;;;;;;44235:231:::0;:::o;37553:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;36484:33::-;;;;;;;;;;;;;:::o;43537:182::-;9055:13;:11;:13::i;:::-;43653:8:::1;43622:19;:28;43642:7;43622:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;43693:7;43677:34;;;43702:8;43677:34;;;;;;:::i;:::-;;;;;;;;43537:182:::0;;:::o;43117:412::-;9055:13;:11;:13::i;:::-;43287::::1;43268:16;:32;;;;43330:13;43311:16;:32;;;;43367:7;43354:10;:20;;;;43439:10;;43420:16;;43401;;:35;;;;:::i;:::-;:48;;;;:::i;:::-;43385:13;:64;;;;43485:2;43468:13;;:19;;43460:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;43117:412:::0;;;:::o;42071:256::-;9055:13;:11;:13::i;:::-;42211:4:::1;42203;42198:1;42182:13;:11;:13::i;:::-;:17;;;;:::i;:::-;42181:26;;;;:::i;:::-;42180:35;;;;:::i;:::-;42170:6;:45;;42148:131;;;;;;;;;;;;:::i;:::-;;;;;;;;;42312:6;42302;:17;;;;:::i;:::-;42290:9;:29;;;;42071:256:::0;:::o;36742:39::-;;;;;;;;;;;;;:::o;36046:35::-;;;;:::o;41283:497::-;41391:4;9055:13;:11;:13::i;:::-;41470:6:::1;41465:1;41449:13;:11;:13::i;:::-;:17;;;;:::i;:::-;41448:28;;;;:::i;:::-;41435:9;:41;;41413:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;41625:4;41620:1;41604:13;:11;:13::i;:::-;:17;;;;:::i;:::-;41603:26;;;;:::i;:::-;41590:9;:39;;41568:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;41741:9;41720:18;:30;;;;41768:4;41761:11;;41283:497:::0;;;:::o;36790:27::-;;;;:::o;18274:151::-;18363:7;18390:11;:18;18402:5;18390:18;;;;;;;;;;;;;;;:27;18409:7;18390:27;;;;;;;;;;;;;;;;18383:34;;18274:151;;;;:::o;36088:33::-;;;;:::o;41078:135::-;41138:4;9055:13;:11;:13::i;:::-;41178:5:::1;41155:20;;:28;;;;;;;;;;;;;;;;;;41201:4;41194:11;;41078:135:::0;:::o;36861:30::-;;;;:::o;10075:201::-;9055:13;:11;:13::i;:::-;10184:1:::1;10164:22;;:8;:22;;;;10156:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;10240:28;10259:8;10240:18;:28::i;:::-;10075:201:::0;:::o;37004:31::-;;;;:::o;36128:24::-;;;;:::o;54087:1056::-;54198:4;9055:13;:11;:13::i;:::-;54283:19:::1;;54260:20;;:42;;;;:::i;:::-;54242:15;:60;54220:142;;;;;;;;;;;;:::i;:::-;;;;;;;;;54392:4;54381:7;:15;;54373:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;54477:15;54454:20;:38;;;;54547:28;54578:4;:14;;;54593:13;54578:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;54547:60;;54657:20;54680:44;54718:5;54680:33;54705:7;54680:20;:24;;:33;;;;:::i;:::-;:37;;:44;;;;:::i;:::-;54657:67;;54844:1;54829:12;:16;54825:110;;;54862:61;54878:13;54901:6;54910:12;54862:15;:61::i;:::-;54825:110;55010:19;55047:13;55010:51;;55072:4;:9;;;:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;55099:14;;;;;;;;;;55131:4;55124:11;;;;;54087:1056:::0;;;:::o;7720:98::-;7773:7;7800:10;7793:17;;7720:98;:::o;24596:380::-;24749:1;24732:19;;:5;:19;;;;24724:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24830:1;24811:21;;:7;:21;;;;24803:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24914:6;24884:11;:18;24896:5;24884:18;;;;;;;;;;;;;;;:27;24903:7;24884:27;;;;;;;;;;;;;;;:36;;;;24952:7;24936:32;;24945:5;24936:32;;;24961:6;24936:32;;;;;;:::i;:::-;;;;;;;;24596:380;;;:::o;9334:132::-;9409:12;:10;:12::i;:::-;9398:23;;:7;:5;:7::i;:::-;:23;;;9390:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9334:132::o;25267:453::-;25402:24;25429:25;25439:5;25446:7;25429:9;:25::i;:::-;25402:52;;25489:17;25469:16;:37;25465:248;;25551:6;25531:16;:26;;25523:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25635:51;25644:5;25651:7;25679:6;25660:16;:25;25635:8;:51::i;:::-;25465:248;25391:329;25267:453;;;:::o;44823:5011::-;44971:1;44955:18;;:4;:18;;;;44947:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45048:1;45034:16;;:2;:16;;;;45026:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;45117:1;45107:6;:11;45103:93;;;45135:28;45151:4;45157:2;45161:1;45135:15;:28::i;:::-;45178:7;;45103:93;45212:14;;;;;;;;;;;45208:2487;;;45273:7;:5;:7::i;:::-;45265:15;;:4;:15;;;;:49;;;;;45307:7;:5;:7::i;:::-;45301:13;;:2;:13;;;;45265:49;:86;;;;;45349:1;45335:16;;:2;:16;;;;45265:86;:128;;;;;45386:6;45372:21;;:2;:21;;;;45265:128;:158;;;;;45415:8;;;;;;;;;;;45414:9;45265:158;45243:2441;;;45463:13;;;;;;;;;;;45458:223;;45535:19;:25;45555:4;45535:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;45564:19;:23;45584:2;45564:23;;;;;;;;;;;;;;;;;;;;;;;;;45535:52;45501:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;45458:223;45837:20;;;;;;;;;;;45833:641;;;45918:7;:5;:7::i;:::-;45912:13;;:2;:13;;;;:72;;;;;45968:15;45954:30;;:2;:30;;;;45912:72;:129;;;;;46027:13;46013:28;;:2;:28;;;;45912:129;45882:573;;;46205:12;46130:28;:39;46159:9;46130:39;;;;;;;;;;;;;;;;:87;46092:258;;;;;;;;;;;;:::i;:::-;;;;;;;;;46419:12;46377:28;:39;46406:9;46377:39;;;;;;;;;;;;;;;:54;;;;45882:573;45833:641;46548:25;:31;46574:4;46548:31;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;46605:31;:35;46637:2;46605:35;;;;;;;;;;;;;;;;;;;;;;;;;46604:36;46548:92;46522:1147;;;46727:20;;46717:6;:30;;46683:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;46935:9;;46918:13;46928:2;46918:9;:13::i;:::-;46909:6;:22;;;;:::i;:::-;:35;;46875:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;46522:1147;;;47113:25;:29;47139:2;47113:29;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;47168:31;:37;47200:4;47168:37;;;;;;;;;;;;;;;;;;;;;;;;;47167:38;47113:92;47087:582;;;47292:20;;47282:6;:30;;47248:170;;;;;;;;;;;;:::i;:::-;;;;;;;;;47087:582;;;47449:31;:35;47481:2;47449:35;;;;;;;;;;;;;;;;;;;;;;;;;47444:225;;47569:9;;47552:13;47562:2;47552:9;:13::i;:::-;47543:6;:22;;;;:::i;:::-;:35;;47509:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;47444:225;47087:582;46522:1147;45243:2441;45208:2487;47707:28;47738:24;47756:4;47738:9;:24::i;:::-;47707:55;;47775:12;47814:18;;47790:20;:42;;47775:57;;47863:7;:35;;;;;47887:11;;;;;;;;;;;47863:35;:61;;;;;47916:8;;;;;;;;;;;47915:9;47863:61;:110;;;;;47942:25;:31;47968:4;47942:31;;;;;;;;;;;;;;;;;;;;;;;;;47941:32;47863:110;:153;;;;;47991:19;:25;48011:4;47991:25;;;;;;;;;;;;;;;;;;;;;;;;;47990:26;47863:153;:194;;;;;48034:19;:23;48054:2;48034:23;;;;;;;;;;;;;;;;;;;;;;;;;48033:24;47863:194;47845:326;;;48095:4;48084:8;;:15;;;;;;;;;;;;;;;;;;48116:10;:8;:10::i;:::-;48154:5;48143:8;;:16;;;;;;;;;;;;;;;;;;47845:326;48202:8;;;;;;;;;;;48201:9;:55;;;;;48227:25;:29;48253:2;48227:29;;;;;;;;;;;;;;;;;;;;;;;;;48201:55;:85;;;;;48273:13;;;;;;;;;;;48201:85;:153;;;;;48339:15;;48322:14;;:32;;;;:::i;:::-;48303:15;:51;;48201:153;:196;;;;;48372:19;:25;48392:4;48372:25;;;;;;;;;;;;;;;;;;;;;;;;;48371:26;48201:196;48183:282;;;48424:29;:27;:29::i;:::-;;48183:282;48477:12;48493:8;;;;;;;;;;;48492:9;48477:24;;48603:19;:25;48623:4;48603:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;48632:19;:23;48652:2;48632:23;;;;;;;;;;;;;;;;;;;;;;;;;48603:52;48599:100;;;48682:5;48672:15;;48599:100;48711:12;48816:7;48812:969;;;48868:25;:29;48894:2;48868:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;48917:1;48901:13;;:17;48868:50;48864:768;;;48946:34;48976:3;48946:25;48957:13;;48946:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;48939:41;;49049:13;;49029:16;;49022:4;:23;;;;:::i;:::-;49021:41;;;;:::i;:::-;48999:18;;:63;;;;;;;:::i;:::-;;;;;;;;49119:13;;49105:10;;49098:4;:17;;;;:::i;:::-;49097:35;;;;:::i;:::-;49081:12;;:51;;;;;;;:::i;:::-;;;;;;;;49201:13;;49181:16;;49174:4;:23;;;;:::i;:::-;49173:41;;;;:::i;:::-;49151:18;;:63;;;;;;;:::i;:::-;;;;;;;;48864:768;;;49276:25;:31;49302:4;49276:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;49326:1;49311:12;;:16;49276:51;49272:360;;;49355:33;49384:3;49355:24;49366:12;;49355:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;49348:40;;49456:12;;49437:15;;49430:4;:22;;;;:::i;:::-;49429:39;;;;:::i;:::-;49407:18;;:61;;;;;;;:::i;:::-;;;;;;;;49524:12;;49511:9;;49504:4;:16;;;;:::i;:::-;49503:33;;;;:::i;:::-;49487:12;;:49;;;;;;;:::i;:::-;;;;;;;;49604:12;;49585:15;;49578:4;:22;;;;:::i;:::-;49577:39;;;;:::i;:::-;49555:18;;:61;;;;;;;:::i;:::-;;;;;;;;49272:360;48864:768;49659:1;49652:4;:8;49648:91;;;49681:42;49697:4;49711;49718;49681:15;:42::i;:::-;49648:91;49765:4;49755:14;;;;;:::i;:::-;;;48812:969;49793:33;49809:4;49815:2;49819:6;49793:15;:33::i;:::-;44936:4898;;;;44823:5011;;;;:::o;10436:191::-;10510:16;10529:6;;;;;;;;;;;10510:25;;10555:8;10546:6;;:17;;;;;;;;;;;;;;;;;;10610:8;10579:40;;10600:8;10579:40;;;;;;;;;;;;10499:128;10436:191;:::o;44039:188::-;44156:5;44122:25;:31;44148:4;44122:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;44213:5;44179:40;;44207:4;44179:40;;;;;;;;;;;;44039:188;;:::o;3614:98::-;3672:7;3703:1;3699;:5;;;;:::i;:::-;3692:12;;3614:98;;;;:::o;4013:::-;4071:7;4102:1;4098;:5;;;;:::i;:::-;4091:12;;4013:98;;;;:::o;21877:671::-;22024:1;22008:18;;:4;:18;;;;22000:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22101:1;22087:16;;:2;:16;;;;22079:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;22156:38;22177:4;22183:2;22187:6;22156:20;:38::i;:::-;22207:19;22229:9;:15;22239:4;22229:15;;;;;;;;;;;;;;;;22207:37;;22278:6;22263:11;:21;;22255:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;22395:6;22381:11;:20;22363:9;:15;22373:4;22363:15;;;;;;;;;;;;;;;:38;;;;22440:6;22423:9;:13;22433:2;22423:13;;;;;;;;;;;;;;;;:23;;;;;;;:::i;:::-;;;;;;;;22479:2;22464:26;;22473:4;22464:26;;;22483:6;22464:26;;;;;;:::i;:::-;;;;;;;;22503:37;22523:4;22529:2;22533:6;22503:19;:37::i;:::-;21989:559;21877:671;;;:::o;50964:1756::-;51003:23;51029:24;51047:4;51029:9;:24::i;:::-;51003:50;;51064:25;51160:12;;51126:18;;51092;;:52;;;;:::i;:::-;:80;;;;:::i;:::-;51064:108;;51183:12;51231:1;51212:15;:20;:46;;;;51257:1;51236:17;:22;51212:46;51208:85;;;51275:7;;;;;51208:85;51348:2;51327:18;;:23;;;;:::i;:::-;51309:15;:41;51305:115;;;51406:2;51385:18;;:23;;;;:::i;:::-;51367:41;;51305:115;51481:23;51594:1;51561:17;51526:18;;51508:15;:36;;;;:::i;:::-;51507:71;;;;:::i;:::-;:88;;;;:::i;:::-;51481:114;;51606:26;51635:36;51655:15;51635;:19;;:36;;;;:::i;:::-;51606:65;;51684:25;51712:21;51684:49;;51746:36;51763:18;51746:16;:36::i;:::-;51795:18;51816:44;51842:17;51816:21;:25;;:44;;;;:::i;:::-;51795:65;;51873:23;51899:81;51952:17;51899:34;51914:18;;51899:10;:14;;:34;;;;:::i;:::-;:38;;:81;;;;:::i;:::-;51873:107;;51991:17;52011:51;52044:17;52011:28;52026:12;;52011:10;:14;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;51991:71;;52075:23;52132:9;52114:15;52101:10;:28;;;;:::i;:::-;:40;;;;:::i;:::-;52075:66;;52175:1;52154:18;:22;;;;52208:1;52187:18;:22;;;;52235:1;52220:12;:16;;;;52271:9;;;;;;;;;;;52263:23;;52294:9;52263:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52249:59;;;;;52343:1;52325:15;:19;:42;;;;;52366:1;52348:15;:19;52325:42;52321:278;;;52384:46;52397:15;52414;52384:12;:46::i;:::-;52450:137;52483:18;52520:15;52554:18;;52450:137;;;;;;;;:::i;:::-;;;;;;;;52321:278;52633:15;;;;;;;;;;;52625:29;;52676:21;52625:87;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52611:101;;;;;50992:1728;;;;;;;;;;50964:1756;:::o;53291:788::-;53348:4;53382:15;53365:14;:32;;;;53452:28;53483:4;:14;;;53498:13;53483:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;53452:60;;53562:20;53585:77;53646:5;53585:42;53610:16;;53585:20;:24;;:42;;;;:::i;:::-;:46;;:77;;;;:::i;:::-;53562:100;;53782:1;53767:12;:16;53763:110;;;53800:61;53816:13;53839:6;53848:12;53800:15;:61::i;:::-;53763:110;53948:19;53985:13;53948:51;;54010:4;:9;;;:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;54037:12;;;;;;;;;;54067:4;54060:11;;;;;53291:788;:::o;26320:125::-;;;;:::o;27049:124::-;;;;:::o;3257:98::-;3315:7;3346:1;3342;:5;;;;:::i;:::-;3335:12;;3257:98;;;;:::o;49842:589::-;49968:21;50006:1;49992:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49968:40;;50037:4;50019;50024:1;50019:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;50063:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;50053:4;50058:1;50053:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;50098:62;50115:4;50130:15;50148:11;50098:8;:62::i;:::-;50199:15;:66;;;50280:11;50306:1;50350:4;50377;50397:15;50199:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49897:534;49842:589;:::o;50439:517::-;50587:62;50604:4;50619:15;50637:11;50587:8;:62::i;:::-;50692:15;:31;;;50731:9;50764:4;50784:11;50810:1;50853;35930:6;50922:15;50692:256;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;50439:517;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1478:117::-;1587:1;1584;1577:12;1724:126;1761:7;1801:42;1794:5;1790:54;1779:65;;1724:126;;;:::o;1856:96::-;1893:7;1922:24;1940:5;1922:24;:::i;:::-;1911:35;;1856:96;;;:::o;1958:122::-;2031:24;2049:5;2031:24;:::i;:::-;2024:5;2021:35;2011:63;;2070:1;2067;2060:12;2011:63;1958:122;:::o;2086:139::-;2132:5;2170:6;2157:20;2148:29;;2186:33;2213:5;2186:33;:::i;:::-;2086:139;;;;:::o;2231:77::-;2268:7;2297:5;2286:16;;2231:77;;;:::o;2314:122::-;2387:24;2405:5;2387:24;:::i;:::-;2380:5;2377:35;2367:63;;2426:1;2423;2416:12;2367:63;2314:122;:::o;2442:139::-;2488:5;2526:6;2513:20;2504:29;;2542:33;2569:5;2542:33;:::i;:::-;2442:139;;;;:::o;2587:474::-;2655:6;2663;2712:2;2700:9;2691:7;2687:23;2683:32;2680:119;;;2718:79;;:::i;:::-;2680:119;2838:1;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2809:117;2965:2;2991:53;3036:7;3027:6;3016:9;3012:22;2991:53;:::i;:::-;2981:63;;2936:118;2587:474;;;;;:::o;3067:90::-;3101:7;3144:5;3137:13;3130:21;3119:32;;3067:90;;;:::o;3163:109::-;3244:21;3259:5;3244:21;:::i;:::-;3239:3;3232:34;3163:109;;:::o;3278:210::-;3365:4;3403:2;3392:9;3388:18;3380:26;;3416:65;3478:1;3467:9;3463:17;3454:6;3416:65;:::i;:::-;3278:210;;;;:::o;3494:329::-;3553:6;3602:2;3590:9;3581:7;3577:23;3573:32;3570:119;;;3608:79;;:::i;:::-;3570:119;3728:1;3753:53;3798:7;3789:6;3778:9;3774:22;3753:53;:::i;:::-;3743:63;;3699:117;3494:329;;;;:::o;3829:60::-;3857:3;3878:5;3871:12;;3829:60;;;:::o;3895:142::-;3945:9;3978:53;3996:34;4005:24;4023:5;4005:24;:::i;:::-;3996:34;:::i;:::-;3978:53;:::i;:::-;3965:66;;3895:142;;;:::o;4043:126::-;4093:9;4126:37;4157:5;4126:37;:::i;:::-;4113:50;;4043:126;;;:::o;4175:153::-;4252:9;4285:37;4316:5;4285:37;:::i;:::-;4272:50;;4175:153;;;:::o;4334:185::-;4448:64;4506:5;4448:64;:::i;:::-;4443:3;4436:77;4334:185;;:::o;4525:276::-;4645:4;4683:2;4672:9;4668:18;4660:26;;4696:98;4791:1;4780:9;4776:17;4767:6;4696:98;:::i;:::-;4525:276;;;;:::o;4807:118::-;4894:24;4912:5;4894:24;:::i;:::-;4889:3;4882:37;4807:118;;:::o;4931:222::-;5024:4;5062:2;5051:9;5047:18;5039:26;;5075:71;5143:1;5132:9;5128:17;5119:6;5075:71;:::i;:::-;4931:222;;;;:::o;5159:329::-;5218:6;5267:2;5255:9;5246:7;5242:23;5238:32;5235:119;;;5273:79;;:::i;:::-;5235:119;5393:1;5418:53;5463:7;5454:6;5443:9;5439:22;5418:53;:::i;:::-;5408:63;;5364:117;5159:329;;;;:::o;5494:619::-;5571:6;5579;5587;5636:2;5624:9;5615:7;5611:23;5607:32;5604:119;;;5642:79;;:::i;:::-;5604:119;5762:1;5787:53;5832:7;5823:6;5812:9;5808:22;5787:53;:::i;:::-;5777:63;;5733:117;5889:2;5915:53;5960:7;5951:6;5940:9;5936:22;5915:53;:::i;:::-;5905:63;;5860:118;6017:2;6043:53;6088:7;6079:6;6068:9;6064:22;6043:53;:::i;:::-;6033:63;;5988:118;5494:619;;;;;:::o;6119:118::-;6206:24;6224:5;6206:24;:::i;:::-;6201:3;6194:37;6119:118;;:::o;6243:222::-;6336:4;6374:2;6363:9;6359:18;6351:26;;6387:71;6455:1;6444:9;6440:17;6431:6;6387:71;:::i;:::-;6243:222;;;;:::o;6471:86::-;6506:7;6546:4;6539:5;6535:16;6524:27;;6471:86;;;:::o;6563:112::-;6646:22;6662:5;6646:22;:::i;:::-;6641:3;6634:35;6563:112;;:::o;6681:214::-;6770:4;6808:2;6797:9;6793:18;6785:26;;6821:67;6885:1;6874:9;6870:17;6861:6;6821:67;:::i;:::-;6681:214;;;;:::o;6901:116::-;6971:21;6986:5;6971:21;:::i;:::-;6964:5;6961:32;6951:60;;7007:1;7004;6997:12;6951:60;6901:116;:::o;7023:133::-;7066:5;7104:6;7091:20;7082:29;;7120:30;7144:5;7120:30;:::i;:::-;7023:133;;;;:::o;7162:613::-;7236:6;7244;7252;7301:2;7289:9;7280:7;7276:23;7272:32;7269:119;;;7307:79;;:::i;:::-;7269:119;7427:1;7452:53;7497:7;7488:6;7477:9;7473:22;7452:53;:::i;:::-;7442:63;;7398:117;7554:2;7580:53;7625:7;7616:6;7605:9;7601:22;7580:53;:::i;:::-;7570:63;;7525:118;7682:2;7708:50;7750:7;7741:6;7730:9;7726:22;7708:50;:::i;:::-;7698:60;;7653:115;7162:613;;;;;:::o;7781:468::-;7846:6;7854;7903:2;7891:9;7882:7;7878:23;7874:32;7871:119;;;7909:79;;:::i;:::-;7871:119;8029:1;8054:53;8099:7;8090:6;8079:9;8075:22;8054:53;:::i;:::-;8044:63;;8000:117;8156:2;8182:50;8224:7;8215:6;8204:9;8200:22;8182:50;:::i;:::-;8172:60;;8127:115;7781:468;;;;;:::o;8255:619::-;8332:6;8340;8348;8397:2;8385:9;8376:7;8372:23;8368:32;8365:119;;;8403:79;;:::i;:::-;8365:119;8523:1;8548:53;8593:7;8584:6;8573:9;8569:22;8548:53;:::i;:::-;8538:63;;8494:117;8650:2;8676:53;8721:7;8712:6;8701:9;8697:22;8676:53;:::i;:::-;8666:63;;8621:118;8778:2;8804:53;8849:7;8840:6;8829:9;8825:22;8804:53;:::i;:::-;8794:63;;8749:118;8255:619;;;;;:::o;8880:323::-;8936:6;8985:2;8973:9;8964:7;8960:23;8956:32;8953:119;;;8991:79;;:::i;:::-;8953:119;9111:1;9136:50;9178:7;9169:6;9158:9;9154:22;9136:50;:::i;:::-;9126:60;;9082:114;8880:323;;;;:::o;9209:474::-;9277:6;9285;9334:2;9322:9;9313:7;9309:23;9305:32;9302:119;;;9340:79;;:::i;:::-;9302:119;9460:1;9485:53;9530:7;9521:6;9510:9;9506:22;9485:53;:::i;:::-;9475:63;;9431:117;9587:2;9613:53;9658:7;9649:6;9638:9;9634:22;9613:53;:::i;:::-;9603:63;;9558:118;9209:474;;;;;:::o;9689:180::-;9737:77;9734:1;9727:88;9834:4;9831:1;9824:15;9858:4;9855:1;9848:15;9875:320;9919:6;9956:1;9950:4;9946:12;9936:22;;10003:1;9997:4;9993:12;10024:18;10014:81;;10080:4;10072:6;10068:17;10058:27;;10014:81;10142:2;10134:6;10131:14;10111:18;10108:38;10105:84;;;10161:18;;:::i;:::-;10105:84;9926:269;9875:320;;;:::o;10201:180::-;10249:77;10246:1;10239:88;10346:4;10343:1;10336:15;10370:4;10367:1;10360:15;10387:348;10427:7;10450:20;10468:1;10450:20;:::i;:::-;10445:25;;10484:20;10502:1;10484:20;:::i;:::-;10479:25;;10672:1;10604:66;10600:74;10597:1;10594:81;10589:1;10582:9;10575:17;10571:105;10568:131;;;10679:18;;:::i;:::-;10568:131;10727:1;10724;10720:9;10709:20;;10387:348;;;;:::o;10741:180::-;10789:77;10786:1;10779:88;10886:4;10883:1;10876:15;10910:4;10907:1;10900:15;10927:185;10967:1;10984:20;11002:1;10984:20;:::i;:::-;10979:25;;11018:20;11036:1;11018:20;:::i;:::-;11013:25;;11057:1;11047:35;;11062:18;;:::i;:::-;11047:35;11104:1;11101;11097:9;11092:14;;10927:185;;;;:::o;11118:234::-;11258:34;11254:1;11246:6;11242:14;11235:58;11327:17;11322:2;11314:6;11310:15;11303:42;11118:234;:::o;11358:366::-;11500:3;11521:67;11585:2;11580:3;11521:67;:::i;:::-;11514:74;;11597:93;11686:3;11597:93;:::i;:::-;11715:2;11710:3;11706:12;11699:19;;11358:366;;;:::o;11730:419::-;11896:4;11934:2;11923:9;11919:18;11911:26;;11983:9;11977:4;11973:20;11969:1;11958:9;11954:17;11947:47;12011:131;12137:4;12011:131;:::i;:::-;12003:139;;11730:419;;;:::o;12155:305::-;12195:3;12214:20;12232:1;12214:20;:::i;:::-;12209:25;;12248:20;12266:1;12248:20;:::i;:::-;12243:25;;12402:1;12334:66;12330:74;12327:1;12324:81;12321:107;;;12408:18;;:::i;:::-;12321:107;12452:1;12449;12445:9;12438:16;;12155:305;;;;:::o;12466:238::-;12606:34;12602:1;12594:6;12590:14;12583:58;12675:21;12670:2;12662:6;12658:15;12651:46;12466:238;:::o;12710:366::-;12852:3;12873:67;12937:2;12932:3;12873:67;:::i;:::-;12866:74;;12949:93;13038:3;12949:93;:::i;:::-;13067:2;13062:3;13058:12;13051:19;;12710:366;;;:::o;13082:419::-;13248:4;13286:2;13275:9;13271:18;13263:26;;13335:9;13329:4;13325:20;13321:1;13310:9;13306:17;13299:47;13363:131;13489:4;13363:131;:::i;:::-;13355:139;;13082:419;;;:::o;13507:235::-;13647:34;13643:1;13635:6;13631:14;13624:58;13716:18;13711:2;13703:6;13699:15;13692:43;13507:235;:::o;13748:366::-;13890:3;13911:67;13975:2;13970:3;13911:67;:::i;:::-;13904:74;;13987:93;14076:3;13987:93;:::i;:::-;14105:2;14100:3;14096:12;14089:19;;13748:366;;;:::o;14120:419::-;14286:4;14324:2;14313:9;14309:18;14301:26;;14373:9;14367:4;14363:20;14359:1;14348:9;14344:17;14337:47;14401:131;14527:4;14401:131;:::i;:::-;14393:139;;14120:419;;;:::o;14545:179::-;14685:31;14681:1;14673:6;14669:14;14662:55;14545:179;:::o;14730:366::-;14872:3;14893:67;14957:2;14952:3;14893:67;:::i;:::-;14886:74;;14969:93;15058:3;14969:93;:::i;:::-;15087:2;15082:3;15078:12;15071:19;;14730:366;;;:::o;15102:419::-;15268:4;15306:2;15295:9;15291:18;15283:26;;15355:9;15349:4;15345:20;15341:1;15330:9;15326:17;15319:47;15383:131;15509:4;15383:131;:::i;:::-;15375:139;;15102:419;;;:::o;15527:244::-;15667:34;15663:1;15655:6;15651:14;15644:58;15736:27;15731:2;15723:6;15719:15;15712:52;15527:244;:::o;15777:366::-;15919:3;15940:67;16004:2;15999:3;15940:67;:::i;:::-;15933:74;;16016:93;16105:3;16016:93;:::i;:::-;16134:2;16129:3;16125:12;16118:19;;15777:366;;;:::o;16149:419::-;16315:4;16353:2;16342:9;16338:18;16330:26;;16402:9;16396:4;16392:20;16388:1;16377:9;16373:17;16366:47;16430:131;16556:4;16430:131;:::i;:::-;16422:139;;16149:419;;;:::o;16574:224::-;16714:34;16710:1;16702:6;16698:14;16691:58;16783:7;16778:2;16770:6;16766:15;16759:32;16574:224;:::o;16804:366::-;16946:3;16967:67;17031:2;17026:3;16967:67;:::i;:::-;16960:74;;17043:93;17132:3;17043:93;:::i;:::-;17161:2;17156:3;17152:12;17145:19;;16804:366;;;:::o;17176:419::-;17342:4;17380:2;17369:9;17365:18;17357:26;;17429:9;17423:4;17419:20;17415:1;17404:9;17400:17;17393:47;17457:131;17583:4;17457:131;:::i;:::-;17449:139;;17176:419;;;:::o;17601:223::-;17741:34;17737:1;17729:6;17725:14;17718:58;17810:6;17805:2;17797:6;17793:15;17786:31;17601:223;:::o;17830:366::-;17972:3;17993:67;18057:2;18052:3;17993:67;:::i;:::-;17986:74;;18069:93;18158:3;18069:93;:::i;:::-;18187:2;18182:3;18178:12;18171:19;;17830:366;;;:::o;18202:419::-;18368:4;18406:2;18395:9;18391:18;18383:26;;18455:9;18449:4;18445:20;18441:1;18430:9;18426:17;18419:47;18483:131;18609:4;18483:131;:::i;:::-;18475:139;;18202:419;;;:::o;18627:240::-;18767:34;18763:1;18755:6;18751:14;18744:58;18836:23;18831:2;18823:6;18819:15;18812:48;18627:240;:::o;18873:366::-;19015:3;19036:67;19100:2;19095:3;19036:67;:::i;:::-;19029:74;;19112:93;19201:3;19112:93;:::i;:::-;19230:2;19225:3;19221:12;19214:19;;18873:366;;;:::o;19245:419::-;19411:4;19449:2;19438:9;19434:18;19426:26;;19498:9;19492:4;19488:20;19484:1;19473:9;19469:17;19462:47;19526:131;19652:4;19526:131;:::i;:::-;19518:139;;19245:419;;;:::o;19670:239::-;19810:34;19806:1;19798:6;19794:14;19787:58;19879:22;19874:2;19866:6;19862:15;19855:47;19670:239;:::o;19915:366::-;20057:3;20078:67;20142:2;20137:3;20078:67;:::i;:::-;20071:74;;20154:93;20243:3;20154:93;:::i;:::-;20272:2;20267:3;20263:12;20256:19;;19915:366;;;:::o;20287:419::-;20453:4;20491:2;20480:9;20476:18;20468:26;;20540:9;20534:4;20530:20;20526:1;20515:9;20511:17;20504:47;20568:131;20694:4;20568:131;:::i;:::-;20560:139;;20287:419;;;:::o;20712:225::-;20852:34;20848:1;20840:6;20836:14;20829:58;20921:8;20916:2;20908:6;20904:15;20897:33;20712:225;:::o;20943:366::-;21085:3;21106:67;21170:2;21165:3;21106:67;:::i;:::-;21099:74;;21182:93;21271:3;21182:93;:::i;:::-;21300:2;21295:3;21291:12;21284:19;;20943:366;;;:::o;21315:419::-;21481:4;21519:2;21508:9;21504:18;21496:26;;21568:9;21562:4;21558:20;21554:1;21543:9;21539:17;21532:47;21596:131;21722:4;21596:131;:::i;:::-;21588:139;;21315:419;;;:::o;21740:182::-;21880:34;21876:1;21868:6;21864:14;21857:58;21740:182;:::o;21928:366::-;22070:3;22091:67;22155:2;22150:3;22091:67;:::i;:::-;22084:74;;22167:93;22256:3;22167:93;:::i;:::-;22285:2;22280:3;22276:12;22269:19;;21928:366;;;:::o;22300:419::-;22466:4;22504:2;22493:9;22489:18;22481:26;;22553:9;22547:4;22543:20;22539:1;22528:9;22524:17;22517:47;22581:131;22707:4;22581:131;:::i;:::-;22573:139;;22300:419;;;:::o;22725:229::-;22865:34;22861:1;22853:6;22849:14;22842:58;22934:12;22929:2;22921:6;22917:15;22910:37;22725:229;:::o;22960:366::-;23102:3;23123:67;23187:2;23182:3;23123:67;:::i;:::-;23116:74;;23199:93;23288:3;23199:93;:::i;:::-;23317:2;23312:3;23308:12;23301:19;;22960:366;;;:::o;23332:419::-;23498:4;23536:2;23525:9;23521:18;23513:26;;23585:9;23579:4;23575:20;23571:1;23560:9;23556:17;23549:47;23613:131;23739:4;23613:131;:::i;:::-;23605:139;;23332:419;;;:::o;23757:143::-;23814:5;23845:6;23839:13;23830:22;;23861:33;23888:5;23861:33;:::i;:::-;23757:143;;;;:::o;23906:351::-;23976:6;24025:2;24013:9;24004:7;24000:23;23996:32;23993:119;;;24031:79;;:::i;:::-;23993:119;24151:1;24176:64;24232:7;24223:6;24212:9;24208:22;24176:64;:::i;:::-;24166:74;;24122:128;23906:351;;;;:::o;24263:223::-;24403:34;24399:1;24391:6;24387:14;24380:58;24472:6;24467:2;24459:6;24455:15;24448:31;24263:223;:::o;24492:366::-;24634:3;24655:67;24719:2;24714:3;24655:67;:::i;:::-;24648:74;;24731:93;24820:3;24731:93;:::i;:::-;24849:2;24844:3;24840:12;24833:19;;24492:366;;;:::o;24864:419::-;25030:4;25068:2;25057:9;25053:18;25045:26;;25117:9;25111:4;25107:20;25103:1;25092:9;25088:17;25081:47;25145:131;25271:4;25145:131;:::i;:::-;25137:139;;24864:419;;;:::o;25289:221::-;25429:34;25425:1;25417:6;25413:14;25406:58;25498:4;25493:2;25485:6;25481:15;25474:29;25289:221;:::o;25516:366::-;25658:3;25679:67;25743:2;25738:3;25679:67;:::i;:::-;25672:74;;25755:93;25844:3;25755:93;:::i;:::-;25873:2;25868:3;25864:12;25857:19;;25516:366;;;:::o;25888:419::-;26054:4;26092:2;26081:9;26077:18;26069:26;;26141:9;26135:4;26131:20;26127:1;26116:9;26112:17;26105:47;26169:131;26295:4;26169:131;:::i;:::-;26161:139;;25888:419;;;:::o;26313:182::-;26453:34;26449:1;26441:6;26437:14;26430:58;26313:182;:::o;26501:366::-;26643:3;26664:67;26728:2;26723:3;26664:67;:::i;:::-;26657:74;;26740:93;26829:3;26740:93;:::i;:::-;26858:2;26853:3;26849:12;26842:19;;26501:366;;;:::o;26873:419::-;27039:4;27077:2;27066:9;27062:18;27054:26;;27126:9;27120:4;27116:20;27112:1;27101:9;27097:17;27090:47;27154:131;27280:4;27154:131;:::i;:::-;27146:139;;26873:419;;;:::o;27298:179::-;27438:31;27434:1;27426:6;27422:14;27415:55;27298:179;:::o;27483:366::-;27625:3;27646:67;27710:2;27705:3;27646:67;:::i;:::-;27639:74;;27722:93;27811:3;27722:93;:::i;:::-;27840:2;27835:3;27831:12;27824:19;;27483:366;;;:::o;27855:419::-;28021:4;28059:2;28048:9;28044:18;28036:26;;28108:9;28102:4;28098:20;28094:1;28083:9;28079:17;28072:47;28136:131;28262:4;28136:131;:::i;:::-;28128:139;;27855:419;;;:::o;28280:224::-;28420:34;28416:1;28408:6;28404:14;28397:58;28489:7;28484:2;28476:6;28472:15;28465:32;28280:224;:::o;28510:366::-;28652:3;28673:67;28737:2;28732:3;28673:67;:::i;:::-;28666:74;;28749:93;28838:3;28749:93;:::i;:::-;28867:2;28862:3;28858:12;28851:19;;28510:366;;;:::o;28882:419::-;29048:4;29086:2;29075:9;29071:18;29063:26;;29135:9;29129:4;29125:20;29121:1;29110:9;29106:17;29099:47;29163:131;29289:4;29163:131;:::i;:::-;29155:139;;28882:419;;;:::o;29307:222::-;29447:34;29443:1;29435:6;29431:14;29424:58;29516:5;29511:2;29503:6;29499:15;29492:30;29307:222;:::o;29535:366::-;29677:3;29698:67;29762:2;29757:3;29698:67;:::i;:::-;29691:74;;29774:93;29863:3;29774:93;:::i;:::-;29892:2;29887:3;29883:12;29876:19;;29535:366;;;:::o;29907:419::-;30073:4;30111:2;30100:9;30096:18;30088:26;;30160:9;30154:4;30150:20;30146:1;30135:9;30131:17;30124:47;30188:131;30314:4;30188:131;:::i;:::-;30180:139;;29907:419;;;:::o;30332:172::-;30472:24;30468:1;30460:6;30456:14;30449:48;30332:172;:::o;30510:366::-;30652:3;30673:67;30737:2;30732:3;30673:67;:::i;:::-;30666:74;;30749:93;30838:3;30749:93;:::i;:::-;30867:2;30862:3;30858:12;30851:19;;30510:366;;;:::o;30882:419::-;31048:4;31086:2;31075:9;31071:18;31063:26;;31135:9;31129:4;31125:20;31121:1;31110:9;31106:17;31099:47;31163:131;31289:4;31163:131;:::i;:::-;31155:139;;30882:419;;;:::o;31307:297::-;31447:34;31443:1;31435:6;31431:14;31424:58;31516:34;31511:2;31503:6;31499:15;31492:59;31585:11;31580:2;31572:6;31568:15;31561:36;31307:297;:::o;31610:366::-;31752:3;31773:67;31837:2;31832:3;31773:67;:::i;:::-;31766:74;;31849:93;31938:3;31849:93;:::i;:::-;31967:2;31962:3;31958:12;31951:19;;31610:366;;;:::o;31982:419::-;32148:4;32186:2;32175:9;32171:18;32163:26;;32235:9;32229:4;32225:20;32221:1;32210:9;32206:17;32199:47;32263:131;32389:4;32263:131;:::i;:::-;32255:139;;31982:419;;;:::o;32407:240::-;32547:34;32543:1;32535:6;32531:14;32524:58;32616:23;32611:2;32603:6;32599:15;32592:48;32407:240;:::o;32653:366::-;32795:3;32816:67;32880:2;32875:3;32816:67;:::i;:::-;32809:74;;32892:93;32981:3;32892:93;:::i;:::-;33010:2;33005:3;33001:12;32994:19;;32653:366;;;:::o;33025:419::-;33191:4;33229:2;33218:9;33214:18;33206:26;;33278:9;33272:4;33268:20;33264:1;33253:9;33249:17;33242:47;33306:131;33432:4;33306:131;:::i;:::-;33298:139;;33025:419;;;:::o;33450:169::-;33590:21;33586:1;33578:6;33574:14;33567:45;33450:169;:::o;33625:366::-;33767:3;33788:67;33852:2;33847:3;33788:67;:::i;:::-;33781:74;;33864:93;33953:3;33864:93;:::i;:::-;33982:2;33977:3;33973:12;33966:19;;33625:366;;;:::o;33997:419::-;34163:4;34201:2;34190:9;34186:18;34178:26;;34250:9;34244:4;34240:20;34236:1;34225:9;34221:17;34214:47;34278:131;34404:4;34278:131;:::i;:::-;34270:139;;33997:419;;;:::o;34422:241::-;34562:34;34558:1;34550:6;34546:14;34539:58;34631:24;34626:2;34618:6;34614:15;34607:49;34422:241;:::o;34669:366::-;34811:3;34832:67;34896:2;34891:3;34832:67;:::i;:::-;34825:74;;34908:93;34997:3;34908:93;:::i;:::-;35026:2;35021:3;35017:12;35010:19;;34669:366;;;:::o;35041:419::-;35207:4;35245:2;35234:9;35230:18;35222:26;;35294:9;35288:4;35284:20;35280:1;35269:9;35265:17;35258:47;35322:131;35448:4;35322:131;:::i;:::-;35314:139;;35041:419;;;:::o;35466:191::-;35506:4;35526:20;35544:1;35526:20;:::i;:::-;35521:25;;35560:20;35578:1;35560:20;:::i;:::-;35555:25;;35599:1;35596;35593:8;35590:34;;;35604:18;;:::i;:::-;35590:34;35649:1;35646;35642:9;35634:17;;35466:191;;;;:::o;35663:225::-;35803:34;35799:1;35791:6;35787:14;35780:58;35872:8;35867:2;35859:6;35855:15;35848:33;35663:225;:::o;35894:366::-;36036:3;36057:67;36121:2;36116:3;36057:67;:::i;:::-;36050:74;;36133:93;36222:3;36133:93;:::i;:::-;36251:2;36246:3;36242:12;36235:19;;35894:366;;;:::o;36266:419::-;36432:4;36470:2;36459:9;36455:18;36447:26;;36519:9;36513:4;36509:20;36505:1;36494:9;36490:17;36483:47;36547:131;36673:4;36547:131;:::i;:::-;36539:139;;36266:419;;;:::o;36691:147::-;36792:11;36829:3;36814:18;;36691:147;;;;:::o;36844:114::-;;:::o;36964:398::-;37123:3;37144:83;37225:1;37220:3;37144:83;:::i;:::-;37137:90;;37236:93;37325:3;37236:93;:::i;:::-;37354:1;37349:3;37345:11;37338:18;;36964:398;;;:::o;37368:379::-;37552:3;37574:147;37717:3;37574:147;:::i;:::-;37567:154;;37738:3;37731:10;;37368:379;;;:::o;37753:442::-;37902:4;37940:2;37929:9;37925:18;37917:26;;37953:71;38021:1;38010:9;38006:17;37997:6;37953:71;:::i;:::-;38034:72;38102:2;38091:9;38087:18;38078:6;38034:72;:::i;:::-;38116;38184:2;38173:9;38169:18;38160:6;38116:72;:::i;:::-;37753:442;;;;;;:::o;38201:180::-;38249:77;38246:1;38239:88;38346:4;38343:1;38336:15;38370:4;38367:1;38360:15;38387:180;38435:77;38432:1;38425:88;38532:4;38529:1;38522:15;38556:4;38553:1;38546:15;38573:143;38630:5;38661:6;38655:13;38646:22;;38677:33;38704:5;38677:33;:::i;:::-;38573:143;;;;:::o;38722:351::-;38792:6;38841:2;38829:9;38820:7;38816:23;38812:32;38809:119;;;38847:79;;:::i;:::-;38809:119;38967:1;38992:64;39048:7;39039:6;39028:9;39024:22;38992:64;:::i;:::-;38982:74;;38938:128;38722:351;;;;:::o;39079:85::-;39124:7;39153:5;39142:16;;39079:85;;;:::o;39170:158::-;39228:9;39261:61;39279:42;39288:32;39314:5;39288:32;:::i;:::-;39279:42;:::i;:::-;39261:61;:::i;:::-;39248:74;;39170:158;;;:::o;39334:147::-;39429:45;39468:5;39429:45;:::i;:::-;39424:3;39417:58;39334:147;;:::o;39487:114::-;39554:6;39588:5;39582:12;39572:22;;39487:114;;;:::o;39607:184::-;39706:11;39740:6;39735:3;39728:19;39780:4;39775:3;39771:14;39756:29;;39607:184;;;;:::o;39797:132::-;39864:4;39887:3;39879:11;;39917:4;39912:3;39908:14;39900:22;;39797:132;;;:::o;39935:108::-;40012:24;40030:5;40012:24;:::i;:::-;40007:3;40000:37;39935:108;;:::o;40049:179::-;40118:10;40139:46;40181:3;40173:6;40139:46;:::i;:::-;40217:4;40212:3;40208:14;40194:28;;40049:179;;;;:::o;40234:113::-;40304:4;40336;40331:3;40327:14;40319:22;;40234:113;;;:::o;40383:732::-;40502:3;40531:54;40579:5;40531:54;:::i;:::-;40601:86;40680:6;40675:3;40601:86;:::i;:::-;40594:93;;40711:56;40761:5;40711:56;:::i;:::-;40790:7;40821:1;40806:284;40831:6;40828:1;40825:13;40806:284;;;40907:6;40901:13;40934:63;40993:3;40978:13;40934:63;:::i;:::-;40927:70;;41020:60;41073:6;41020:60;:::i;:::-;41010:70;;40866:224;40853:1;40850;40846:9;40841:14;;40806:284;;;40810:14;41106:3;41099:10;;40507:608;;;40383:732;;;;:::o;41121:831::-;41384:4;41422:3;41411:9;41407:19;41399:27;;41436:71;41504:1;41493:9;41489:17;41480:6;41436:71;:::i;:::-;41517:80;41593:2;41582:9;41578:18;41569:6;41517:80;:::i;:::-;41644:9;41638:4;41634:20;41629:2;41618:9;41614:18;41607:48;41672:108;41775:4;41766:6;41672:108;:::i;:::-;41664:116;;41790:72;41858:2;41847:9;41843:18;41834:6;41790:72;:::i;:::-;41872:73;41940:3;41929:9;41925:19;41916:6;41872:73;:::i;:::-;41121:831;;;;;;;;:::o;41958:807::-;42207:4;42245:3;42234:9;42230:19;42222:27;;42259:71;42327:1;42316:9;42312:17;42303:6;42259:71;:::i;:::-;42340:72;42408:2;42397:9;42393:18;42384:6;42340:72;:::i;:::-;42422:80;42498:2;42487:9;42483:18;42474:6;42422:80;:::i;:::-;42512;42588:2;42577:9;42573:18;42564:6;42512:80;:::i;:::-;42602:73;42670:3;42659:9;42655:19;42646:6;42602:73;:::i;:::-;42685;42753:3;42742:9;42738:19;42729:6;42685:73;:::i;:::-;41958:807;;;;;;;;;:::o;42771:663::-;42859:6;42867;42875;42924:2;42912:9;42903:7;42899:23;42895:32;42892:119;;;42930:79;;:::i;:::-;42892:119;43050:1;43075:64;43131:7;43122:6;43111:9;43107:22;43075:64;:::i;:::-;43065:74;;43021:128;43188:2;43214:64;43270:7;43261:6;43250:9;43246:22;43214:64;:::i;:::-;43204:74;;43159:129;43327:2;43353:64;43409:7;43400:6;43389:9;43385:22;43353:64;:::i;:::-;43343:74;;43298:129;42771:663;;;;;:::o

Swarm Source

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